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-AM64X:Enet CPSW LwIP、UDMA RX 通道打开失败

Guru**** 2551110 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1213830/processor-sdk-am64x-enet-cpsw-lwip-udma-rx-channel-open-failed

器件型号:PROCESSOR-SDK-AM64X
主题中讨论的其他器件:SK-AM64

您好!

我目前正在 SK-AM64上使用 LWIP + CPSW。 SDK 中还有一个涵盖该主题的示例: dev.ti.com/.../EXAMPLES_ENET_LWIP_CPSW.html

但是、如果我要重新布局/重新运行我正在开发的程序(SDK 中也提到了)、并且断开连接并连接 USB 以便能够从 CCS 闪存、我始终需要重新打开 CPU 电源。 这有点不方便...
如果我不按照这些步骤操作、则会显示以下错误:

EnetUdma_openRxCh: [Enet UDMA] UDMA RX Channel open failed: 0xffffffff
EnetHostPortDma_open: Failed to open Enet DMA RX channel: -1
Cpsw_openInternal: CPSW: Failed to open CPSW DMA
Assertion @ Line: 946 in /home/gtbldadm/nightlybuilds/repo_manifests/scripts/jenkins/mcu_plus_sdk_am64x_08_04_00_17/source/networking/enet/core/src/per/V1/cpsw.c: hCpsw->hRxRsvdFlow != NULL


是否有克服这一问题的可能?
我的想法是彻底的去初始化 UDMA ...

尝试执行 udma_chPair ()(src/drivers/udma/udma_ch.c)时,应用程序在 udma_chOpen ()中失败。 在调用这些函数的生成的驱动程序(ti_enet_open_close.c)中,我看到 UDMA RX 通道已初始化并使用辅助函数 EnetApp_openDmaChannels ()打开。 但是、没有这样的帮助来关闭 DMA 通道。 我曾尝试在此处添加此功能、但使用这些文件是一个不好的主意、因为这些文件会为每次编译自动生成并覆盖。

为什么没有 EnetApp_closeDmaChannels()? 这样一个功能是否可以完全关闭 DMA 来解决该问题? 或者是否存在完全其他的问题?

您有什么解决方案吗?

