MDC 时钟:频率范围、占空比、时序要求
MDC 是 MDIO 总线的同步时钟。说白了,它决定了读写操作的速度和可靠性。你调好 MDC,MDIO 通信就稳了一半。
我遇到过不少工程师,上来就把 MDC 拉到很高,结果读取 PHY 寄存器老是出错。折腾半天,最后发现时钟频率超标了。咱们先看看标准里是怎么规定的。
2.1 频率范围
IEEE 802.3 标准明确:MDC 最高频率是 2.5 MHz。为什么是 2.5 MHz?因为它对应的时钟周期是 400 ns,而 MDIO 数据在上升沿采样、下降沿更新,这个速率足够覆盖大多数管理操作。
小提示: 有些 PHY 芯片内部实际支持更高的 MDC 速率(比如 10 MHz),但这是芯片厂商的扩展特性。我建议你严格按 2.5 MHz 来设计,保证跨型号兼容。我踩过坑——用了某款 PHY 的“高速模式”,换另一款后直接不工作。
当然,频率也可以更低。比如你的控制器时钟源分频后只能产生 1 MHz,也没问题。MDC 没有下限频率,你甚至可以用几十 kHz。只是操作速度慢一点,但稳定。
| 参数 | 标准值 | 说明 |
|---|---|---|
| 最大频率 | 2.5 MHz | 对应周期 400 ns,上升沿采样 |
| 最小频率 | 无严格限制 | 可低至 DC(实际建议 > 10 kHz) |
| 常用频率 | 1.25 MHz / 2.5 MHz | 大多数控制器默认分频结果 |
2.2 占空比要求
标准推荐 MDC 占空比为 50%,也就是高电平和低电平时间相等。实际允许的范围是 40% ~ 60%。
占空比偏差太大会有什么后果?我举个例子:曾经有个项目,MDC 由 GPIO 模拟产生,因为中断影响导致高电平时间只有 120 ns,低电平却有 280 ns。结果 MDIO 数据在下降沿更新时,高电平太短,PHY 来不及输出有效数据,导致控制器读到错误值。调了好久才发现是占空比的问题。
注意: 如果你的 MDC 是用定时器或 PWM 模块生成的,务必确认占空比能控制在 40% ~ 60% 以内。纯软件模拟时尤其要留意中断抖动。
2.3 时序要求
这里有一张 MDC 和 MDIO 的相对时序图,你看一眼就明白了。
时序参数的具体数值如下表:
| 时序参数 | 最小值 | 说明 |
|---|---|---|
| 建立时间(tsu) | 10 ns | MDIO 数据在 MDC 上升沿前的稳定时间 |
| 保持时间(th) | 0 ns(推荐 5 ns) | MDC 上升沿后数据保持时间 |
| MDC 上升时间(tr) | — | 建议 ≤ 5 ns,太慢会导致采样模糊 |
| MDC 下降时间(tf) | — | 同上,建议 ≤ 5 ns |
| PHY 输出延迟 | — | MDC 下降沿后 10 ns 内输出有效数据 |
为什么建立时间要 10 ns?因为 MDIO 数据从控制器内部寄存器传输到引脚,经过驱动电路有延迟。加上外部走线电容,信号边沿变缓。保证 10 ns 的余量,PHY 才能可靠采样。
2.4 实际设计中的避坑指南
- 多从机场景:一主多从时,MDC 走线尽量等长,避免时钟偏斜导致建立时间不足。我曾经在一个 8 端口交换机上遇到个别端口读异常,量波形才发现远端 MDC 沿滞后了 15 ns。
- 隔离应用:如果 MDC 需要过隔离变压器或者光耦,务必考虑隔离延迟。我建议在从机侧做一下沿整形(比如施密特触发),否则时序很容易超限。
- 软件模拟:用 GPIO 模拟 MDC 时,不要用中断方式——中断响应时间不确定,占空比和周期都会飘。改用定时器 PWM 或者 SPI 硬件模式来生成。
- 上升/下降时间:MDC 走线过长时,信号会呈现 RC 缓坡。如果 tr 超过 15 ns,PHY 的上升沿检测可能误差几个 ns,累积到建立时间上就危险了。我一般在 MDC 引脚上串一个 22 Ω 电阻限流,并靠近引脚放置一个小电容(10~22 pF)用作滤波,保持沿陡峭。
核心记住:
• MDC 最高 2.5 MHz(周期 400 ns)
• 占空比 40% ~ 60%
• MDIO 在 MDC 上升沿采样,数据须提前 10 ns 建立,保持 0 ns 以上
• 实测时用示波器抓 MDC 上升沿和 MDIO 的建立时间,这是排错第一招
• MDC 最高 2.5 MHz(周期 400 ns)
• 占空比 40% ~ 60%
• MDIO 在 MDC 上升沿采样,数据须提前 10 ns 建立,保持 0 ns 以上
• 实测时用示波器抓 MDC 上升沿和 MDIO 的建立时间,这是排错第一招
嗯,关于时钟这块就这些。你的 MDC 只要满足这几个参数,MDIO 通信就成功了一大半。