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.

[参考译文] TM4C1292NCPDT:TCP/UDP/ICMP 校验和卸载引擎随机停止工作

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/752869/tm4c1292ncpdt-tcp-udp-icmp-checksum-offload-engine-stops-working-randomly

器件型号:TM4C1292NCPDT

你(们)好

我将 TM4C1292与 LWIP 搭配使用。

通常一切都正常、但我注意到、有时微控制器选通信号上的随机网页工作正常。

我检查了 Wireshark 中的 TCP 数据包、注意到微控制器发送的 TCP SYN-ACK 消息具有值为0x0000的 TCP 报头校验和字段。  

当一切正常工作时、不是0x0000、而是某种类型的值。

我检查了 Tx 描述符23:22位是否具有值0x3、这意味着软件为校验和保留0x0000、而校验和卸载引擎用正确的校验和替换它、但这不会发生。

似乎卸载引擎随机停止工作。

可以有人帮助我吗?

提前感谢、

卡利斯

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

    您好、Karlis、
    我不确定为什么卸载引擎将0作为校验和。 现在可以很早地得出结论认为校验和是问题的原因。 校验和可能只是我们尚不知道的另一个问题的症状。 您能检查几件事吗?

    如果 TDES0 (增强型发送描述符0)的位16被置位? 该位指示是否检测到校验和错误。 如果该位被置位、那么它可能是数据表中所述的以下任何一项导致的?
    ■对于 IPv4数据报:
    –接收到的以太网类型为0x0800,但 IP 报头的版本字段不等于0x4。
    –IPv4标头长度字段指示小于0x5 (20字节)的值。
    –总帧长度小于 IPv4标头长度字段中给出的值。
    ■对于 IPv6数据报:
    –以太网类型为0x86dd,但 IP 标头版本字段不等于0x6。
    –帧在 IPv6报头(40字节)或扩展报头(如中所示)之前结束
    扩展头中的相应标头长度字段)已完全接收。

    2.检查 TDES0的位15并查看是否存在校验和错误以外的任何错误。
    3.您能否在 Launchpad 中重现问题。 我认为您使用的是定制板、对吧?
    4.您是否有办法手动计算标头的校验和? 如本 Wireshark 文章中所述、校验和上的0x0000值是有效的。 osqa-ask.wireshark.org/.../can-tcp-checksum-be-zero0

    5.是否可以更改为不同的以太网 CAT5E 电缆,并查看问题是否仍然存在?

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

    你(们)好,查尔斯 感谢您的全面回答。 我将对此进行测试并报告结果。

    我只是不知道测试这种情况需要多长时间、因为这些故障确实是随机发生的、很少发生。

    卡利斯

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Karlis、
    我没有听到您的反馈。 问题是否已解决? 我现在要关闭这个线程。 如果问题未得到解决、您可以重新打开此主题、或者在有新问题时打开新主题。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你(们)好,查尔斯 我目前正在做其他工作、同时检查此问题是否再次发生(主板始终运行网页、并从我随机重新启动)。 在这几天内、我没有发现这种没有校验和的错误。

    无论如何、我想现在我们可以关闭该线程。 如果我再次遇到此故障、我将使用您的提示。 谢谢你。

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

    嘿、我再次遇到错误、并检查了您告诉我的位。 它们都是0。

    我想知道我是否在正确的位置检查它们。

    我正在使用 Tiva-tm4c129.c 库、并在 TIVaif_transmit 函数中检查这些位、但校验和卸载引擎似乎会将错误位放在该函数之后。

     现在、我将尝试在 TIVaif_process_transmit 函数中获取描述符状态、因为这是在描述符用于发送数据后处理描述符的函数。

    我无法更早地执行该操作、因为 C 编译器的优化设置为高电平、并且无法在此函数中放置断点(如果未使用此函数、则任何内容都可以工作)。  

    现在、我将优化设置为低、我将再次等待该错误。 现在、我可以在该函数中放置断点并检查那里的状态。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你(们)好 传输后、我也检查了传输描述符标志、没有校验和错误或任何错误的指示。
    我可能会为测试实施软件校验和生成、但我实际上不想用软件替换校验和卸载引擎。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Karlis、
    当问题仅在几天后随机发生时、很难对问题进行调试。 尝试更改为软件校验和、查看是否仍会再次遇到问题。 至少这样做、如果您仍然遇到 Web 服务器问题、那么我们知道这可能与校验和不等于零有关。