此致、谢谢
多米尼克

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

    尊敬的 Dominik:

    感谢您的提问。

    =>断言@行:946 in /home/gtbldadm/nightlybuilds/repo_manifests/scripts/jenkins/mcu_plus_sdk_am64x_08_04_00_17/source/networking/enet/core/src/per/V1/cpsw.c:hCpsw->hRxRsvdFlow != NULL

    该错误指出应用程序正在尝试从中查找 cpsw.c 文件 Jenkins 位置、这是我们的夜间测试基础设施的一部分。 不知道为什么  

    您能否提供您正在使用的 SDK 版本? 看起来像 MCUSDK 8.4? 您是否可以尝试使用最新版本进行相同操作并更新结果?

    我明天要去度假。 因此只能在下周进行验证。

    此致

    Ashwani

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

    尊敬的 Ashwani:

    没有在 Jenkins 上搜索文件、我想您只能在我使用您(TI)在 MCU+ SDK 中提供的预编译二进制文件(库)构建应用时看到相应路径

    是的、我使用的是8.4.0.17

    不幸的是,我无法切换到最新的8.5版本,因为有其他问题为我的主板... (例如 https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1185565/processor-sdk-am64x-enet-layer-2-cpsw-example-does-not-work-anymore-with-sdk-version-08-05-00-24)

    此致

    多米尼克

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

    尊敬的 Dominik:

    感谢您的澄清。

    没有在 Jenkins 上搜索文件,但在我使用由您(TI)在 MCU+ SDK 中提供的预编译二进制文件(库)构建应用程序时,您只能看到路径,我想

    您能提供重现问题的步骤吗?

    我们正在处理这一问题。

    此致

    Ashwani

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

    尊敬的 Ashwani:

    感谢你能抽出时间。

    在 SK-AM64上执行以下示例时、可以简单地重现问题

    enet_lwip_cpsw_am64x-evm_r5fss0-0_freertos_ti-arm-clang (examples\networking\lwip\enet_lwip_cpsw\am64x-evm\r5fss0-0_freertos)
    SDK 版本8.4.0.17

    这个示例最初为 AM64x EVM 制作、但通过应用以下补丁/Git diff (只是更改一些焊球编号)、该应用也将在 SK-AM64上运行。

    diff --git a/examples/networking/lwip/enet_lwip_cpsw/am64x-evm/r5fss0-0_freertos/example.syscfg b/examples/networking/lwip/enet_lwip_cpsw/am64x-evm/r5fss0-0_freertos/example.syscfg
    index 7a818b9..1556a04 100644
    --- a/examples/networking/lwip/enet_lwip_cpsw/am64x-evm/r5fss0-0_freertos/example.syscfg
    +++ b/examples/networking/lwip/enet_lwip_cpsw/am64x-evm/r5fss0-0_freertos/example.syscfg
    @@ -33,6 +33,7 @@ const enet_cpsw1 = enet_cpsw.addInstance();
      * Write custom configuration values to the imported modules.
      */
     eeprom1.$name = "CONFIG_EEPROM0";
    +eeprom1.i2cAddress = 0x51;
     
     gpio1.$name                    = "CONFIG_GPIO0";
     gpio1.pinDir                   = "OUTPUT";
    @@ -117,12 +118,12 @@ enet_cpsw1.udmaDrv = udma1;
     debug_log.uartLog.UART.$suggestSolution             = "USART0";
     debug_log.uartLog.UART.RXD.$suggestSolution         = "ball.D15";
     debug_log.uartLog.UART.TXD.$suggestSolution         = "ball.C16";
    -enet_cpsw1.pinmux[0].RGMII1.RD0.$suggestSolution    = "ball.W5";
    -enet_cpsw1.pinmux[0].RGMII1.RD1.$suggestSolution    = "ball.Y5";
    -enet_cpsw1.pinmux[0].RGMII1.RD2.$suggestSolution    = "ball.V6";
    -enet_cpsw1.pinmux[0].RGMII1.RD3.$suggestSolution    = "ball.V5";
    -enet_cpsw1.pinmux[0].RGMII1.RX_CTL.$suggestSolution = "ball.W6";
    -enet_cpsw1.pinmux[0].RGMII1.RXC.$suggestSolution    = "ball.AA5";
    +enet_cpsw1.pinmux[0].RGMII1.RD0.$suggestSolution    = "ball.AA13";
    +enet_cpsw1.pinmux[0].RGMII1.RD1.$suggestSolution    = "ball.U12";
    +enet_cpsw1.pinmux[0].RGMII1.RD2.$suggestSolution    = "ball.Y13";
    +enet_cpsw1.pinmux[0].RGMII1.RD3.$suggestSolution    = "ball.V12";
    +enet_cpsw1.pinmux[0].RGMII1.RX_CTL.$suggestSolution = "ball.V13";
    +enet_cpsw1.pinmux[0].RGMII1.RXC.$suggestSolution    = "ball.W13";
     enet_cpsw1.pinmux[0].RGMII1.TD0.$suggestSolution    = "ball.V15";
     enet_cpsw1.pinmux[0].RGMII1.TD1.$suggestSolution    = "ball.V14";
     enet_cpsw1.pinmux[0].RGMII1.TD2.$suggestSolution    = "ball.W14";
    


    您将看到、应用程序在第一次执行时运行正常。 如果您在不重启电源的情况下重新运行程序、您将收到所述的错误消息。

    我还知道、文档中给出了以下提示"如果您需要重新加载并再次运行、必须执行 CPU 下电上电"。 问题更多的是、是否可以修复/调整以便可以重新运行。

    此致

    多米尼克

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    "如果您需要重新加载并再次运行,则必须执行 CPU 循环通电

    尊敬的 Dominik:

    如前所述、这是一个已知问题、在即将发布的版本中进行修复。 修复后、系统复位就足以 重新运行相同的代码。

    此致

    Ashwani

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

    我不知道你把这视为一个"错误"、我认为这只是一个提示。

    好的,我试图修复自己,但失败,然后我期待修复