CMIS — 공통 관리
CMIS(Common Management Interface Specification)는 QSFP-DD, OSFP, OSFP-XD, QSFP112, SFP-DD, SFP112(SFP+ with CMIS로), DSFP, COBO, CMIS 지원 QSFP까지 모든 신형 고속 폼 팩터의 관리 모델입니다. QSFP-DD MSA(CMIS 3.0, 2018년)에서 시작해 OSFP와 COBO 그룹이 채택했으며, 버전 5.0(2021년)부터는 OIF가 관리합니다. SFF-8636과 비교하면 단순히 더 큰 메모리 맵이 아니라 다른 모델입니다: 최대 32레인을 위한 뱅크화된 페이지, 모듈과 각 데이터 경로를 위한 명시적 상태 머신, 컴플라이언스 비트 필드 대신 쓰는 애플리케이션, 다양한 진단 기능(VDM), 펌웨어와 확장 기능을 위한 명령 채널(CDB)입니다. 버전 바이트와 이력: 규격 리비전.
메모리 모델
| 영역 | 주소 지정 | 내용 |
|---|---|---|
| 하위 페이지(바이트 0–127) | 항상 접근 가능 | 식별자, 리비전, 모듈 상태, 플래그, 모듈 모니터, 전역 제어, 미디어 유형, 애플리케이션 디스크립터 1–8, 비밀번호, 뱅크 선택 126, 페이지 선택 127 |
| 상위 페이지 00h(128–255) | 페이지 127 = 00h | 벤더 블록, 전력 클래스, 커넥터, 케이블 길이, 미디어 기술, 체크섬 |
| 01h | 광고 | 펌웨어/하드웨어 리비전, 링크 길이, 파장, 지원되는 페이지와 뱅크, 지속 시간, 신호 무결성 제어, 디스크립터 9–15 |
| 02h | 임계값 | 모듈과 레인의 알람/경고 임계값 |
| 04h | 레이저 기능 | 튜너블 레이저 그리드와 범위(SFF-TA-1004 계열) |
| 10h(뱅크화) | 레인 제어 | 데이터 경로 비활성화, Tx disable, 극성, 스퀠치, 등화, 단계별 제어 세트 |
| 11h(뱅크화) | 레인 상태 | 데이터 경로 상태, 레인별 플래그, 레인 모니터, 구성 상태, 활성 제어 세트 |
| 12h(뱅크화) | 튜너블 레이저 제어 | 레인별 채널/파장 |
| 13h–14h(뱅크화) | 진단 | 루프백, PRBS 생성기와 검사기 |
| 20h–2Fh(뱅크화) | VDM | 디스크립터, 샘플, 임계값, 플래그 |
| 9Fh | CDB | 명령 블록: 명령 ID, 길이, 체크섬, 로컬 페이로드 |
| A0h–AFh | CDB EPL | 대용량 전송(펌웨어 이미지)을 위한 확장 페이로드 |
| 80h–FFh(기타) | 벤더 | 벤더 지정 페이지 |
뱅크는 레인 8개를 다룹니다: 뱅크 0은 레인 1–8, 뱅크 1은 레인 9–16, 이런 식입니다; 몇 개가 구현되어 있는지는 페이지 01h에 광고됩니다. 페이지 00h만 있는 모듈은 플랫 메모리 비트(바이트 2 비트 7)를 세팅합니다. 버스: 단일 주소 A0h, 최대 400 kHz, 슬롯별 ModSelL — 2선식 인터페이스.
하위 페이지 — 호스트가 의존하는 바이트
| 바이트 | 필드 | 비고 |
|---|---|---|
| 0 | 식별자 | 18h QSFP-DD, 19h OSFP, 1Eh QSFP with CMIS…(SFF-8024) |
| 1 | CMIS 리비전 | 메이저.마이너 니블: 50h = 5.0, 40h = 4.0, 30h = 3.0 |
| 2 | 메모리 특성 | 비트 7 플랫 메모리, 그 외 stepped-config-only 등 기능 비트 |
| 3 | 모듈 상태 | 비트 3–1: 1 LowPwr, 2 PwrUp, 3 Ready, 4 PwrDn, 5 Fault; 비트 0 인터럽트 비활성화 |
| 8–11 | 모듈 플래그 | 상태 변경, 온도/Vcc 알람, 보조 알람, 벤더 지정; 래치되며 읽으면 지워짐 |
| 14–25 | 모듈 모니터 | 온도, Vcc, Aux1–Aux3(TEC 전류, 레이저 온도, 추가 공급 전압), 벤더 지정 |
| 26 | 전역 제어 | 5.x: 비트 6 LowPwrAllowRequestHW, 비트 5 스퀠치 방식, 비트 4 LowPwrRequestSW, 비트 3 소프트웨어 리셋(4.x: 비트 6 LowPwr, 비트 4 ForceLowPwr) |
| 37–38 | CDB 상태 | 명령 블록 1과 2의 처리 중 / 성공 / 실패 |
| 39–40 | 활성 펌웨어 | 실행 중인 이미지의 메이저.마이너 |
| 85 | 미디어 유형 | 01h MMF, 02h SMF, 03h 패시브 구리, 04h 액티브 케이블, 05h BASE-T |
| 86–117 | 애플리케이션 디스크립터 1–8 | 각 4바이트: 호스트 인터페이스 ID, 미디어 인터페이스 ID, 호스트/미디어 레인 수, 호스트 레인 할당 옵션 |
| 118–121 | 비밀번호 변경 | 벤더 정의 |
| 122–125 | 비밀번호 입력 | 벤더 정의 — 쓰기 보호 비밀번호가 들어가는 위치 |
| 126 | 뱅크 선택 | — |
| 127 | 페이지 선택 | — |
모듈 상태 머신
Reset ──► MgmtInit ──► ModuleLowPwr ──► ModulePwrUp ──► ModuleReady
▲ │
└──────── ModulePwrDn ◄────────┘
(ModuleFault from any state on a fatal error)
- MgmtInit — 모듈이 컨트롤러를 부팅합니다; 식별 정보는 아직 읽을 수 없습니다(하드웨어 규격 기준 최대 2 s).
- ModuleLowPwr — 식별 정보, 광고, 임계값을 읽을 수 있습니다; 전력은 클래스 1로 제한됩니다; 호스트가 여기서 모듈을 검증합니다.
- ModulePwrUp → ModuleReady — 호스트가 LPMode 핀을 해제하면(또는 LowPwrRequestSW를 지우면) 모듈이 광학계에 전력을 공급합니다; 이제 데이터 경로를 초기화할 수 있습니다.
- ModulePwrDn — LPMode가 인가되면 역순으로 진행됩니다.
LowPwr에서 절대 벗어나지 못하는 모듈은 CMIS의 전형적인 장애 티켓입니다: CMIS 문제, 전력과 발열.
애플리케이션과 데이터 경로
컴플라이언스 비트 대신, CMIS 모듈은 애플리케이션을 광고합니다 — 호스트 전기 인터페이스와 미디어 인터페이스의 조합에 레인 수를 더한 것입니다:
| 디스크립터 | 호스트 인터페이스 | 미디어 인터페이스 | 호스트 레인 / 미디어 레인 | 예 |
|---|---|---|---|---|
| App 1 | 12h 400GAUI-8 C2M | 1Ch 400GBASE-DR4 | 8 / 4 | 400G 링크 1개 |
| App 2 | 0Eh 100GAUI-2 C2M | 14h 100GBASE-DR | 2 / 1 | 4 × 100G 브레이크아웃 |
호스트는 레인마다 AppSel(비트 7–4), DataPathID(비트 3–1), explicit-control 비트를 단계별 제어 세트 0(페이지 10h 바이트 145–152)에 기록해 애플리케이션을 선택한 뒤, ApplyDPInit(페이지 10h 바이트 143)을 인가합니다. 모듈은 ConfigStatus(페이지 11h 바이트 202–205: 승인, 거부, AppSel 오류, 레인 조합 오류…)로 응답하고, 승인된 값을 활성 제어 세트(페이지 11h 206–221)에 복사합니다. 이후 각 데이터 경로는 자신만의 상태 머신을 따라갑니다:
DPDeactivated ──► DPInit ──► DPInitialized ──► DPTxTurnOn ──► DPActivated
▲ │
└────────── DPDeinit ◄───────── DPTxTurnOff ◄──────────────┘
상태는 페이지 11h 바이트 128–131에 레인별로 보고되며(레인당 니블 1개), 각 단계의 최대 지속 시간은 호스트가 얼마나 기다려야 하는지 알 수 있도록 페이지 01h에 광고됩니다. 레인별 Tx disable은 페이지 10h 바이트 130에 있습니다. 모듈이 애플리케이션으로 나열하지 않은 브레이크아웃은 그냥 사용할 수 없습니다 — 속도와 레이트.
모니터링: 플래그, 모니터, VDM
- 모듈 모니터(하위 페이지 14–25)와 레인 모니터(페이지 11h: Tx 파워 154–169, Tx 바이어스 170–185, Rx 파워 186–201, 레인당 2바이트)는 SFP/QSFP와 동일한 16비트 형식을 사용합니다(단위).
- 임계값은 페이지 02h에 있습니다; 플래그는 래치되며 읽으면 지워지고, 플래그마다 마스크가 있습니다; IntL은 마스크되지 않은 플래그가 있으면 신호를 보냅니다.
- VDM(페이지 20h–2Fh)은 예전 규격에는 없던 관측값을 추가합니다: pre-FEC BER, 정정 불가능한 FEC 프레임, 레인별 SNR, 레이저 온도와 노화, eSNR, PAM4 레벨 전환 파라미터 — 각각 자체 디스크립터, 임계값, 플래그를 가집니다. 이것이 400G 모듈이 오류가 호스트에 도달하기 전에 링크 품질을 보고하는 방법입니다(모니터링).
CDB — 명령 데이터 블록
페이지 9Fh는 메일박스입니다: 호스트가 명령 ID(바이트 128–129), 페이로드 길이(130–132), 체크섬(133), 최대 120바이트의 로컬 페이로드(136–255)를 기록하고, 필요하면 EPL 페이지 A0h–AFh에 더 기록합니다; 모듈이 이를 실행하고 상태 바이트 37–38과 응답 페이로드로 보고합니다. 표준 명령은 다음과 같습니다:
| 명령 | 용도 |
|---|---|
| 0000h | 상태 조회 |
| 0040h / 0041h | 모듈 기능 / 펌웨어 관리 기능 |
| 0100h | 펌웨어 정보 가져오기(실행 중 이미지와 비활성 이미지) |
| 0101h | 펌웨어 다운로드 시작 |
| 0103h / 0104h | LPL/EPL을 통한 펌웨어 블록 쓰기 |
| 0107h | 다운로드 완료 |
| 0109h / 010Ah | 이미지 실행 / 이미지 커밋 |
| 0102h | 중단 |
CDB는 벤더 도구가 현장에서 모듈 펌웨어를 업데이트하는 방법이며, 일부 벤더가 구성과 잠금 해제 기능을 구현하는 방법이기도 합니다. 지원 여부와 기능은 페이지 01h에 광고됩니다.
체크섬과 비밀번호
페이지 00h 바이트 222는 바이트 128–221의 체크섬입니다; 페이지 01h, 02h, 04h는 바이트 255에 페이지 체크섬을 담습니다(체크섬). 비밀번호(122–125)와 벤더 락 해제 방식은 규격 범위 밖입니다 — EEPROM 재코딩.
호스트 지원
네트워크 운영체제가 CMIS 4.0과 5.x를 구현하는 정도는 제각각입니다: 애플리케이션/데이터 경로 전체 흐름을 직접 제어하는 것도 있고, LPMode만 해제한 뒤 모듈이 스스로 기동하기를 기대하는 것도 있습니다. 이 차이가 “인식은 되지만 절대 준비되지 않는” 대부분의 장애 티켓 뒤에 있습니다 — CMIS 문제, 호스트의 동작.
CodingBox에서
CodingBox는 식별자와 리비전 바이트로 CMIS를 감지하고, 하위 메모리와 페이지 00h, 01h, 02h, 뱅크화된 레인 페이지를 읽으며, 애플리케이션 디스크립터를 SFF-8024와 대조해 디코딩하고, 모듈과 데이터 경로 상태, 레인별 모니터를 DDM에서 보여주며, EEPROM editor에서 페이지 체크섬을 재계산하면서 식별 정보를 편집합니다. CDB를 통한 펌웨어 작업은 벤더마다 다르며 에디터의 범위 밖입니다.
레지스터 수준 표: 하위 페이지 맵, 상위 페이지 맵 00h/01h/02h, 레인 페이지 맵 10h/11h, VDM, CDB.