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.

[参考译文] AM5716:PRU-ETH 不可用、无法发送/接收任何数据包。

Guru**** 2482225 points
Other Parts Discussed in Thread: AM5746

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1418179/am5716-pru-eth-unavailable-can-not-send-recv-any-packet

器件型号:AM5716

工具与软件:

您好、TI 专家:

我在 DSP 上运行 SYS/BIOS、使用 PRU-ETH 发送/接收数据包、并使用 IPC 与 A15内核(运行 A15中 Linux 的主机)进行通信。 在某些情况下、当 PRU-ETH 变得不可用时、就会出现问题:它无法再发送或接收任何数据包。 不过、当我调用该函数时

int32_t ICSS_EmacTxPacket(const ICSS_EmacTxArgument *txArg, void* userArg)
 在 DSP 程序中、我收到一个返回值0。 此函数位于"processor_sdk_rtos_am57xx_09_02_00_00/pdk_am57xx_1_0_21/packages/ti/drv/ICSS_EMAC/ICSS_emacDrv.c" src 中。 关闭并重新启动主板不能解决问题。

触发此问题的一个已确认的行为是在主机程序和 DSP 程序正常运行:的情况下执行命令

echo 40800000.dsp > /sys/bus/platform/drivers/omap-rproc/unbind
echo 40800000.dsp > /sys/bus/platform/drivers/omap-rproc/bind

会触发"Bug"。

我进行了以下测试:

```bash
root@SunGrow:~# ifconfig eth3 down
[ 4695.832319] prueth pruss2_eth eth3: Link is Down
[ 4695.863972] pruss 4b280000.pruss: unconfigured system_events[63-0] = 00600000,08a00000
[ 4695.879840] pruss 4b280000.pruss: unconfigured host_intr = 0x000002aa
[ 4695.892873] remoteproc remoteproc3: stopped remote processor 4b2b8000.pru
[ 4695.908040] net eth3: stopped
root@SunGrow:~# ifconfig eth3 up
[ 4708.931205] remoteproc remoteproc3: powering up 4b2b8000.pru
[ 4710.965959] remoteproc remoteproc3: loading /lib/firmware/ti-pruss/am57xx-pru1-prueth-fw.elf successfully!    drivers/base/firmware_loader/main.c L349
[ 4710.993076] remoteproc remoteproc3: Booting fw image ti-pruss/am57xx-pru1-prueth-fw.elf, size 6952
[ 4711.012099] pruss 4b280000.pruss: configured system_events[63-0] = 00600000,08a00000
[ 4711.028863] pruss 4b280000.pruss: configured intr_channels = 0x0000032a host_intr = 0x000002aa
[ 4711.048084] remoteproc remoteproc3: remote processor 4b2b8000.pru is now up
[ 4711.076954] net eth3: started
[ 4711.080389] IPv6: ADDRCONF(NETDEV_UP): eth3: link is not ready
[ 4711.089853] prueth pruss2_eth eth3: drivers/net/phy/phy.c L74 Link is Up-- - 100Mbps/Full - flow control off
[ 4711.114863] 8021q: adding VLAN 0 to HW filter on device eth3
[ 4711.126955] IPv6: ADDRCONF(NETDEV_CHANGE): eth3: link becomes ready
root@SunGrow:~# ethtool -S eth3
NIC statistics:
     txBcast: 0
     txMcast: 0
     txUcast: 0
     txOctets: 0
     rxBcast: 0
     rxMcast: 0
     rxUcast: 0
     rxOctets: 0
     tx64byte: 0
     tx65_127byte: 0
     tx128_255byte: 0
     tx256_511byte: 0
     tx512_1023byte: 0
     tx1024byte: 0
     rx64byte: 0
     rx65_127byte: 0
     rx128_255byte: 0
     rx256_511byte: 0
     rx512_1023byte: 0
     rx1024byte: 0
     lateColl: 0
     singleColl: 0
     multiColl: 0
     excessColl: 0
     rxMisAlignmentFrames: 0
     stormPrevCounterBC: 0
     stormPrevCounterMC: 0
     stormPrevCounterUC: 0
     macRxError: 1
     SFDError: 0
     defTx: 0
     macTxError: 0
     rxOverSizedFrames: 0
     rxUnderSizedFrames: 0
     rxCRCFrames: 0
     droppedPackets: 0
     txHWQOverFlow: 0
     txHWQUnderFlow: 0
     emacMulticastDropped: 0
     emacVlanDropped: 0
```

然后我将 eth3连接到笔记本电脑的以太网端口、用工具向 eth3发送数据包。 Wireshark 捕获如下:

