1. SGMII 协议概述
各位工程师朋友,咱们要开始聊 SGMII 了。很多刚接触这个接口的同事,总觉得它就是个“高速串行口”,其实没那么简单。我个人习惯把 SGMII 看作是 GMII 的“串行化分身”。它保留了 GMII 的所有功能,但换了一种更节省管脚、更抗干扰的物理形式。
说白了,SGMII 就是 Serial Gigabit Media Independent Interface 的缩写。它只用了 4 根信号线(一对发送、一对接收),就实现了千兆以太网 MAC 和 PHY 之间的通信。你想想看,GMII 可是需要 20 多根线的。所以,SGMII 在布线密度、引脚数上都占了优势。
1.1 为什么要有 SGMII?
我个人理解,这是芯片封装和 PCB 布线给逼出来的。我记得刚入行时,调试一块千兆交换芯片,MAC 和 PHY 是分开的。那时候还是用 GMII 接口,走线密密麻麻,尤其是时钟和数据线的等长约束,让人头大。后来 SGMII 一出来,吉比特信号只用两对差分线,布线简单太多了。
1.2 SGMII 的信号定义
嗯,这里有个细节要讲清楚。SGMII 虽然没有 GMII 那么多信号线,但它的信号定义其实更“聪明”。我们来看一下它的信号线,我把它总结成下面这个表格:
| 信号名称 | 方向 | 功能简述 |
|---|---|---|
| TXP / TXN | MAC → PHY | 发送差分对。从 MAC 到 PHY 的串行数据流。 |
| RXP / RXN | PHY → MAC | 接收差分对。从 PHY 到 MAC 的串行数据流。 |
| GTX_CLK | MAC → PHY | 参考时钟。MAC 提供给 PHY 的 125MHz 时钟。注意,这是 源同步 时钟。 |
你看,只有三个信号组。但你别看少,它承载的信息量可不小。SGMII 在串行数据流里,不仅嵌入了数据,还嵌入了 数据控制信号(TX_EN、TX_ER) 和 链路状态。比如,当 PHY 检测到远端链路未建立时,它会在接收数据流中插入特殊的“码组”,告诉 MAC:“伙计,连不上呢。”
所以,时钟抖动 是 SGMII 链路调试中的“隐形杀手”。你在布局布线时,一定要给 GTX_CLK 提供干净的时钟源,走线也要做阻抗匹配。
1.3 SGMII 的链路建立流程
好了,信号线知道了,那这些线是怎么“握手”建立起链路的呢?这个流程非常重要,是后面所有调试工作的基础。下面这张图,是我根据实际调试经验画的。它展示了 SGMII 链路建立的核心过程:
这个流程你记住四个字:先同步,后协商。上电后,双方的 SerDes 要先通过 CDR(时钟数据恢复)电路锁定到对方的码流上。这一步如果没完成,后面都是白搭。我记得以前调试一块 PHY 时,波形上看 CDR 一直锁定不了,最后发现是供电纹波太大,干扰了内部的 PLL。
1.4 速度协商与双工模式
SGMII 的另一个优势是它支持 速度协商。千兆、百兆、十兆,它都能自适应。怎么做到的?说白了就是改变 SerDes 的速率。千兆是 1.25Gbps,百兆时降低到 125Mbps,十兆则是 12.5Mbps。你想想看,PHY 是怎么知道该用哪个速率?
答案就在 Idle 码中。PHY 在与 MAC 协商时,会通过码组告诉 MAC:我的以太网口支持什么速率。MAC 收到后,再把自己的能力发回去。两边一对比,选一个大家都支持的最高速率。这个过程中,数据线上的线速率其实是不变的(1.25Gbps),但是 PHY 内部会通过插入额外的 Idle 码来“降速”。
| 实际速率 | SGMII 线速率 | 数据编码 |
|---|---|---|
| 10 Mbps | 1.25 Gbps | 每 8 个数据码中插 7 个 Idle 码 |
| 100 Mbps | 1.25 Gbps | 每 10 个数据码中插 9 个 Idle 码 |
| 1000 Mbps | 1.25 Gbps | 不插任何 Idle 码,全数据模式 |
这个表很直观吧?所以你看,SGMII 的线缆上始终跑着 1.25Gbps 的信号,但是有效数据率却不同。我在调百兆模式时,经常发现逻辑分析仪抓到的码流里,大部分都是 Idle 码。这时候你千万别觉得链路坏了,其实是正常的。
好了,咱们把 SGMII 的协议基础捋了一遍。从为什么会有它,到信号定义,再到链路建立的全流程。这个过程其实是后面所有调试工作的“地图”。只要地图画对了,定位问题就像顺着河流找源头一样清晰。