SGMII、1000BASE-X、QSGMII、USXGMII:连接 PHY 与 SFP 的串行接口 · 电接口:MII 系列与 AUI · 网卡与交换机 · 文档 · CodingBox
CodingBox 文档

SGMII、1000BASE-X、QSGMII、USXGMII:连接 PHY 与 SFP 的串行接口

每个 1G SFP 笼子都承载一条 1.25 GBd 的串行通道,该通道可以使用两种在示波器上看起来完全相同的方言:1000BASE-X,光纤模块所期望的 IEEE 接口;以及 SGMII,Cisco 的变体,增加了 10/100 Mb/s 和不同的自动协商方式。铜缆 SFP 正处于两者的边界上,大多数 "铜缆 SFP 在 1G 下能链接,但我的 100 Mb/s 摄像头不行"的工单都是方言不匹配所致。本页介绍这两种千兆方言及其自动协商、2500BASE-X、多端口的 QSGMII、面向多速率的 USXGMII 与 10GBASE-T SFP+,以及 Linux 和交换机如何选择模式。

1000BASE-X:SFP 的原生接口(Clause 36/37)

项目值
速率1.25 GBd,8b/10b → 1000 Mb/s 有效负载
通道每个方向 1 对差分线(CML,AC 耦合)
编码8b/10b,使用 /K28.5/ 逗号字符,有序集 /C1/ /C2/(配置)、/I1/ /I2/(空闲)
自动协商Clause 37:在 /C/ 有序集中交换 16 位配置字——全双工/半双工、暂停(对称/非对称)、远端故障、确认。没有速率字段:1000BASE-X 仅支持 1G
应用场景交换机/NIC 的 SerDes → SFP 笼子;光纤 SFP(SX/LX/ZX/BiDi/CWDM)将其直接传给激光器;PCS 位于主机侧

光纤 SFP 是透明的:主机编码的内容原样以光信号发出。这就是为什么 1G 光纤模块没有 "模式"——但端口有,而且必须是 1000BASE-X(常显示为"SerDes"或"fiber"模式,当对端没有 AN 时,在 Cisco 上为 speed nonegotiate)。

SGMII:千兆加 10/100(Cisco SGMII 规范 v1.8)

项目值
速率同样是 1.25 GBd,8b/10b
10/100 支持每个数据字节重复 100 次(10 Mb/s)或 10 次(100 Mb/s),使线路速率保持在 1.25 GBd
通道2 对;可选 625 MHz DDR 时钟对(TX_CLK/RX_CLK)——大多数 SerDes 实现不使用时钟线
自动协商SGMII 控制字(同样在 /C/ 有序集中传送,16 位):第 15 位为链路,第 11–10 位为速率(10/100/1000),第 12 位为双工,第 14 位为确认——由 PHY 发往 MAC,告知 MAC 铜缆侧协商的结果。与 Clause 37 的内容不兼容
应用场景MAC ↔ 铜缆 PHY(Marvell 88E15xx、TI DP83867、Broadcom)、需要支持铜缆 SFP 的板卡上的 SoC ↔ SFP 笼子、铜缆 1000BASE-T SFP 内部

SGMII 是一种 MAC–PHY 接口;"自动协商"发生两次——先是 PHY 与链路对端之间在双绞线上进行 Clause 28 协商,然后 SGMII 控制字把结果报告给 MAC。当主机期望 Clause 37 却收到 SGMII 字(或相反)时,链路永远无法完成 AN;常见的解决办法是在端口上禁用 AN (speed nonegotiate、no negotiation auto、autoneg off)——但仅限 1G。

处于两者之间的铜缆 SFP

主机端口模式铜缆 SFP 行为10/100 客户端
1000BASE-X,AN 开启模块的 PHY 必须响应 Clause 37——许多能做到(模拟),部分不能 → 在关闭 AN 之前无链路不支持(没有速率字段)
1000BASE-X,AN 关闭铜缆侧协商为 1G 时,链路为 1G不支持
SGMII,AN 开启PHY 通过控制字报告 10/100/1000支持
SGMII,AN 关闭固定为 1G不支持

基于 Marvell 88E1111 的铜缆 SFP 模块默认使用 SGMII 或 1000BASE-X,具体取决于制造时设置的配置 EEPROM/strap;厂商会为同一模块提供"SGMII"和"SerDes"两种变体,部分型号可以通过模块 I²C 可访问的 PHY 寄存器切换。列出"支持 1000BASE-T SFP"的交换机端口,在这些笼子上实现的就是 SGMII (参见铜缆以太网与 DAC)。

100BASE-FX SFP

100 Mb/s 光纤 SFP(100BASE-FX,1310 nm,2 km)要求主机以 125 MBd、4b/5b 运行该通道——这是完全不同的 PCS。只有明确支持"100M SFP"的端口(许多园区交换机的部分端口、大多数路由器;少数数据中心交换机)才能工作;在其他端口上,模块可被检测到但永远无法建立链路。部分主机通过 SGMII 复制、配合模块内的外部 PHY 来实现 100BASE-FX(即 "100M over SGMII" SFP)。

2500BASE-X

项目值
速率3.125 GBd,8b/10b → 2.5 Gb/s
标准IEEE 未定义(事实标准,为 1000BASE-X 的 2.5 倍);Linux 中 phy-interface-type = "2500base-x"
ANClause 37 风格,通常禁用
应用场景2.5G SFP 模块(2.5GBASE-T 铜缆、2.5G 光纤)、面向主机的 GPON/EPON ONU 棒(2.5G 下行)、Wi-Fi 6 AP 上行、部分 2.5G 交换机的 SFP 笼子

