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.

[参考译文] RTOS/AM3358:NDK ping 问题

Guru**** 2549930 points
Other Parts Discussed in Thread: SYSBIOS

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/809934/rtos-am3358-ndk-ping-issue

器件型号:AM3358
Thread 中讨论的其他器件:SYSBIOS

工具/软件:TI-RTOS

您好!

 我认为我遇到的问题与此 URL 描述的问题相同: https://e2e.ti.com/support/processors/f/791/t/701299?tisearch=e2e-sitesearch&keymatch=%20user:290018

 我有一个定制的 AM335x 板、与 bbb 几乎相同。

 对于我自己的应用程序、或'Nimu_BasicExample_evmAM335x_armExampleProject'和'Nimu_FtpExample_evmAM335x_armExampleProject'等官方示例、ping (ping 192.168.1.4)在大约5分钟内正常、然后突然失败。 似乎只有电源回收可以恢复(通过 JTAG 重新加载.out 不会恢复网络)。

 我的环境是:

 * pdk_am335x_1_0_14

 * NDK_3_40_01_01

 * BIOS 6.75.2.00

 * EDMA3 2.12.5

 使用默认设置"Global. ndkTickPeriod =200",ping 在大约5分钟后失败。

 使用设置"Global. ndkTickPeriod = 2000",ping 的持续时间超过10分钟。

 当同一个板运行 Linux 时、ping 始终正常。 这表示硬件正常。

 

 我跟踪了 NIMU 和 EMAC 的一些代码、并发现了一些结果:

 *在 ping 失败时、从 AM335x 发出 ARP 请求(60字节)、ARP 需要解析地址与不断尝试对其执行 ping 操作的地址相反。

 *最后一个 TX 数据包没有成功触发 TX 中断、因此 TX 例程被保持并卡住。 同时、RX 仍然工作。

  感谢您的任何帮助!

此致、

GaN XJ

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

    您好!

    我找不到用于测试的具有 JTAG 接头的 BBB。 让我查找另一个 AM335x GP EVM、看看我是否可以重现此问题并在此处进行更新。

    此致、Eric  

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

    您好!

    通过 NDK 用户指南:global.ndkTickPeriod 可让您调整 NDK 心跳速率。 默认值为100个周期。 这与默认的 SYS/BIOS 定时器对象相匹配、该对象驱动 SYS/BIOS 时钟并被配置为1个节拍= 1毫秒。 但是、您可以配置一个新的定时器并使用它来驱动时钟模块。 如果新计时器未配置为1个节拍= 1毫秒、则还应相应地调整 NDK 节拍周期。

    来自此 E2E: https://e2e.ti.com/support/legacy_forums/embedded/tirtos/f/355/p/343389/1207113

    如果您在 SYSBIOS 配置文件中具有以下内容:

    clock.tickPeriod = 500; //这是500us

    global.ndkTickPeriod = 200;正确、500x200=100000 us = 100ms  

    我刚才 Ping 了 AM335x GP EVM 40分钟(2507个数据包)、无法使用上述设置产生任何 ping 故障。 您可以在故障情况下检查一些 NDK 统计信息:

    此致、Eric

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

    感谢您的快速回复!

    我的硬件使用18.432Mhz 振荡器、而不是19.2Mhz 或24MHz 的 EVM 和 BBB 板。

    这是我们的硬件和其他硬件之间的唯一区别。

    我的.cfg 配置是:

    ///////////////////////////////////

    clock.tickPeriod = 100;

    global.ndkTickPeriod = 100;

    ///////////////////////////////////

    然后、我将其更改为:

    ///////////////////////////////////

    clock.tickPeriod = 1000;

    global.ndkTickPeriod = 100;

    ///////////////////////////////////

    完成此更改后、Task_sleep (1000)似乎真的睡了1秒钟。

    但是 ping 命令在几分钟后总是失败。

    ping 是从 Linux 虚拟机建立的、指令为'sudo ping -s 1000 -i 0.1 192.168.1.4'、这意味着 ping 包大小为1000字节、2 ping 包之间的间隔约为0.1s。 ping 失败似乎是相对于时间、而不是封装尺寸和数量。 使用'-I 0.1'时、它始终在大约3分钟的第1300次 Ping 时失败。 如果没有'-i'(默认每包1s)、它在大约3分钟的时间内也总是在130 Ping 处失败。

    在 ping 失败点、从 NDK 发送 ARP、然后 ping 从不响应。

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

    请记住、我曾提到、在 ping 失败时、从 NDK 发出 ARP 请求。

    我通过设置'_RtNoTimer= 1'修改了源'NDK_3_40_01_01/packages/ti/NDK/stack/route/rtable.c'(它被设置为0)、然后重建 NDK 和我的应用程序、一切都很好、ping 可以持续几个小时。

    就好像 NDK 的路由表发生了一些超时事件一样。 在尝试删除和更新路由时,网络断开。

    我不知道错误的详细信息。 我不知道是否有一些 cfg 条目可以解决此问题。 我不知道这是否是 NDK 的错误。

    但这种修改确实可以解决它。

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

    您好!

    感谢您的更新、很高兴您找到了解决方案! 如果这是错误或任何其他建议、请让我检查 NDK 团队。

    此致、Eric