CBM-HARDWARE-TEST:从原理图到Ping通——一次完整的以太网硬件调试实战
1. 以太网硬件调试的完整闭环搞硬件的人都知道从原理图到实际能Ping通的板子中间要经历九九八十一难。我最近刚完成一个基于LAN8720A的以太网通信项目整个过程就像打怪升级今天就把这些实战经验分享给大家。先说说这个项目的硬件构成。主控板用的是STM32F407通过RMII接口连接LAN8720A物理层芯片再接到HR915310A网口插座。听起来很简单对吧但实际调试时光是让网口的绿灯亮起来就花了我三天时间。这里有个重要经验硬件调试一定要有系统性思维从电源、时钟、复位这些基础信号开始查逐步推进到协议栈初始化。注意在焊接完板子后建议先用万用表测量所有关键网络的通断特别是那些细间距的RMII信号线。我就遇到过因为PCB过孔不通导致CLK信号丢失的情况。2. 原理图设计的那些坑2.1 物理层芯片的选型陷阱LAN8720A算是性价比很高的PHY芯片但它的引脚排列有个坑——不同封装的引脚定义可能完全不一样。我最初用的是LQFP48封装后来换成了更小的QFN32结果发现两个封装的电源引脚位置完全不同。建议在画原理图时一定要把芯片数据手册的引脚定义图打印出来用荧光笔标出所有电源和地引脚。这里分享一个检查清单VDDIO1.8V/2.5V/3.3V是否与主控电平匹配所有电源引脚是否都接了去耦电容我习惯用0.1μF10μF组合复位电路的上拉电阻和滤波电容是否合理晶振电路是否按照手册推荐值设计25MHz晶振配22pF负载电容2.2 网口插座的封装灾难说到封装错误RJ45插座绝对是重灾区。我这次用的HR915310A是直插式封装和常见的卧式HR911105A引脚完全不对应。更坑的是不同厂家的同类型插座引脚定义也可能不同。强烈建议在PCB投板前用3D视图把插座和连接器都装配起来检查。这是我踩过的一个具体坑HR911105A的引脚1是TD1而HR915310A的引脚1是LED_A两个插座的LED引脚极性相反一个共阳一个共阴变压器中心抽头的接法也不同有的要接3.3V有的要接滤波电路3. 硬件调试实战记录3.1 电源与复位电路调试先用示波器检查LAN8720A的各个电源引脚# 测量命令示例使用带记录功能的示波器 :MEASure:SOURce CH1 :MEASure:VPP? :MEASure:RISE?发现3.3V电源上有100mV的纹波超出芯片要求的50mV范围。解决方法是在电源入口处增加一个π型滤波器10μF10Ω10μF。复位电路更是个大坑STM32的IO驱动能力不足导致复位信号只有0.8V解决方法有两种改用开漏输出加上拉电阻增加一级三极管驱动我最终选了这个方案3.2 RMII信号完整性验证RMII接口的调试需要一台支持100Mbps的示波器。关键检查点TX_CLK要有稳定的25MHz方波占空比45%~55%TXD[1:0]和RXD[1:0]的信号幅度要大于2V用眼图模式检查信号质量抖动要小于1ns如果发现信号畸变可以尝试在发送端串联33Ω电阻调整PCB走线长度RMII要求所有信号线等长误差±5mm内检查地平面是否完整最好用4层板有独立的地层4. 软件层面的协同调试4.1 寄存器级诊断方法当LWIP初始化失败时不要急着改代码先直接读PHY寄存器// 读取PHYID1和PHYID2的示例代码 uint16_t ReadPHYReg(uint8_t reg_addr) { uint32_t temp; temp (LAN8720_Addr 11) | (reg_addr 6) | (0x02 4) | 0x01; ETH_WriteMACMIIAR(temp); while(ETH_ReadMACMIIAR() ETH_MACMIIAR_MB); return ETH_ReadMACMIIDR(); } void CheckPHY() { printf(PHYID1: 0x%04X\r\n, ReadPHYReg(0x02)); printf(PHYID2: 0x%04X\r\n, ReadPHYReg(0x03)); }正常应该读到0x0007和0xC0F1如果全是0xFFFF说明通信异常。4.2 LWIP协议栈的配置技巧在lwipopts.h中这几个参数需要特别注意#define MEM_SIZE (16*1024) // 内存池大小 #define PBUF_POOL_SIZE 16 // PBUF缓存数量 #define TCP_MSS 1460 // 最大报文段大小 #define TCP_SND_BUF (4*TCP_MSS) // 发送缓冲区如果经常出现DHCP超时可以尝试增加DHCP_TIMEOUT默认是10秒检查防火墙是否屏蔽了UDP 67/68端口用Wireshark抓包分析DHCP交互过程5. 网络连通性终极测试当一切就绪后按照这个流程验证观察RJ45指示灯绿灯常亮表示100M链路建立黄灯闪烁表示有数据活动在电脑上arp -a查看是否学习到板卡的MAC地址Ping板卡IP建议先禁用电脑防火墙测试用iperf测试实际带宽应该能达到90Mbps以上如果Ping不通但链路灯正常可能是这些问题板卡和电脑不在同一网段比如一个192.168.1.x一个192.168.0.x子网掩码设置错误应该都是255.255.255.0默认网关没有配置要指向路由器IP最后分享一个诊断神器——网络调试助手的使用技巧TCP Server模式下要指定正确的本地端口发送测试数据时建议包含时间戳方便计算往返延迟长时间测试建议开启KeepAlive功能