面向多速率的 IEEE 对应标准是 2.5GBASE-X/5GBASE-R(802.3bz),但大多数芯片使用的是 2500BASE-X 或 USXGMII。

QSGMII:单通道承载四个端口

项目值
速率5 GBd,8b/10b;4 个 SGMII 信道时分复用
通道2 对,用于四个端口
应用场景交换机 ASIC ↔ 四路铜缆 PHY(48 口接入交换机:用 12 条 QSGMII 通道代替 48 条 SGMII)、部分通过外部 SerDes 实现的四端口 SFP 笼子设计
变体QSGMII(Cisco),部分 Qualcomm/Realtek SoC 上还有"PSGMII"(5 端口)

在常规设计中笼子上看不到 QSGMII;但当一块四路 PHY 板卡暴露出模式继承自 PHY 信道的 SFP combo 端口时,它就变得重要。

USXGMII:单条 10G 通道承载 10 Mb/s 到 10 Gb/s

项目值
速率10.3125 GBd,64b/66b(10GBASE-R 电气规范)
速率档位10M、100M、1G、2.5G、5G、10G,通过符号复制实现(类似放大版的 SGMII)
规范Cisco USXGMII(v1.2),已被广泛采用;Linux 中为 usxgmii
多端口USXGMII-M:在一条 10G 通道上承载 4 × 2.5G、2 × 5G、4 × 1G+ 等(类似 QSGMII)
ANUSXGMII AN 字位于 64b/66b 空闲码中,报告速率/双工/链路
应用场景ASIC ↔ 多速率 PHY(2.5/5/10GBASE-T 端口)、10GBASE-T SFP+ 模块(内部 PHY,如 Marvell AQR/Broadcom)

10GBASE-T SFP+ 模块向普通 SFP+ 端口呈现 10GBASE-R(SFI),并以 10G 建立链路;它能否 同时服务 1G/2.5G/5G 客户端,取决于主机是否在该笼子上支持 USXGMII 速率适配——大多数交换机不支持,因此模块要么只能以 10G 工作,要么在内部完成适配、向主机报告 10G,而铜缆侧以较低速率运行(参见速率与传输速度)。

主机如何选择模式

主机机制
Linux phylink/SFP读取 A0h 字节 3–10(合规性)、12(标称速率)、36(扩展)以及字节 6 的第 3 位(1000BASE-T):1000BASE-T → SGMII(若 SoC 不支持 SGMII 则为 1000BASE-X);1000BASE-SX/LX → 1000BASE-X;BR 3.1 GBd → 2500BASE-X;10G 代码 → 10GBASE-R;模块内部的铜缆 PHY 通过 I²C(地址 0x56/0xAC)探测,并由 phylib 驱动
交换机 NOS端口默认值由平台决定(大多数 1G SFP 笼子支持 SGMII;SFP+/SFP28 在 1G 下通常仅支持 1000BASE-X),命令包括 speed 1000、speed nonegotiate、media-type sfp、negotiation auto、port-mode
NIC 驱动Intel:SFP+ 端口仅在 1000BASE-X 下支持 1G(不支持 10/100 铜缆 SFP);Mellanox:部分型号通过 1000BASE-X 支持 1G;Broadcom:取决于固件(参见NIC 端口)
铜缆 SFPPHY 模式由 strap/EEPROM 决定(SGMII 与 SerDes 变体之分),AN 行为由厂商固件设置

不匹配对照表

现象原因解决方法
铜缆 SFP:1G 客户端正常,10/100 从不链接端口处于 1000BASE-X换到支持 SGMII 的端口,或使用能把 10/100 隐藏为对主机 1G 适配的模块
光纤 SFP 只有在 AN 关闭时才能链接对端不支持 Clause 37(媒体转换器、部分 ONU),或来自铜缆模块的 SGMII 字speed nonegotiate / autoneg off
检测到 100BASE-FX SFP,无链路主机缺少 100M SerDes 模式使用支持 100M SFP 的端口,或使用 100BASE-FX-over-SGMII 模块
2.5G SFP 以 1G 链接或完全无法链接主机不支持 2500BASE-X选择支持 2.5G 的笼子,或使用带速率回退的模块
ONU 棒建立链路后又断开2500BASE-X 与 1000BASE-X 预期不一致、AN 问题将主机设为 2500BASE-X,关闭 AN(参见PON 光模块)
10GBASE-T SFP+ 仅以 10G 链接主机不支持 USXGMII接受仅 10G 工作,或使用带内部速率适配的模块
Linux:模块在一块板卡上工作,在另一块上不工作phylink 根据 EEPROM 选择了不同的接口;SoC 不支持该模式在 dmesg 中查看 sfp: module … interface;修正合规字节或设备树

在 CodingBox 中

决定主机选择的字节都位于 A0h 中:合规代码 3–10(1000BASE-T、SX、LX、10G 代码)、标称比特率 12、编码 11(8b/10b 与 64b/66b 之分)、扩展合规性 36。被编码为 1000BASE-SX 的铜缆模块会被当作光纤处理,从而失去其 10/100 路径;带有多余 1000BASE-T 位的光纤模块会被当作 SGMII 驱动。CodingBox 显示并编辑这些字段(参见 Check transceiver、 合规代码)。


如果您发现本资料中有不准确之处或错误,请选中相应片段并按 Ctrl+Enter,即可。