CodingBox Documentation

SGMII, 1000BASE-X, QSGMII, USXGMII: serial interfaces to PHYs & SFP

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)

ItemValue
Rate1.25 GBd, 8b/10b → 1000 Mb/s payload
Lanes1 differential pair each direction (CML, AC-coupled)
Coding8b/10b with /K28.5/ commas, ordered sets /C1/ /C2/ (configuration), /I1/ /I2/ (idle)
Auto-negotiationClause 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
Whereswitch/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)

ItemValue
Ratesame 1.25 GBd, 8b/10b
10/100 supporteach data byte replicated 100× (10 Mb/s) or 10× (100 Mb/s) so the line stays at 1.25 GBd
Lanes2 pairs; optional 625 MHz DDR clock pairs (TX_CLK/RX_CLK) — most SerDes implementations run clockless
Auto-negotiationSGMII 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
WhereMAC ↔ 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 modeCopper SFP behaviour10/100 clients
1000BASE-X, AN onmodule's PHY must answer Clause 37 — many do (emulate), some do not → no link until AN offno (no speed field)
1000BASE-X, AN offlink at 1G when the copper side negotiates 1Gno
SGMII, AN onPHY reports 10/100/1000 via control wordyes
SGMII, AN offfixed 1Gno

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

ItemValue
Rate3.125 GBd, 8b/10b → 2.5 Gb/s
Standardnone from IEEE (de facto, 2.5 × 1000BASE-X); Linux phy-interface-type = "2500base-x"
ANClause 37 style, often disabled
Where2.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

ItemValue
Rate5 GBd, 8b/10b; 4 SGMII channels time-multiplexed
Lanes2 pairs for four ports
Whereswitch ASIC ↔ quad copper PHY (48-port access switches: 12 QSGMII lanes instead of 48 SGMII), some quad-port SFP cage designs via external SerDes
VariantsQSGMII (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

ItemValue
Rate10.3125 GBd, 64b/66b (10GBASE-R electrical)
Speeds10M, 100M, 1G, 2.5G, 5G, 10G by symbol replication (like SGMII scaled up)
SpecCisco USXGMII (v1.2), adopted widely; Linux usxgmii
Multi-portUSXGMII-M: 4 × 2.5G, 2 × 5G, 4 × 1G+… over one 10G lane (like QSGMII)
ANUSXGMII AN word in the 64b/66b idle, reports speed/duplex/link
WhereASIC ↔ 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

HostMechanism
Linux phylink/SFPreads 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 NOSport 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 driversIntel: 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 SFPPHY mode strap/EEPROM (SGMII vs SerDes variant), AN behaviour set by vendor firmware

Mismatch table

SymptomCauseFix
Copper SFP: 1G clients fine, 10/100 never linkport in 1000BASE-Xmove to an SGMII-capable port or use a module that hides 10/100 behind 1G-to-host adaptation
Fibre SFP links only with AN offfar end without Clause 37 (media converter, some ONUs) or SGMII word from a copper modulespeed nonegotiate / autoneg off
100BASE-FX SFP detected, no linkhost lacks 100M SerDes modeuse a port that supports 100M SFP, or 100BASE-FX-over-SGMII module
2.5G SFP links at 1G or not at allhost has no 2500BASE-Xchoose a 2.5G-capable cage or a module with rate fallback
ONU stick links, then drops2500BASE-X vs 1000BASE-X expectation, ANset host to 2500BASE-X, AN off (PON optics)
10GBASE-T SFP+ links at 10G onlyno USXGMII on hostaccept 10G-only, or use a module with internal rate adaptation
Linux: module works on one board, not anotherphylink picked a different interface from the EEPROM; SoC lacks that modecheck 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).