设备源端和终端传输类型
本节介绍了设备的源端 (Source Type) 和终端 (Destination type) 传输类型配置及其工作机制。源端对象和终端对象均可以是储存或外设。
DMA_TASK_CFG_1 寄存器 | 含义 | 是否握手 | 设备类型 |
---|---|---|---|
0x0: io_single |
DMA 以 transfer(AHB 协议 )进行传输,每次握手进行一次 single transfer。 |
需要 | 非存储设备 |
0x1: io_burst |
DMA 以 transfer(AHB 协议)进行传输,一次握手进行多次 single transfer。 |
需要 | 非存储设备 |
0x2: memory | 存储传输类型 | 不需要 | 存储设备 |
0x3: memoryset | 存储传输类型 使用 memoryset 时,task 中源端与终端参数需配置一致。 |
不需要 | 存储设备 |
0x4: io_fast |
DMA 以 transfer(AHB 协议 )进行传输,一次握手进行多次 burst transaction。 外设支持 IO_FAST 模式需满足下列条件:
|
需要 | 非存储设备 |
数据传输的长度对齐与传输效率
- 当数据长度与 Block Length 对齐时
如图所示,ADDR = 0x30、Date Width = 32、Type = io_burst、Burst = 4 且 Block_length = 16,DMA 传输数据总量 28(16+3*4):
-
由于 DMA 传输数据总量 (28) ≥ Block_length (16),则第一次数据传输使用 burst 类型。
-
由于剩余的 DMA 传输数据量 (12) < Block_length (16),不满足 burst 长度需求,尽管 Type=io_burst,硬件会自动拆分为三次 single 类型进行传输。
图 1. Type=IO_BURST 且数据长度与 Length 对齐
图 2. Type=IO_FAST 且数据长度与 Length 对齐
图 3. Type=IO_BURST 且数据长度与 Length 非对齐 -
-
当数据长度与 Block Length 非对齐,配置为 Type=IO_FAST 时
如图所示,ADDR = 0x30、Date Width = 32、Type = io_fast、Burst = 4 且 Block_length = 16,DMA 传输数据总量 28(16+3*4)
-
由于 DMA 传输数据总量 (28) ≥ Block_length (16), 第一次数据传输使用 fast 类型。
-
由于剩余的 DMA 传输数据量 (12) < Block_length (16),不满足 fast 长度需求,尽管 Type=io_fast,硬件会自动拆分为三次 single 类型进行传输。
图 4. Type=IO_FAST 且数据长度与 Length 非对齐 -