基于Xilinx Zynq7020的LWIP RAW API双以太网冗余连接问题
Zynq 7020双PL以太网独立工作与冗余问题解决建议
问题现象
在Xilinx Zynq 7020平台上配置双PL以太网接口,两个网口单独工作正常,同时启用后出现异常:拔掉eth2网线后第一个网口无法工作,但拔掉第一个网口网线时第二个网口可正常工作。已注释netif_set_default代码,怀疑第二个网口初始化覆盖了第一个的配置,同时PCB拆分遇到问题,需要双网口独立同时工作的方案。
当前代码片段
网口初始化代码
netif = &server_netif; netif2 = &server_netif2; ipaddr = (ip_addr_t) IPADDR4_INIT(ip); netif->ip_addr = ipaddr; local_multicast = (ip_addr_t) IPADDR4_INIT(multicast_ip); if (!xemac_add(netif, &ipaddr, &netmask, &gw, mac_ethernet_address, PLATFORM_EMAC_BASEADDR_0)) { xil_printf("Error adding N/W interface\r\n"); return; } // netif_set_default(netif); netif_set_up(netif); ipaddr2 = (ip_addr_t) IPADDR4_INIT(ip2nd); netif2->ip_addr = ipaddr2; local_multicast2 = (ip_addr_t) IPADDR4_INIT(multicast_ip2); if (!xemac_add(netif2, &ipaddr2, &netmask, &gw, mac_ethernet_address2, PLATFORM_EMAC_BASEADDR_1)) { xil_printf("Error adding N/W interface\r\n"); return; } // netif_set_default(netif2); netif_set_up(netif2);
IGMP与UDP配置代码
err = igmp_joingroup(&ipaddr, &local_multicast); err = igmp_joingroup(&ipaddr2, &local_multicast2); pcb = udp_new(); err = udp_bind(pcb, IP_ANY_TYPE, IGMP_MULTICAST_PORT); udp_recv(pcb, udp_multicast_recv, NULL);
解决方案建议
1. 修复网络接口路由与ARP配置
- 为两个网口添加独立路由表项:通过
ip_route_add分别为每个网口绑定对应网段的路由,确保数据包能精准匹配到对应网口,避免路由冲突导致的优先级覆盖。 - 配置独立ARP缓存:在lwip配置中开启多网口独立ARP表选项,或手动为每个网口分配独立的ARP缓存空间,防止第二个网口初始化时覆盖第一个网口的ARP条目。
2. 调整UDP绑定与接收逻辑
- 为每个网口创建独立UDP PCB,避免端口复用导致的数据包分配异常:
这种方式能确保每个网口的UDP数据包被对应PCB接收,消除// 第一个网口专属UDP PCB pcb1 = udp_new(); err = udp_bind(pcb1, &ipaddr, IGMP_MULTICAST_PORT); udp_recv(pcb1, udp_multicast_recv, NULL); // 第二个网口专属UDP PCB pcb2 = udp_new(); err = udp_bind(pcb2, &ipaddr2, IGMP_MULTICAST_PORT); udp_recv(pcb2, udp_multicast_recv, NULL);IP_ANY_TYPE绑定带来的优先级问题。
3. 检查lwip核心配置
- 确认
LWIP_NUM_NETIFS配置值≥2,保证系统支持多网口管理; - 开启
NETIF_FLAG_BROADCAST和NETIF_FLAG_MULTICAST选项,确保两个网口的组播功能正常; - 检查
LWIP_NETIF_LOOPBACK配置,避免回环数据包干扰多网口数据转发。
4. PCB设计优化建议
- 电源隔离:为两个网口的PHY芯片配置独立电源域,添加磁珠或滤波电容减少电源串扰;
- 走线优化:增加两个网口走线之间的地线隔离层,缩短网口信号线长度,降低EMI干扰;
- 复位与时钟独立:确保两个PHY芯片的复位信号、参考时钟完全独立,避免一个网口的复位/时钟波动影响另一个;
- 信号完整性验证:使用示波器测试网口差分信号质量,调整走线阻抗匹配参数。
内容的提问来源于stack exchange,提问作者strafor
相关产品推荐
相关产品推荐

