QSPI Flash存储控制器(DMA外设控制器)
这里说的DMA外设控制器,并不是AHB总线上的DMA控制器。QSPI Flash存储控制器通过DMA外设控制器与AHB总线上的DMA进行相关SRAM状态和流控的信息通信。为了明确区别,我们把QSPI Flash存储控制器这边的DMA外设控制器,称为“DMA接口”;而将AHB总线上的DMA称为“DMA控制器”。
*** AHB总线上的DMA控制是指,CoreLink DMA控制器DMA-330核心。 ***
DMA接口只能在间接操作模式下,用于内部SRAM和AHB数据总线之间的数据传输。有两个相同DMA接口,一个用于间接读访问控制器;一个用于间接写访问控制器。对于间接读访问控制器,当数据从Flash传输到内部SRAM之后,QSPI控制器触发DMA请求;对于间接写访问控制器,传输命令一触发,QSPI控制器就立即触发DMA请求,并且一直持续DMA请求直到整个间接写传输完成。DMA过程的流控与水印寄存器有关。
信号名 | 方向 | 说明 |
drtype[1:0] | DMA接口-->DMA控制器 | 请求DMA传输类型(single,burst), 另外还有一个flush操作 |
datype[1:0] | DMA控制器-->DMA接口 | 确认DMA传输类型 |
drlast | DMA接口-->DMA控制器 | 最后一次DMA请求 |
drvalid | DMA接口-->DMA控制器 | 请求DMA |
drready | DMA控制器-->DMA接口 | 确认DMA请求 |
davalid | DMA控制器-->DMA接口 | DMA完成 |
daready | DMA接口-->DMA控制器 | 确认DMA完成 |
- DR总线,drvalid和drready两根信号线,用于DMA接口向DMA控制器请求DMA操作,还用于DMA接口向DMA控制器确认Flush请求。
- DA总线,davalid和daready两根信号线,用于DMA控制器向DMA接口汇报数据传输完成,还用于DMA控制器向DMA接口请求flush操作。
DMA接口配置寄存器(0x20),定义了在burst类型下一个burst传输的字节长度,定义了在single类型下一个single传输的字节长度。这两个长度应该都是2的幂次。
一旦触发间接操作,DMA接口就获知了传输的数据量。DMA接口将这些数据分成一组组的burst或一组组的single,最后剩余数据组成一组single。软件来保证最好没有剩余数据。
举个例子,如果SRAM长度为256字节,需要从Flash设备读取的数据量为512字节,驱动将DMA的burst传输长度设置为256字节,那么当第一个256字节在SRAM中时,DMA接口就会触发DMA请求。只有当第二个256字节传输到SRAM中,才会触发第二次DMA;因为SRAM只有256字节,也就是说在启动第二次DMA之前必须取空SRAM。
DMA接口还可以获知SRAM填充水平。