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 的相对时序图,你看一眼就明白了。

MDC 时钟与 MDIO 数据时序 T = 400 ns 上升沿 下降沿 数据 建立 ≥10 ns 保持 ≥0 ns 数据 建立 ≥10 ns tr tf 高电平 ≈ 200 ns 图例 MDC 时钟 MDIO 数据 建立/保持 在 MDC 上升沿前至少 10 ns,MDIO 数据必须稳定;上升沿后保持至少 0 ns。PHY 在 MDC 下降沿后最多 10 ns 内更新数据。

时序参数的具体数值如下表:

时序参数最小值说明
建立时间(tsu)10 nsMDIO 数据在 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 只要满足这几个参数,MDIO 通信就成功了一大半。