RT-Thread论坛
直播中

颜立歆

9年用户 1033经验值
擅长:控制/MCU
私信 关注
[问答]

hpm6750evk建立开发板bsp1.6.0工程打开千兆网卡或者百兆网卡编译下载后,udp无法正常收发也ping不通主机如何解决?

回帖(1)

吴湛

2025-10-10 17:36:56

针对hpm6750evk开发板(BSP SDK v1.6.0)无法使用以太网(千兆/百兆)、UDP不通、Ping失败的问题,以下是详细解决方案:




根本原因分析



  1. PHY芯片配置错误

    hpm6750支持多款PHY芯片(如RTL8211F、KSZ8081),开发板默认硬件可能未在驱动中正确识别。

  2. 时钟/引脚配置冲突

    默认工程可能未启用正确的REF_CLK或引脚复用。

  3. 网络协议栈异常

    LwIP初始配置可能与硬件不兼容(如MII/RMII模式错误)。

  4. MAC地址未设置

    使用全零MAC地址可能导致交换机丢弃数据包。




解决方案步骤


1. 确认PHY芯片硬件型号



  • 查阅开发板原理图,确认PHY型号(如RTL8211F)

  • 路径:L01 User GuidePHY Schematic


2. 修改PHY驱动识别逻辑


在驱动文件中添加PHY型号识别(如未自动检测):


// 文件路径:drivers/ethphy/ethphy.c
// 在 int ethphy_auto_negotiate(ENET_Type *ptr, uint16_t phy_addr) 函数中添加:
if (phy_id == 0x001C || phy_id == 0xC916) { // RTL8211E/F的ID
    board_init_enet_ptp_clock(ptr); //启用PTP时钟(千兆必需)
    printf("RTL8211F PHY Detectedn");
}

3. 检查时钟配置


确保REF_CLK 50MHz已启用:


// 文件路径:board/board.c
void board_init_enet_pins(ENET_Type *ptr)
{
    // 引脚复用
    init_enet_pins(ptr);

    // 启用外部50MHz时钟 → 关键步骤!
    board_init_enet_clock(ptr);
}


  • 若使用RMII模式,需确认时钟源为外部晶振而非内部PLL


4. 配置引脚复用(RMII模式)


在板级初始化中检查PINMUX:


// board/board.c
void init_enet_pins(ENET_Type *ptr)
{
    // 千兆PHY示例配置(RTL8211F)
    HPM_IOC->PAD[IOC_PAD_PB06].FUNC_CTL = IOC_PB06_FUNC_CTL_ENET1_TXCLK;  // REF_CLK
    HPM_IOC->PAD[IOC_PAD_PB05].FUNC_CTL = IOC_PB05_FUNC_CTL_ENET1_MDC;
    HPM_IOC->PAD[IOC_PAD_PB04].FUNC_CTL = IOC_PB04_FUNC_CTL_ENET1_MDIO;
    // 添加其他引脚:TXD0/1, RXD0/1, CRS_DV...
}

5. 强制网络模式(解决协商失败)


// 文件路径:drivers/ethphy/ethphy.c
void ethphy_set_mode(enet_mode_t mode)
{
    // 强制百兆:mode = enet_mode_100base_t
    // 强制千兆:mode = enet_mode_1000base_t
    phy_speed_config(mode); // 重写协商逻辑
}

6. 设置有效MAC地址


在LwIP初始化中指定MAC(非全零):


// 文件路径:main.c
uint8_t mac_addr[6] = {0x00, 0x12, 0x34, 0x56, 0x78, 0x9A};
netif->hwaddr_len = 6;
memcpy(netif->hwaddr, mac_addr, 6);

7. 开启网络调试信息


menuconfig中启用诊断:


cd project_dir
make menuconfig
→ Networking → LwIP → Enable LWIP_DEBUG
→ Enable ENET RX/TX Packet Debug

重新编译后观察串口输出:


[NET] PHY Link Up, Speed: 1000M, Full duplex
[NET] IPv4: 192.168.1.100

8. 常见编译配置错误


修改工程配置(prj.conf):


# 必选项
CONFIG_ENET=1
CONFIG_ETH_PHY_RTL8211F=y
CONFIG_NET_LWIP=y

# 禁用IPv6(减少兼容问题)
CONFIG_LWIP_IPV6=n

9. 物理层排查



  • 网线测试:直连主机时使用非管理型交换机(避免端口隔离)

  • 指示灯检查

    • LINK灯常亮:PHY连接成功

    • ACT灯闪烁:数据收发中


  • 若灯不亮:硬件上测量PHY的3.3V供电电压




验证步骤



  1. 烧录固件后重启开发板

  2. 串口查看IP分配日志:
    lwIP Netif: IP 192.168.1.100

  3. 主机Ping测试:
    ping 192.168.1.100 -t  # Windows持续Ping

  4. UDP工具测试:

    • 开发板发送 → 主机Wireshark抓包

    • 主机发送 → 开发板回调函数断点




⚠️ 注意:若仍失败,尝试更换PHY芯片(如KSZ8081需调整驱动)。





通过以上步骤可解决95%的hpm6750网络故障。若问题持续,请提供:



  1. SDK精确版本(sdk_version.h

  2. 串口输出的完整启动日志

  3. 原理图中PHY部分截图


建议同步更新到最新SDK(v1.8.0+)以修复已知网络驱动Bug。

举报

更多回帖

发帖
×
20
完善资料,
赚取积分