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.

[参考译文] TM4C1294NCPDT:在 TM4C1294NCPDT 中运行数小时后、以太网通信失败(从先前的线程继续)

Guru**** 2534260 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1103496/tm4c1294ncpdt-ehthernet-communication-fails-after-many-hours-of-operation-in-tm4c1294ncpdt-continuing-from-earlier-thread

器件型号:TM4C1294NCPDT

运行数小时后以太网通信故障问题的更新

继续讨论先前的主题、

如前所述、问题在一个地方发生、在另一个地方、它在几天的时间内都能正常工作。

因此、我们从遇到问题的地方重复了对开关和电缆的实验、现在我们发现问题在30小时后发生了。 以下是观察结果。

与 通过交换机连接的2台 PC 相对应、有2台处于建立状态(状态4)的活动 TCP_PCB。  即使 在挂起后、它们也会继续显示已建立的状态。 这2在从暂停之日起大约30分钟后自动关闭。 我想 LWIP 会等待这段时间并关闭连接。  

 当 EMACIntStatus  正常工作时、通常为0x10041 ; 当 有异常中断时、有时为0x180c1。 在运行的30小时内、大约有32个异常中断。

 在挂起时   、EMACIntStatus 为零 、之后保持为零。 在这种情况下、从 tera 术语或任何其他方式都无法与电路板建立新连接。 重新建立连接的唯一方法是重置 MCU。

问题是、是什么导致 EMACIntStatus 卡在零? 开关是否会导致这种情况?

这种行为会导致什么?

