DMA

1. 基本功能介绍

  • 不同的SoC,其DMA功能配置不尽相同,具备不同的DMA实例数量且每个DMA实例可用的传输通道不一样。

  • 下表描述各芯片的DMA通道配置及能力。

SoC DMA实例 通道数及FIFO深度 基础功能 使用限制
GR551x DMA0 支持8个通道,每个通道FIFO 8x4字节 基础的数据传输 单次传输不超过4095拍
GR5525 DMA0 支持6个通道,通道0 FIFO 32x4字节,其他通道FIFO 4x4 字节 基础的数据传输、S&G、LLP 1. 单次传输不超过4095拍;
2.使用LLP功能扩展单次传输数据量
DMA1 支持6个通道,通道0 FIFO 32x4字节,其他通道FIFO 4x4 字节 基础的数据传输、S&G、LLP 1. 单次传输不超过4095拍;
2.使用LLP功能扩展单次传输数据量
GR5526 DMA0 支持6个通道,通道0 FIFO 32x4字节,其他通道FIFO 4x4 字节 基础的数据传输、S&G、LLP 1. 单次传输不超过4095拍;
2.使用LLP功能扩展单次传输数据量
DMA1 支持6个通道,通道0 FIFO 32x4字节,其他通道FIFO 4x4 字节 基础的数据传输、S&G、LLP 1. 单次传输不超过4095拍;
2.使用LLP功能扩展单次传输数据量
GR533x DMA0 支持5个通道,通道0 FIFO 8x4字节,其他通道FIFO 4x4 字节 基础的数据传输 单次传输不超过4095拍
  • DMA 支持的传输方式有:

    • Memory to Memory - 从内存到内存

    • Memory to Peripheral - 从内存到外设

    • Peripheral to Memory - 从外设到内存

    • Peripheral to Peripheral - 从外设到外设

    注意:当传输中某一端是外设时,DMA传输信号需要依赖硬件握手信号。对于存在多个DMA实例的GR5525和GR5526,DMA和外设不能任意搭配,需要从Datasheet参考DMA硬件握手信号分配表。详情请参考各SoC 的Datasheet关于DMA及握手信号章节。

  • 当DMA进行基础的数据传输时,一次性最大传输4095拍数据。“拍” 指DMA传输数据的位宽度。

    • 如果使用的数据位宽是字节,DMA单次最多传输数据4095字节。

    • 如果使用的数据位宽是半字,DMA单次最多传输数据4095x2字节。

    • 如果使用的数据位宽是字,DMA单次最多传输数据4095x4字节。

    • 如果DMA一次基础传输时,数据量超过了4095拍,则会给出错误的DMA传输中断提示。

    • 扩展单次传输数据超过4095拍的方式是适用LLP链式传输。仅GR5525 & GR5526支持这种传输方式,GR551x和GR553x不支持。

  • 提高DMA的数据传输宽度,可提高DMA的传输性能。使用32位传输宽度,其传输性能大于16位和8位。

  • GR5525和GR5526拓展了DMA的LLP和S&G能力,配合QSPI等外设使用,可极大地提高QSPI等外设的吞吐率。关于LLP和S&G的介绍,请参考文档《GR5526刷屏指南》或《GR5525刷屏指南》。

2. 应用笔记

  • GR5525 & GR5526提供DMA0和DMA1两个可供用户使用的DMA实例,共计6个DMA通道,其中通道0 FIFO深度为32,通道1~5的FIFO深度为4。

    • 由于通道0具备很深的FIFO深度,在DMA传输时能提供极深的数据缓存,从而提高DMA传输吞吐,因此在穿戴类应用中,请优先将DMA0/DMA1的通道0分配给高吞吐外设使用,如用于Flash访问、PSRAM访问、大块Memory搬运、Display显示等。

  • GR5525 & GR5526的DMA相对GR551x和GR553x的DMA,拓展了如下功能:

    • DMA链式数据传输:将需要传输的所有数据区块,通过指针链表方式进行管理。上一个区块发送完成后,根据Next链表指针自动对下一个区块进行加载,直到最后Next链表指针为空。其优点为:

      • 突破单次传输4095拍的限制

      • 支持单次传输周期中传输不连续地址空间的数据

      • 支持单次传输周期使用不同的传输配置进行数据传输

    • DMA分散传输:DMA分散(Scatter)传输指将连续地址空间的数据通过一定的规则,分散到不连续的地址空间的传输。

    • DMA聚合传输2:DMA聚合(Gather)传输指将不连续地址空间的数据,聚合到连续的地址空间的传输,可视作Scatter的逆向传输过程。

  • GR551x和GR553x均只有一个DMA实例,外设模块均可使用DMA进行传输。GR5525和GR5526有2个DMA实例,每个实例对外设的支持存在区别。

GR5525 DMA搭配不同外设传输的支持状态如下:

外设 DMA0 DMA1
QSPI0 YES NO
QSPI1 YES YES
QSPI2 NO YES
SPI Master YES YES
SPI Slave YES NO
UART0 YES YES
UART1 YES NO
UART2 YES NO
UART3 YES YES
I2C0 NO YES
I2C1 NO YES
I2C2 YES NO
I2C3 YES NO
I2S Master NO YES
I2S Slave NO YES
DSPI NO YES
PDM NO YES
ADC YES NO

GR5526 DMA搭配不同外设传输的支持状态如下:

外设 DMA0 DMA1
QSPI0 YES NO
QSPI1 YES YES
QSPI2 NO YES
SPI Master YES YES
SPI Slave YES NO
UART0 YES YES
UART1 YES NO
UART2 YES NO
UART3 YES YES
UART4 YES YES
UART5 NO YES
I2C0 NO YES
I2C1 NO YES
I2C2 YES NO
I2C3 YES NO
I2C4 YES NO
I2C5 YES NO
I2S Master NO YES
I2S Slave NO YES
DSPI NO YES
PDM NO YES
ADC YES NO