2. SGMII 物理层信号定义归纳总结
说实话,做 SGMII 调试的第一步,就是把这几个物理信号搞清楚。我第一次调 SGMII 时,拿着示波器到处戳,结果发现有的信号根本没连对——后来才知道,我把 TX 和 RX 接反了。今天我们就来系统地捋一遍 SGMII 物理层到底有哪些信号,各自负责什么,有什么容易踩的坑。
2.1 信号总览
SGMII 物理层接口的信号其实不多,但每个都很关键。我按功能把它们分成四类,列在下面这张表里,你调试时可以直接对照着查。
| 信号类别 | 信号名称 | 类型 | 方向 | 描述 |
|---|---|---|---|---|
| 数据差分对 | SGMII_TX_P / SGMII_TX_N | CML(电流模逻辑) | MAC→PHY | 发送差分对,速率 1.25 Gbps,编码为 8B/10B |
| 数据差分对 | SGMII_RX_P / SGMII_RX_N | CML | PHY→MAC | 接收差分对,速率 1.25 Gbps,编码为 8B/10B |
| 参考时钟 | SGMII_CLK / REFCLK | 差分或单端(LVPECL/LVDS) | PHY→MAC 或 MAC→PHY | 125 MHz 参考时钟,用于 SerDes PLL |
| 管理接口 | MDC / MDIO | CMOS | MAC→PHY (MDC), 双向 (MDIO) | MDIO 总线,用于链路协商、状态读取 |
| 控制/状态 | LINK_STATUS | CMOS | PHY→MAC | 链路建立指示,高电平有效 |
| 控制/状态 | SPEED[1:0] / DUPLEX | CMOS | PHY→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。
这张图其实画得比较清晰了。MAC 和 PHY 之间有两对差分线(TX/RX),一根参考时钟,还有 MDIO/MDC 以及并行状态信号。注意 REFCLK 的方向我画成从 PHY→MAC,但实际要看你用的芯片配置。
2.7 调试时的自查清单
说了这么多,我直接把调试物理层时该查的信号列表放在下面,你一条条过就行。
- 检视电源:PHY 的 1.2V、1.8V、3.3V 是否到位?纹波是否小于 50 mV?
- 测参考时钟:125 MHz 是否稳定?频率误差 < ±50 ppm?抖动 < 10 ps RMS?
- 看差分对极性:P/N 是否一一对应?耦合电容是否虚焊?
- 瞄 MDIO 通信:MDC 频率是否超标?MDIO 上拉电阻是否正确?用示波器抓取 MDIO 波形,看能否读到 PHY 的 ID(寄存器 2、3)。
- 查 LINK_STATUS 电平:如果一直为低,先检查 PHY 的中断和状态寄存器。
- 确认速率模式:通过 MDIO 读取 AN (Auto-Negotiation) 完成位,看协商结果是否和 SPEED 引脚对应。
小技巧:先把 PHY 强制在 1000M 全双工模式(通过 MDIO 写寄存器 0),如果此时 LINK_STATUS 拉高,说明物理层走线问题不大,问题可能出在自动协商上。反过来,如果强制都不行,那就是硬件连接的问题。