第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:

  1. 老旧芯片兼容:很多工业级PHY(如DP83848、LAN8720)仍提供MII接口
  2. FPGA管脚够多但资源紧张:MII不需要时钟恢复,逻辑比RMII简单
  3. 做教学或验证:MII信号直观,初学者容易理解MAC与PHY的交互
  4. 特殊速率需求:有些非标速率(比如25M、50M)用MII调整更方便

我在一个工业控制器的设计里用过MII——主控是老旧ARM9,PHY只支持MII。当时也想过转接,但转接芯片成本高还引入延迟,不如直接用MII。这个项目跑了5年没出过问题。

1.5 核心知识框架

下面这张图是我梳理的MII接口核心知识点。你看,它涉及三大部分:信号定义、时钟关系、实战用法。

MII接口核心知识体系 信号定义 时钟与速率 应用实践 发送通道TX 接收通道RX 独立时钟域 4位并行 PCB布局 调试 MII核心特征总结 关键理解点 • 16条信号线,分为TX、RX、管理三组 • 100M速率时钟25MHz,10M速率2.5MHz • TX和RX是独立时钟域,需做跨时钟处理

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入手能帮你建立扎实的底层认识。