设备源端和终端传输类型
本节介绍了源端 (Source Type) 和终端 (Destination type) 传输类型配置及其工作机制。源端对象和终端对象均可以是存储或外设。
| GPDMA_TASK_CFG_1 寄存器 | 含义 | 是否握手 | 设备类型 |
|---|---|---|---|
| 0x0: io_single | GPDMA 以 transfer(AHB 协议 )进行传输,每次握手进行一次 single transfer。地址固定。 | 需要 | 外设 |
| 0x1: io_multi | GPDMA 以 transfer(AHB 协议)进行传输,一次握手进行多次 single transfer。地址固定。 | 需要 | 外设 |
| 0x2: memory | 存储传输类型。地址递增。 | 不需要 | 存储设备 |
| 0x3: memoryset | 存储传输类型使用 memoryset 时,task 中源端链表参数描述必须配置与终端一样。地址递增。 | 不需要 | 存储设备 |
| 0x4: io_fast | GPDMA 以 transfer(AHB 协议 )进行传输,一次握手进行多次 burst transaction。地址递增(当递增长度等于 block_len 时候,地址复位到初值,重新开始地址递增)。 外设支持 io_fast 模式需满足下列条件:
|
需要 | 外设 |
数据传输长度非对齐与传输效率
- 当数据长度与 block_len 非对齐时
如图所示,ADDR = 0x30、Data Width = 32、Type = io_multi 且 block_len= 16,GPDMA 传输数据总量 28(16+3*4):
-
由于 GPDMA 传输数据总量 (28) ≥ block_len(16),则第一次数据传输使用 io_multi 类型。
-
由于剩余的 GPDMA 传输数据量 (12) < block_len(16),不满足 io_multi 长度需求,尽管 Type=io_multi,硬件会自动拆分为三次 single 类型进行传输。

图 1. Type=io_multi 且数据长度与 Length 非对齐 -
-
当数据长度与 block_len 非对齐,配置为 Type=io_fast 时:
如图所示,ADDR = 0x30、Data Width = 32、Type = io_fast、Burst = 4 且 block_len= 16,GPDMA 传输数据总量 28(16+3*4)
-
由于 GPDMA 传输数据总量 (28) ≥ block_len(16), 第一次数据传输使用 io_fast 类型。
-
由于剩余的 GPDMA 传输数据量 (12) < block_len(16),不满足 io_fast 长度需求,尽管 Type=io_fast,硬件会自动拆分为三次 io_single 类型进行传输。
-
当剩余传输长度≥block_len:地址从 src_addr 或者 dst_addr 累加一直到 block_len。多次重复
-
当剩余传输长度<block_len:地址固定为 src_addr 或者 dst_addr。

图 2. Type=io_fast 且数据长度与 Length 非对齐 -
