官方手册1673页开始
在以下步骤中,可以由IP命令触发闪存访问。
- 填充IP TX FIFO与编程数据,如果这是一个编程命令(编程flash数据,flash状态寄存器等)
- 设置flash访问起始地址,读取/程序数据大小,LUT中的序列索引和序列号。
- 通过向寄存器位IPCMDI[TRG]写入1来触发flash访问
- 命令轮询寄存器位INTR[IPCMDDONE]引发等待这个IP命令完成FlexSPI接口。
请注意
- IP TX FIFO可以在写入IPCRO/ IPCR1/IPCMD寄存器之前或之后填写。如果在IP TX FIFO为空的情况下启动SFM命令,FlexSPI将停止SCLK切换以自动等待TX数据就绪。
- IPCMD寄存器必须在写入IPCRO后写入PCRI 注册表。
- 一个IP命令可以发出多个命令序列(最多8个)。
- 在前一个IP命令完成之前,不允许发出另一个IP命令。在这种情况下,行为是未知的。
如果这是一个读取串行闪存命令,所有从闪存读取的数据将被放入IP RX FIFO。软件将需要读出数据从IP RX FIFO的AHB总线或IP总线。当IP RX FIFO是满的,有更多的数据要从闪存设备读取,FlexSPI将停止SCLK输出时钟切换,直到IP RX FIFO不是满的。有关更多细节,请参阅SCLK停止功能。
触发串行Flash命令的细节如下:
Flash访问开始地址:
由寄存器字段IPCRO[SFAR]确定
Flash芯片选择:
由闪存访问地址和闪存大小设置决定(FLSHxCRO[FLSHSZ)。
Flash命令序列索引和序列号:
序列索引从IPCR1 ISEQID]到(IPCRIISEQID] +在LUT中将由FlexSPI顺序执行。
Flash独立/并行访问模式:
由IPCR1IIPARENI决定
Flash读取/程序数据大小:
如果IPCR1[IDATSZ]值非零,flash读取/程序数据大小(字节)为IPCR1[IDATSZ]
如果IPCR1[IDATSZ]值为0,flash读取/程序数据大小(字节)是在读/写指令中操作数的值。
请注意
软件应确保最后的序列索引不超过LUT序列号(IPCRIIISEOIDI +)IPCRIiseonumi= 16)。
如果序列号大于1,则数据大小将被应用于每个命令序列。
如果命令序列中没有写/读指令,则忽略数据大小。
IP命令请求被软件触发后发送给仲裁器。它不会在FlexSPI接口上执行,直到被仲裁员批准。详情请参阅指挥仲裁。