一、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。
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 |
1.4 MII 与 MAC/PHY 的关系
MII 是 MAC 和 PHY 之间的桥梁,但这三者到底是什么关系?我用一个简单的结构图来说明。
看上图就清楚了:左侧是 MAC,右侧是 PHY,中间是 MII。MAC 通过 MII 发送 TX 数据给 PHY,PHY 通过 MII 返回 RX 数据给 MAC。控制信号和时钟都在这个接口上走。
我个人习惯把 MII 理解为一种“数据管道契约”——MAC 和 PHY 各自遵守这个契约,就能在不确定物理介质的情况下正常通信。PHY 负责把数字信号变成线路上的模拟信号(比如双绞线上的差分电平),MAC 则负责组帧、解帧、流量控制这些协议层面的工作。MII 在中间做数字传输,两边各司其职。
1.5 为什么还要学 MII?
你可能会问:现在都千兆万兆了,学 MII 这种百兆老接口还有用吗?我个人觉得,非常有用。原因有三:
- 基础原型:MII 的时序结构是所有 MII 系列接口(RMII、GMII、RGMII)的祖宗。你把 MII 的时钟-数据对齐关系搞明白,其他接口一看就懂。
- 调试门槛低:MII 是并行总线,用逻辑分析仪抓波形非常直观。不像 RGMII 要用 DDR 采样,抓错了都不知道。我调试新板子的时候,经常先用 MII 模式把链路调通,再切到高速模式。
- 存量设备多:工业控制、物联网网关、存量交换机里大量 MII 设备还在运行。你掌握了,出去修设备、做维护就多一份底气。