感谢您的任何帮助。

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

    您好、Krishna、

     不幸的是、我真的不知道导致它在30小时后失败的原因。 在您尝试调查的最后一个主题中、更改不同的开关是否会产生影响? 您能否提供一些更新?

     我有一些问题和建议。

     -更换开关是否会产生影响?

     -您的所有电路板是否都有相同的问题? 如果是这种情况、那么我将重点介绍软件方面。

     您说您的应用程序基于 tcpecho 示例。 如果您按原样运行 tcpecho 示例、您将在运行自己的应用程序时看到的运行小时数之后看到任何故障。

     在这里、我只是想了解 TivaWare tcpecho 示例是否可能是一个问题、因为您说过您参考它来开发您的应用。 您能参考 https://github.com/dreamcat4/lwip/blob/master/contrib/apps/tcpecho_raw/echo.c 上的另一个 tcpecho 示例。这是库存 lwIP tcpecho 示例。 看起来更复杂、但可以正常工作。 只需从该文件调用 ECHO_init()即可。 如果您的应用基于该回波示例、它是否会产生影响? 我只是想知道这是软件问题还是其他问题需要考虑。 我正在尝试的是一个消除过程、以缩小原因范围。  

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

    您好、Charles、

    [引用 userid="93620" URL"~μ C/support/microcontrollers/arm-based microcontrollers-group/arm -based-microcontrollers/f/arm -based-microcontrollers-forum/1103496/tm4c1294ncpdt-ehthernet-communicy-failure-after -hour-hour-operational-in-tm4c1294ncpdt-rthe-wide/ehrthe-communication–price-whouse-whouse-whouse-we-whouse-h-we-we-we-whouse-h-we-we-whouse-

    我尝试了不同 的交换机和电缆,即使一周后,问题也没有出现。 但是、使用这组交换机和电缆时、问题发生了两次。 30小时后,6小时后, 为了消除电缆问题,我单独检查了3根电缆,但没有交换机,他们 每天都在工作,没有任何问题,我强烈怀疑交换机。 为了确认它、我必须返回到另一个开关并再次观察。  

    同时、我修改了我的程序(对于 RTC、SD 卡存储、2个与 MSP432的 SPI 通信以及 Beagle Bone Black 等和 NOSYS 来说相当复杂、并且没有以太网中断。 以太网在主超级循环中进行处理)、以便它在连接的 LaunchPad 上工作(无需其他硬件)、并自昨天起保持运行。  我将进行几天的观察、并告诉您。 如果问题出现在此处、当我使用 TeraTerm 记录 UART 输出时、查找根本原因可能会更容易一些。

    我将尝试在 LaunchPad 上运行一个更简单的程序的另一个建议。

    [引用 userid="93620" URL"~μ C/support/microcontrollers/arm-based microcontrollers-group/arm -based-microcontrollers/f/arm based-microcontrollers-forum/1103496/tm4c1294ncpdt-ehthernet-communicy-failure-after -hour-hour-hour-operation in tm4c1294ncpu701#tc8840tc40pet-the-the-throthe-the-the-the-the-the-the-the-the-the-the-the-the-the-hour-time-hour-time-operation 如果您按原样运行 tcpecho 示例、您将在运行自己的应用程序时看到的运行小时数之后看到任何故障。

    我也会尝试这种方法。

     感谢您的建议。

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

    您好!

    [引用 userid="477983" URL"~μ C/support/microcontrollers/arm-based microcontrollers-group/arm -based-microcontrollers/f/arm -based-microcontrollers-forum/1103496/tm4c1294ncppdt-ehthernet-communicy-failure-after -hour-hour-operational-in-in-tm4C1294ncpue-loop[#90912]以太网主循环中的前几小时后处理[引用自9040912]

    请仔细阅读 David Wilson 在这篇文章  https://e2e.ti.com/support/microcontrollers/other/f/908/t/319674?Optimizing-UDP-in-lwIP-on-TIVA-how-to-determine-when-a-packet-has-been-sent-中的回复。  基本上、您不应从以太网中断处理程序以外的上下文调用 LwIP (如 tcp_send)、因为 LwIP 不可重入、因此您只能从一个上下文调用。  

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

    更新:

    37小时后、在 Launchpad 上运行的程序也停止了在 TCP 上进行通信。 我以20分钟的固定间隔记录了状态、发现在挂起 EMACIntStatus 时变为零。 我已重置 LaunchPad、以便在 接下来的许多小时内再次观察。 稍后、我将更换开关并重试并报告。  

    固件检测到挂起后、它将等待 30秒、并 使用 旧值调用 lwIPNetworkConfigChange、以尝试重新启动。 但这没有影响。

    但是、如果我们对 MCU 执行软件复位、它将恢复。 但是、 由于我们在复位期间丢失了一些数据、因此这不是一个可取的解决方法。

    我是否必须记录其他参数才能深入了解问题?  

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

    您好!

    [引用 userid="477983" URL"~μ C/support/microcontrollers/arm-based microcontrollers-group/arm -based-microcontrollers/f/arm -based-microcontrollers-forum/1103496/tm4c1294ncpdt-ehthernet-communicy-failure-after -hour-hour-operational-ine-in-tm4c1294ncpue-loop[#90912-ma-loop]

    您说过您在主循环中处理以太网。 您是否有机会阅读由 David Wilson 回答的另一篇文章。 我再次将他的答案复制到下面。 我怀疑您的问题是否是由于上述原因造成的。  

    这里最大的问题是、您从以太网中断处理程序以外的上下文调用 lwIP。lwIP 不可重入、因此您只能从一个上下文调用它。 使用 RTOS 时、这意味着仅从单个线程调用 lwIP API。 当不使用 RTOS 时(与我们的大多数示例一样)、您必须在以太网中断处理程序的上下文中进行调用。 这可能很难完成、但执行了计时器回调、使其更容易一些。 请确保将 host_tMR_interval 设置为某个非零值(我认为这是几毫秒)、并在应用程序中实现 lwIPHostTimerHandler、然后从 lwIPHostTimerHandler 函数进行所有 lwIP 调用。

    这听起来可能有些尴尬、但它至关重要。 从主循环调用 udp_send 可能会起作用一段时间、但我保证它会在一段时间后崩溃、因为 lwIP 中的某些内部数据结构会损坏。 这种问题很难调试、因此现在解决这种问题比试图假装一切都好、然后灾难性地失败要好得多。

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

    您好、Charles、

    我认为我做的这个部分是正确的。 我将再次交叉检查。 我们的要求是、计时器中断(10ms)用于数据采集、而数据采集不会被任何其他任务(甚至以太网任务)中断。 因此、我们很难看到以太网功能是在没有硬件以太网中断的情况下实现的。  

    我 将 制作一个简明文件、展示为实现这一点所做的修改。  

    实际上、我在 这篇文章的中午12点博客上看到了这封信  


    high12noon.neocities.org/lwip_polled_tm4c129.html

    BTW 使用 Launch Pad 的第二次测试在10小时后失败。

    现在,我们已将 可疑开关(D-Link D1008D)替换为另一个开关(D-Link DES1008C)。 我们将在几天内进行观察并报告。

    谢谢你。

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

    好的、现在让我们看看使用不同开关的结果。  

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

    您好、Charles、

    问题最终得到解决。 在看到关于另一篇帖子的讨论后

    https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/429689/controller-datasheet-or-tivadriver-library-incorrect

    我 将 lwipopts.h 选项从中进行了更改  

    #define EMAC_PHY_CONFIG (EMAC_PHY_TYPE_INTERNAL | EMAC_PHY_INT_MDIX_EN |\
    // EMAC_PHY_FORCE_10B_T_FULL_DUPLEX)

    更改为

    #define EMAC_PHY_CONFIG (EMAC_PHY_TYPE_INTERNAL | EMAC_PHY_INT_MDIX_EN |\
     EMAC_PHY_AN_10B_T_HALF_DUPLEX)

    显然、强制选项不适用于可疑开关 (D-Link D1008D)、而对于另一个开关(D-Link DES1008C)则可以。

    我们运行该程序120小时,没有任何问题。  

    现在问题已解决,我们已切换到全双工模式。

    感谢大家的帮助。