You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于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
    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);
    
    这种方式能确保每个网口的UDP数据包被对应PCB接收,消除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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 04:22:36