第一次接触MII接口时,我被那18根信号线搞得头晕眼花。直到在真实项目中调试MAC-to-PHY连接失败,才真正理解每个信号背后的设计哲学。MII就像网络设备的普通话,让MAC层和PHY层能跨厂商无障碍沟通。
这个接口最巧妙之处在于它的介质无关性。无论底层是双绞线、光纤还是同轴电缆,只要PHY芯片支持MII标准,上层MAC芯片就能通用。实际布线时,发送通道的TX-CLK就像乐队的指挥棒,所有发送信号(TXD[3:0]、TX-EN、TX-ER)都必须严格跟随它的节奏。我曾在PCB布局时把TX-CLK走线布得比其他信号长15mm,结果导致时序错乱,PHY根本识别不出有效数据。
接收通道的玄机在于时钟恢复。PHY芯片从物理介质上恢复出的RX-CLK,就像考古学家修复文物时的参考坐标系。有次测试发现RXD数据偶尔错位,最后发现是RX_CLK走线邻近开关电源,时钟边沿被噪声干扰得崎岖不平。这个教训让我养成了给时钟信号预留π型滤波电路的习惯。
TX-CLK的25MHz时钟看似简单,但实际设计时要考虑时钟抖动不能超过±100ps。某次选用劣质晶振,实测抖动达到180ps,导致千兆交换机在高温环境下出现误码。发送使能TX-EN就像舞台灯光,它亮起时TXD[3:0]上的数据才有意义。这里有个容易踩的坑:TX-EN需要在TX-CLK上升沿前至少5ns就保持稳定。
发送错误TX-ER信号常被忽视,但在工业环境中至关重要。当检测到曼彻斯特编码错误时,MAC通过TX-ER通知PHY主动制造传输错误。我在自动化工厂项目中就靠这个功能,让PLC能快速识别受电磁干扰的异常帧。
RXD[3:0]的稳定窗口要求最严苛。根据IEEE802.3标准,在RX_CLK上升沿前后各需保持2ns稳定。曾有个案例:某网卡RXD信号在眼图测试时完全达标,但实际使用却频繁丢包。最后发现是PHY芯片的输入电容偏大,导致信号边沿变缓,通过串联33Ω电阻才解决问题。
RX_DV和RX_ER的配合也暗藏玄机。当PHY检测到前导码中的错误时,会在RX_DV有效前就拉高RX_ER。这个细节在交换机芯片的MII接口调试时特别有用,能帮助定位物理层故障。
在半双工模式下,COL和CRS信号就是网络交警。设计冲突检测电路时,我习惯用74LVC1G08与门芯片处理COL信号。有个经典设计技巧:将两个MAC的TX_EN通过10kΩ电阻上拉后接入与门,能避免信号竞争导致的毛刺。
CRS信号生成更考验设计功力。某企业级路由器项目要求CRS在载波出现后50ns内生效,我们采用SN74LVC2G32或门芯片并联100pF加速电容的方案,最终将响应时间压缩到45ns。这里要注意:CRS信号必须持续到帧间隙结束,过早撤销会导致MAC层误判。
全双工模式省去了冲突检测的烦恼,但带来了新的设计挑战。在MAC-to-MAC直连时,我推荐图6的极简接法:将本端TX_EN直接作为对端CRS。有个容易忽略的细节:此时COL引脚必须接地,否则某些MAC芯片会误入半双工模式。
高速设计时,TXD和RXD的交叉连接要走等长线。某次设计千兆级联交换机,由于两组数据线长度差达到8mm,导致吞吐量下降30%。后来采用蛇形走线补偿,将长度差控制在1mm内才解决问题。
MDC/MDIO这对管理接口常被当作"二等公民",但它的稳定性直接影响PHY寄存器配置。实测表明,当MDC频率超过2.5MHz时,必须采用源端串联匹配。我常用的配置是22Ω电阻+3.3pF电容组成T型滤波器,能有效抑制振铃。
MDIO线的上下拉电阻选择也有讲究。某次采用4.7kΩ上拉导致PHY地址识别错误,后来改用1kΩ才稳定。这里有个经验公式:上拉电阻值应小于(总线电容×上升时间)/0.8,通常1-2.2kΩ是最佳选择。
MII接口的PCB设计就像在跳方格舞。第一条规则:时钟线要比数据线长,但差值控制在5mm内。某四层板设计中,我将TX-CLK走在内层,外层用接地铜皮包裹,使时钟抖动降低40%。
电源去耦更是重中之重。每个MII接口电源引脚需要至少两个电容:10μF钽电容处理低频噪声,0.1μF陶瓷电容应对高频干扰。有次整改EMI测试失败,就是在PHY芯片的3.3V电源脚补了1个1μF电容才通过。