突然,数据包停止在以太网PHY上



我的情况是,数据包没有到以太网phy。我正在使用DMA环缓冲区,将数据从物理线到环缓冲区复制,然后将其推到上层堆栈。在DMA环缓冲区中,有两个计数器消费者索引和生产者索引,还有两个指针读取指针和作者指针。计数器说,有多少数据包来自物理层,而消费者缓冲区则用于保持已将其推向上层的消耗缓冲区的索引。读写指针用于选择数据。

在我目前的情况下,我的生产商和消费者索引变得相似,这意味着DMA环缓冲液中没有数据包,而数据包则连续泵送到连接到PC的设备(Wireshark Logs确认数据包在路由中。)

我们正在使我们的引导加载程序独立于独立,因此我们的实现正在做许多事情(流程管理,解析初始数据包并将其推向上层),在单个执行(介绍某些计时器)中这是VXWORKS,事情正在不同的线程中发生,并且他们正在使用其IP堆栈。在进行了进一步调试之后,我观察到,由于RX_Buffer溢出,数据包正在下降。我发现,在硬件级别将MAC多播地址设置为MAC多播地址存在一些问题,这可能是相同的原因。我的观察是,它首次工作正常。但是在软重置之后,我将无法再次放置过滤器。我对更多问题有疑问,我正在探索同样的问题。

1>初始化以太网驱动程序。
2> LWIP(IP堆栈)初始化。
3>注册回调功能。
4>启动以太网PHY驱动器。
5>形式DHCP连接。
6>以太网驱动程序不断进行投票,接受DHCP优惠。
7>加入IGMP
8>民意调查多播数据包
9>解析数据包并加入其他多播组
10>再次开始对多播数据包进行轮询。步骤4之后,在任何步骤中随机接收RX_Buffer溢出消息。最大MTU尺寸集为1500字节,缓冲区的大小为2K。

任何建议分类/缩小问题的建议?

我们与Broadcom联系了上述问题,我们解决了问题并对其进行了测试。我想更新已完成的修改。

  • 从PHY层接收数据包后,我们将冲洗PHY RX缓冲区。本节之所以删除,是因为它已经由PHY层管理。

  • 我们在LWIP堆栈的流程中也进行了一些较小的修改。

最新更新