MDIO物理层接口:引脚定义、电气特性、总线拓扑

聊到MDIO总线,很多人第一反应是“两根线嘛,简单”。嗯,确实只有两根线——MDC(时钟)和MDIO(数据)。但这两根线的物理层处理不好,调试起来能让你怀疑人生。我早期做交换板项目时,就因为MDIO上拉电阻选错,导致三颗PHY里有两颗间歇性读回全0,查了整整两天。后来才发现问题出在物理层上。

引脚定义

先看标准定义。MDIO接口源自IEEE 802.3 Clause 22(后来扩展到Clause 45)。两根信号线分别是:

  • MDC(Management Data Clock)—— 由主设备驱动,提供同步时钟。频率通常为2.5 MHz,Clause 45支持更高频率。
  • MDIO(Management Data Input/Output)—— 双向数据线。主设备驱动输出时写寄存器,PHY驱动输出时读寄存器。

引脚命名在不同厂家的芯片上可能略有出入,比如有的叫MCD/MDIO,有的叫MDC/MDIO_SDA,但功能完全一致。我习惯在设计原理图时标成MASTER_MDC和MASTER_MDIO,清晰一点。

电气特性

电气参数,是很多人容易忽略的地方。你想想,两根线要跨板卡通过连接器走几十厘米,还要挂三四个PHY,信号质量必须管住。

参数IEEE 802.3要求推荐设计值说明
VIH(输入高电平)≥ 2.0 V3.3V/2.5V电平兼容常用1.8V系统需电平转换
VIL(输入低电平)≤ 0.8 V保证噪声容限别用直连1.2V IO
VOH(输出高电平)≥ 2.4 V(@2mA)推挽输出上拉到电源电平
VOL(输出低电平)≤ 0.4 V(@2mA)足够驱动接收考虑多设备扇出
输出驱动电流≥ 2 mA推荐4~8 mA长线时需要更大驱动
输入电容≤ 10 pF实际5~8 pF每个PHY会增加总容性负载
上拉电阻无明确要求1.5 kΩ ~ 4.7 kΩ取决于走线长度和负载数
曾经踩过的坑: 我在一个4口交换机上,用了2.2 kΩ上拉到3.3V,结果MDIO信号在靠近主控端过冲接近1V,差点把MAC芯片的IO引脚打坏。后来换成3.3 kΩ加串联电阻,波形才干净。

总线拓扑

MDIO总线最常见的拓扑是多设备并联。也就是说,所有从设备(PHY)的MDIO引脚直接连在一起,MDC也直接连在一起,主设备(MAC/CPU/FPGA)驱动时钟并控制数据传输。

但具体怎么布局?两种主流方式——

  • 单点扇出(星型):主设备到每个PHY的走线长度尽量一致,适用于PCB空间富余时。我一般推荐用这种,信号质量最好控制。
  • 菊花链(总线形式):走线从主设备出发,依次经过PHY1→PHY2→PHY3。注意最后要加终端匹配(串联电阻到地)。这种省PCB面积,但要注意分支stub不能太长。

不管是哪一种,都必须在靠近主设备端添加一个上拉电阻——通常放在MDIO线上,阻值选3.3 kΩ居多。有些设计会在MDC上再加一个小电阻(22 Ω ~ 33 Ω)用于阻尼振铃。

个人习惯: 我会在原理图阶段就把MDIO的上拉电阻设计成可调节的——放两个焊盘,一个贴2.2 kΩ,一个贴4.7 kΩ。调试时根据信号质量选一个。省得打样回来再飞电阻。
MDIO总线拓扑结构(多设备并联 + 上拉电阻) 主设备(MAC/CPU) Rₚ 3.3kΩ VDD PHY1 MDIO 上拉端 PHY2 MDIO 上拉端 PHY3 MDIO 上拉端 终端匹配 布局要点 • 上拉电阻靠近主设备放置 • 各PHY支路stub长度≤20mm • 终端匹配仅在长线末端使用 信号流向 • MDC:主→从(单向时钟) • MDIO:双向数据(主驱→从) • 读时PHY驱动MDIO

布局与布线注意事项

讲完拓扑,聊聊实际PCB要注意的几个点——这些是我从四五个板子里总结出来的教训。

  1. 走线长度控制:MDC走线总长尽量不超过10cm。超过这个长度,信号边沿会变缓,时序裕量下降。尤其MDC频率用到5 MHz以上时。
  2. 避免长stub:每个PHY从主干分出去的那段MDIO线(stub)最好控制在20 mm以内。否则反射会造成数据眼图闭合。我曾经在一个8口汇聚板上,其中一颗PHY的stub走了60 mm,结果死活读不到ID。
  3. 电源去耦:MDIO的VDD引脚(如果PHY有独立I/O电源)必须就近放0.1 μF瓷片电容。否则信号边沿引起的电流抖动会把噪声耦合进去。
  4. 地平面完整性:MDIO和MDC最好走在同一层,相邻层要有完整地平面。别跨分割,否则回流路径一绕,串扰就来了。
实测建议: 板子回来后,先挂示波器看MDC和MDIO波形。重点关注MDIO在写操作时的上升沿和读操作时的转换时刻。如果看到台阶或过冲,优先调上拉电阻值(往大调)或加串联阻尼电阻。

总结

MDIO物理层看着简单,实际上很多奇怪问题都出在这里。记住几个关键点:上拉电阻别瞎选、走线长度管住、分支stub越短越好。按照上面说的拓扑和电气要求做,基本不会出什么妖蛾子。我自己的项目里,只要物理层布局规整,后面的驱动调试基本一次过。