Edit online

功能描述

3 Mar 2025
Read time: 3 minute(s)

设备

DMA 相关设备推荐配置中,单次 DMA 任务传输数据量为位宽 * BURST。
1. DMA 相关设备推荐配置

存储模块

DMA_ID

位宽(bit)

Burst

地址

SRAM/ DRAM/ XIP

0

32

16

Linear

DMA_ID_SRAM

0

32

16

Linear

DMA_ID_DRAM

1

64

16

Linear

存储模块与 DMA 采用总线握手方式,无需单独的 REQ/ ACK 机制,DMA 模式选择等待,即只能被动发送或接收数据,若源终端皆为存储模块则实时响应传输。

读取 XIP 数据时,起始地址和长度需要 64 Byte 对齐。

设备模块

DMA_ID

位宽(bit)

Burst

地址

DMA_ID_PSADC_Q1

4

32

1

IO

DMA_ID_PSADC_Q2

5

32

1

IO

DMA_ID_SPI2

8

8

16

IO

DMA_ID_SPI3

9

8

16

IO

DMA_ID_SPI0

10

8

16

IO

DMA_ID_SPI1

11

8

16

IO

DMA_ID_I2S0

12

32

1

IO

DMA_ID_I2S1

13

32

1

IO

DMA_ID_AUDIO_DMIC

14

32

1

IO

DMA_ID_UART0

16

8

1

IO

DMA_ID_UART1

17

8

1

IO

DMA_ID_UART2

18

8

1

IO

DMA_ID_UART3

19

8

1

IO

DMA_ID_UART4

20

8

1

IO

DMA_ID_UART5

21

8

1

IO

DMA_ID_UART6

22

8

1

IO

DMA_ID_UART7

23

8

1

IO

DMA_ID_XSPI

24

8

16

IO

DMA_ID_SDFM0

25

32

1

IO

DMA_ID_SDFM1

26

32

1

IO

DMA_ID_SDFM2

27

32

1

IO

DMA_ID_SDFM3

28

32

1

IO

外设(非存储)设备与 DMA 采用单独的 REQ/ACK 机制握手方式,DMA 模式选择握手,即需主动发起接收或发送请求。外设(非存储)设备传输字节数需要与位宽对齐。

任务链表



1. 任务链表
多个任务组成任务链表,每个任务单元为 32 位,从低地址往高地址存放,具体定义如下:
  • TASK_CFG1:当前任务配置,包括源端终端的 BURST 和 WIDTH 等(外设模块的 WIDTH 需要与自身 FIFO 寄存器位宽对齐)
  • SRC_ADDR:当前任务源端起始地址,注意需要 8 bytes 对齐
  • SNK_ADDR:当前任务终端低 32 bits 起始地址,注意需要 8 bytes 对齐
  • TASK_LENGTH:当前任务传输字节数,最大可设置为 32M-1 字节(总传输长度需要与 WIDTH 对齐)
  • TASK_PAR:当前任务参数,设置两个任务之间传输的延迟
  • NEXT_TASK:下一任务地址,该单元配置为 “0xFFFFF800” 表示 DMA 传输结束

DMA 在工作时会读出任务相关参数更新到对应寄存器中(软件可见)。

若需提高 DMA 带宽,建议配置起始地址和长度进行 64 bytes 对齐。

FIFO

外设 FIFO 大小推荐 FIFO_DEPTH ≥(BRT × DW ÷ 8)+(L ÷ S) BYTE
  • BRT:突发 BRUST 长度。
  • DW:为外设使用的 DMA 数据宽度。
  • L:系统时延。
  • S:外设吞吐速度。

实际应用则把 REQ 触发条件设置为(BRT × DW ÷ 8)BYTE,满足 BURST 传输的条件。(L ÷ S) 用于解决系统时延影响,保证外设可以正常吞吐。

  • AHB 总线上的外设,建议 BRT 选择 16,APB 总线上的模块,建议 BRT 选择 1。
  • 存储器设置地址递增,外设设置地址保持
  • 源端位宽:从总位宽取有效数据值
  • 终端位宽:从有效数据值,补全总位宽。
  • SPI:AHB 设备,可以与 DRAM 或 SRAM 传输数据
  • UART:APB 设备,可以与 DRAM 或 SRAM 传输数据
  • 外设 DMA WIDTH 设置需与外设模块寄存器位宽对齐。
  • 外设 DMA LENGTH 设置需要与 WIDTH 对齐