CMIS — common management
CMIS, the Common Management Interface Specification, is the management model for every new high-speed form factor: QSFP-DD, OSFP, OSFP-XD, QSFP112, SFP-DD and SFP112 (as SFP+ with CMIS), DSFP, COBO and CMIS-capable QSFP. It began in the QSFP-DD MSA (CMIS 3.0, 2018), was adopted by the OSFP and COBO groups, and since version 5.0 (2021) is maintained at the OIF. Compared with SFF-8636 it is not a bigger memory map but a different model: banked pages for up to 32 lanes, explicit state machines for the module and each data path, applications instead of compliance bit fields, versatile diagnostics (VDM) and a command channel (CDB) for firmware and extended functions. Version byte and history: Specification revisions.
Memory model
| Region | Addressing | Contents |
|---|---|---|
| Lower page (bytes 0–127) | always visible | identifier, revision, module state, flags, module monitors, global controls, media type, application descriptors 1–8, password, bank select 126, page select 127 |
| Upper page 00h (128–255) | page 127 = 00h | vendor block, power class, connector, cable lengths, media technology, checksum |
| 01h | advertising | firmware/hardware revisions, link lengths, wavelength, supported pages and banks, durations, signal-integrity controls, descriptors 9–15 |
| 02h | thresholds | module and lane alarm/warning thresholds |
| 04h | laser capabilities | tunable laser grids and ranges (SFF-TA-1004 lineage) |
| 10h (banked) | lane control | data-path deinit, Tx disable, polarity, squelch, equalisation, staged control sets |
| 11h (banked) | lane status | data-path states, per-lane flags, lane monitors, configuration status, active control set |
| 12h (banked) | tunable laser control | channel/wavelength per lane |
| 13h–14h (banked) | diagnostics | loopbacks, PRBS generators and checkers |
| 20h–2Fh (banked) | VDM | descriptors, samples, thresholds, flags |
| 9Fh | CDB | command block: command ID, lengths, checksum, local payload |
| A0h–AFh | CDB EPL | extended payload for large transfers (firmware images) |
| 80h–FFh (other) | vendor | custom pages |
A bank addresses 8 lanes: bank 0 lanes 1–8, bank 1 lanes 9–16 and so on; how many are implemented is advertised in page 01h. Modules with only page 00h set the flat memory bit (byte 2 bit 7). Bus: single address A0h, up to 400 kHz, ModSelL per slot — two-wire interface.
Lower page — the bytes a host lives on
| Bytes | Field | Notes |
|---|---|---|
| 0 | Identifier | 18h QSFP-DD, 19h OSFP, 1Eh QSFP with CMIS… (SFF-8024) |
| 1 | CMIS revision | major.minor nibbles: 50h = 5.0, 40h = 4.0, 30h = 3.0 |
| 2 | Memory characteristics | bit 7 flat memory, plus stepped-config-only and other capability bits |
| 3 | Module state | bits 3–1: 1 LowPwr, 2 PwrUp, 3 Ready, 4 PwrDn, 5 Fault; bit 0 interrupt deasserted |
| 8–11 | Module flags | state changed, temperature/Vcc alarms, aux alarms, custom; latched, cleared on read |
| 14–25 | Module monitors | temperature, Vcc, Aux1–Aux3 (TEC current, laser temperature, additional supply), custom |
| 26 | Global controls | 5.x: bit 6 LowPwrAllowRequestHW, bit 5 squelch method, bit 4 LowPwrRequestSW, bit 3 software reset (4.x: bit 6 LowPwr, bit 4 ForceLowPwr) |
| 37–38 | CDB status | busy / success / fail for command blocks 1 and 2 |
| 39–40 | Active firmware | major.minor of the running image |
| 85 | Media type | 01h MMF, 02h SMF, 03h passive copper, 04h active cable, 05h BASE-T |
| 86–117 | Application descriptors 1–8 | 4 bytes each: host interface ID, media interface ID, host/media lane counts, host lane assignment options |
| 118–121 | Password change | vendor defined |
| 122–125 | Password entry | vendor defined — where write-protection passwords go |
| 126 | Bank select | — |
| 127 | Page select | — |
Module state machine
Reset ──► MgmtInit ──► ModuleLowPwr ──► ModulePwrUp ──► ModuleReady
▲ │
└──────── ModulePwrDn ◄────────┘
(ModuleFault from any state on a fatal error)
- MgmtInit — the module boots its controller; identity is not yet readable (up to 2 s per the hardware specs).
- ModuleLowPwr — identity, advertising and thresholds readable; power limited to class 1; the host validates the module here.
- ModulePwrUp → ModuleReady — the host deasserts the LPMode pin (or clears LowPwrRequestSW) and the module powers its optics; data paths can now be initialised.
- ModulePwrDn — the reverse on an LPMode assertion.
A module that never leaves LowPwr is the classic CMIS ticket: CMIS issues, Power & thermal.
Applications and the data path
Instead of compliance bits, a CMIS module advertises applications — pairs of host electrical interface and media interface, with lane counts:
| Descriptor | Host interface | Media interface | Host lanes / media lanes | Example |
|---|---|---|---|---|
| App 1 | 12h 400GAUI-8 C2M | 1Ch 400GBASE-DR4 | 8 / 4 | one 400G link |
| App 2 | 0Eh 100GAUI-2 C2M | 14h 100GBASE-DR | 2 / 1 | 4 × 100G breakout |
The host picks an application per lane by writing AppSel (bits 7–4), a DataPathID (bits 3–1) and the explicit-control bit into the Staged Control Set 0 (page 10h bytes 145–152), then asserts ApplyDPInit (page 10h byte 143). The module answers in ConfigStatus (page 11h bytes 202–205: accepted, rejected, invalid AppSel, invalid lane combination…) and copies the accepted values into the Active Control Set (page 11h 206–221). Each data path then walks its own state machine:
DPDeactivated ──► DPInit ──► DPInitialized ──► DPTxTurnOn ──► DPActivated
▲ │
└────────── DPDeinit ◄───────── DPTxTurnOff ◄──────────────┘
States are reported per lane in page 11h bytes 128–131 (one nibble per lane), and the maximum durations of each step are advertised in page 01h so the host knows how long to wait. Tx disable per lane lives in page 10h byte 130. Breakout that the module does not list as an application is simply not available — Speed & rate.
Monitoring: flags, monitors, VDM
- Module monitors (lower page 14–25) and lane monitors (page 11h: Tx power 154–169, Tx bias 170–185, Rx power 186–201, 2 bytes per lane) use the same 16-bit formats as SFP/QSFP (units).
- Thresholds are on page 02h; flags are latched and cleared on read, with masks per flag; IntL signals any unmasked flag.
- VDM (pages 20h–2Fh) adds observables the old specs never had: pre-FEC BER, uncorrectable FEC frames, SNR per lane, laser temperature and age, eSNR, PAM4 level transition parameters — each with its own descriptor, thresholds and flags. This is how a 400G module reports link quality before errors reach the host (Monitoring).
CDB — Command Data Block
Page 9Fh is a mailbox: the host writes a command ID (bytes 128–129), payload lengths (130–132), a checksum (133) and up to 120 bytes of local payload (136–255), optionally more in the EPL pages A0h–AFh; the module executes and reports in status bytes 37–38 and a reply payload. Standard commands include:
| Command | Purpose |
|---|---|
| 0000h | query status |
| 0040h / 0041h | module features / firmware-management features |
| 0100h | get firmware info (running and inactive images) |
| 0101h | start firmware download |
| 0103h / 0104h | write firmware block via LPL / EPL |
| 0107h | complete download |
| 0109h / 010Ah | run image / commit image |
| 0102h | abort |
CDB is how vendor tools update module firmware in the field and how some vendors implement configuration and unlock functions. Support and features are advertised in page 01h.
Checksums and passwords
Page 00h byte 222 checksums bytes 128–221; pages 01h, 02h and 04h carry a page checksum in byte 255 (Checksums). Passwords (122–125) and vendor unlock schemes are outside the specification — EEPROM recoding.
Host support
Network operating systems implement CMIS 4.0 and 5.x to varying depth: some drive the full application/data-path flow, others release LPMode and expect the module to bring itself up. The difference is behind most "recognised but never ready" tickets — CMIS issues, What the host does.
In CodingBox
CodingBox detects CMIS by identifier and revision byte, reads lower memory, pages 00h, 01h, 02h and the banked lane pages, decodes application descriptors against SFF-8024, shows module and data-path states and per-lane monitors on DDM, and edits identity with page checksums recalculated in the EEPROM editor. Firmware operations over CDB are vendor-specific and outside the editor's scope.
Register-level tables: Lower page map, Upper pages map 00h/01h/02h, Lane pages map 10h/11h, VDM, CDB.