主题中讨论的其他器件:C2000WARE、 TMDSCNCD28388D
工具/软件:
我正在重新发布这个线程,因为它可能已经被埋葬了。
尊敬的专家:
处理从以太网接收的数据时、描述符指示的信息可能与数据缓冲区的内容不匹配。
问:您能告诉我如何避免这种情况吗? 如果当前信息不够、请告诉我我应该检查哪些要点。
我的客户正在使用以太网和 F28388D、并评估 LWIP。 这是 这一主题的延续。
当 PC 和 F28388D 与 LAN 电缆连接时、会出现此现象。 特别是当 PC 建立链路时、许多数据包会流动、因此处理过程可能无法跟上、内存可能会被重写。
它们使用一个名为 KSZ8794的交换机作为以太网 PHY。 此交换机具有多个端口、并将一个字节的标识信息(TailTag)添加到从外部接收的数据中。 需要删除这些标识信息、但数据会添加到接收到的数据的末尾(在 FCS 之前)。 因此、有必要从接收到的数据的数据长度(pPacket->validLength)信息中识别数据的位置并对其进行提取。 但是、有时数据长度(pPacket->validLength)表示的位置包含的内容与实际数据不同。
Wireshark 日志调查的结果表明、当接收函数处理数据长度(pPacket->validLength)时、稍后发送的数据将存储在存储器中、从而导致提取不正确的 TailTag。 使用 Wireshark 检查相同的日志时、可以确认数据内容指示的位置存在正确的 TailTag。
下面的示例代码用作基址、中断发生后会立即禁用、并在缓冲区处理完成后释放中断。
: \libraries\communications\Ethernet\third_party\lwip\examples\enet_lwip
他们在中断处理期间复制接收缓冲区的内容(f2838xif_receive ())、然后在复制后设置断点并比较结果。
复制缓冲区在停止在断点处时的内容与接收缓冲区不同、具体而言、复制缓冲区的内容旧了几倍。
此致、
正常