SFF-8024 — code tables
SFF-8024, SFF Module Management Reference Code Tables, is the shared registry of one-byte codes that every other management specification points to. It does not describe a memory layout; it assigns meaning to values — what module type 18h is, which connector 0Ch means, what extended compliance code 06h stands for. Because the registry lives in one document, SFF-8472, SFF-8636, CMIS, MIS and INF-8077i all interpret the same byte the same way, and new form factors or PMDs are registered once. The document is revised several times a year; always decode against a recent revision.
Where each table is used
| Table | Name | SFP (SFF-8472) | QSFP (SFF-8636) | CMIS |
|---|---|---|---|---|
| 4-1 | Identifier | A0h byte 0 | byte 0 / 128 | byte 0 / 128 |
| 4-2 | Encoding | byte 11 | byte 139 | — (implied by application) |
| 4-3 | Connector | byte 2 | byte 130 | page 00h byte 203 |
| 4-4 | Extended specification compliance | byte 36 | byte 192 | — |
| 4-5 | Host electrical interface ID | — | — | application descriptors (byte 86 + 4n) |
| 4-6 … | Media interface IDs (MMF, SMF, passive copper, active cable, BASE-T) | — | — | application descriptors (byte 87 + 4n), table chosen by media type byte 85 |
Table 4-1 — identifier values
| Code | Module | Code | Module |
|---|---|---|---|
| 00h | unknown / unspecified | 11h | QSFP28 (SFF-8636) |
| 01h | GBIC | 12h | CXP2 / CXP28 |
| 02h | module soldered to motherboard | 13h | CDFP style 1/2 |
| 03h | SFP / SFP+ / SFP28 (SFF-8472) | 14h | shielded mini multilane HD 4X fanout |
| 04h | 300-pin XBI | 15h | shielded mini multilane HD 8X fanout |
| 05h | XENPAK | 16h | CDFP style 3 |
| 06h | XFP (INF-8077i) | 17h | microQSFP |
| 07h | XFF | 18h | QSFP-DD (CMIS) |
| 08h | XFP-E | 19h | OSFP 8X (CMIS) |
| 09h | XPAK | 1Ah | SFP-DD (MIS) |
| 0Ah | X2 | 1Bh | DSFP |
| 0Bh | DWDM-SFP / SFP+ (not SFF-8472 compliant) | 1Ch | x4 MiniLink / OcuLink |
| 0Ch | QSFP (INF-8438) | 1Dh | x8 MiniLink |
| 0Dh | QSFP+ (SFF-8636 / SFF-8436) | 1Eh | QSFP+ or later with CMIS |
| 0Eh | CXP | 1Fh | SFP-DD with CMIS |
| 0Fh | shielded mini multilane HD 4X | 20h | SFP+ or later with CMIS (SFP112 and similar) |
| 10h | shielded mini multilane HD 8X | 21h | OSFP-XD with CMIS |
Newer revisions add further CMIS-managed form factors after 21h. Codes 80h–FFh are vendor specific. Which form factor is which: Form factors.
Table 4-2 — encoding
| Code | SFF-8472 (SFP, byte 11) | SFF-8636 (QSFP, byte 139) |
|---|---|---|
| 00h | unspecified | unspecified |
| 01h | 8B/10B | 8B/10B |
| 02h | 4B/5B | 4B/5B |
| 03h | NRZ | NRZ |
| 04h | Manchester | SONET scrambled |
| 05h | SONET scrambled | 64B/66B |
| 06h | 64B/66B | Manchester |
| 07h | 256B/257B (transcoded FEC) | 256B/257B |
| 08h | PAM4 | PAM4 |
The two columns differ at 04h–06h — a classic source of "wrong encoding" when a QSFP template is reused for an SFP.
Table 4-3 — connector types
| Code | Connector | Code | Connector |
|---|---|---|---|
| 00h | unknown | 0Ch | MPO 1×12 |
| 01h | SC | 0Dh | MPO 2×16 |
| 02h | Fibre Channel style 1 copper | 20h | HSSDC II |
| 03h | Fibre Channel style 2 copper | 21h | copper pigtail |
| 04h | BNC/TNC | 22h | RJ45 |
| 05h | Fibre Channel coax headers | 23h | no separable connector (DAC, AOC, pigtail modules) |
| 06h | Fiber Jack | 24h | MXC 2×16 |
| 07h | LC | 25h | CS |
| 08h | MT-RJ | 26h | SN (formerly mini CS) |
| 09h | MU | 27h | MPO 2×12 |
| 0Ah | SG | 28h | MPO 1×16 |
| 0Bh | optical pigtail | — | — |
Photos and fibre pairings: Connectors & fibre.
Table 4-4 — extended specification compliance (selection)
Used in SFP byte 36 and QSFP byte 192; a single value, not a bit field.
| Code | Meaning | Code | Meaning |
|---|---|---|---|
| 01h | 100G AOC / 25GAUI C2M AOC (BER 5·10⁻⁵) | 1Fh | 40G SWDM4 |
| 02h | 100GBASE-SR4 / 25GBASE-SR | 20h | 100G SWDM4 |
| 03h | 100GBASE-LR4 / 25GBASE-LR | 21h | 100G PAM4 BiDi |
| 04h | 100GBASE-ER4 / 25GBASE-ER | 22h–24h | 4WDM-10 / -20 / -40 MSA |
| 05h | 100GBASE-SR10 | 25h | 100GBASE-DR |
| 06h | 100G CWDM4 | 26h | 100G-FR / 100GBASE-FR1 |
| 07h | 100G PSM4 | 27h | 100G-LR / 100GBASE-LR1 |
| 08h | 100G ACC / 25GAUI C2M ACC (BER 5·10⁻⁵) | 30h–33h | 50G/100G/200G active copper and AOC at defined BERs |
| 0Bh | 100GBASE-CR4 / 25GBASE-CR CA-25G-L / 50GBASE-CR2 (RS-FEC) | 40h | 50GBASE-CR / 100GBASE-CR2 / 200GBASE-CR4 |
| 0Ch | 25GBASE-CR CA-25G-S / 50GBASE-CR2 (BASE-R FEC) | 41h | 50GBASE-SR / 100GBASE-SR2 / 200GBASE-SR4 |
| 0Dh | 25GBASE-CR CA-25G-N / 50GBASE-CR2 (no FEC) | 42h | 50GBASE-FR / 200GBASE-DR4 |
| 10h | 40GBASE-ER4 | 43h | 200GBASE-FR4 |
| 11h | 4×10GBASE-SR | 44h | 200G 1550 nm PSM4 |
| 12h | 40G PSM4 | 45h | 50GBASE-LR |
| 13h–15h | ITU-T G.959.1 P1I1-2D1 / P1S1-2D2 / P1L1-2D2 | 46h | 200GBASE-LR4 |
| 16h | 10GBASE-T with SFI | 47h | 400GBASE-DR4 |
| 17h | 100G CLR4 | 48h | 400GBASE-FR4 |
| 18h | 100G AOC / 25GAUI AOC (BER 10⁻¹²) | 49h | 400GBASE-LR4-10 |
| 19h | 100G ACC / 25GAUI ACC (BER 10⁻¹²) | 4Ah | 400GBASE-ZR |
| 1Ah | 100GE-DWDM2 | 7Fh | 256GFC-SW4 |
| 1Bh | 100G 1550 nm WDM (4 λ) | 80h | capable of 64GFC |
| 1Ch–1Eh | 10GBASE-T SR / 5GBASE-T / 2.5GBASE-T | 81h | capable of 128GFC |
This is the table that makes 25G and 100G identity possible at all: the classic bit fields of SFF-8472 bytes 3–10 have no room for them. How the two mechanisms combine: Compliance codes.
Tables 4-5 onward — CMIS interface IDs (selection)
CMIS describes what a module can do as applications: a host electrical interface paired with a media interface. Both halves are SFF-8024 codes.
| Host electrical interface (4-5) | Code |
|---|---|
| 1000BASE-CX | 01h |
| XAUI | 02h |
| XFI | 03h |
| SFI | 04h |
| 25GAUI C2M | 05h |
| XLAUI C2M | 06h |
| XLPPI | 07h |
| LAUI-2 C2M | 08h |
| 50GAUI-2 C2M | 09h |
| 50GAUI-1 C2M | 0Ah |
| CAUI-4 C2M | 0Bh |
| 100GAUI-4 C2M | 0Dh |
| 100GAUI-2 C2M | 0Eh |
| 200GAUI-8 C2M | 0Fh |
| 200GAUI-4 C2M | 10h |
| 400GAUI-16 C2M | 11h |
| 400GAUI-8 C2M | 12h |
| 400GAUI-4 C2M | 13h–14h (short / long) |
| 800G C2M (8 × 100G) | 15h–16h |
| Media interface | MMF table | SMF table |
|---|---|---|
| 10GBASE-SR / 10GBASE-LR | 02h | 04h |
| 25GBASE-SR / 25GBASE-LR | 03h | 07h |
| 40GBASE-SR4 / 40GBASE-LR4 | 04h | 09h |
| 100GBASE-SR4 / 100GBASE-LR4 | 09h | 0Dh |
| 100G SWDM4 / 100G CWDM4 | 0Ah | 10h |
| 100GBASE-SR2 / 100GBASE-DR | 0Ch | 14h |
| 100G-SR / 100G-FR | 0Dh | 15h |
| 200GBASE-SR4 / 200GBASE-DR4 | 0Eh | 17h |
| 400GBASE-SR8 / 400GBASE-DR4 | 10h | 1Ch |
| 400G-SR4 / 400G-FR4 | 11h | 1Dh |
| 800G-SR8 / 800G-DR8 | 12h | (800G codes follow) |
Passive copper, active cable and BASE-T media have their own short tables; which table applies is set by CMIS media type byte 85 (01h MMF, 02h SMF, 03h passive copper, 04h active cable, 05h BASE-T). Full lists change with every SFF-8024 revision — treat the above as orientation, not as the registry. How applications are advertised and selected: CMIS.
Practical notes
- A host running older firmware shows codes it does not know as unknown — harmless for reading, but some platforms refuse to bring up a module whose type they cannot name.
- When coding a module, pick the codes that describe the real hardware; hosts cross-check identifier, connector, encoding and compliance against each other (Speed & rate).
- Reserved and vendor-specific ranges (80h–FFh) are legal but decode as nothing useful.
In CodingBox
CodingBox carries the SFF-8024 tables and uses them to label the identifier, connector, encoding, extended compliance and CMIS application fields in the EEPROM editor and on Check transceiver, so a raw 12h in a QSFP-DD application descriptor reads as 400GAUI-8 C2M.
Identifier 21h in practice: OSFP-XD; OSFP at 200G per lane keeps 19h — OSFP224.