一、MII接口概述

MII,全称 Media Independent Interface,中文叫介质无关接口。说白了,它就是连接 MAC(媒体访问控制器)和 PHY(物理层芯片)之间的标准数字总线。我最早接触 MII 是在做一款百兆交换机项目的时候,那时候看到一大堆信号线,心里直犯嘀咕——这玩意儿到底怎么工作的?后来调通了,才明白它其实没那么复杂。

MII 的使命很单纯:让 MAC 和 PHY 能互相说话,而且不管底下用的是双绞线、光纤还是其他介质,对 MAC 来说都一样。这就是“介质无关”四个字的含义。

1.1 MII 的定义与核心定位

MII 是 IEEE 802.3 标准中定义的一种并行接口,用于连接 MAC 子层和 PHY 子层。它工作在 10/100 Mbps 速率下,数据总线宽度为 4 位(半字节),时钟频率分别为 2.5 MHz(10 Mbps)和 25 MHz(100 Mbps)。

你可以把它想象成一组约定好的信号协议——发送方怎么送数据,接收方怎么采样,控制信号怎么握手,全都规定得清清楚楚。MAC 通过 MII 向 PHY 发送要传输的数据帧,PHY 则通过 MII 把从线路上收到的数据帧交给 MAC。

核心要点:MII 解耦了 MAC 与物理介质。MAC 不用关心外面接的是 RJ45 还是 SFP,它只管通过 MII 把数据扔给 PHY,剩下的事 PHY 去搞定。

1.2 MII 的应用场景

MII 出现在哪些地方?我列几个最常见的:

  • 嵌入式处理器:很多 ARM、RISC-V 或 x86 的 SoC 内部集成了 MAC,通过 MII 接口外接 PHY 芯片。
  • 交换机芯片:传统百兆交换机的 MAC 侧几乎清一色用 MII 接 PHY。
  • FPGA 设计:在 FPGA 里实现 MAC 逻辑,通过 MII 连接板级 PHY,这是原型验证和通信板卡的常见做法。
  • 工业通信:很多工控设备、PLC、工业以太网节点依然在用 MII,因为它稳定、成熟、调试方便。

我记得有一次帮客户调试一块 FPGA 板卡,PHY 用的是 KSZ8081,MAC 写在 FPGA 里。一开始数据传不过去,用示波器一抓 MII 时钟和数据线,发现 TX_CLK 根本没起振——原来是 FPGA 里 MII 时钟方向配反了。嗯,这种坑踩过一次就不会再犯了。

1.3 MII 的历史发展

MII 最早出现在 IEEE 802.3u 标准中,那是在 1995 年。当时 10 Mbps 以太网已经普及,100 Mbps 快速以太网刚出来,需要一种统一的 MAC-PHY 接口。MII 就是那个时代的产物。

后来速率越来越高,MII 的 4 位并行总线在 100 Mbps 时已经跑到 25 MHz,再往上就撑不住了。于是陆续出现了 RMII(精简 MII,2 位数据线)、GMII(千兆 MII,8 位数据线)、RGMII(精简千兆 MII)等变种。但 MII 作为鼻祖,至今仍在百兆场景中大量使用。

接口 数据位宽 时钟频率 最大速率 诞生年代
MII 4 bit 2.5 / 25 MHz 100 Mbps 1995
RMII 2 bit 50 MHz 100 Mbps 2000
GMII 8 bit 125 MHz 1000 Mbps 1998
RGMII 4 bit (DDR) 125 MHz 1000 Mbps 2005
实用技巧:如果你在做新项目,建议优先选 RMII 或 RGMII,因为它们引脚少、布线方便。但如果你需要精确控制时序,MII 的并行结构反而更直观,调试起来更容易用逻辑分析仪抓到问题。

1.4 MII 与 MAC/PHY 的关系

MII 是 MAC 和 PHY 之间的桥梁,但这三者到底是什么关系?我用一个简单的结构图来说明。

MII 接口在系统中的位置 MAC 媒体访问控制器 (集成在 SoC / FPGA) MII 介质无关接口 TX/RX 数据 + 控制 + 时钟 PHY 物理层芯片 (RJ45 / SFP / 变压器) 信号分组概览 • TX_CLK, TXD[3:0], TX_EN, TX_ER — 发送方向(MAC → PHY) • RX_CLK, RXD[3:0], RX_DV, RX_ER — 接收方向(PHY → MAC) • CRS, COL — 载波侦听与冲突检测(半双工模式) MII 是 MAC 与 PHY 之间的数字通信桥梁,数据与时钟并行传输

看上图就清楚了:左侧是 MAC,右侧是 PHY,中间是 MII。MAC 通过 MII 发送 TX 数据给 PHY,PHY 通过 MII 返回 RX 数据给 MAC。控制信号和时钟都在这个接口上走。

我个人习惯把 MII 理解为一种“数据管道契约”——MAC 和 PHY 各自遵守这个契约,就能在不确定物理介质的情况下正常通信。PHY 负责把数字信号变成线路上的模拟信号(比如双绞线上的差分电平),MAC 则负责组帧、解帧、流量控制这些协议层面的工作。MII 在中间做数字传输,两边各司其职。

重要警告:MII 接口的工作电压通常是 3.3V 或 2.5V,不同 PHY 可能有差异。我曾经在一次设计中直接用 3.3V 的 FPGA 去接 1.8V 的 PHY,结果烧掉了 PHY 的 MII 引脚。嗯,从那以后我养成了一个习惯——每次画原理图前,先确认 PHY 的 I/O 电压,再配电平转换或选兼容的 FPGA Bank。

1.5 为什么还要学 MII?

你可能会问:现在都千兆万兆了,学 MII 这种百兆老接口还有用吗?我个人觉得,非常有用。原因有三:

  1. 基础原型:MII 的时序结构是所有 MII 系列接口(RMII、GMII、RGMII)的祖宗。你把 MII 的时钟-数据对齐关系搞明白,其他接口一看就懂。
  2. 调试门槛低:MII 是并行总线,用逻辑分析仪抓波形非常直观。不像 RGMII 要用 DDR 采样,抓错了都不知道。我调试新板子的时候,经常先用 MII 模式把链路调通,再切到高速模式。
  3. 存量设备多:工业控制、物联网网关、存量交换机里大量 MII 设备还在运行。你掌握了,出去修设备、做维护就多一份底气。
我的建议:别嫌 MII 老,它是最干净的时序教材。把这章吃透,后面讲 RMII 的 50 MHz 双倍数据率、RGMII 的 DDR 对齐,你会有一种“原来如此”的感觉。