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.

[参考译文] MCU-PLUS-SDK-AM243X:AM2432:Lwip 级联 pbuf isn#39;t trasenchated complete.

Guru**** 2539500 points
Other Parts Discussed in Thread: AM2432

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1195290/mcu-plus-sdk-am243x-am2432-lwip-concatenated-pbuf-isn-t-trasmitted-complete

器件型号:MCU-PLUS-SDK-AM243X
主题中讨论的其他器件:AM2432

我在 AM2432上工作、在 定制板上安装了 SDK MCU_PLUS_SDK_am243x_08_05_00_24

我正在尝试解决简单 TFTP 服务器的问题。

当服务器在 UDP 端口69上接收到请求并从不是69的 UDP 端口回复客户端端口时、UDP 流量就会产生此问题。

ACK 消息应仅包含4个字节、其中 ACK 操作码和块编号为0、但服务器将发送 UDP 报头正确且 UDP 有效载荷仅为零的回复。

我已经测试过传递给 lwip_sendto 的静态缓冲器的指针是否已正确填充。

深入了解 LwIP 代码、我发现为我的4个字节分配了一个 pbuf、然后分配并连接了另一个 pbuf 以添加 UDP 报头。

很明显,DMA 只是将 pbuf 与 UDP 报头一起传输,而丢弃了连接的 pbuf (我想... )。

以前的 SDK 08.04.00.17和08.03.00.18不会发生这种情况

我使用的 TFTP 客户端是: https://tftpd64.software.informer.com/download/

我的示例代码发布在 GitHub 上: https://github.com/atessadri/lwip_cpsw_example

下面是 TFTPCLient 接口的屏幕截图、其中我设置了纯文本文件的传输:

下面是 TFTP 客户端的 TFTP 写入请求的 Wireshark 屏幕截图:

下面是从 boiard 到 TFTP 客户端的回复:

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

    尊敬的 Andreas:

    这是已知的错误、计划在 SDK 8.6中修复

    请尝试使用此版本: https://www.ti.com/tool/download/MCU-PLUS-SDK-AM243X-LS/08.06.00.11

    这是一个早期发布版本。 计划于2023年3月正式发布

    请告诉我这是否适合您。

    BR

    Nilabh A.

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

    Nilabh Anand、您好!

      遗憾的是、它无法解决问题。

    下面是 Wireshark 捕获的屏幕截图。

    如您所见:

    • 在 AM2432上运行的 TFTP 服务器发送带有错误块号的确认消息(在 PC 上运行的客户端一直在等待块 nr 上的 ACK。 1)
    • 消息缓冲器是一个静态数组、定期更新正确的块编号
    • 在某些情况下、服务器仍为 ACK 提供空白有效负载

    这是带空有效载荷的确认

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

    尊敬的 Andreas:

    只需确认是否 已对缓存执行写回操作、当我们启用 Tx SG (针对 uDMA 平台在8.5 Rel 上启用)进行 UDP 传输时就需要此操作。

    我在 您的实现文件 socket_example.c 中看到以下代码

    它没有缓存回写命令。 请按以下所述操作:

    在对 UDP 传输执行 lwip_sendto 之前、需要对缓存进行写回。 下面是我们在 app_udpclient.c 中的8.6 SDK 中的代码片段

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

    谢谢 Nilabh Anand、这解决了问题。

    总之、我想知道我应该如何了解 SDK 08.05.00.24引入的这一重要变化。

    是否有任何有关它的文档? 迁移指南或其他内容?

      Andrea

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

    很高兴认识 Andrea、

    这是在很晚的阶段作为一个错误出现的。 我将确保将这些更改记录为迁移指南。

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

    此外、我先前与您共享的8.6 SDK 中也存在同样的更改。 但我可以理解,如果不具体提及,就很难知道这一点。

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

    再次感谢 Nilabh Anand、在您的帮助下、我们很快解决了问题、但很难有一个简单的示例来显示与我们应用固件的大部分内容无关的问题(我们不认为问题是硬件问题的根本原因)。

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

    我确实理解 Andrea、将采取行动以确保这些问题得到特别强调。

    如果问题得到解决、我可以关闭 TT。