SGMII, 1000BASE-X, QSGMII, USXGMII: PHY와 SFP로의 직렬 인터페이스
모든 1G SFP 케이지는 1.25 GBd 시리얼 레인을 전달하며, 이 레인은 오실로스코프로는 똑같아 보이는 두 방언을 구사할 수 있습니다: 광섬유 모듈이 기대하는 IEEE 인터페이스인 1000BASE-X, 그리고 10/100 Mb/s와 별도의 자동 협상을 추가한 Cisco의 변형인 SGMII입니다. 구리 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 결합) |
| 코딩 | /K28.5/ 콤마를 사용하는 8b/10b, 순서집합 /C1/ /C2/(구성), /I1/ /I2/(유휴) |
| 자동 협상 | Clause 37: /C/ 순서집합으로 16비트 구성 워드를 교환합니다 — 전이중/반이중, pause(대칭/비대칭), 원격 장애, 확인 응답. 속도 필드 없음: 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 specification 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 확인 응답 — 구리 쪽이 협상한 내용을 MAC에 알리기 위해 PHY → 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 모듈은 제조 시 설정된 구성 EEPROM/스트랩에 따라 SGMII나 1000BASE-X 중 하나가 기본값입니다. 벤더는 같은 모듈의 “SGMII” 버전과 “SerDes” 버전을 따로 판매하며, 일부는 모듈의 I²C로 접근 가능한 PHY 레지스터를 통해 전환할 수 있습니다. “1000BASE-T SFP supported”라고 명시된 스위치 포트는 해당 케이지에서 SGMII를 구현한 것입니다(구리 이더넷과 DAC).
100BASE-FX SFP
100 Mb/s 광섬유 SFP(100BASE-FX, 1310 nm, 2 km)는 호스트가 레인을 125 MBd, 4b/5b로 구동할 것을 요구합니다 — 완전히 다른 PCS입니다. “100M SFP”를 명시적으로 지원하는 포트(일부 포트만 지원하는 캠퍼스 스위치가 많고, 대부분의 라우터가 해당되며, 데이터센터 스위치는 드묾)에서만 동작하며, 그 외에서는 모듈이 인식은 되어도 링크되지 않습니다. 일부 호스트는 모듈 안의 외장 PHY와 SGMII 복제로 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" |
| AN | Clause 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: 레인 하나로 포트 4개
| 항목 | 값 |
|---|---|
| 레이트 | 5 GBd, 8b/10b, SGMII 채널 4개를 시분할 다중화 |
| 레인 | 포트 4개에 2페어 |
| 위치 | 스위치 ASIC ↔ 쿼드 구리 PHY(48포트 액세스 스위치: SGMII 48개 대신 QSGMII 레인 12개), 일부 쿼드 포트 SFP 케이지 설계는 외장 SerDes 경유 |
| 변형 | QSGMII(Cisco), 일부 Qualcomm/Realtek SoC의 “PSGMII”(5포트) |
일반적인 설계에서는 케이지에서 드러나지 않으며, 쿼드 PHY 보드가 PHY 채널로부터 모드를 물려받는 SFP 콤보 포트를 노출할 때 중요해집니다.
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와 유사) |
| AN | 64b/66b 유휴 구간의 USXGMII AN 워드로 속도/듀플렉스/링크를 보고 |
| 위치 | 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 지원, 1G에서의 SFP+/SFP28은 흔히 1000BASE-X 전용), 명령어는 speed 1000, speed nonegotiate, media-type sfp, negotiation auto, port-mode |
| NIC 드라이버 | Intel: SFP+ 포트는 1G를 1000BASE-X로만 지원(10/100 구리 SFP 불가), Mellanox: 일부 모델은 1000BASE-X로 1G 지원, Broadcom: 펌웨어에 따라 다름(NIC 포트) |
| 구리 SFP | PHY 모드 스트랩/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를 확인, 컴플라이언스 바이트나 device tree를 수정 |
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, 컴플라이언스 코드).