1. MDIO 协议概述:历史、标准与实战价值
大家好,欢迎来到这门课。今天咱们聊 MDIO——Management Data Input/Output。很多工程师干了三五年,还在拿示波器抓 MDIO 波形,其实这协议说穿了并不复杂。我个人习惯把 MDIO 叫做「串行接口里的老江湖」,因为它从 90 年代活到现在,几乎每一颗以太网 PHY 都在用它。
你会问:现在都 PCIe、USB4 了,为什么还要学 MDIO?嗯,答案就藏在 D-PHY 里。MIPI D-PHY 的很多控制寄存器,恰好借用了 MDIO 的访问框架。你不懂 MDIO,就没法真正调通 D-PHY 的初始化。下面我先带你梳理一遍 MDIO 的家底。
1.1 MDIO 的历史:从 MII 到 Clause 22
MDIO 最早出现在 IEEE 802.3u(快速以太网)标准里,时间是 1995 年。那时候大家发现,PHY 芯片的配置太乱了——速率、双工模式、自动协商,全靠引脚电平硬拉。我刚开始做交换机时,遇到过一块 PHY 必须用 10kΩ 上拉才能进百兆模式,另一块却要求 4.7kΩ 下拉,简直疼到骨子里。
于是 IEEE 802.3 工作组搞了个 MII(Media Independent Interface) 管理接口。它只有两根信号线:
- MDC —— 管理时钟,由 MAC 侧提供,最高频率 2.5 MHz(后来可以更高)。
- MDIO —— 管理数据,双向,三态输出,每次传输 16 位数据。
这就是后来被称为 Clause 22 的 MDIO 协议。它的帧结构很简单,固定 64 个时钟周期,读/写都能搞定。我当时第一次用 FPGA 搭 MDIO 控制器,看完时序图就一个感觉:这玩意儿比 I²C 还简单。
| 帧段 | 位宽 | 说明 |
|---|---|---|
| PREAMBLE | 32 | 全 1,同步用,读操作必须保持 |
| ST | 2 | 起始码,Clause 22 固定 01 |
| OP | 2 | 操作码:10=读,01=写 |
| PHYAD | 5 | PHY 设备地址,支持最多 32 个 |
| REGAD | 5 | 寄存器地址,共 32 个寄存器 |
| TA | 2 | 转向时间:读时为 Z0,写时为 10 |
| DATA | 16 | 读/写数据 |
1.2 IEEE 802.3 标准变迁:Clause 22 → Clause 45
到了千兆以太网时代,32 个寄存器显然不够用了。2002 年,IEEE 802.3ae(10GbE)推出了 Clause 45,也叫 MDIO 增强版。最大区别是:
- 寄存器地址从 5 位扩展为 16 位(但实际用 5+11 分两级)。
- 支持多设备寻址——同一个 PHY 地址下可以有多个器件(比如激光器、CDR)。
- 帧结构不同:ST 码变为 00,OP 码含义也变了。
我记得有一次调试 10G 光模块,PHY 死活不响应 Clause 22 读命令,最后才发现它是 Clause 45 器件。嗯,这两个标准不向前兼容——你拿 Clause 22 的主机去读 Clause 45 的 PHY,它根本不搭理你。
| 特性 | Clause 22 | Clause 45 |
|---|---|---|
| 寄存器数量 | 32(0x00~0x1F) | 65536(但常用两级寻址) |
| ST 码 | 01 | 00 |
| OP 码(写/读) | 01/10 | 00/11(还有特殊地址) |
| PHYAD 宽度 | 5 bit | 5 bit(但可以级联多个器件) |
| 典型场景 | 百兆/千兆 PHY | 10G+ PHY、光模块 |
1.3 MDIO 在 PHY 管理中的应用场景
说回实战。MDIO 的核心价值就是:用两根线完成 PHY 的初始化和状态监控。你可以用它做:
- 配置工作模式 —— 强制百兆全双工,关掉自动协商。
- 读取链路状态 —— 有没有 Link Up?远端有没有协商出流控?
- 调试信号完整性 —— 很多 PHY 提供内部的眼图统计值,通过 MDIO 读出。
- 升级固件 —— 部分 PHY 支持在运行中通过 MDIO 写 Flash。
你想想看,如果不用 MDIO,你只能靠 GPIO 电平组合来配置 PHY——那画面太美,我不敢看。曾经有个项目,因为板子空间紧张,硬是把 PHY 的配置引脚用电阻拉死了,结果换了不同批次的 PHY 就出问题,最后乖乖改成 MDIO 动态配置。
1.4 MDIO 与 D-PHY 的联系
好,到这里你可能觉得:MDIO 不是以太网的东西吗,跟 D-PHY 有什么关系?
MIPI D-PHY 规范里定义了一个 CCI(Camera Control Interface),它本质上就是 MDIO 的变体——同样的 MDC/MDIO 物理层,同样的帧结构,只是寄存器地址映射换成了 D-PHY 特定的寄存器。也就是说,你学会了 MDIO,就等于学会了 D-PHY 的寄存器访问框架。
1.5 本章知识图谱
下面这张图把 MDIO 在 PHY 管理中的位置说清楚了。你注意看,STA(Station Management Entity)通常是 MAC 侧或 SoC 的主控,它通过 MDC/MDIO 两根线挂载多个 PHY 设备,每个 PHY 内部又有一组寄存器。咱们后面要做的 D-PHY 寄存器访问,最底层用的就是这个拓扑。
1.6 小结
这一章我们捋清了 MDIO 的来龙去脉:从 Clause 22 的 32 寄存器时代,到 Clause 45 的扩展寻址,再到它在 PHY 管理中的核心地位。你知道了 MDC/MDIO 的帧格式,也看到了它和 D-PHY 寄存器访问的关系——说白了,它就是一把螺丝刀,后面我们要用它拧 D-PHY 的寄存器螺丝。