1. MDC/MDIO 接口概述

1.1 什么是 MDC/MDIO?

说白了,MDC 就是一根时钟线,MDIO 是一根数据线。它们俩组成了一个最简单的两线串行管理接口,专门用来“遥控”以太网 PHY 芯片的内部寄存器。

我个人习惯把这个接口想象成一个小型的 I²C,但协议更简单:

  • MDC(Management Data Clock) —— 由 MAC 侧或 CPU 侧提供,频率最高到 12.5 MHz(实际常用 2.5 MHz,因为很多旧 PHY 扛不住太快)。
  • MDIO(Management Data Input/Output) —— 双向半双工数据线。写操作时 MAC 控制数据,读操作时 PHY 在第 2 个“转向时钟”后驱动数据。

我记得刚入行那会儿,把 MDC 和 MDIO 当成普通 GPIO 去拉,结果死活读不回 PHY 的 ID 寄存器。后来才发现,MDIO 帧有严格的起始码、操作码、PHY ADDR、REG ADDR、TA 周期,一个时序不对,PHY 就罢工。

一个标准的 MDIO 帧长 64 个时钟周期(读)或 64 个(写),结构如下:

帧格式(读操作):
| PRE(32) | ST(2) | OP(2) | PHY_ADDR(5) | REG_ADDR(5) | TA(2) | DATA(16) |
PRE: 全1,连续32个“1”
ST : 01
OP : 10(读)/ 01(写)
TA : 前1位高阻,后1位PHY拉低(读时)

嗯,这里要注意:TA 周期的第一个时钟,对读操作来说是“转向时间”,MDIO 线由 MAC 释放为高阻,PHY 必须在那之后才能驱动。很多国产 PHY 在这个时序上卡得比较紧,我曾经碰到过换上某款国产芯片后读数据总错位,最后不得不在 FPGA 里把 TA 周期延长了半个时钟才稳定。

1.2 应用场景:以太网 PHY 管理

MDC/MDIO 几乎出现在所有需要配置或监控以太网 PHY 的场合。你想想看,从家用路由器到工业交换机,再到汽车里的车载以太网,都有它的影子。

  • 速率协商:通过 MDIO 写 PHY 的 AN 寄存器,让 PHY 自动协商 10/100/1000M 和双工模式。
  • 链路状态监测:读 Status 寄存器(地址 1)的第 2 位,判断 Link 是否 Up。
  • 故障排查:读 PHY 的 Specific Status 寄存器,获取 CRC 错误、码型错误、极性翻转等细节。
  • 低功耗模式:通过 MDIO 写 Power Down 位来让 PHY 休眠。
  • 环回测试:置位 PHY 的 Loopback 位,验证数据通路。

我在项目中遇到过最典型的一次:某款 4 端口交换芯片,一上电只有 2 个口能 Link 上,另外 2 个死活不行。后来拿示波器抓 MDC/MDIO 波形,发现在复位后 CPU 没有等 PHY 初始化完成就去写寄存器,写了也白写。加了一个 50ms 延时,问题立刻消失。

实战小技巧
调试 MDC/MDIO 时,先把速率降到 500 kHz 左右,这样可以减少信号反射和振铃的影响。等通信稳定了再往上提频率。

1.3 物理层与管理层的区别

很多新手容易把这俩搞混。其实它们处在完全不同的逻辑层次:

对比项 物理层(PHY 核心) 管理层(MDC/MDIO 接口)
功能 负责模拟信号的编解码、时钟恢复、线缆驱动 负责对 PHY 内部的寄存器进行读写
信号类型 差分对(如 RX±、TX±),通常是高速模拟信号 CMOS 数字电平(MDC, MDIO)
故障表现 丢包、误码、链路不稳、眼图闭合 读回数据全 0、全 1、总线冲突、设备无应答
调试工具 示波器(高速差分探头)、误码仪、眼图仪 逻辑分析仪、普通示波器、MDIO 总线抓拍

说白了,物理层管的是“能不能传得好”,管理层管的是“怎么配置它、怎么知道它好不好”。我经常把 PHY 芯片比作一个收音机:物理层是天线和功放电路,管理层就是收音机面板上的旋钮和指示灯。你旋钮坏了(MDIO 通信故障),并不代表收音机放不了歌(PHY 仍然能跑默认配置下的数据),但你想调台就只能靠砸机器了。

关键认知
物理层故障会导致数据噪声或中断;管理接口故障只会让你失去“遥控”能力,但 PHY 可能还在用默认配置继续工作。所以排查时一定要先分清:是 PHY 不能正常传数据,还是你没法读到它内部状态?
注意
不要以为 MDIO 读到一个全 0 的寄存器就一定是 PHY 坏了。先把 MDC 时钟频率降低,再用逻辑分析仪抓一下帧格式是否合规。我踩过坑:某款 PHY 的 datasheet 说 MDIO 默认上拉,实际板上没加,结果读回来全是 0,折腾了两天才发现。

1.4 本章知识体系概览

下面的 SVG 展示了 MDC/MDIO 在整个以太网系统中的位置,以及它如何把 MAC 侧、管理总线、PHY 寄存器、物理介质串在一起。

MDC/MDIO 接口在以太网系统中的位置 MAC / CPU (管理实体) MDC/MDIO 总线 时钟线 + 数据线 PHY 芯片 (寄存器组) 物理介质 双绞线 / 光纤 / 同轴 模拟信号 管理层 数字寄存器读写 配置、监控、诊断 物理层 模拟编解码、时钟恢复 信号质量、眼图