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.

[参考译文] AM623:TI AM62x BCDMA 问题

Guru**** 2893300 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1632606/am623-ti-am62x-bcdma-questions

器件型号: AM623

您好:

我想知道您是否可以帮助我们解决有关使用 AM62x 的 BCDMA 的一些问题。 我们使用 QNX 7.1 作为我们的操作系统、并在 BCDMA 传输完成时通过带中断功能的 BCDMA 来执行回调函数。 我们能够使用 BCDMA 成功地将数据从 GPMC 传输到 RAM、但我们有一些问题:

  • 我已经为 BCDMA 序列的不同部分计时、下面我使用 QNX 跟踪事件将这些部分粘贴到了这里:
      • 最佳 TRPD 推送持续时间 3us 最长 TRPD 推送持续时间 11us 平均 4us
      • 最佳 DMA 持续时间 20us 最长 DMA 持续时间 40us 平均 23us
        • 测量从 TRPD 被推入振铃缓冲区到执行回调函数的时间。
      • 最佳完成回拨持续时间 6us 最长完成回拨持续时间 17us 平均 6us
        • 将 TRPD 从完成队列中弹出并检查是否存在任何问题。
      • 最佳 TRPD 砰砰声持续时间 4 μ s 最长 TRPD 推送持续时间 9 μ s 平均 4 μ s
    • 您知道为什么这些运算的最短和最长持续时间之间存在如此巨大的偏差吗?
    • 这些时间安排是否符合您或您的团队对这些操作的期望?
    • 是否可以更好地了解 DMA 操作需要多长时间?
    • 如果我们在不同的进程中使用数据包 DMA 来处理网络流量、这是否会对这些计时产生影响?
  • 如何为 QNX 执行完成回调函数? 我假设它不会触发 ISR、因为我们可以使用互斥锁/解锁、printf 和其他 ISR 不安全函数、但我相信 DMA 正在向由 UDMA 提供服务的 SoC 发送中断。
  • BCDMA 每次传输不同的数据长度、有时大至 1024 个字节、小至 4 个字节。 我看到的一个问题是、对于小传输、传输时间比回调函数执行时间短得多。
    • 在我们用于较大传输的相同 GPMC 设置下、您或您的团队能否分享处理大型和小型 BCDMA 传输的任何策略?
  • 据我所知、我们需要将传输从完成队列中弹出、但出于我们的目的、我们不关心 DMA 是否成功。 是否可能不会从完成缓冲区弹出传输、或者这是否会导致 BCDMA 出现问题?

感谢您和您的团队帮助回答我们的 BCDMA 问题。

从中导出:

