호스트의 동작: 탐지, 검증, 기동
규격은 모듈 쪽 — 핀, 메모리, 상태를 설명합니다. 이 페이지는 호스트 쪽을 설명합니다: 모듈이 삽입된 순간부터 트래픽이 흐르기까지 스위치, 라우터, NIC가 실행하는 순서이며, 각 단계가 사용하는 핀, 바이트, 타이밍을 다룹니다. 이를 알면 "포트가 미지원이라고 한다"가 "호스트가 4단계에서 멈췄다"로 바뀌며, 벤치에서는 완벽한 모듈이 포트에서는 여전히 실패할 수 있는 이유를 알 수 있습니다.
폼 팩터별 저속 신호
| 폼 팩터 | 존재 감지 | 리셋/전원 | 인터럽트/장애 | 기타 |
|---|---|---|---|---|
| SFP / SFP+ / SFP28 | MOD_ABS(로우 = 존재) | —(TX_DISABLE이 레이저를 제어) | TX_FAULT, RX_LOS | RS0, RS1 레이트 셀렉트 |
| XFP | Mod_ABS | P_Down/RST | Interrupt, Mod_NR(준비되지 않음), RX_LOS | TX_DIS, Mod_DeSel |
| QSFP+ / QSFP28 | ModPrsL | ResetL, LPMode | IntL | ModSelL |
| QSFP-DD | ModPrsL | ResetL, LPMode | IntL | ModSelL |
| OSFP | PRSn | RSTn, LPWn | INT | —(선택 핀 없음, 포트당 버스 1개) |
| SFP-DD | SFP와 동일한 모듈 부재 신호 | 저전력 요청 | 인터럽트 | SFP와 동일한 레이트 셀렉트 |
계열별 핀 기능과 핀 배치: SFP 하드웨어, QSFP 하드웨어, XFP.
시퀀스
| # | 단계 | SFP(SFF-8472) | QSFP(SFF-8636) | CMIS | 실패 시 나타나는 현상 |
|---|---|---|---|---|---|
| 1 | 감지 | MOD_ABS가 로우로 떨어짐; 디바운스 | ModPrsL 로우 | ModPrsL / PRSn 로우 | 포트가 비어 있는 상태로 유지됨; 모듈 “감지되지 않음” |
| 2 | 전원과 대기 | 3.3 V는 항상 켜져 있음; t_init 300 ms 대기 | LPMode 하이 상태로 전원 인가(클래스 1만); t_init 2 s 대기 또는 Data_Not_Ready 폴링 | 동일; 모듈 상태가 MgmtInit을 벗어날 때까지 대기(≤ 2 s) | 읽기 결과가 FFh / 00h로 나옴; 식별 정보가 비어 있음 |
| 3 | 식별 | A0h 0–95 읽기; 바이트 0 = 03h이면 SFF-8472 파서 선택 | 0–127과 상위 00h 읽기; 바이트 0 = 0Dh/11h, 바이트 1은 리비전 | 하위 페이지와 상위 00h 읽기; 바이트 0 = 18h/19h…, 바이트 1은 CMIS 버전 | unknown module type |
| 4 | 검증 | CC_BASE, CC_EXT; 식별자/커넥터/인코딩 일관성 | CC_BASE, CC_EXT | 페이지 00h 체크섬 | invalid EEPROM, checksum error — 체크섬 |
| 5 | 유형 디코딩 | 컴플라이언스 바이트 3–10, 36; 레이트 바이트 12/66; 길이; 파장 | 바이트 131–138, 192; 140/222 | 미디어 유형 85, 애플리케이션 디스크립터 | speed and type not supported — 컴플라이언스 코드 |
| 6 | 정책 | 벤더 이름/PN(경우에 따라 서명까지)을 호환성 표와 대조 | 동일 | 동일 | unsupported transceiver, errdisable — 벤더 락 |
| 7 | 전력 클래스 | 바이트 64 레벨 비트를 포트 버짓과 비교 | 바이트 129 클래스; 저전력 해제 / 클래스 5–8 활성화하려면 바이트 93에 기록 | 바이트 200 클래스를 포트와 비교; LPMode 해제 또는 LowPwrRequestSW 지우기 → 모듈 PwrUp → Ready | 저전력 상태로 유지됨, power exceeds — 전력과 발열 |
| 8 | 구성 | RS0/RS1 또는 소프트 레이트 셀렉트; 호스트 측 속도, FEC, SGMII/1000BASE-X | CDR 온/오프(98), 레이트 셀렉트(87–88), 호스트의 브레이크아웃 레인 | 단계별 제어 세트에서 AppSel/DataPathID 선택 → ApplyDPInit → 데이터 경로 Init → Initialized | LOL, FEC 불일치, 브레이크아웃 거부됨 — 속도와 레이트 |
| 9 | Tx 활성화 | TX_DISABLE 핀 로우 또는 소프트 비트 지우기(A2h 110.6) | 바이트 86 = 00h | 페이지 10h 바이트 130 = 00h → DPTxTurnOn → DPActivated | 원단에서 −40 dBm 관측 — 링크 없음 체크리스트 |
| 10 | 링크 | PHY/MAC가 신호를 감지; DAC에서는 AN/링크 트레이닝 | 레인마다 동일 | 데이터 경로마다 동일 | 수치는 정상인데 링크가 다운됨 |
| 11 | 모니터링 | 몇 초마다 A2h 모니터와 플래그 폴링; TX_FAULT / RX_LOS 핀 | IntL → 플래그 3–21 읽기; 모니터 폴링 | IntL → 모듈 플래그 + 페이지 11h 레인 플래그; VDM | 알람, 플래핑 — DDM 레벨, 링크 플래핑 |
| 12 | 제거 | MOD_ABS 하이 → 종료 처리 | ModPrsL 하이 | ModPrsL 하이 | 디바운스를 놓치면 오래된 상태가 남음 |
QSFP와 CMIS 모듈에서는 3–6단계가 저전력 상태에서 일어납니다: 호스트는 광학계에 전력을 쓰기 전에 먼저 검증합니다. 그래서 잠기거나 잘못 코딩된 모듈은 레이저가 절대 켜지지 않으며, 전기적으로는 멀쩡한 모듈인데도 원단에서 −40 dBm으로 읽히는 이유가 여기 있습니다.
호스트가 기다리는 타이밍
| 대기 | SFP | QSFP | CMIS |
|---|---|---|---|
| 삽입 후 관리 기능 준비 | 300 ms | 2 s | ≤ 2 s(MgmtInit) 이후 LowPwr 상태 |
| 저전력 해제 후 | — | Data_Not_Ready가 지워질 때까지 | 모듈 상태가 Ready가 될 때까지(최대 지속 시간은 페이지 01h에 광고) |
| 데이터 경로 초기화 | — | — | 단계별로 광고(니블 코드: < 1 ms … < 50 min) |
| Tx 활성화부터 발광까지 | t_on ≤ 1 ms | ton_txdis 100 ms / toff 400 ms | DPTxTurnOn 지속 시간 광고 |
| 플래그부터 인터럽트까지 | — | ton_IntL 200 ms | 하드웨어 규격에 따름 |
버스 수준 타이밍(t_WR, 클록 스트레치): 2선식 인터페이스.
호스트마다 다른 정책 지점
- 화이트리스트 엄격도 — "벤더 이름만 확인"부터 서명된 벤더 지정 블록까지.
- 거부 시 동작 — 포트 비활성화, 레이저 끄기, 또는 로그만 남기고 링크는 허용(서드파티 광학계).
- CMIS 지원 깊이 — 애플리케이션/데이터 경로를 완전히 제어하는 방식부터 “LPMode를 풀고 기대하는” 방식까지(CMIS 문제).
- FEC와 속도 기본값 — 컴플라이언스 코드에서 유도되거나 정적으로 구성됩니다.
- DDM 폴링 — 주기, 임계값 초과 시 포트를 종료할지, 외부 교정을 적용할지(교정).
호스트가 어디서 멈췄는지 확인하는 벤더별 CLI: 스위치에서 옵틱스 검증.
프로그래머가 호스트와 다른 점
CodingBox 같은 프로그래머는 1–5단계와 11단계는 실행하지만 정책은 실행하지 않습니다: 벤더 영역과 비밀번호 바이트를 포함해 모듈이 노출하는 모든 것을 읽고, 별도로 요청하지 않는 한 CMIS 모듈을 저전력 상태로 유지하며, 레이저는 스스로 절대 켜지 않습니다. 그래서 모듈이 벤치에서는 건강해 보여도 포트에서는 여전히 실패할 수 있습니다 — 벤치에는 6단계가 없습니다.
CodingBox에서
Check transceiver는 호스트가 보는 것과 같은 방식으로 3–5단계의 결과 — 유형, 레이트, 체크섬, 전력 클래스 — 를 보여주고, 모듈이 포트에 도달하기 전에 불일치를 표시합니다; DDM은 실시간 모니터와 플래그로 11단계를 다룹니다.
6단계(정책) 뒤에 있는 하드웨어와 8단계 뒤에 있는 포트 그룹 한계: 스위치 내부, NOS마다 모듈을 검증하는 방법.