最近我也在做RT1170的相关项目,由于项目需要,研究了Flash下载算法、NOR Flash空间的擦除/烧写(OTFAD XIP更新固件时要更新OTFAD Key Blob字段)、HyperRAM初始化等功能,这些都是开发过程中可能会遇到的一些问题,而这些都与FlexSPI接口息息相关。初始化完FlexSPI后就可以像访问CPU中ITCM、DTCM等内置内存一样来访问外部存储器中的内容。对于FlexSPI1来说,它可以将外部存储器地址映射到0x30000000处;而FlexSPI2则可以映射到0x60000000处。
1 FlexSPI框图
FlexSPI(Flexible Serial Peripheral Interface
)支持两个SPI通道和多达4个外部设备。每个通道支持Single
/Dual
/Quad
/Octal
模式的双向数据传输。下面来看一下FlexSPI的功能框图:
(1)FA port和FB port
FlexSPI可以通过它的两个通道FA和FB与外部的串行Flash在硬件上进行连接,FA和FB各有两个通道。比如说HyperRAM大多数就有八条数据线,它就占满了一个Port A/B。而对于QSPI NOR Flash来说,只需要四根数据线,所以在Port A/B上还能再接一个设备。
(2)SEQ_CTL
所有的外部存储器都有它的时序,SEQ_CTL
就可以根据你的配置生成相应的控制时序来访问外部的存储器。其中有一个很重要的数据结构,就是LUT(Look Up Table
),它用来指定Flash各个操作的时序。
(3)AHB BUS 64bit
和IPS BUS 32bit
32bit IPS BUS(即手动操作FlexSPI寄存器发送Flash读写命令),64bit AHB BUS(由FlexSPI翻译AHB访问地址并自动发送相应Flash读写命令)
AHB BUS 64bit
:用户可以像访问内部SRAM一样访问接在FlexSPI上的外部存储器,此时地址通过AHB总线传到SEQ_CTL
IPS BUS 32bit
:用户可以根据自己初始化的外部存储器各个操作(如擦除、读/写内存、读/写寄存器)的时序,主动访问FlexSPI的相关寄存器来完成外部存储器的一些操作
(4)ARB_CTL
由于AHB和IPS总线都可以请求外部存储器的数据,所以ARB_CTL
就是用来控制两个总线在同一时间访问外部存储器时,哪个总线能优先执行。
(5)缓冲区
为了加快读取的速度,两个总线都有读写缓冲区。AHB Bus
有发送缓冲区AHB_TX_BUF
和接收缓冲区AHB_RX_BUF
,它们将会缓存AHB突发传输的写数据或读数据;而IPS Bus
有发送缓冲区IP_TX_FIFO
和接收缓冲区IP_RX_FIFO
,大小均为256字节,且支持DMA传输。
2 FlexSPI特性
(1)SDR和DDR模式
在SDR(Single Data transfer Rate
)模式下,Flash在SCLK上升沿接收数据,下降沿发送数据。在DDR (Dual Data transfer Rate
)模式下,Flash在SCLK上升沿和下降沿都接收数据和发送数据。SDR和DDR模式由LUT表格中的操作码决定。
(2)Individual和Parallel模式
在Individual mode
下,Flash读/写数据都在Port A或Port B完成。在parallel mode
下,Flash的读写操作在Port A和Port B并行完成,FlexSPI将自动合并/拆分Flash读写的数据。也就是说,数据可以存储在两个不同的Flash中。当然在硬件上,也要有相应的连接。
- 只有读写指令可以自动合并和拆分,对于其它的指令(比如命令/地址/模式/数据大小),相同的数据会同时传给两个Flash设备,比如发命令则两个Flash设备都会收到。
(3)Single, Dual, Quad, and Octal模式
- Single模式:Flash在DATA0引脚上发送/接收数据
- Dual模式:Flash在DATA0~DATA1引脚上发送/接收数据
- Quad模式:Flash在DATA0~DATA3引脚上发送/接收数据
- Octal模式:Flash在DATA0~DATA7引脚上发送/接收数据
这些模式也是在LUT表格中决定的。
(4)操作模式
①Module Disable mode
:用于低功耗模式,在该模式下AHB时钟和串行时钟域将会被关闭,但是IPS总线时钟不会被关闭。
②Doze mode
:用于低功耗模式。在该模式下,FlexSPI会等待所有的处理都完成后进入Doze mode
,此时AHB和串行时钟域都会被关闭,但是IPS总线时钟不会被关闭。
③Stop mode
:用于低功耗模式。在该模式下,FlexSPI会等待所有的处理都完成,再返回一个ACK给系统,然后IP回关闭AHB和串行时钟域。但是可以在系统层面打开AHB/IPS/串行时钟。
④Normal mode
:所有的时钟都不会被关闭。
3 总结
本节大概介绍了一下FlexSPI的功能框图和一些特性,实际上这都是对参考手册的一个大概的总结,更多细节还是要看参考手册。而对于FlexSPI来说,最重要的应该就是LUT表格了,所以下一节就来详细地介绍一下LUT表格。