QSPI Flash存储控制器(间接写访问控制器)

QSPI Flash存储控制器(间接写访问控制器)

1. 间接写访问控制器

        间接写操作是协助处理器或DMA将大量数据写入Flash存储。间接写传输可以尽可能减少对Flash设备的写次数,延长Flash设备的使用寿命。

        从软件角度看,间接写操作是间接读操作的反过程。软件驱动通过专门的APB控制/配置寄存器来实现间接写操作。这些寄存器包括:

  1. 间接写传输控制器寄存器(偏移量0x70);
  2. 间接写传输水印寄存器(偏移量0x74);
  3. 间接写传输起始地址寄存器(偏移量0x78);
  4. 间接写传输字节数量寄存器(偏移量0x7C);

       间接写访问控制器,首先会等待外部AHB总线主设备的写数据延迟,将数据放置到内部SRAM,然后与传统SPI逻辑通信,最终在外部SPI信号线上完成高效的、优化的Flash写突发操作。

        间接写控制器默认状态下是关闭的。软件使能过程与间接读控制器类似(略)。

        在间接写模式下,内部SRAM在AHB总线上的地址,参见间接读访问控制器,完全一样(略)。

        外部AHB总线主设备只能用32位的AHB写操作,除了最后一个。最后一次,主设备可以做32/16/8位的写操作;如果最后一次少于32位,主设备依然可以做32位传输,间接写访问控制器会抛弃多余的字节。

        当内部SRAM的字节数等于或超过Flash页长度(这个可编程设置的,默认256字节,Flash的页长度具体含义是什么呢?),或者SRAM中驻留了当前正在进行的间接传输操作的剩余字节,那么间接写访问控制器就会给命令发生器初始化一个“写突发”

        好好看看间接读访问控制器,几乎一模一样。

2. 间接写传输过程(略)

3. 间接访问队列

        驱动程序允许将两个间接传输操作给间接访问控制器(包括了读/写),最多两个间接读写操作。多于两个的话,就会触发中断。

        驱动程序,通过两个寄存器,间接读/写传输控制寄存器(偏移量为0x60/0x70)的bit[0]将间接读写操作的命令发送给控制器。

        SRAM可以同时支持两个间接传输操作,是因为:

  1. 在SRAM与AHB总线的数据通路上,允许一个间接传输操作
  2. 在SRAM与SPI总线的数据通路上,允许一个间接传输操作

        这两个间接传输操作相互独立,各自占用不同的部件,类似流水线的两个阶段。

4.间接传输的读写交替

        在间接写操作未完成之前,软件驱动可以发起一个间接读操作;反过来也一样,在间接读操作未完成之前,软件驱动可以发起一个间接写操作。但是间接写操作具有优先能力(我的理解,写的优先级高,如果发生资源冲突,可能会让当前未完成的读暂停下来)。

5.访问SRAM

        内部SRAM是单端口访问的逻辑实现,但是分为两个部分:下半部分供间接读操作;上半部分供间接写操作。SRAM分区配置寄存器(偏移量0x18)具体描述了下部分的长度,上半部分就是剩余的;默认情况下,上下两个半部是平均分的。

        访问SRAM有四种情况:

  1. 间接读操作,从QSPI总线向SRAM传输数据,这种情况优先级最高;
  2. 间接写操作,从SRAM向QSPI总线传输数据,这种情况优先级次之;
  3. 间接读操作,从SRAM向AHB总线传输数据,优先级第3,与下面4)情况互斥;
  4. 间接写操作,从AHB总线向SRAM传输数据,优先级第3,与上面3)情况互斥;

        上面看到,SRAM虽然是单端口,但是同时最多可以有三条流来访问。

猜你喜欢

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