3. MDIO 电气特性:电平标准、上升/下降时间、负载要求

做 MDIO 调试,很多人上来就抓波形,一看信号毛刺一大堆,就怀疑协议有问题。

其实呢,八成是电气特性没搞对。我干了十几年硬件,踩过的坑比抓到的波形还多。这一章咱们就聊清楚——MDIO 的电气层面到底该怎么玩。

3.1 电平标准:别把 1.8V 当 3.3V 用

MDIO 接口沿用了 IEEE 802.3 的规范,电平标准直接继承 MII 管理接口。说白了,它跟普通的 CMOS 电平不一样,有个明确的电压窗口要求。

关键点: MDIO 采用 3.3V CMOS 电平,但允许 5V 容忍输入(很多 PHY 芯片自带 tolerance)。
参数 最小值 典型值 最大值 单位
VIH(输入高电平) 2.0 — VDD+0.3 V
VIL(输入低电平) -0.3 — 0.8 V
VOH(输出高电平) 2.4 — VDD V
VOL(输出低电平) 0 — 0.4 V

你想想看,如果主控是 1.8V I/O,直接连 3.3V 的 PHY,那高电平根本够不着 2.0V 的门槛。我以前在一个项目里遇到过,FPGA 输出 1.8V 连到 PHY 的 MDIO,波形看起来有模有样,但读出来的寄存器全是 0xFFFF——其实就是电平不匹配,PHY 把高电平当成了不定态。后来加了电平转换芯片,问题秒解。

我的习惯: 设计阶段就确认两端 I/O 电压是否一致。不一致就用 TXS0102 或 LSF0102 这类双向电平转换器,不要图省事直接直连。

3.2 上升/下降时间:太慢毛刺多,太快有反射

MDIO 是双向开漏(实际上很多实现是推挽)?嗯,要分情况。规范的 MDC/MDIO 在时钟上升沿采样,下降沿切换。但电气上,MDIO 线通常用推挽驱动(有些旧芯片用开漏加弱上拉)。这就引出上升/下降时间的问题了。

我自己抓波形时有个原则:上升边沿不要超过 MDC 周期的 10%。举个例子,MDC 跑 2.5MHz,周期 400ns,那上升或下降时间最好控制在 40ns 以内。太慢的话,采样点处电压还没稳定,采到的值就飘了。

MDC 频率 推荐上升/下降时间(10%~90%) 典型驱动强度
2.5 MHz(标准模式) ≤ 40 ns 4~8 mA
12.5 MHz(快速模式) ≤ 8 ns 8~12 mA
50 MHz(某些厂家定制) ≤ 2 ns 12~16 mA(需端接)
注意: 我曾经调试一个 12.5MHz 的 MDIO 链路,示波器一看上升时间 20ns,算算占比已经 25% 了。结果就是每隔几十个时钟会读错一次寄存器。把驱动从 4mA 调到 8mA,上升时间压到 6ns,错误消失。

反过来,上升太快也不是好事。比如超过 1V/ns 的边沿,在长走线(>5cm)上会产生明显的反射过冲。我建议在 PHY 的 MDIO 引脚串一个 22Ω~33Ω 的电阻,能有效抑制振铃。

3.3 负载要求:点对点与多点总线,差别很大

MDIO 总线可以挂多个从设备吗?规范上说可以,但要小心。每个器件都有一个 MDIO 引脚,所有器件共享一根线。电容负载一累积,上升沿就变缓了。

IEEE 802.3 建议每个 MDIO 引脚的最大负载是 10 pF(包含 PCB 走线电容)。总线总负载不要超过 50 pF(标准模式)或 30 pF(快速模式)。

经验法则: 每多挂一个 PHY,MDC 频率要降一档。挂 3 个以上从设备时,我通常把 MDC 降到 1.25MHz。

负载估算也很简单:每个 PHY 的 MDIO 引脚输入电容约 5 pF,走线每厘米约 1 pF。你算一下板子上的走线长度,加上器件数量,就大概知道能不能跑高频了。

我记得有一次调试一块 8 口交换机的 MDIO 总线,挂了 8 个 PHY,MDC 跑 2.5MHz 时波形已经变形了。最终加了一个 74LVC1G07 缓冲器,在 PHY 侧重新驱动 MDC 和 MDIO,波形才恢复正常。

小技巧: 如果已经布好板又发现负载过重,可以在 MDIO 线上对地加一个 10pF 电容(靠近主控端),配合串联电阻构成低通滤波器,稍微牺牲边沿速度来换取信号完整性。

3.4 知识体系一张图

下面这张 SVG 总结了 MDIO 电气特性的三大核心维度,以及它们之间的关联。你可以用它快速定位问题方向。

MDIO 电气特性知识框架 MDIO 电气特性 电平标准 上升/下降时间 负载要求 Vih ≥ 2.0V, Vil ≤ 0.8V 3.3V CMOS, 5V tolerance ≤ 10% 时钟周期 2.5MHz→40ns, 12.5MHz→8ns 点对点 ≤ 50pF 多点总线 ≤ 30pF 核对清单 ① 电平匹配 ② 边沿速度 ③ 总线电容 ④ 串阻匹配

3.5 实测中的常见坑

我把这些年遇到过的电气问题列了个清单,你们调试时直接对号入座:

  • 电平漂移: 示波器量出来的高电平只有 1.8V? 八成是上拉电阻太小或者主控驱动能力不够。我一般用 1.5kΩ~4.7kΩ 上拉到 3.3V。
  • 振铃过冲: 波形顶部有明显的尖峰?在 MDIO 串个 22Ω 电阻,或者降低驱动强度。
  • 毛刺误触发: 如果 MDIO 线上有间距很窄的脉冲(宽度<几纳秒),可能是回流路径不好。加一个 100pF 电容到地,但注意别把信号边沿搞太缓。
  • 负载不够: 挂一个 PHY 时波形正常,挂两个就崩了?检查总线电容,可能需要降低 MDC 或加缓冲。
我曾经踩过的一个坑: 某项目用了一款低功耗 PHY,它的 MDIO 引脚内部没有 5V 容忍,而我主控是 5V 的。结果第一次上电就把 PHY 烧了,换了三片才想到量电压。从那之后,凡是新芯片,必定先看 datasheet 的 DC 特性表,确认 VIH max。

好了,电气层面的东西就这么多。抓波形之前把上面几点过一遍,能省下大量定位时间。