2. SGMII 物理层信号定义归纳总结

说实话,做 SGMII 调试的第一步,就是把这几个物理信号搞清楚。我第一次调 SGMII 时,拿着示波器到处戳,结果发现有的信号根本没连对——后来才知道,我把 TX 和 RX 接反了。今天我们就来系统地捋一遍 SGMII 物理层到底有哪些信号,各自负责什么,有什么容易踩的坑。

2.1 信号总览

SGMII 物理层接口的信号其实不多,但每个都很关键。我按功能把它们分成四类,列在下面这张表里,你调试时可以直接对照着查。

信号类别信号名称类型方向描述
数据差分对SGMII_TX_P / SGMII_TX_NCML(电流模逻辑)MAC→PHY发送差分对,速率 1.25 Gbps,编码为 8B/10B
数据差分对SGMII_RX_P / SGMII_RX_NCMLPHY→MAC接收差分对,速率 1.25 Gbps,编码为 8B/10B
参考时钟SGMII_CLK / REFCLK差分或单端(LVPECL/LVDS)PHY→MAC 或 MAC→PHY125 MHz 参考时钟,用于 SerDes PLL
管理接口MDC / MDIOCMOSMAC→PHY (MDC), 双向 (MDIO)MDIO 总线,用于链路协商、状态读取
控制/状态LINK_STATUSCMOSPHY→MAC链路建立指示,高电平有效
控制/状态SPEED[1:0] / DUPLEXCMOSPHY→MAC协商后的速率(10/100/1000)与双工模式

嗯,这张表你最好收藏一下。我当年第一次调 SGMII 时,就是忘了检查 REFCLK 的方向——MAC 和 PHY 都以为对方在送时钟,结果两边都等着,链路自然起不来。

2.2 数据差分对:SGMII_TX / SGMII_RX

这两个差分对是 SGMII 的核心。说白了,数据就是通过它们以 1.25 Gbps 的串行速率发送和接收的。注意几个关键点:

  • 极性不可接反:P/N 必须一一对应。我曾经碰到一块板子,Layout 把 RX 的 P 和 N 画反了,结果链路只能偶尔协商成功。用示波器一看,眼图是张开的,但误码率很高。后来在焊盘上飞线交换了极性,问题就解决了。
  • AC 耦合电容:一般在靠近 PHY 或 MAC 侧,串一个 0.1 μF(或 0.01 μF)的电容。这个电容不能省,否则直流偏置会出问题。我见过有人为了省成本去掉耦合电容,结果链路完全不通。
  • 抖动容限:SGMII 对发送端的抖动要求很严。参考时钟的 RMS 抖动一般要求小于 10 ps。如果时钟抖得太厉害,眼图会闭合,链路就建立不了。

2.3 参考时钟 REFCLK

REFCLK 是 SerDes 的参考源。它可以是差分(LVDS/LVPECL),也可以是单端(1.8V/2.5V CMOS)。频率一般是 125 MHz,但也有 100 MHz 或 156.25 MHz 的变种,具体要看 PHY 芯片的 Datasheet。

我的经验:调试时优先确认 REFCLK 的有无和频率。用示波器测一下波形,看是否在 125 MHz ±50 ppm 内。如果频率偏差超过 ±100 ppm,PLL 会失锁,差分对根本不会输出有效数据。

还有,REFCLK 的方向要看 PHY 的工作模式。大多数 PHY 是时钟源(输出给 MAC),但也有 MAC 提供时钟的配置。这务必在原理图阶段就确定下来。

2.4 管理接口 MDIO / MDC

MDIO 总线的时序很多人不在意,但它是 SGMII 链路协商的关键。MDC 是时钟,由 MAC 提供,最大频率 2.5 MHz(标准模式)或 12.5 MHz(快速模式)。MDIO 是双向数据线,需要上拉电阻(一般 10 kΩ)。

警告:MDC 不能太快,否则 PHY 响应会出错。我之前用过一款 PHY,MDC 跑到 8 MHz 时,读回的状态寄存器完全乱掉了。降回 2.5 MHz 就好了。如果你发现链路协商一直超时,可以先查 MDC 频率。

另外,MDIO 的上拉电阻不要省。我遇到过板子上电阻焊错了,焊了个 100 Ω,结果 MDIO 信号被拉得太弱,读不到 PHY 的状态。

2.5 控制与状态信号

除了数据和管理,SGMII 还会通过若干并行信号传递链路状态。常见的有:

  • LINK_STATUS:PHY 告诉 MAC 链路是否已建立。这通常是一个 GPIO 输出。
  • SPEED[1:0]:编码表示协商后的速率。00=10M, 01=100M, 10=1000M, 11=保留。
  • DUPLEX:1 表示全双工,0 表示半双工。

这些信号在 SGMII 模式下的时序一般与 MDC 同步,但也有异步的。如果你在调试时发现 MAC 侧一直显示链路 Down,可以测一下 LINK_STATUS 的电平。如果是低,说明 PHY 根本没认为链路建立。

2.6 信号连接关系图

下面这张图是我总结的 SGMII 典型信号连接,标注了所有关键路径。调试时你可以拿着它去对照 PCB Layout。

SGMII 物理层信号连接关系 MAC (控制器) PHY (物理层) SGMII_TX_P / N 1.25 Gbps 8B/10B SGMII_RX_P / N 1.25 Gbps 8B/10B REFCLK (125 MHz) MDC / MDIO LINK_STATUS / SPEED / DUPLEX 差分对需 AC 耦合电容,REFCLK 方向注意配置

这张图其实画得比较清晰了。MAC 和 PHY 之间有两对差分线(TX/RX),一根参考时钟,还有 MDIO/MDC 以及并行状态信号。注意 REFCLK 的方向我画成从 PHY→MAC,但实际要看你用的芯片配置。

2.7 调试时的自查清单

说了这么多,我直接把调试物理层时该查的信号列表放在下面,你一条条过就行。

  1. 检视电源:PHY 的 1.2V、1.8V、3.3V 是否到位?纹波是否小于 50 mV?
  2. 测参考时钟:125 MHz 是否稳定?频率误差 < ±50 ppm?抖动 < 10 ps RMS?
  3. 看差分对极性:P/N 是否一一对应?耦合电容是否虚焊?
  4. 瞄 MDIO 通信:MDC 频率是否超标?MDIO 上拉电阻是否正确?用示波器抓取 MDIO 波形,看能否读到 PHY 的 ID(寄存器 2、3)。
  5. 查 LINK_STATUS 电平:如果一直为低,先检查 PHY 的中断和状态寄存器。
  6. 确认速率模式:通过 MDIO 读取 AN (Auto-Negotiation) 完成位,看协商结果是否和 SPEED 引脚对应。

小技巧:先把 PHY 强制在 1000M 全双工模式(通过 MDIO 写寄存器 0),如果此时 LINK_STATUS 拉高,说明物理层走线问题不大,问题可能出在自动协商上。反过来,如果强制都不行,那就是硬件连接的问题。