我遇到的情况是数据包不在以太网PHY中。我正在使用DMA环缓冲区,数据从物理线复制到环形缓冲区然后我将它推到上层堆栈。在DMA环缓冲区中有两个计数器消费者索引和生产者索引以及有两个指针读指针和写指针。计数器表示有多少数据包来自物理层,而消费者缓冲区用于保持已推送到上层的消耗缓冲区的索引。读写指针用于选择数据。
在我目前的情况下,我的生产者和消费者索引变得相似,这意味着DMA环形缓冲区中没有数据包,而数据包被连续泵送到连接到PC的设备(wireshark日志确认数据包正在路由。 )
我们正在使我们的引导加载程序OS独立,所以这里我们的实现在一次执行(引入一些定时器)中执行许多事情(流管理,解析初始数据包并将其推送到上层),就像在之前的实现中一样这是VxWorks,事情发生在不同的线程中,他们正在使用他们的IP栈。在进一步调试问题之后,我观察到由于RX_BUFFER溢出导致数据包丢失。我发现在硬件级别的过滤器中设置MAC多播地址存在一些问题,这可能是相同的原因。我的观察是第一次工作正常。但在软复位后,我无法再次放置滤波器。我怀疑还有几个问题,我正在探讨同样的问题。
1>初始化以太网驱动程序
2 - ; LWIP(IP堆栈)初始化。
3 GT;注册回调功能。
4>启动以太网PHY驱动程序
5个表格DHCP连接
6个以太网驱动程序保持轮询,接受DHCP提供
7个加入IGMP
8是氢。轮询组播包
9个解析数据包并加入其他组播组
10 -10再次开始轮询组播数据包。在步骤4之后,随机我在任何步骤开始接收RX_BUFFER溢出消息。最大MTU大小设置为1500字节,缓冲区大小为2K。
有什么建议可以解决/缩小问题范围吗?
答案 0 :(得分:0)
我们与Broadcom就上述问题保持联系,我们修复了问题并对其进行了测试。我想更新已经完成的修改。
从PHY层接收数据包后,我们正在刷新PHY RX缓冲区。此部分已删除,因为它已由PHY层管理。
我们还对LWIP堆栈的流程进行了一些小修改。