但是、当ethtool -S eth3再次使用时、我得到相同的结果。

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

    您好!

    从 SDK 9.2开始取消对 PRU-Eth 的支持。 请参阅 发行说明 以了解进一步参考。

    此致、
    Tanmay

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

    您好、Tanmay

    很抱歉忘记提供 SDK 版本信息。  

    SDK-LINUX_VERSION=06.03.00.106  

    SDK-RTOS_VERSION=09.02.00.00(我还测试了其他版本: 08.01.00.09)

    08.01.00.09 版本的 SDK_Linux 文件系统提供的 PRU 固件 用于解决 AM5746:Rx_ERROR_OFFSET 条件中提到的问题

    我已阅读发行说明、但找不到任何解释我遇到问题原因的信息。

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

    您好!

    我不太清楚设置。 根据我的理解,这是正在发生的事情:

    • PRU 正在运行 PRU ETH 二进制文件
    • A15连接 PRU 内核并创建 eth3接口
    • A15也在运行 IPC 应用程序、以便将流量转发到 DSP
    • DSP 正在运行 IPC 应用程序以接收 PRU 流量

    您能否确认这是正在发生的事情。

    此致、
    Tanmay

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

    我对我模糊的描述造成的任何混淆深表歉意。

    以下是应用正常运行时的配置:

    • PRU 正在运行 PRU ETH 二进制文件
    • DSP  使用  ICSS EMAC 低电平驱动器接收/发送流量。
    • DSP 正在运行 EtherCAT 协议栈、但我认为我遇到的问题与 EtherCAT 协议栈无关。
    • DSP 正在运行 IPC 应用。
    • A15同时运行 IPC 应用。
    • 在 A15的 Linux 启动期间、eth3被禁用:ifconfig eth3 down
    • A15和 DSP 之间的 IPC 用于传输应用数据和指令。

    在特定情况下(确切原因不确定)、PRU-ETH 可能不可用、从而阻止其发送或接收数据包。

    以下是我在测试 PRU-ETH 可用性时采取的步骤:

    • A15连接 PRU 内核并创建 eth3接口。
    • 将 eth3连接到笔记本电脑的以太网端口。
    • 在笔记本电脑上发送数据包
    • 使用ethtool检查 eth3的统计信息。

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

    您好  Zhijie  

       此问题的状态如何?

    此致

      Semon

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

    这个问题仍然困扰着我、但当我切换到另一个 PRU-ETH 网络接口时、几乎再也不会遇到这个问题。

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

    您好!

    只有在多个硬件上才可以看到它?

    此致、
    Tanmay

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

    您好、 Tanmay

    我不太明白"多硬件"的意思、但这个问题仍然给我带来困扰、因为我需要同时使用两个 PRU-ETH 接口。

    此致、

    Zhijie

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

    今天,我做了一些新的发现,可能更好地描述我遇到的问题。 使用 PRU-ETH 在 DSP 上发送数据包时、ICSS_EmacTxPacketEnqueue源代码文件中的函数icss_emacdrv.c报告了返回值为的错误ICSS_EMAC_ERR_TX_OUT_OF_BD。 提供的评论如下:

    #define ICSS_EMAC_ERR_TX_OUT_OF_BD                     (ICSS_EMAC_SWITCH_ERROR_MAJOR + 8u)
    /**< Tx ran out of Buffer descriptors to use.                               */

    同时、我添加了调试日志、具体函数如下所示:

    /*Check if queue is full and there is an wrap around */
    #if defined(ICSS_EMAC_DEBUG) && (ICSS_EMAC_DEBUG > 2)
        printf_INFO("P+%d,HWREG(0x%x) = 0x%x,wr_ptr=0x%x,size=0x%x,rd_ptr=0x%x, desc_off=0x%x\n",portNumber, temp_addr, temp, queue_wr_ptr, size, queue_rd_ptr, txQueue->buffer_desc_offset);
    #endif
        if (((queue_wr_ptr + 4U) % size) == 0U)
        {
            if (queue_rd_ptr == txQueue->buffer_desc_offset) /* Since queue is not starting from 0. */
            {
                txQueue->qStat.errCount++;
                if (emacMode == 0U)
                { /*Switch Mode*/
                    temp_addr = ((((ICSS_EmacHwAttrs *)icssEmacHandle->hwAttrs)->emacBaseAddrCfg)->dataRam1BaseAddr + txQueue->queue_desc_offset + 4U);
                    HWREGB(temp_addr) = 0;
                }
                else
                {
                    temp_addr = (pruSharedMem + txQueue->queue_desc_offset + 4U);
                    HWREGB(temp_addr) = 0U;
                }
                hostStatPtr->txDroppedPackets++;
                printf_INFO("--ICSS_EMAC_ERR_TX_OUT_OF_BD(-1)=0x%x, M:0x%x + 8 \n", ICSS_EMAC_ERR_TX_OUT_OF_BD, ICSS_EMAC_SWITCH_ERROR_MAJOR);
                return ((int32_t)ICSS_EMAC_ERR_TX_OUT_OF_BD); /* No space in queue */
            }
        }

    出现错误时的调试日志如下:

    P+1,HWREG(0x4b281ed8) = 0x162c14ac,wr_ptr=0x162c,size=0x1630,rd_ptr=0x14ac, desc_off=0x14ac

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    此问题仍然困扰着我、但当我切换到另一个 PRU-ETH 网络接口时、我几乎再也不会遇到此问题。

    您好 Zhijie

      两个网络接口是否有区别? 为什么一个很好、而另一个则无法正常工作

    此致

      Semon

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    据我所知、两个网络接口没有什么不同。
    我之前提供的信息很长一段时间、由于我当时对问题的理解有限、可能无法准确地描述问题。  

    我已经启动了一个新主题来解释该问题。 请参阅 PRU-ETH 在 DSP 内核中不可用、无法发送/接收任何数据包


  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [报价 userid="620299" url="~/support/processors-group/processors/f/processors-forum/1418179/am5716-pru-eth-unavailable-can-not-send-recv-any-packet/5561014 #5561014"]
    据我所知、两个网络接口没有什么不同。
    我之前提供的信息很长一段时间、由于我当时对问题的理解有限、可能无法准确地描述问题。  

    我已经启动了一个新主题来解释该问题。 请参阅 PRU-ETH 在 DSP 内核中不可用、无法发送/接收任何数据包

    [报价]

    您好 Zhijie

      因此我们可以在新案例中进行讨论、我们将关闭该案例

    此致

      Semon