3. MDIO 电气特性:电平标准、上升/下降时间、负载要求
做 MDIO 调试,很多人上来就抓波形,一看信号毛刺一大堆,就怀疑协议有问题。
其实呢,八成是电气特性没搞对。我干了十几年硬件,踩过的坑比抓到的波形还多。这一章咱们就聊清楚——MDIO 的电气层面到底该怎么玩。
3.1 电平标准:别把 1.8V 当 3.3V 用
MDIO 接口沿用了 IEEE 802.3 的规范,电平标准直接继承 MII 管理接口。说白了,它跟普通的 CMOS 电平不一样,有个明确的电压窗口要求。
| 参数 | 最小值 | 典型值 | 最大值 | 单位 |
|---|---|---|---|---|
| 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 把高电平当成了不定态。后来加了电平转换芯片,问题秒解。
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(需端接) |
反过来,上升太快也不是好事。比如超过 1V/ns 的边沿,在长走线(>5cm)上会产生明显的反射过冲。我建议在 PHY 的 MDIO 引脚串一个 22Ω~33Ω 的电阻,能有效抑制振铃。
3.3 负载要求:点对点与多点总线,差别很大
MDIO 总线可以挂多个从设备吗?规范上说可以,但要小心。每个器件都有一个 MDIO 引脚,所有器件共享一根线。电容负载一累积,上升沿就变缓了。
IEEE 802.3 建议每个 MDIO 引脚的最大负载是 10 pF(包含 PCB 走线电容)。总线总负载不要超过 50 pF(标准模式)或 30 pF(快速模式)。
负载估算也很简单:每个 PHY 的 MDIO 引脚输入电容约 5 pF,走线每厘米约 1 pF。你算一下板子上的走线长度,加上器件数量,就大概知道能不能跑高频了。
我记得有一次调试一块 8 口交换机的 MDIO 总线,挂了 8 个 PHY,MDC 跑 2.5MHz 时波形已经变形了。最终加了一个 74LVC1G07 缓冲器,在 PHY 侧重新驱动 MDC 和 MDIO,波形才恢复正常。
3.4 知识体系一张图
下面这张 SVG 总结了 MDIO 电气特性的三大核心维度,以及它们之间的关联。你可以用它快速定位问题方向。
3.5 实测中的常见坑
我把这些年遇到过的电气问题列了个清单,你们调试时直接对号入座:
- 电平漂移: 示波器量出来的高电平只有 1.8V? 八成是上拉电阻太小或者主控驱动能力不够。我一般用 1.5kΩ~4.7kΩ 上拉到 3.3V。
- 振铃过冲: 波形顶部有明显的尖峰?在 MDIO 串个 22Ω 电阻,或者降低驱动强度。
- 毛刺误触发: 如果 MDIO 线上有间距很窄的脉冲(宽度<几纳秒),可能是回流路径不好。加一个 100pF 电容到地,但注意别把信号边沿搞太缓。
- 负载不够: 挂一个 PHY 时波形正常,挂两个就崩了?检查总线电容,可能需要降低 MDC 或加缓冲。
好了,电气层面的东西就这么多。抓波形之前把上面几点过一遍,能省下大量定位时间。