以太网PHY芯片自协商失败排查:链路训练与信号完整性
扫描二维码
随时随地手机看文章
在嵌入式以太网开发中,PHY芯片(如LAN8720、RTL8211)“Link Up”失败是最常见的硬件故障。很多工程师误以为是软件驱动问题,实则是自协商(Auto-Negotiation) 机制与信号完整性(SI) 出了问题。本文将深入PHY底层的链路训练流程,提供一套从寄存器到示波器的硬核排查方案。
一、自协商的本质:物理层的“握手协议”
自协商不是简单的“插上网线就连上”,而是一个严格的三步握手过程:
1. 并行检测(Parallel Detection):PHY检测到网线中有信号(FLP脉冲),但还未开始协商。
2. 交换能力(FLP Burst):双方通过快速链路脉冲(FLP),广播自己支持的能力(10/100/1000M,全/半双工)。
3. 仲裁与锁定(Link Training):选择双方都支持的最高速率/双工模式,并锁定接收端均衡器。
失败根源:绝大多数“时连时不连”的问题,出在第2步(能力不匹配)或第3步(信号质量差导致训练失败)。
二、寄存器级排查:读懂PHY的“黑匣子”
当软件驱动phy_start()后迟迟不LINK_UP,第一步永远是读PHY寄存器(通过MDIO)。
1. 关键寄存器速查(以IEEE 802.3为例)
寄存器地址 名称 排查要点
0x00 Basic Control Bit12=1(自协商使能),Bit9=1(重启自协商)
0x01 Basic Status Bit5=1(自协商完成),Bit2=1(Link Up)
0x04 Auto-Neg Adv 宣告的能力(100M全双工?)
0x05 Link Partner Ability 对端支持的能力(关键!)
2. 实战代码片段(STM32 HAL库)
// 读取PHY状态寄存器
uint32_t phy_reg;
HAL_ETH_ReadPHYRegister(&heth, PHY_ADDR, PHY_BSR, &phy_reg);
// 判断是否Link Up
if (phy_reg & PHY_LINKED_STATUS) {
printf("Link UP!\n");
} else {
// 未Link,进一步检查自协商状态
HAL_ETH_ReadPHYRegister(&heth, PHY_ADDR, PHY_SR, &phy_reg);
if (!(phy_reg & PHY_AUTONEGO_COMPLETE)) {
printf("ERROR: Auto-negotiation NOT complete!\n");
}
}
避坑指南:如果0x01寄存器的Bit5(Auto-Neg Complete)始终为0,说明物理层链路训练根本没完成,问题100%在硬件或网线。
三、信号完整性(SI)导致的训练失败
当自协商使能且网线没问题,但Link灯不亮时,信号完整性是头号嫌疑犯。PHY的接收端需要足够的眼图张开度才能完成链路训练。
1. 眼图闭合的三大元凶
• 回流路径断裂:RJ45接口的Transformer(变压器)中心抽头未正确接VDD(通常3.3V),导致信号幅值不足。
• 阻抗不匹配:PHY到变压器的走线非50Ω差分,或网线超过100米(超过标准Cat5e/Cat6的信道预算)。
• 电源噪声:PHY的AVDD(模拟电源)纹波过大,污染了敏感的模拟前端。
2. 示波器实测验证
使用示波器(带以太网解码)测量PHY的TX+ / TX- 引脚:
• 正常:信号峰峰值应在1Vpp ~ 1.5Vpp左右(100BASE-TX),眼图清晰。
• 异常:幅值只有几百mV,或眼图完全闭合(呈直线或噪声状)。这通常意味着变压器故障或PHY芯片损坏。
四、常见故障排查清单(Debug Checklist)
按照以下顺序排查,90%的自协商问题都能解决:
1. 硬件连接
◦ 复位引脚:PHY的RST#引脚是否为高电平?(很多板卡默认拉低,需MCU拉高)。
◦ 时钟:25MHz(或50MHz)晶振是否起振?频率偏差不能超过±50ppm。
◦ MDIO地址:代码中PHY_ADDR是否匹配硬件 strap 引脚设置?
2. 软件配置
◦ MDIO时序:HAL_ETH_MspInit()中GPIO速度是否设为VERY_HIGH?
◦ 自协商使能:确认Basic Control寄存器(0x00)的Bit12已置位。
3. 兼容性模式
◦ 某些老交换机不支持千兆。在PHY驱动中强制降级测试:
// 强制设置为100M全双工(跳过自协商)
HAL_ETH_WritePHYRegister(&heth, PHY_ADDR, PHY_BCR, 0x2100);
如果能强制Link,说明自协商能力集不匹配或网线质量差。
五、结语
以太网PHY的自协商失败,本质是物理层握手与信号质量的双重考验。记住:先查寄存器(看状态),再测眼图(看信号),最后调驱动。掌握这套流程,你就能在“网线插上没反应”的困境中,迅速定位是PHY硬件故障还是配置失误。





