**核心参数**
- VIH(输入高电平):0.7 × VDD
- VIL(输入低电平):0.3 × VDD
- VOH(输出高电平):0.9 × VDD
- VOL(输出低电平):0.1 × VDD
举个例子。你用的是1.8V系统,VIH就得大于1.26V。低于这个值,从机就不认“1”。反过来,驱动端的VOH至少要输出1.62V才算可靠。
| 参数 | 1.8V系统 | 2.5V系统 | 3.3V系统 |
|---|---|---|---|
| VIH(最小值) | 1.26V | 1.75V | 2.31V |
| VIL(最大值) | 0.54V | 0.75V | 0.99V |
| VOH(最小值) | 1.62V | 2.25V | 2.97V |
| VOL(最大值) | 0.18V | 0.25V | 0.33V |
**小技巧**:抓波形时,把示波器的光标放在VIH和VIL的阈值线上。一看就能判断信号是不是“吊在半空”。
## 上升时间与下降时间——不能太快也不能太慢
MDIO时钟最高能跑到12.5MHz。对于100ns的周期信号,上升/下降时间就得很讲究。
标准里推荐上升/下降时间控制在**5ns到20ns**之间。为什么呢?
- 太快了,会反射、振铃。我在调试一块PHY时遇到过——时钟沿太陡,产生了过冲,把从机芯片的内部逻辑打乱了。
- 太慢了,信号跨过阈值的时间太长,从机采到的数据就可能出错。
**曾经踩过的坑**
我曾经碰到一个诡异问题:板子常温下能跑,一进高低温箱就挂。后来一查,温度升高后驱动能力下降,上升沿从8ns变到35ns。从机在这个缓慢的上升过程中,多次翻转采样,读到的寄存器值全是乱的。
从此以后,我每次设计都会留出20%的上升/下降时间裕量。
测量方法很简单。用示波器抓到波形后,找10%和90%的电压点,计算二者时间差。手动测量时,我习惯把示波器的测量功能打开,让它自动算 Trise 和 Tfall。
## 驱动能力——别小看了那个几毫安
MDIO驱动端必须能同时推好几个负载。典型的从机输入电容在5pF到10pF之间。如果总线上挂了8个PHY,总负载电容就能到80pF。
驱动电流怎么算?有个经验公式:
I = C_load × (dV/dt)
举个例子:
如果C_load = 80pF,dT = 10ns(要求上升时间),dV = 1.8V
那需要的驱动电流 I = 80pF × (1.8V / 10ns) = 14.4mA
**我一般的安全做法**:
- 单个PHY驱动不超过8个从机
- 预留至少50%的驱动能力裕量
- PCB走线长度控制在12英寸以内
- 必要时加缓冲器(如NC7SZ07)
有个更直接的办法——看看器件手册里有没有写“DC Drive Strength”或“Output Current”。比如某款MAC芯片写的是“±8mA”,那就意味着它只能驱动4-5个标准从机。
## 一张图串起所有电气特性
图上梳理得很明白——电压电平、上升/下降时间、驱动能力这三者不是独立参数。它们合在一起,决定了信号到底能不能被正确识别。
比如驱动能力不够,直接导致上升沿变慢。上升沿一慢,实际跨过VIH的时间就推后了。时序分析时如果没算这个,以为能跑到12.5MHz,实际跑起来就是一片错码。
## 几点补充建议
说回实践。我个人的习惯是:
1. **先看手册**。PHY或MAC的data sheet里都会写“MDC/MDIO Output Timing”这一节。里面标的Tr/Tf值就是你的设计基准。
2. **用示波器量一下实际值**。很多板子的走线寄生参数和仿真差得挺远——走线太长、过孔太多、分叉太多,都能把上升沿从10ns拖到30ns。
3. **留裕量**。工业级温度范围下,驱动器的输出电流会下降。你在25℃下测的15ns上升沿,到了85℃可能就变成30ns了。
4. **别靠猜**。我有次项目很急,没仔细分析负载,凭感觉接了两个PHY——其中一个死活读不到ID。后来用示波器一看,上升沿波形上有个明显的平台,电压正好卡在VIL附近。就是驱动能力不够,加上那根PHY离得太远走线太长。
电气特性这块,讲白了就是看驱动端能不能把电平送过去、接收端能不能认出来,中间还要考虑走线带来的损耗和延迟。下次调MDIO时,先别急着怀疑协议,拿示波器看一下信号边沿——很多问题一眼就能看出来。