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.

[参考译文] TMS570LC4357:当主机发送的 UDP 封包过多时、EMAC RX 中断挂起

Guru**** 2472990 points
Other Parts Discussed in Thread: TMS570LC4357, HALCOGEN

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/656329/tms570lc4357-emac-rx-interrupts-hangs-when-host-sent-too-many-udp-packages

器件型号:TMS570LC4357
主题中讨论的其他器件: HALCOGEN

您好!

我正在使用 TMS570LC4357微控制器(Hercules LaunchPad 开发套件 TMS570LC43x)。

我成功运行了 LwIP 演示、HTTP 服务器正在工作。

板连接到 LAN 并配置了静态 IP 地址。 在主板(192.168.0.101)和 PC (静态 IP 192.168.0.102)之间执行通信。

接收到过多的 UDP 封包(200字节有效载荷)时遇到问题。  

我观察到的内容:

  1. 当主机发送数据包之间有10ms 延迟时、一切都运行良好、
  2. 当主机 以尽可能快的速度逐一发送数据包时、电路板在大约70个数据包之后会在 Rx 中断中挂起。

挂机后,我在调试器中按了 PAUSE,我看到变量 rxch->active_head 设置为 NULL。

软件没有任何防止从 NULL 指针获取数据并保持无限循环的机制。

我添加了"IF 防护"、这有助于应用程序不会挂起、但不再触发 EMAC Rx 中断。

这似乎是硬件功能问题。

问题:

  1. 是否有办法防止这种情况?
  2. 如果微控制器无法处理传入的封装、是否可以忽略这些封装?

此致、

Kamil Zorychta

,关于 EMAC 驱动程序,当主机发送太多数据包时,我很难挂起 RX 中断。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你好、Kamil、

    EMAC 无法接收新的数据包、因为它已超出 FIFO 空间。 当您的目的设备没有接收数据包的速度与主机(PC)发送数据包的速度一样快时、就会出现 FIFO 溢出情况。 因此、您可以查看提高系统性能(更多 FIFO 空间、使用 DMA)或尝试限制主机端的吞吐量。 发生故障时设置哪个中断标志?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    QJ Wang、您好!

    感谢您的重播。 您确认了我的观察结果。
    软件保持在 EMAC Rx 处理程序中、因此 EMAC Rx 标志被置位(EMACCore0RxIsr:通道79)。
    我看到以下寄存器已设置:
    - RXSOFOVERRUNS0x00000000
    -RXMOFOVERRUNS0x00000077
    -RXDMAVERRUNS0x00000077

    因此、这肯定是性能问题。
    我有与接收数据包相关的问题、FIFO 满时是否可以忽略传入数据包?
    我想防止在 Rx 队列中出现 NULL 指针。

    此致、
    Kamil Zorychta
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    EMAC 无法接收、因为它没有资源接收它:Cell FIFO 已满或没有可用的 DMA 缓冲区。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    TRM 和 HalCoGen 代码中描述的以太网缓冲器链接代码存在一些问题。

    修复后、我们每秒处理超过10000个 UDP 数据包没有问题。

    Jiri

    e2e.ti.com/.../678879