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.

[参考译文] DRA821U:UDMAP 突发配置

Guru**** 2455450 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1484433/dra821u-udmap-burst-configuration

器件型号:DRA821U
主题中讨论的其他器件:DRA821

工具与软件:

您好!

我们在 VxWorks 24.03操作系统下运行该系统。 我们使用 uDMA 从 PCIe 连接器件(FPGA)检索数据。 我们希望使用 PCIe 允许的最大突发大小、即256字节、以尽可能提高吞吐量。 根据我们的理解、默认突发的大小为64字节。 根据技术参考手册、uDMA 应该能够更改传输突发的大小。 这些寄存器的名称为 UDMA_TCFG_I 和 UDMA_RCFG_I 我们可以读取寄存器、可以看到它们定义了64字节的默认突发速率。 但是、当我们尝试更改该值时、会出现异常。 问题是:
1.定义 DMA 脉冲大小是否正确?
2.应该怎么做才能改变这些寄存器的值?

谢谢!
尤金

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

    您好!

    指派的专家目前不在办公室、请预计会延迟答复。

    此致、

    Manojna

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

    尊敬的  Manojna:

    感谢您的答复、

    我最终找到了一个更改 burst_size 的解决方案。 应通过向 TISCI 发送消息来完成 UDMA 通道配置。 遗憾的是、更改 busts_size 字段似乎并不会真正改变突发大小。

    此致、

    尤金

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

    尊敬的 Eugene:

    为什么需要更改 uDMA 通道的突发大小?  您希望改变多少个通道? 是从存储器传输到 PCIe 空间吗?  

    此致、

    Brijesh

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

    您好、 Brijesh:

    是的、我需要将数据从 PCIe 空间传输到存储器。 我需要多达4个通道。 但如果我只有一个、我想我就可以了。

    也许我选择了错误的方向、因此我将尝试提供完整的背景信息:

    • 我使用 uDMA 通道从 PCIe 端点读取数据。
    • 当我使用64字节传输时、从端点接收正确的数据、但是在 uDMA 中断处理方面的开销太大。
    • 当我尝试使用128或256字节的传输时、我只得到前64字节的数据块、然后 DMA 进入错误状态。 在 EP 端、我们看到它获取多个64字节请求。 在发送第1个的数据之前接收第2个字节。 假设它是误差源
    • 我认为扩大 uDMA 脉冲大小可以解决这一问题。

    谢谢!

    尤金

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

    Eugene

    但在这种情况下、进行多个64字节传输难道不是更好吗? 是否使用 TRPD 传输数据? 然后、可以为多个64字节传输设置 TRPD。  

    此致、

    Brijesh

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

    谢谢、Brijesh

    我将尝试使用 TRPD 进行多个64字节传输。

    此致、

    尤金

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

    您好、 Brijesh:

    我已经检查了驱动程序、发现其驱动程序中的 Linux 和 VxWorks 都不支持多个内存到内存传输。 仅适用于 dev-to-mem 或 mem-to-dev。  DRA821芯片是否支持多个存储器到存储器传输?

    无论如何、我想知道256字节 DMA 突发不起作用的原因是什么?

    谢谢!

    尤金

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

    尊敬的 Eugene:

    是的、DMA 通道支持存储器2存储器传输、在 Linux 中可能没有示例、但在地方使用了 DMA 通道。 但我想您正在寻找从 dev2 mem 的传输、对吧?  

    [报价 userid="164757" url="~/support/processors-group/processors/f/processors-forum/1484433/dra821u-udmap-burst-configuration/5706920 #5706920 "]无论如何、我想知道256字节 DMA 突发不起作用的原因是什么?[/QUOT]

    它可能 不受支持。 我建议使用 HC 或 UHC 信道。 我认为其中一个通道支持256字节作为突发大小。 我不确定这对您的情况是否有帮助。  

    此致、

    Brijesh

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

    您好、 Brijesh:

    但我想您正在寻找从 dev2 mem 传输的数据、不是吗?

    根据我的理解、涉及 PCIe 的 DMA 传输应该是 mem 到 mem、因为 PCIe 不在 dev-to-mem 传输支持的器件列表中。 为了确保我已经检查了这种可能性并且我在尝试将 DMA 通道配置为 dev-to-mem 时遇到了异常。

    可能 不受支持。 我的建议是使用 HC 或 UHC 信道

    我所做的就是:我尝试在通道0和1 (UHC)以及2和3 (HC)上配置突发大小、但没有任何成功。

    感谢你的帮助。

    尤金

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

    尊敬的 Eugene:

    [报价 userid="164757" url="~/support/processors-group/processors/f/processors-forum/1484433/dra821u-udmap-burst-configuration/5706979 #5706979"]根据我的理解、涉及 PCIe 的 DMA 传输应该是 mem-to-mem、因为 PCIe 不在 dev-to-mem 传输支持的设备列表中。 为了确保我也检查了这种可能性,我在尝试将 DMA 通道配置为 dev-to-mem 时遇到了一个例外。[/报价]

    但我没有收到这样的信息、配置 DMA 以进行 dev2mem 传输的意思是什么?  您是否使用 TX 通道来执行 dev2mem 传输? 但 PCIe 空间通常 映射在系统空间中、因此您应该能够使用 PCIe 存储器空间来执行 mem2mem 传输、对吧?  

    我所做的就是:我尝试在信道0和1 (UHC)以及2和3 (HC)上配置突发大小、但没有任何成功。

    我们不需要 显式设置这些类型通道的突发大小、UDMA 驱动程序应该注意这一点、至少 RTOS 驱动程序会注意这一点。  

    此致、

    Brijesh

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

    您好、Brijesh

    [报价 userid="80721" url="~/support/processors-group/processors/f/processors-forum/1484433/dra821u-udmap-burst-configuration/5706987 #5706987"]但 PCIe 空间通常 映射在系统空间中、因此您应该能够使用 PCIe 存储器空间进行 mem2mem 传输、不是吗?  [报价]

    你是对的。 我不存在从 PCIe 设备到 mem 传输的问题。 我只是想扩大突发尺寸。

     

    我们不需要 为这些类型的信道明确设置突发大小、UDMA 驱动程序应该注意这一点、至少 RTOS 驱动程序应注意这一点

    您也答对了:RTOS 和 Linux 驱动程序负责处理、但我使用的是 VxWorks、而其驱动程序中未考虑突发尺寸。

    我将尝试向驱动程序添加多传输支持、可能会有所帮助。

    再次感谢大家、

    尤金

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

    当然、  

    您能否参考 Linux/RTOS 驱动程序、 即使在 VxWorks 上也可以进行类似设置?  

    if (uDMA_CH_FLAG_UHC ==(chType 和 uDMA_CH_FLAG_UHC))

    txPrms->fifoDepth =(uint16_t) uDMA_TX_UHC_CHANS_FDEPTH;
    txPrms->burstSize = TISCI_MSG_VALUE_RM_UDMAP_CH_BURST_SIZE_256_BYTES;
    }
    否则为(uDMA_CH_FLAG_HC ==(chType 和 uDMA_CH_FLAG_HC))

    txPrms->fifoDepth =(uint16_t) uDMA_TX_HC_CHANS_FDEPTH;
    txPrms->burstSize = TISCI_MSG_VALUE_RM_UDMAP_CH_BURST_SIZE_256_BYTES;
    }
    设计

    txPrms->fifoDepth =(uint16_t) udma_tx_chans_FDEPTH;
    txPrms->burstSize = TISCI_MSG_VALUE_RM_UDMAP_CH_BURST_SIZE_64_BYTES;
    }

    此致、

    Brijesh

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

    您好、 Brijesh:

    就是我所做的、但我们仍然看不到较大的脉冲。 在启动 DMA 通道之前、我会检查该通道的 UDMA_TCFG 和 UDMA_RCFG 寄存器、并且我看到突发位已正确设置。 这就是为什么我不明白问题是什么

    此致、

    尤金

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

    尊敬的 Eugene:

    当你说你 没有看到大爆发,这是什么意思?  

    我们在使用 UHC 通道方面也看到了良好的改善。

    此致、

    Brijesh

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

    您好、 Brijesh:

    当我们执行大于64字节的 DMA 传输时、可以在 PCIe 上看到多个64字节请求。

    PCIe 配置为128或256字节请求。

    此致、

    尤金

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

    尊敬的 Eugene:

    但如何设置 DMA 呢? 您是使用 TRPD 还是数据包描述符? 您是否尝试过使用128字节或256字节的 icnt0进行 TRPD?  

    此致、

    Brijesh

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

    您好、 Brijesh:

    我使用的是 TRPD。 我已尝试 icnt0 128和256字节。 实际上、这是 VxWorks 驱动程序设定的目标。  如果少于64K、则放入请求的传输长度。

    此致、

    尤金

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

    尊敬的 Eugene:

    我不熟悉 PCIe、但这是否需要对 PCIe 配置进行任何更改?  

    此致、

    Brijesh