以太网(一)MAC、MII、PHY 接口信号与硬件设计探秘 📅 2026/7/15 3:30:13 1. 以太网硬件架构的三驾马车第一次拆开路由器外壳时我看到电路板上密密麻麻的芯片和走线完全摸不着头脑。直到师傅指着三个关键部件说这就是以太网的三大护法——负责思考的CPU、管交通规则的MAC、实际干活的PHY。这句话让我瞬间理解了它们的角色分工。现代嵌入式设备中这三者的组合方式就像搭积木一样灵活。最常见的是二合一方案CPU肚子里装着MAC外面再挂个PHY芯片。为什么这样设计因为MAC是纯数字电路跟CPU工艺兼容性好而PHY要处理模拟信号独立封装更合适。这就好比数字厨师MAC在厨房CPU里备菜再由擅长火候的川菜师傅PHY在专用灶台完成最后爆炒。具体到硬件连接三者通过两座桥梁沟通数据高速公路MII接口家族含MII/RMII/GMII等承担着MAC与PHY之间的数据搬运控制通道SMISerial Management Interface总线让MAC能随时查看和调整PHY的工作状态2. 解剖MII接口的信号密码当年调试第一块网卡时我用逻辑分析仪抓取MII信号发现每根线都在讲述不同的故事。这个看似简单的接口其实藏着精妙的通信密码。2.1 数据通道的双向对话MII的发送通道就像快递打包流水线TXD[3:0]四位并行的数据包裹想象同时传送四个快递盒TX_EN打包员举手示意正在装货TX_ER质检员打标此件异常TX_CLK25MHz的传送带节奏100Mbps模式时接收通道则是完全镜像的设计只是数据流向相反。特别要注意RX_DV信号它就像仓库的入库确认单只有这个信号有效时RXD上的数据才值得信任。2.2 那些容易被忽视的辅助信号CRSCarrier SensePHY的耳朵听到网络上有动静就立即告警COLCollision Detect冲突检测器相当于交通警察的哨声MDIO/MDC这对管理总线就像汽车OBD接口能读取PHY的健康状态实测中发现CRS信号在布线过长时容易产生延迟导致MAC误判网络状态。建议这个信号走线控制在5cm以内必要时可加终端电阻匹配。3. PHY芯片的寄存器黑匣子PHY芯片内部藏着上百个寄存器就像汽车的ECU控制系统。通过SMI总线我们可以像4S店技师一样调校网络参数。3.1 必须掌握的五个关键寄存器地址名称位域功能说明0x00BMCR0x15软复位/自协商使能0x01BMSR0x13链路状态/自协商完成0x04AUTONEG_ADVERT0x1F自协商能力广告0x09PHYSTS0x07实时速度/双工状态0x10PHYID10x16芯片厂商OUI前16位调试时最常用的是三板斧操作// 读取PHY ID确认芯片型号 mdio_read(phy_addr, 0x02, phy_id_high); mdio_read(phy_addr, 0x03, phy_id_low); // 强制设置100M全双工 mdio_write(phy_addr, 0x00, 0x2100); // 实时监测链路状态 link_up mdio_read(phy_addr, 0x01) 0x0004;3.2 寄存器访问的避坑指南地址对齐问题某些PHY要求32位访问误用16位操作会导致读取错误自协商超时完成自协商通常需要2-3秒过早读取状态会误判为失败电源管理陷阱省电模式下某些寄存器值不可靠需先退出节能状态曾经有个项目因为没处理PHY的EEPROM加载延时导致上电后前5秒寄存器读取全错。后来加入100ms延时重试机制才解决问题。4. 硬件设计中的信号完整性画第一块以太网板子时我天真以为连上线就能用结果遭遇了各种灵异事件。后来才明白这些细节决定成败4.1 时钟信号的特别关照RX_CLK/TX_CLK必须严格等长偏差50ps建议走带状线MDC时钟虽然频率低2.5MHz max但上升沿要控制在5ns以内晶振选择25MHz晶振的频偏要50ppm否则会影响TCP吞吐量4.2 PCB布局的黄金法则PHY位置尽量靠近RJ45连接器缩短模拟走线磁耦隔离变压器中心抽头电容要贴近连接器放置电源分割数字电源与模拟电源用0Ω电阻单点连接参考平面避免时钟信号跨分割区会造成时序抖动有个血泪教训某次为了省面积把PHY放在背面结果TX_CLK串扰导致误码率飙升。后来改版遵循PHY与变压器同面相邻原则问题迎刃而解。5. 调试技巧与实战案例示波器屏幕上跳动的波形往往藏着问题的真相。这些年来我总结出望闻问切四步法5.1 诊断三板斧眼图测试用示波器触发TX_D0信号观察张眼是否清晰环路测试短接PHY的TX/RX检查MAC能否收到自发数据寄存器扫描dump全部PHY寄存器比对默认值差异5.2 经典故障案例案例一百兆模式频繁断连现象自协商成100M后大流量传输时链路断开排查发现PCB上RX_D[3:0]走线长度差达300mil解决重新布线保证等长差50mil问题消失案例二千兆模式无法建立现象强制设置为1000M时链路不up分析PHY的AUTONEG_ADVERT寄存器未包含1000BASE-T能力修复正确配置寄存器bit9后恢复正常记得准备些必备工具带以太网协议的逻辑分析仪如SaleaeRJ45回环插头自己用电阻焊接也行磁耦隔离变压器用于信号隔离测量6. 速度升级的接口演进从最早的MII到现在的RGMII接口就像车道扩容工程。这个进化过程特别有意思6.1 各代接口参数对比类型数据位宽时钟频率信号线数典型应用MII4bit25MHz1610/100M交换机RMII2bit50MHz8低成本IoT设备GMII8bit125MHz24千兆服务器RGMII4bit DDR125MHz12主流路由器6.2 RGMII的时序玄机最新设计多采用RGMII它像魔术师般在时钟边沿玩花样上升沿传送TXD[3:0]下降沿传送TXD[7:4]TX_CTL同时携带TX_EN和TX_ER这就带来严格的时序要求___ ___ ___ CLK __/ \___/ \___/ \__ | 1 | 2 | 3 | 4 | 5 | 6 | TXD[3:0] D0 D1 D2 D3 TXD[7:4] D4 D5 D6 D7实际布线时要特别注意时钟与数据线严格等长±50ps使用IBIS模型进行仿真在PCB端接50Ω电阻到1.8V某次设计RGMII接口时因为没做时序仿真导致千兆模式误码率高达10^-5。后来在时钟线上串接22Ω电阻改善边沿速率才将误码率降到10^-12以下。