Daniel Fettke

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Daniel:

    我们正在查看此问题、并将快速提供反馈。

    BR、

    Sunil M S

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Daniel:

    [报价 userid=“541212" url="“ url="~“~/support/processors-group/processors/f/processors-forum/1632606/am623-ti-am62x-bcdma-questions
    • 最佳 TRPD 推送持续时间 3us 最长 TRPD 推送持续时间 11us 平均 4us
    • 最佳 DMA 持续时间 20us 最长 DMA 持续时间 40us 平均 23us
      • 测量从 TRPD 被推入振铃缓冲区到执行回调函数的时间。
    • 最佳完成回拨持续时间 6us 最长完成回拨持续时间 17us 平均 6us
      • 将 TRPD 从完成队列中弹出并检查是否存在任何问题。
    • 最佳 TRPD 砰砰声持续时间 4 μ s 最长 TRPD 推送持续时间 9 μ s 平均 4 μ s
    [/报价]

    您如何测量 TRPD 推送和砰砰声的持续时间? TRPD PUSH 只是提交(写入寄存器)TRPD 和 TRPD POP 只是读取寄存器。
    你说什么?


    ]如何为 QNX 执行完成回调函数? 我假设它不会触发 ISR、因为我们可以使用互斥锁/解锁、printf 和其他 ISR 不安全函数、但我相信 DMA 正在向由 UDMA 提供服务的 SoC 发送中断。

    传输完成后、DMA 将中断 soc、并且可以处理中断。

    我已经了解到我们需要将传输从完成队列中弹出、但出于我们的目的、我们不关心 DMA 是否成功。 是否可能不会从完成缓冲区弹出传输、或者这是否会导致 BCDMA 出现问题?

    是的、我们需要 从完成队列中弹出、否则 CQ 溢出可能会发生、导致进一步传输失败。

    此致、
    Vaibhav

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的  Vaibhav:

    感谢您的答复!

    我测量这些时序的方法是在我想要计时的代码区域周围放置一个 QNX TraceEvent、然后 在获取 QNX 跟踪记录器文件 TraceEvent () 后测量跟踪事件之间的时间。 推送 TRPD 是使用 TI API  UDMA_ringQueueRaw 完成的、而将 TRPD 从完成队列中弹出是使用 UDMA_ringDequeueRaw 完成的。 我们是否建议直接读取或写入相应的 UDMA 寄存器、而不是使用 TI API? 哪些情况可能会导致最坏的情况发生时间?

    关于中断、UDMA 驱动程序使用什么类型的中断? 它是 ISR、IST 还是其他类型?

    我们有兴趣使用 supr_evt 和 Reload Count 来防止 TRPD 填充完成队列并防止调用回调函数、并依赖其他方法来确定 BCDMA 何时完成。 supr_evt 和重新加载计数是否有任何考虑因素或风险?

    我还有一些我的团队自开此案例以来考虑过的其他问题。  调用 UDMA_ringQueueRaw 时会发生什么情况? 据我所知、TRPD 被推送到  chPrms.fqRingPrms.ringMem 指向的环状缓冲区、队列由 UDMA 驱动程序管理、然后前向门铃是“梯级“。 是这样吗? 在什么时候将 ringMem 中的数据写入 UDMA 寄存器、以便 DMA 本身知道从何处传输数据、以及要传输多少数据? 如果我们对源地址和目标地址使用间接寻址 (TR_ISA 或 TR_IDA)、UDMA 何时读取这些地址?

    从中导出:

    Daniel Fettke

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Daniel:

    是否建议我们直接读取或写入相应的 UDMA 寄存器、而不是使用 TI API? 哪些情况可能会导致最坏情况的时间?

    不建议直接读取或写入相应的 UDMA 寄存器、请使用 TI API。

    [报价 userid=“541212" url="“ url="~“~/support/processors-group/processors/f/processors-forum/1632606/am623-ti-am62x-bcdma-questions/6302295

    关于中断、UDMA 驱动程序使用什么类型的中断? 它是 ISR、IST 还是其他类型?

    [/报价]

    UDMA 驱动程序使用 ISR。

     调用 UDMA_ringQueueRaw 时会发生什么情况? 据我所知、TRPD 被推送到  chPrms.fqRingPrms.ringMem 指向的环状缓冲区、队列由 UDMA 驱动程序管理、然后前向门铃是“梯级“。 正确吗?

    是的、当  UDMA_ringQueueRaw 被称为时、TRPD 被推入环。

    在什么时间点将 ringMem 中的数据写入 UDMA 寄存器、以便 DMA 本身知道从哪里传输数据以及传输多少数据?

    UDMA_ringQueueRaw 负责提交 TRPD 并启动传输。假设一个传输正在进行、而我们提交另一个传输、第二个传输直到第一个传输完成后才会开始。


    如果我们对源地址和目标地址使用间接地址 (TR_ISA 或 TR_IDA)、UDMA 何时读取这些地址?

    您可以参阅 TRM 中的块复制操作部分 (11.1.4.16)、该部分提供了有关此方面的更多信息。

    此致、
    Vaibhav

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的  Vaibhav

    感谢您的答复。 自上一个问题以来、我一直在进行一些挖掘、根据一些 PIDIN 输出、UDMA 在 HwiP_create 中创建了一个前缀为“IntrThread _“的 IST。 该线程为我们导致 QNX 关断、因此我正在尝试调试 ISR_thread 的作用以及为什么会导致关断。  

    我们还在使用 supr_evt 进行调查、因此不会调用完成回调函数、理想情况下 、不会创建 IntrThread_、这不仅是为了提高我们用例的性能、还为了防止发生此 QNX 关断。 如果我们设置 CSL_FMK (UDMAP_TR_FLAGS_supr_evt、1U)、UDMA_EVENT_TYPE_DMA_completion 事件是否需要任何额外的步骤? 我们是否需要设置完成事件、或者 eventCb 是否应设置为 NULL?

    从中导出:

    Daniel Fettke