使用syscfg的UDMA配置时,4个r5核工程都可以配置 PKTDMA 和 BCDMA。那么4个核运行时,最多可以支持几个dma传输同时进行? 按照TRM描述,貌似只能有一个DMA传输进行(无论是PKTDMA 或者 BCDMA),想要多个DMA传输进行只能软件进行分时复用,但本质上还是一个DMA在进行。 如果确实是我上述所描述的,那么多核进行DMA时,是否分时复用会冲突,需要工程师自行注意?
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
使用syscfg的UDMA配置时,4个r5核工程都可以配置 PKTDMA 和 BCDMA。那么4个核运行时,最多可以支持几个dma传输同时进行? 按照TRM描述,貌似只能有一个DMA传输进行(无论是PKTDMA 或者 BCDMA),想要多个DMA传输进行只能软件进行分时复用,但本质上还是一个DMA在进行。 如果确实是我上述所描述的,那么多核进行DMA时,是否分时复用会冲突,需要工程师自行注意?
您好,
PKTDMA 和 BCDMA 是独立的 DMA 引擎,假设不存在外部资源冲突(源存储器、外设等),则可以彼此独立运行。
虽然两者都是独立的引擎,但对于 BCDMA 和 PKTDMA 来说,未完成的事务数量均受到通道数量的限制。软件中每个内核所有权分配通道的方式将决定内核之间如何共享 DMA 资源。
如 TRM 中所述,“BCDMA 维护每个通道的状态信息,允许数据复制操作在通道之间进行时分复用,以便共享底层 DMA 硬件。内部 DMA 调度程序用于控制顺序和速率发生这种多路复用。” 这应该允许工程师保持不可见的多路复用。
如何分解和提供服务将取决于用例,因为可以配置通道优先级以确保某些通道的服务优先于其他操作。
您好,这是对的。添加一些额外的清晰度以确保它被完全理解:
PKTDMA 和BCDMA是独立,可以同时独立运行且互不阻塞,
这是事实,但再次假设底层资源不发生冲突。即,如果 PKTDMA 和 BCDMA 都从 DDR 读取,则可能存在与 DDR 发生总线争用的情况,这可能会在 DMA 等待数据读回时导致停顿周期。然而,这是由端点而不是 DMA 引擎本身引起的。
使用BCDMA或PKTDMA时,通道内的 DMA传输请求 顺序执行, 通道之间采用分时复用,依据优先级执行,同一时间只有一个通道在执行DMA传输。
为了澄清多路复用,在可以为第二个通道提供服务之前不需要完成完整的传输请求,但 DMA 引擎一次只会立即执行总线上的单个传输请求读取或写入。在物理层面上,这将是一个单一的事务,但在更高的层面上,它看起来就像事务是同时完成的。并不是说必须先完成 1GB 数据传输,才能为同等优先级的较小传输提供服务。
如果需要进一步说明,请告诉我。