以太网PHY-MAC接口详解:从MII到SGMII的硬件设计选择与调试

📅 2026/8/26 7:21:38
以太网PHY-MAC接口详解:从MII到SGMII的硬件设计选择与调试
1. 从“ETH相关”说起网络工程师的接口选择困境最近在整理项目文档看到文件夹里有个孤零零的标题叫“ETH相关”正文一片空白。这场景太熟悉了估计是当时项目太赶只来得及记个关键词想着后面再补。但恰恰是“ETH”这个缩写在嵌入式、网络硬件和FPGA开发里能牵扯出一大堆让人头大的技术细节。今天我就以这个空标题为引子结合大家常搜的MII、RMII、RGMII、SGMII这些热词把以太网物理层PHY和媒介访问控制层MAC之间那些关键的接口协议彻底捋清楚。如果你正在做一块带网口的板子或者在调试网络不通、速率不稳的问题那这篇文章就是为你准备的。我们不讲空洞的理论直接说清楚每种接口的引脚、时序、应用场景以及最要命的那些坑。2. 基石MII接口——最经典也最“费引脚”的设计当我们说“ETH”时在硬件层面首先指的就是连接MAC通常集成在处理器或FPGA里和PHY芯片负责物理信号收发的那个并行总线。MIIMedia Independent Interface就是最老祖宗的标准。2.1 MII的引脚定义与工作模式MII接口设计之初就考虑了10Mbps和100Mbps两种速率。它的数据通道是4位4-bit宽度的这意味着TX通道TXD[3:0]发送数据、TX_EN发送使能、TX_ER发送错误较少用。RX通道RXD[3:0]接收数据、RX_DV接收数据有效、RX_ER接收错误、CRS载波侦听、COL冲突检测。最关键的是时钟TX_CLK发送时钟和RX_CLK接收时钟。在100Mbps模式下此时钟频率是25MHz在10Mbps模式下时钟频率是2.5MHz。数据在时钟的上升沿被采样。这里有个非常重要的细节MII的发送和接收路径是独立且全双工的。TX_CLK由PHY提供给MAC用于同步发送数据RX_CLK也由PHY提供用于同步接收数据。两者频率相同但相位可能不同。注意很多初学者会误以为时钟由MAC产生或需要外部晶振直接提供。实际上在MII/RMII模式下时钟通常由PHY芯片根据网络链路协商出的速率10/100M来产生并反馈给MAC。MAC需要根据这个时钟来收发数据。2.2 为什么现在新设计很少用纯MII了答案就两个字引脚。数一数一个完整的MII接口需要16个信号线不含管理接口MDIO/MDC。这对于引脚资源紧张的微控制器MCU或需要集成多端口的交换机芯片来说成本太高了。所以虽然MII结构清晰、时序简单易于在FPGA中实现逻辑但它更像一个“学院派”的参考标准。在实际产品中除非引脚资源极其充裕或者必须兼容某些老旧的PHY芯片否则工程师们会优先考虑它的精简版本——RMII。3. 精简之王RMII接口——小资源的救星RMIIReduced MII的出现就是为了解决MII引脚过多的问题。它在保持兼容10/100Mbps的前提下对接口进行了大刀阔斧的精简。3.1 RMII的精简逻辑与引脚对比RMII的核心变化有三点数据宽度减半从4位变为2位2-bit。因此发送和接收数据线各只有TXD[1:0]和RXD[1:0]。时钟统一取消了独立的TX_CLK和RX_CLK取而代之的是一个共用的50MHz参考时钟REF_CLK。这个时钟需要被MAC和PHY同时使用用于驱动发送和接收两个方向的数据。信号合并CRS和RX_DV信号的功能被合并和调整。一个典型的RMII接口只需要9个信号线同样不含MDIO/MDCTXD[1:0],TX_ENRXD[1:0],RX_DV(此处RX_DV也兼有指示载波的功能)REF_CLKCRS_DV(这是一个复合信号高电平表示载波侦听或数据有效)3.2 REF_CLK的来源最容易踩的坑这是RMII设计中最关键、也最容易出问题的地方。REF_CLK这个50MHz时钟从哪里来标准定义了两种模式模式1由外部振荡器晶振提供同时供给MAC和PHY。模式2由PHY芯片提供输出给MAC。绝大多数情况下我们采用模式2。即PHY芯片内部PLL根据其自身晶振通常是25MHz倍频出50MHz然后通过REF_CLK引脚输出给MAC。这样能保证时钟与PHY内部时序严格同步。踩坑实录我曾遇到一个案例原理图设计时硬件工程师将PHY的REF_CLK输出引脚接到了MAC的REF_CLK输入引脚但MAC端配置错误被软件工程师在驱动里配置成了“内部时钟模式”或“模式1”。结果就是MAC以为时钟是自己产生的而实际上它在使用PHY送来的时钟两者频率有微小偏差或相位不同步导致数据采样错位。表现出来的现象就是网络时通时断大量CRC错误帧。解决办法就是仔细查阅MAC和PHY的数据手册确保两边的时钟模式配置一致。4. 千兆时代的扛把子RGMII接口当速度提升到1000Mbps1Gbps时无论是MII还是RMII都力不从心了。RGMIIReduced Gigabit MII成为了千兆以太网事实上的标准接口。4.1 RGMII的提速秘籍双边沿采样千兆速率下如果仍用4位宽度那么时钟频率需要250MHz这对PCB布线和信号完整性是巨大挑战。RGMII的聪明之处在于它保持了4位的数据宽度TXD[3:0],RXD[3:0]。但将时钟频率降为125MHz。如何用125MHz的时钟传输1000Mbps的数据答案是在时钟的上升沿和下降沿都采样数据。这就是DDR双倍数据速率传输。因此RGMII的时序图看起来会“挤”一些。TXD[3:0]在GTX_CLK的上升沿和下降沿都会发生变化并被PHY采样。接收端同理RXD[3:0]在RX_CLK的上升沿和下降沿被MAC采样。4.2 那个令人头疼的“时钟延迟”问题RGMII标准中有一个明确但常被忽略的要求为了补偿时钟路径的延迟发送时钟GTX_CLK相对于发送数据TXD[3:0]/TX_CTL需要由MAC进行延迟。通常这个延迟是固定的比如在时钟上升沿时数据应该已经稳定了约1-2ns。很多MAC控制器特别是集成在SoC内部的的硬件逻辑已经处理了这个延迟。但当我们用FPGA实现MAC逻辑时必须手动处理这个延迟。常见的做法是在FPGA内部对输出的GTX_CLK使用一个专用的时钟输出引脚支持相位调整并通过IODELAY原语或PLL相移功能将其延迟约2ns。信号抓取分析如果你用示波器抓取RGMII信号一个健康的信号应该是这样的测量GTX_CLK的上升沿它应该大致位于TXD数据比特位的中间而不是边缘。如果时钟边沿对准了数据跳变沿那一定会导致采样错误。这也是调试千兆网不通时硬件上首要排查的点。5. 走向更高速与远距离SGMII与SerDes技术当速率要求超过1G或者物理连接需要更长的距离比如板级互联背板时并行总线如RGMII的劣势就显现了信号线多同步困难PCB布线挑战大。这时串行接口SGMIISerial Gigabit MII就登场了。5.1 SGMII的本质串行化与嵌入式时钟你可以把SGMII理解为RGMII的“串行版”。它将4位数据控制信号通过SerDes串行器/解串器技术变成一对差分信号线TX_P/N, RX_P/N进行传输。速率是1.25Gbps因为包含了编码开销。SGMII最大的特点是时钟是嵌入在数据流中的接收端通过CDR时钟数据恢复电路从数据中提取出时钟。这带来了巨大优势引脚数极少仅需2对差分线4个引脚即可完成双向数据通信。抗干扰能力强差分信号本身抗共模干扰能力就强。传输距离长可以借助标准的SerDes芯片驱动更长的PCB走线甚至电缆。5.2 SGMII的两种常见用法MAC与PHY直连这是最直接的用法。很多高性能SoC如一些ARM Cortex-A系列处理器和高端PHY芯片都直接提供SGMII接口。连接时要注意RX和TX的差分线要交叉对接MAC的TX接PHY的RX。通过光模块或电口模块连接在一些网络设备如交换机、路由器中SGMII常被用作MAC与一个独立的光模块SFP或千兆电口模块之间的接口。模块内部会完成光电转换或信号调理。与SerDes的关联SGMII物理层通常采用LVDS电平标准其实现依赖于SerDes硬核。在FPGA中我们需要调用专用的高速收发器如Xilinx的GTX/GTH Intel的Transceiver来对接SGMII。配置这些收发器时需要正确设置线速率1.25Gbps、参考时钟、以及SGMII特定的编码模式通常是8B/10B。6. 实战中的接口选择与调试心法了解了这几种接口在实际项目中该如何选择和调试呢6.1 选型决策矩阵接口类型典型速率引脚数量约时钟特点应用场景复杂度MII10/100M16独立TX/RX时钟25/2.5MHz老旧系统兼容FPGA学习原型低RMII10/100M9共用50MHz REF_CLK引脚紧张的MCU低成本百兆设备中RGMII10/100/1000M14125MHz DDR时钟主流千兆设备路由器NAS高需处理时钟延迟SGMII1000M/2.5G/...4 (差分对)嵌入式时钟SerDes高速背板互联多端口交换机长距离板级连接很高需SerDes硬核选择原则先定速率需要千兆吗如果百兆足够RMII是性价比最高的选择。再看资源主控芯片引脚是否富裕如果紧张RMII或SGMII是方向。最后看能力团队是否有高速数字电路或SerDes的调试经验如果没有RGMII可能比SGMII更友好至少有示波器可以抓并行信号。6.2 调试流程与常见问题排查当网络不通时可以按照以下层次排查电源与复位最基础也最容易被忽视。测量PHY芯片的模拟、数字电源是否稳定复位信号时序是否符合数据手册要求通常要求稳定后延迟几十毫秒再初始化。时钟与晶振对于RMII用示波器测量REF_CLK是否有50MHz幅度是否正常。对于RGMII测量GTX_CLK/RX_CLK是否有125MHz并观察其与数据的相对时序。测量PHY的晶振引脚是否起振。管理接口MDIO/MDC这是软件驱动与PHY通信的通道。用逻辑分析仪抓取MDIO波形确认能否正确读取PHY的ID寄存器寄存器2。读不到ID说明硬件连接或初始化序列有问题。数据接口静态电平在不发送数据时测量TXD、TX_EN等输出引脚的电平是否符合预期通常为高或低不应是中间值或浮空。链路协商通过MDIO读取PHY的状态寄存器寄存器1确认是否已成功与对端设备如电脑、交换机完成“自协商”Auto-Negotiation并协商到了正确的速率和双工模式。数据包抓取如果以上都正常可以尝试让MAC发送一个固定的数据包如ARP请求同时用示波器或逻辑分析仪在数据接口上抓取波形。对照MII/RMII/RGMII的时序图看数据、使能、时钟信号是否完全符合规范。对于SGMII则需要能解码1.25Gbps高速差分信号的设备难度较大通常先确保链路协商成功。一个关于“.mii文件”的冷知识在搜索热词里看到了“.mii文件”这通常与任天堂Wii游戏机的虚拟人物“Mii”头像存档有关和以太网MII接口毫无关系。这也提醒我们在搜索技术问题时关键词要尽量准确比如搜索“MII interface ethernet”会比单纯搜“MII”有效得多。在我多年的硬件开发生涯里以太网接口调试算是“痛并快乐着”的典型。快乐在于一旦调通那种稳定性是无可比拟的痛在于初期排查可能毫无头绪。我的经验是三分靠原理七分靠测量。不要完全相信软件打印的日志很多时候问题就出在硬件时序那几纳秒的偏差上。手边备一台带宽足够的示波器学会用它测量时钟质量和建立保持时间是解决这类问题的终极武器。对于RGMII和SGMII严格按照芯片手册的PCB布局布线建议来做能帮你避开90%的硬件坑比如阻抗控制、参考平面、等长要求等这些前期工作的重要性怎么强调都不为过。