SGMII, 1000BASE-X, QSGMII, USXGMII: serial interfaces to PHYs & SFP
Đội ngũ của chúng tôi đang thực hiện bản dịch. Bài viết này tạm thời chưa có bản tiếng Việt và đang được hiển thị bằng tiếng Anh.
Every 1G SFP cage carries a 1.25 GBd serial lane, and that lane can speak two dialects that look identical on an oscilloscope: 1000BASE-X, the IEEE interface a fibre module expects, and SGMII, Cisco's variant that adds 10/100 Mb/s and a different auto-negotiation. Copper SFPs live on the boundary between them, and most "the copper SFP links at 1G but my 100 Mb/s camera does not" tickets are a dialect mismatch. This page covers the two gigabit dialects, their auto-negotiation, 2500BASE-X, the multi-port QSGMII, USXGMII for multigig and 10GBASE-T SFP+, and how Linux and switches choose the mode.
1000BASE-X: the native SFP interface (Clause 36/37)
| Item | Value |
|---|---|
| Rate | 1.25 GBd, 8b/10b → 1000 Mb/s payload |
| Lanes | 1 differential pair each direction (CML, AC-coupled) |
| Coding | 8b/10b with /K28.5/ commas, ordered sets /C1/ /C2/ (configuration), /I1/ /I2/ (idle) |
| Auto-negotiation | Clause 37: 16-bit config word exchanged in /C/ ordered sets — full/half duplex, pause (symmetric/asymmetric), remote fault, acknowledge. No speed field: 1000BASE-X is 1G only |
| Where | switch/NIC SerDes → SFP cage; fibre SFP (SX/LX/ZX/BiDi/CWDM) passes it straight to the laser; the PCS lives in the host |
A fibre SFP is transparent: whatever the host codes goes out as light. That is why a 1G fibre module has no "mode" — but the port does, and it must be 1000BASE-X (often shown as "SerDes" or "fiber" mode, speed nonegotiate on Cisco when the far end has no AN).
SGMII: gigabit plus 10/100 (Cisco SGMII specification v1.8)
| Item | Value |
|---|---|
| Rate | same 1.25 GBd, 8b/10b |
| 10/100 support | each data byte replicated 100× (10 Mb/s) or 10× (100 Mb/s) so the line stays at 1.25 GBd |
| Lanes | 2 pairs; optional 625 MHz DDR clock pairs (TX_CLK/RX_CLK) — most SerDes implementations run clockless |
| Auto-negotiation | SGMII control word (also carried in /C/ ordered sets, 16 bits): bit 15 link, bits 11–10 speed (10/100/1000), bit 12 duplex, bit 14 ack — sent PHY → MAC to tell the MAC what the copper side negotiated. Not compatible with Clause 37 content |
| Where | MAC ↔ copper PHY (Marvell 88E15xx, TI DP83867, Broadcom), SoC ↔ SFP cage on boards that want copper SFP support, copper 1000BASE-T SFP internals |
SGMII is a MAC–PHY interface; the "auto-negotiation" happens twice — Clause 28 on the twisted pair between PHY and link partner, then the SGMII control word reports the result to the MAC. When a host expects Clause 37 and receives an SGMII word (or vice versa), the link never completes AN; disabling AN on the port (speed nonegotiate, no negotiation auto, autoneg off) is the usual workaround — at 1G only.
Copper SFPs between the two
| Host port mode | Copper SFP behaviour | 10/100 clients |
|---|---|---|
| 1000BASE-X, AN on | module's PHY must answer Clause 37 — many do (emulate), some do not → no link until AN off | no (no speed field) |
| 1000BASE-X, AN off | link at 1G when the copper side negotiates 1G | no |
| SGMII, AN on | PHY reports 10/100/1000 via control word | yes |
| SGMII, AN off | fixed 1G | no |
Copper SFP modules based on Marvell 88E1111 default to SGMII or 1000BASE-X depending on a configuration EEPROM/strap set at manufacture; vendors sell "SGMII" and "SerDes" variants of the same module, and some can be switched through the PHY registers reachable over the module's I²C. Switch ports that list "1000BASE-T SFP supported" implement SGMII on those cages (Copper Ethernet & DAC).
100BASE-FX SFPs
A 100 Mb/s fibre SFP (100BASE-FX, 1310 nm, 2 km) needs the host to run the lane at 125 MBd with 4b/5b — a completely different PCS. Only ports that explicitly support "100M SFP" (many campus switches on selected ports, most routers; few data-centre switches) work; on others the module is detected and never links. Some hosts implement 100BASE-FX by SGMII replication with an external PHY in the module ("100M over SGMII" SFPs).
2500BASE-X
| Item | Value |
|---|---|
| Rate | 3.125 GBd, 8b/10b → 2.5 Gb/s |
| Standard | none from IEEE (de facto, 2.5 × 1000BASE-X); Linux phy-interface-type = "2500base-x" |
| AN | Clause 37 style, often disabled |
| Where | 2.5G SFP modules (2.5GBASE-T copper, 2.5G fibre), GPON/EPON ONU sticks toward the host (2.5G downstream), Wi-Fi 6 AP uplinks, some 2.5G switch SFP cages |
The IEEE equivalents for multigig are 2.5GBASE-X/5GBASE-R (802.3bz) but most silicon speaks 2500BASE-X or USXGMII.
QSGMII: four ports on one lane
| Item | Value |
|---|---|
| Rate | 5 GBd, 8b/10b; 4 SGMII channels time-multiplexed |
| Lanes | 2 pairs for four ports |
| Where | switch ASIC ↔ quad copper PHY (48-port access switches: 12 QSGMII lanes instead of 48 SGMII), some quad-port SFP cage designs via external SerDes |
| Variants | QSGMII (Cisco), also "PSGMII" (5 ports) on some Qualcomm/Realtek SoCs |
Not visible at a cage in normal designs; matters when a quad-PHY board exposes SFP combo ports whose mode is inherited from the PHY channel.
USXGMII: 10 Mb/s to 10 Gb/s on one 10G lane
| Item | Value |
|---|---|
| Rate | 10.3125 GBd, 64b/66b (10GBASE-R electrical) |
| Speeds | 10M, 100M, 1G, 2.5G, 5G, 10G by symbol replication (like SGMII scaled up) |
| Spec | Cisco USXGMII (v1.2), adopted widely; Linux usxgmii |
| Multi-port | USXGMII-M: 4 × 2.5G, 2 × 5G, 4 × 1G+… over one 10G lane (like QSGMII) |
| AN | USXGMII AN word in the 64b/66b idle, reports speed/duplex/link |
| Where | ASIC ↔ multigig PHY (2.5/5/10GBASE-T ports), 10GBASE-T SFP+ modules (internal PHY, e.g. Marvell AQR/Broadcom) |
A 10GBASE-T SFP+ module presents 10GBASE-R (SFI) to a normal SFP+ port and links at 10G; whether it can also serve 1G/2.5G/5G clients depends on the host supporting USXGMII rate adaptation on that cage — most switches do not, so the module works at 10G only, or performs the adaptation internally and reports 10G to the host while the copper side runs slower (Speed & rate).
How the host chooses the mode
| Host | Mechanism |
|---|---|
| Linux phylink/SFP | reads A0h bytes 3–10 (compliance), 12 (nominal rate), 36 (extended) and 6 bit 3 (1000BASE-T): 1000BASE-T → SGMII (or 1000BASE-X if the SoC lacks SGMII); 1000BASE-SX/LX → 1000BASE-X; BR 3.1 GBd → 2500BASE-X; 10G codes → 10GBASE-R; copper PHY inside the module is probed over I²C (address 0x56/0xAC) and driven by phylib |
| Switch NOS | port default from platform (most 1G SFP cages = SGMII-capable; SFP+/SFP28 at 1G often 1000BASE-X only), commands speed 1000, speed nonegotiate, media-type sfp, negotiation auto, port-mode |
| NIC drivers | Intel: SFP+ ports support 1G in 1000BASE-X only (no 10/100 copper SFP); Mellanox: 1G via 1000BASE-X on some models; Broadcom: per firmware (NIC ports) |
| Copper SFP | PHY mode strap/EEPROM (SGMII vs SerDes variant), AN behaviour set by vendor firmware |
Mismatch table
| Symptom | Cause | Fix |
|---|---|---|
| Copper SFP: 1G clients fine, 10/100 never link | port in 1000BASE-X | move to an SGMII-capable port or use a module that hides 10/100 behind 1G-to-host adaptation |
| Fibre SFP links only with AN off | far end without Clause 37 (media converter, some ONUs) or SGMII word from a copper module | speed nonegotiate / autoneg off |
| 100BASE-FX SFP detected, no link | host lacks 100M SerDes mode | use a port that supports 100M SFP, or 100BASE-FX-over-SGMII module |
| 2.5G SFP links at 1G or not at all | host has no 2500BASE-X | choose a 2.5G-capable cage or a module with rate fallback |
| ONU stick links, then drops | 2500BASE-X vs 1000BASE-X expectation, AN | set host to 2500BASE-X, AN off (PON optics) |
| 10GBASE-T SFP+ links at 10G only | no USXGMII on host | accept 10G-only, or use a module with internal rate adaptation |
| Linux: module works on one board, not another | phylink picked a different interface from the EEPROM; SoC lacks that mode | check dmesg for sfp: module … interface; fix compliance bytes or device tree |
In CodingBox
The bytes that steer the host's choice are all in A0h: compliance codes 3–10 (1000BASE-T, SX, LX, 10G codes), nominal bit rate 12, encoding 11 (8b/10b vs 64b/66b), extended compliance 36. A copper module coded as 1000BASE-SX will be treated as fibre and lose its 10/100 path; a fibre module with a stray 1000BASE-T bit will be driven as SGMII. CodingBox shows and edits these fields (Check transceiver, Compliance codes).