QSPI Flash存储控制器(直接访问控制器DAC)

QSPI Flash存储控制器(直接访问控制器DAC)

        直接访问是指AHB的访问直接触发对Flash存储的读写。DAC是内存映射模式,可以直接对Flash内存进行PIO读写访问,并直接运行Flash内存上的二进制代码。DAC的访问不使用内部SDRAM。AHB总线的读写突发会产生抖动,设备等待状态过程与控制器和设备的延迟相关;因此延迟要设计得尽可能小,XIP读指令使能有助于将延迟保持在最小值。

        DAC接收到来自AHB的读请求时,在单个AHB突发操作之间,会向下游发送一个额外的访问;这个访问操作不是来自AHB总线,系统软件不可见,这是一个预读的、确保底层SPI最大带宽的操作。

        这里定义的AHB突发,不是AMBA总线定义的AHB突发操作,而是:

  1. AHB突发的第一次访问定义为:(略)
  2. AHB突发的最后一次访问定义为:(略)
  3. AHB突发的长度就是第一次到最后一次AHB访问的次数;
  4. 每个AHB突发操作的DAC请求次数等于AHB突发长度+1;

        当AHB时钟比SPI数据传输速率慢时,顺序读传输可能在SPI端被中断,等AHB总线这边接收完最后的数据后再恢复传输。SPI时钟分频和AHB访问长度(信号hsize表示AHB上长度,8/16/32)越小,数据IO操作的数量越大,AHB总线这边就越显得慢。

        当系统不能满足SPI数据速率时,就提高SPI时钟分频,在每次传输之前增加opcode+address+dummy等等操作,从而降低SPI数据速率。

        当系统这边比较慢时,混合AHB(顺序访问之后有一个非顺序访问)访问,预读会导致垃圾数据。数据预读不能取消的,当SPI传输一旦被中断,数据预读就作为独立的SPI操作被发送出去,这就产生了垃圾数据。为了避免这种情况发生,建议驱动程序丢掉这些垃圾数据,或者再触发非顺序直接AHB访问之前插入等待状态。

        无论如何,间接读传输是值的考虑的。

        对于AHB的写操作,DAC会触发顺序写命令,类似读的处理过程。而且,AHB控制器要保证Flash突发不会跨Flash的页边界。一旦检测到页边界,就只将页边界之前的字节转发。跨页边界的顺序直接写请求对下游而言必须是非顺序的,下游控制器就会强制Flash设备进入自动调时页编程周期(self timed page program cycle)。仅仅针对字对齐寻址访问,DAC支持跨页边界的分裂写。

        在写访问操作过程中,外部AHB总线主设备,要能及时提供所写的数据给DAC,避免下游饿死。如果延迟顺序写过程的延迟过大,Flash写周期会过早初始化,这将导致Flash设备的寿命。注意,如果不能保证,建议用间接写模式。

        在页写之前需要Flash擦除操作,软件可以有相应的编程接口。一旦页编程周期开始,QSPI Flash控制器会自动轮询,一直到写周期完成,这个过程不允许其他AHB访问。此时,AHB直接访问一直处于等待状态。

提示:直接访问控制器,最好只用于早期启动代码的执行;后面的读写访问全部由间接访问控制器来完成。

猜你喜欢

转载自blog.csdn.net/lsshao/article/details/119761140