MDC MDIO 电气特性与标准

说到 MDC 和 MDIO 的电气特性,很多工程师第一反应就是“查手册”。我个人习惯是先看电压域,再看驱动能力,最后对阈值。顺序反了容易出问题。你想想看,电平都不对,后面测再多波形也白搭。

2.1 电压电平:3.3V 与 1.8V 之争

咱们先解决最直接的问题:MDC/MDIO 到底用 3.3V 还是 1.8V?

IEEE 802.3 规范并没有强制规定单一电压。它只要求信号满足特定的逻辑阈值和驱动强度。说白了,你用 3.3V 或者 1.8V 都可以。但实际项目中,我见过太多因为电平不匹配导致的“幽灵故障”——信号有,通信就是偶尔报错。

为什么会有两种主流电压?简单说:

  • 3.3V:老器件、传统 PHY 的标配。噪声容限大,抗干扰好。适合较长走线(>10 cm)。
  • 1.8V:低压工艺芯片的偏好。功耗低,但噪声容限也小。走线稍长就容易出眼图闭合。
注意: 3.3V PHY 和 1.8V MAC 混接时,必须加电平转换。直接连会烧 IO 或者读错数据。我曾在开发板上偷懒没加电平转换,结果 PHY 寄存器读出来全是乱码——折腾了两天才发现是电压不匹配。

这里有一个实用判断:如果你的板子上 MAC 是 1.8V,而 PHY 是 3.3V,别指望通过上下拉电阻分压解决问题。用专用的双电源电平转换芯片(比如 TXB0104)最稳。

2.2 输出驱动能力——别小看这几十毫安

驱动能力是指 IO 端口能提供的最大电流。MDC 和 MDIO 的驱动能力直接影响信号上升时间和信号完整性。

IEEE 802.3 要求输出驱动至少能提供:

  • MDC:最小 4 mA(3.3V 时)
  • MDIO:最小 4 mA(双向,开漏结构)

但这只是最低要求。实际设计中,驱动能力不足会导致:

常见症状:

  • MDIO 上升沿变缓 ↔ 时序余量不足
  • 挂多个从设备时信号塌陷
  • 偶发读写失败(特别是高负载)

我自己的经验是:把驱动能力设置为 8~12 mA 会比较安全。很多芯片的 IO 驱动是可编程的,比如 STM32 的 GPIO 可以配置驱动强度。不建议用默认值,至少设置到中等档位。

举个例子,我调试过一块板子,MDIO 挂了 4 个 PHY,波形一开始还能看,等到焊接温度变化后,驱动不足导致最后一颗 PHY 经常读不到 ID。后来把驱动强度从 4 mA 提到 8 mA,问题消失。嗯,就是差那么几毫安。

2.3 输入阈值——高低电平的判断门槛

输入阈值决定了接收端认为“0”和“1”的电压范围。IEEE 802.3 给出了如下典型值:

参数 3.3V 域 1.8V 域
VIH(高电平输入阈值) min 2.0 V min 1.17 V
VIL(低电平输入阈值) max 0.8 V max 0.63 V
噪声容限(VOH - VIH) 约 0.8 V 约 0.3 V

看到没有?1.8V 域的噪声容限只有 0.3V 左右。这就意味着你对信号完整性的要求要比 3.3V 苛刻得多。

避坑指南: 我曾经遇到一个案例,PHY 的 MDIO 引脚输入阈值手册上写的是 1.17V,但实际由于 PCB 走线耦合噪声,MDIO 线上的纹波达到了 200 mV pp。这在 3.3V 系统里完全没问题,但在 1.8V 系统里直接导致阈值抖动,读写失败。后来加了一个 10 pF 电容滤波搞定。

2.4 IEEE 802.3 规范摘录与解读

规范里关于电气特性的核心条款集中在 第 22 条(MII) 和 第 45 条(MDIO 管理接口)。我挑几个必须知道的点:

  1. MDC 频率:最高 2.5 MHz(也有提到 12.5 MHz 用于增强型)。频率越高,对驱动和阈值要求越严。
  2. MDIO 上拉电阻:必须在上游端接一个上拉电阻(典型 1.5 kΩ ~ 10 kΩ,取决于电压和负载)。规范要求开漏输出。
  3. 时序要求:MDC 高电平和低电平最小宽度 160 ns(2.5 MHz 时)。

小技巧: 检查你的 MDC/MDIO 实际波形时,用示波器测量上升时间(10%~90%)应小于 0.4×信号周期。如果上升沿太缓,可能是驱动不足或容性负载太大。

2.5 实际调试中的避坑清单

最后列一份我在现场常用来快速排查电气问题的清单:

  • ☐ 确认 MAC 和 PHY 的工作电压相同(或已加电平转换)。
  • ☐ 检查 MDIO 上拉电阻是否接对(通常接至 VDDIO)。
  • ☐ 用示波器测 MDC/MDIO 信号幅度:3.3V 域应在 3.0V 以上;1.8V 域应在 1.6V 以上。
  • ☐ 测 MDIO 低电平是否接近 0V(开漏输出低时不能超过 0.4V)。
  • ☐ 检查负载数量:一个 MAC 最多建议挂 32 个 PHY,但实际挂超过 8 个就要考虑加 buffer。
  • ☐ 如果读数据偶尔失败,尝试降低 MDC 频率到 1 MHz 以排除 Timing 问题。

还记得我说过的那次 1.8V 系统纹波问题吗?就是靠清单里的第三项——“测信号幅度”——发现的。幅度不够,再查驱动和阈值,问题基本能定位。

MDC MDIO 电气特性知识体系 IEEE 802.3 规范 电压电平 3.3V / 1.8V 输出驱动能力 ≥ 4 mA 输入阈值 VIH / VIL 电平匹配 / 噪声容限 (混接导致乱码) 上升时间 / 负载能力 (驱动不足波形塌) 阈值抖动 / 纹波敏感 (1.8V 域尤甚) 信号质量故障排查 (本章核心落地) 箭头表示“驱动关系” → 规范约束三个维度 → 维度异常导致故障

画个图帮大家理清关系:规范是根,电压电平、驱动能力、输入阈值是三个支柱,任何一个出问题都会反映到信号质量故障里。排查的时候按这个框架走,不会漏项。