Edit online

设备源端和终端传输类型

本节介绍了源端 (Source Type) 和终端 (Destination type) 传输类型配置及其工作机制。源端对象和终端对象均可以是存储或外设。

下表分别列出了存储和外设的源端和终端传输类型配置:
1. 存储设备源端和终端传输类型配置说明
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 模式需满足下列条件:
  • FIFO 地址映射到连续的地址空间。地址范围大于等于 block_len

需要 外设
注:
SRAM 、PSRAM 与 DRAM 等存储设备仅能使用 Memory 或 MemorySet 类型。对于 外设(非存储设备),需按照 spec 规格选择上述适用的其中一种传输类型。

数据传输长度非对齐与传输效率

对于外设类型且大数据量传输,io_single、io_multi 和 io_fast 的传输效率为 io_fast > io_multi > io_single:
  • 当数据长度与 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 类型进行传输。


    1606_dma_iob_b41

    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。


    dma_iof_remian31

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