RT1052 使用IP Command 方式访问Flash

官方手册1673页开始

 

在以下步骤中,可以由IP命令触发闪存访问。

  1. 填充IP TX FIFO与编程数据,如果这是一个编程命令(编程flash数据,flash状态寄存器等)
  2. 设置flash访问起始地址,读取/程序数据大小,LUT中的序列索引和序列号。
  3. 通过向寄存器位IPCMDI[TRG]写入1来触发flash访问
  4. 命令轮询寄存器位INTR[IPCMDDONE]引发等待这个IP命令完成FlexSPI接口。

请注意

  1. IP TX FIFO可以在写入IPCRO/ IPCR1/IPCMD寄存器之前或之后填写。如果在IP TX FIFO为空的情况下启动SFM命令,FlexSPI将停止SCLK切换以自动等待TX数据就绪。
  2. IPCMD寄存器必须在写入IPCRO后写入PCRI 注册表。
  3. 一个IP命令可以发出多个命令序列(最多8个)。
  4. 在前一个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接口上执行,直到被仲裁员批准。详情请参阅指挥仲裁。

猜你喜欢

转载自blog.csdn.net/catshit322/article/details/108154459
今日推荐