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.

[参考译文] PROCESSOR-SDK-DRA7X:在执行到运行 NDK 的 J6时、RX DMA 溢出

Guru**** 2551110 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/607270/processor-sdk-dra7x-rx-dma-overflows-when-doing-arping-to-j6-running-ndk

器件型号:PROCESSOR-SDK-DRA7X

您好!

我正在尝试在 IPU1_1上集成 NDK (版本 NDK_2_25_00_09)。 我有以下用于配置 NDK 的 cfg 文件部分:

VAR Global     = xdc.useModule('ti.ndk.config.Global');

VAR IP         = xdc.useModule('ti.ndk.config.Ip');
AR ICMP       = xdc.useModule('ti.ndk.config.Icmp');
VAR TCP        = xdc.useModule('ti.ndk.config.Tcp');
VAR UDP        = xdc.useModule('ti.ndk.config.Udp');
VAR Telnet     = xdc.useModule('ti.ndk.config.Telnet');

Global.useSemLibs = true;
global.ipv6 = false;
ip.address ="10.42.0.99";
ip.mask ="255.255.255.0;
ip.gatewayIpAddr ="10.42.0.1";
Global.networkOpenHook ='netOpenHook';
Global.networkCloseHook ='netCloseHook';

当我向我的器件发送 arping (arping -i eth1 10.42.0.99)时、我没有收到任何响应。 此外、RX_DMA_溢出 寄存器和 RX_START_ON_FRAME_溢出 在每个 ARping 帧处递增。

我使用的是 PDK PDK_dra7xx_1_0_5的二进制 EMAC 驱动程序。

有趣的是、当我直接使用驱动程序 API 来接收帧时、我会得到帧、并且不会出现 RX_DMA_溢出。

对于 NDK、这种行为的原因可能是什么?cfg 文件中是否缺少某些项?

此致、

Jakub

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

    我已将您的问题转交给一位专家。

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

    谢谢你。 让我补充一下、我正在使用 EMAC 驱动程序 pdk_dra7xx_1_0_5/packages/ti/drv/emac/lib/dra75x/m4/release/ti.drv.emac.aem4
    和 Nimu transport pdk_dra7xx_1_0_5/packages/ti/transport /NDK/Nimu/lib/dra75x/M4/release/ti.transport ndk.Nimu.aem4

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

    是否可以尝试将 Global. pktNumFrameBufs 属性设置为256? 它未在您共享的 cfg 文件的片段中明确设置。 我认为如果未设置、它默认为16、这可能太少、无法跟上速度、从而导致 DMA 超限。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Misael:


    我 在 cfg 文件中将 Global. pktNumFrameBuf 设置为256,现在 ARP 和 TCP 起作用。 我用这个参数的值和128 ARP 和 TCP 的工作做了一个试验,但是对于64个我得到 DMA 超限。 起搏信号不应成为问题、因为 ARping 每秒发送一个以太网帧、帧的长度为42 (填充后64个)字节。

    这是在将任何数据包发送到我的板之前、为不同的 pktNumFrameBuf 转储一些 CPDMA 寄存器:

    256个缓冲器:
    CPDMA INT RX 设置0x00000001
    CPDMA INT RX 清除0x00000001
    CPDMA INT TX 设置0x00000003
    CPDMA INT TX 清零0x00000003
    RX0 HDP 0x48486800
    RX1 HDP 0x00000000
    RX2 HDP 0x00000000
    RX3 HDP 0x00000000
    RX4 HDP 0x00000000
    RX5 HDP 0x00000000
    RX6 HDP 0x00000000
    RX7 HDP 0x00000000


    128个缓冲器:
    CPDMA INT RX 设置0x00000001
    CPDMA INT RX 清除0x00000001
    CPDMA INT TX 设置0x00000003
    CPDMA INT TX 清零0x00000003
    RX0 HDP 0x48486800
    RX1 HDP 0x00000000
    RX2 HDP 0x00000000
    RX3 HDP 0x00000000
    RX4 HDP 0x00000000
    RX5 HDP 0x00000000
    RX6 HDP 0x00000000
    RX7 HDP 0x00000000

    64个缓冲器:
    CPDMA INT RX 置位0x00000000
    CPDMA INT RX 清除0x00000000
    CPDMA INT TX 设置0x00000003
    CPDMA INT TX 清零0x00000003
    RX0 HDP 0x00000000
    RX1 HDP 0x00000000
    RX2 HDP 0x00000000
    RX3 HDP 0x00000000
    RX4 HDP 0x00000000
    RX5 HDP 0x00000000
    RX6 HDP 0x00000000
    RX7 HDP 0x00000000

    对于64个缓冲区、RX 中断不被启用、并且没有描述符地址被写入 HDP 寄存器。

    它是否不能用于64个缓冲器?

    此致、

    Jakub

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

    Jakub、

    你是对的、节奏在这里没有发挥作用。 问题在于、NIMU 实现将描述符数量设置为128、但 NDK 仅为64提供存储器。 因此、EMAC 驱动程序中的内存分配失败。 驱动程序还会检查应用程序队列中的数据包缓冲区数量是否不小于缓冲区描述符的数量。 当 pktNumFrameBufs=64时、该错误条件实际上会被命中。 不幸的是、驱动程序会无提示地失败。

    您可以尝试将 NIMU 实现中设置的缓冲区描述数量(pdk/packages/ti/transport /NDK/NIMU/src/v4/cpsw_NIMU_eth.c)更改为64 (open_cfg.num_for_rx_pkt_desc = 64、对于 TX 也是如此)。