第1章:MII接口概述——以太网MAC与PHY的“翻译官”
做硬件这么多年,我碰到最多的新手问题就是:“MAC和PHY到底怎么连?”
其实,MII(Media Independent Interface)就是它们之间的通用桥梁。你想想看,MAC是数字逻辑,PHY是模拟/混合信号,一个管协议,一个管物理介质。要让它俩顺畅对话,就得有MII这样的标准接口。
1.1 MII接口到底长什么样?
标准MII接口有16条信号线。说白了,就是两组数据通道加上管理控制线。我个人喜欢把它拆成三部分来看:
- 发送通道(TX):MAC发给PHY的数据通路
- 接收通道(RX):PHY接收到数据后送给MAC
- 管理接口(MDIO/MDC):用来配置PHY寄存器、读取状态
我在一个百兆交换机项目里遇到过这样的情况:PHY和MAC都支持MII,但信号线定义搞反了——TX_EN接到了RXER上。调试了整整两天才发现,从那以后我画原理图必对MII信号定义表。
1.2 信号线详解
| 信号名 | 方向 | 功能说明 |
|---|---|---|
| TX_CLK | PHY→MAC | 发送时钟,100M时25MHz,10M时2.5MHz |
| TXD[3:0] | MAC→PHY | 4位并行发送数据 |
| TX_EN | MAC→PHY | 发送使能,表明数据有效 |
| TX_ER | MAC→PHY | 发送错误标志(可选,很多设计不用) |
| RX_CLK | PHY→MAC | 接收时钟,频率同TX_CLK |
| RXD[3:0] | PHY→MAC | 4位并行接收数据 |
| RX_DV | PHY→MAC | 接收数据有效 |
| RX_ER | PHY→MAC | 接收错误指示 |
| CRS | PHY→MAC | 载波检测(半双工用,全双工通常不接) |
| COL | PHY→MAC | 冲突检测(半双工用,全双工基本不用) |
| MDC | MAC→PHY | 管理接口时钟,频率一般不超过2.5MHz |
| MDIO | 双向 | 管理数据线,用于读写PHY寄存器 |
设计小技巧:如果你做全双工设计(现在99%场景都是),CRS和COL可以不接。我习惯在FPGA里把它们直接拉低,省两个引脚。不过,做Ethernet一致性测试时,有些测试设备会检查CRS,这时候保留它更省事。
1.3 时序特征——MII为什么“慢”
MII的数据位宽是4位。嗯,这里有个关键点:时钟频率和数据速率的关系。
- 100M速率:时钟25MHz,每周期传4位→ 25M × 4 = 100Mbps
- 10M速率:时钟2.5MHz,每周期传4位→ 2.5M × 4 = 10Mbps
我刚开始调MII接口时觉得奇怪:为什么不能直接用一个125MHz时钟传1位?那不是更省引脚吗?后来才明白,早期PCB工艺和FPGA I/O速度有限,4位并行方式在90年代是平衡成本和性能的最佳选择。
注意时序关系:MII的发送和接收有各自独立的时钟域。这意味着TX_CLK和RX_CLK可能不同频、不同相。FPGA设计时必须做跨时钟域处理。我曾经吃过这个亏——直接用一个时钟域采样另一个时钟域的数据,结果跑到100M时偶尔丢包,排查了一周才发现是亚稳态问题。
1.4 应用场景——什么时候选MII?
说实话,现在新设计用MII的越来越少。但如果你遇到以下场景,还得上MII:
- 老旧芯片兼容:很多工业级PHY(如DP83848、LAN8720)仍提供MII接口
- FPGA管脚够多但资源紧张:MII不需要时钟恢复,逻辑比RMII简单
- 做教学或验证:MII信号直观,初学者容易理解MAC与PHY的交互
- 特殊速率需求:有些非标速率(比如25M、50M)用MII调整更方便
我在一个工业控制器的设计里用过MII——主控是老旧ARM9,PHY只支持MII。当时也想过转接,但转接芯片成本高还引入延迟,不如直接用MII。这个项目跑了5年没出过问题。
1.5 核心知识框架
下面这张图是我梳理的MII接口核心知识点。你看,它涉及三大部分:信号定义、时钟关系、实战用法。
1.6 避坑指南
做MII设计这些年,我踩过不少坑。挑几个典型的分享给你:
- 信号顺序搞反:TXD[3:0]和RXD[3:0]的位顺序,不同PHY厂商定义可能相反。我建议原理图做好后,先看一遍PHY的数据手册确认。
- 时钟抖动敏感:MII对TX_CLK和RX_CLK的抖动要求其实挺严。我曾经用一个廉价的晶振给PHY提供时钟,结果在100M下数据一直出错。换成有源晶振后问题消失。
- MDIO上拉电阻:MDIO是开漏输出,必须在外部接上拉电阻(通常1.5kΩ~10kΩ)。忘了接的话,PHY寄存器读回来全是0xFF。
- PCB走线长度:MII的16根信号线最好等长布线,尤其是时钟和数据线。我在一个4层板上没注意等长,导致100M速率下时序裕量只剩30ps,几乎踩线。
一句话总结MII:它是MAC和PHY之间最经典的“直连”接口。虽然引脚多、速率有限,但简单可靠,特别适合FPGA逻辑设计和学习入门。如果你刚开始接触以太网,从MII入手能帮你建立扎实的底层认识。