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.

AM6442: DMSS子系统中,多核的 PKTDMA 以及 BCDMA是否能够同时进行数据传输?本质上整个AM6442,是只能一路DMA进行?

Part Number: AM6442


使用syscfg的UDMA配置时,4个r5核工程都可以配置 PKTDMA 和 BCDMA。那么4个核运行时,最多可以支持几个dma传输同时进行?      按照TRM描述,貌似只能有一个DMA传输进行(无论是PKTDMA 或者 BCDMA),想要多个DMA传输进行只能软件进行分时复用,但本质上还是一个DMA在进行。       如果确实是我上述所描述的,那么多核进行DMA时,是否分时复用会冲突,需要工程师自行注意?

  • 您好,在DMSS子系统中,AM6442支持多核的PKTDMA和BCDMA进行同时的数据传输。AM6442的设计允许多个DMA通道同时工作,因此可以同时进行多个数据传输任务。不仅可以使用多个PKTDMA通道,也可以同时使用PKTDMA和BCDMA通道。所以整个AM6442并不限制只能一路DMA进行数据传输。

  • 那么PKT可以并发处理几个DMA?   BCDMA可以并发处理几个DMA?   这些在TRM一直都没有描述,这令我感到困惑,如此重要且基本的信息为何没能找到,是否是我使用的TRM版本过低?以下是我使用的TRM版本截图:

  • 您好,我已咨询e2e工程师,这需要一些时间,谢谢!

  • 您好,

    您引用的 TRM 是最新的。 

    https://www.ti.com/lit/pdf/spruim2

  • 您好,

    PKTDMA 和 BCDMA 是独立的 DMA 引擎,假设不存在外部资源冲突(源存储器、外设等),则可以彼此独立运行。

    虽然两者都是独立的引擎,但对于 BCDMA 和 PKTDMA 来说,未完成的事务数量均受到通道数量的限制。软件中每个内核所有权分配通道的方式将决定内核之间如何共享 DMA 资源。

    如 TRM 中所述,“BCDMA 维护每个通道的状态信息,允许数据复制操作在通道之间进行时分复用,以便共享底层 DMA 硬件。内部 DMA 调度程序用于控制顺序和速率发生这种多路复用。” 这应该允许工程师保持不可见的多路复用。

    如何分解和提供服务将取决于用例,因为可以配置通道优先级以确保某些通道的服务优先于其他操作。

  • 结合我阅读的TRM 和 上述回复,总结如下:(1)PKTDMA 和BCDMA是独立,可以同时独立运行且互不阻塞,也就是可以并发两路DMA传输(两路DMA作针对的对象不同)。(2)无论是PKTDMA还是BCDMA,它们都可以配置多个通道,通道数量暂时不受限制,可以在任意的内核;(3)使用BCDMA或PKTDMA时,通道内的 DMA传输请求 顺序执行, 通道之间采用分时复用,依据优先级执行,同一时间只有一个通道在执行DMA传输。 

    我的理解有错误?

  • 您好,这是对的。添加一些额外的清晰度以确保它被完全理解:

    PKTDMA 和BCDMA是独立,可以同时独立运行且互不阻塞,

    这是事实,但再次假设底层资源不发生冲突。即,如果 PKTDMA 和 BCDMA 都从 DDR 读取,则可能存在与 DDR 发生总线争用的情况,这可能会在 DMA 等待数据读回时导致停顿周期。然而,这是由端点而不是 DMA 引擎本身引起的。

    使用BCDMA或PKTDMA时,通道内的 DMA传输请求 顺序执行, 通道之间采用分时复用,依据优先级执行,同一时间只有一个通道在执行DMA传输。 

    为了澄清多路复用,在可以为第二个通道提供服务之前不需要完成完整的传输请求,但 DMA 引擎一次只会立即执行总线上的单个传输请求读取或写入。在物理层面上,这将是一个单一的事务,但在更高的层面上,它看起来就像事务是同时完成的。并不是说必须先完成 1GB 数据传输,才能为同等优先级的较小传输提供服务。

    如果需要进一步说明,请告诉我。

  • 好的,很清晰了,谢谢。

  • 不客气,有问题随时交流,谢谢!