SFF-8472 — SFP diagnostics
SFF-8472, the Diagnostic Monitoring Interface for Optical Transceivers, is the management specification for every SFP-class module: SFP, SFP+, SFP28 and, with extended codes, SFP56. It grew out of the SFP MSA (INF-8074) serial ID block, kept that block byte-for-byte, and added a second memory device with real-time diagnostics. Copper SFPs, PON sticks, tunable DWDM SFP+ and DAC/AOC cable ends all present themselves through this specification. Revision history and the version byte: Specification revisions.
Two memory addresses
The module is read over the two-wire interface at two device addresses:
| Address | Device | Contents |
|---|---|---|
| A0h | serial ID EEPROM (256 bytes, flat) | identity: type, connector, compliance codes, rate, lengths, vendor block, options, checksums |
| A2h | diagnostics (128 bytes + paged upper half) | thresholds, calibration constants, live monitors, status/control, flags, user EEPROM, vendor pages |
Whether A2h exists at all is declared in A0h byte 92 bit 6. The default bus speed is 100 kHz. Byte-by-byte tables: Memory map quick reference.
A0h — identity in five blocks
| Bytes | Block | What lives there |
|---|---|---|
| 0–2 | Type | identifier (03h = SFP family, SFF-8024), extended identifier (04h = MOD_DEF 4, serial ID present), connector code |
| 3–10 | Compliance codes | bit fields for 10G Ethernet, InfiniBand, ESCON, SONET, 1G Ethernet, Fibre Channel length / technology / media / speed — decoded in Compliance codes |
| 11–19 | Signal & reach | encoding (11), nominal bit rate ×100 Mb/s (12), rate identifier for RS0/RS1 (13, see rate select), link lengths: SMF km (14), SMF ×100 m (15), OM2 ×10 m (16), OM1 ×10 m (17), OM4 ×10 m or copper metres (18), OM3 ×10 m (19) |
| 20–63 | Vendor & checksum | vendor name (20–35), extended compliance code from SFF-8024 (36), IEEE OUI (37–39), part number (40–55), revision (56–59), wavelength in nm or cable compliance/attenuation for copper (60–61), Fibre Channel speed 2 (62), CC_BASE (63) — see Vendor fields |
| 64–95 | Extended ID | options (64–65), max/min bit-rate margin % (66–67) or, when byte 12 = FFh, byte 66 is the rate in ×250 Mb/s, serial number (68–83), date code (84–91), diagnostic type (92), enhanced options (93), SFF-8472 compliance revision (94), CC_EXT (95) |
| 96–127 | Vendor specific | free for the manufacturer; often holds configuration or a signature |
| 128–255 | Reserved | reserved for SFF-8079 application-select tables |
Options bytes 64–65
| Byte.bit | Meaning when set |
|---|---|
| 64.5 | high power level declaration — level 3 (up to 2.0 W) |
| 64.4 | paging implemented — A2h byte 127 selects upper pages |
| 64.3 | retimer or CDR present |
| 64.2 | cooled transmitter |
| 64.1 | power level 2 (up to 1.5 W); clear = level 1 (1.0 W) |
| 64.0 | linear receiver output (for example 10GBASE-LRM) |
| 65.7 | receiver decision threshold implemented |
| 65.6 | tunable transmitter — see tunable maps |
| 65.5 | RATE_SELECT implemented |
| 65.4 | TX_DISABLE implemented |
| 65.3 | TX_FAULT implemented |
| 65.2 | LOS signal is inverted |
| 65.1 | LOS implemented |
Byte 92 — diagnostic monitoring type
| Bit | Meaning |
|---|---|
| 6 | digital diagnostics (A2h) implemented |
| 5 | internally calibrated — A2h monitors are already in physical units |
| 4 | externally calibrated — host must apply the constants at A2h 56–91 |
| 3 | received power measurement: 1 = average power, 0 = OMA |
| 2 | address change sequence required before A2h access (legacy) |
Exactly one of bits 5 and 4 should be set when bit 6 is set. What each mode means for the numbers you see: Calibration.
Byte 93 — enhanced options
Bit 7 alarm/warning flags implemented · 6 soft TX_DISABLE control · 5 soft TX_FAULT monitor · 4 soft RX_LOS monitor · 3 soft RATE_SELECT · 2 application select per SFF-8079 · 1 soft rate select per SFF-8431.
A2h — diagnostics in nine blocks
| Bytes | Block | Notes |
|---|---|---|
| 0–39 | Alarm & warning thresholds | five monitors × (high alarm, low alarm, high warning, low warning), 2 bytes each, same format as the live value — thresholds & alarms |
| 40–55 | Optional thresholds | laser temperature and TEC current (cooled/tunable modules) |
| 56–91 | Calibration constants | Rx_PWR(4..0) as 32-bit floats, Tx_I / Tx_PWR / T / V slope and offset; meaningful only when byte 92 bit 4 is set |
| 92–94 | Reserved | — |
| 95 | CC_DMI | checksum of A2h bytes 0–94 — Checksums |
| 96–105 | Real-time monitors | temperature (96–97), Vcc (98–99), Tx bias (100–101), Tx power (102–103), Rx power (104–105) |
| 106–109 | Optional monitors | laser temperature, TEC current |
| 110–118 | Status & control | byte 110 (below), alarm flags 112–113, warning flags 116–117, extended status/control 118 (soft RS1, power level state and select) |
| 119–126 | Vendor specific | in practice the password entry area on many controller-based modules (123–126) — see write-protection types |
| 127 | Page select | present when A0h byte 64 bit 4 is set |
| 128–255 | Upper pages | page 00h/01h: user EEPROM (128–247) and vendor control (248–255); page 02h: control functions, home of the SFF-8690 tunable registers; other pages vendor specific |
Monitor formats
| Monitor | Format | Unit |
|---|---|---|
| Temperature | signed 16-bit | 1/256 °C |
| Vcc | unsigned 16-bit | 100 µV |
| Tx bias | unsigned 16-bit | 2 µA |
| Tx power, Rx power | unsigned 16-bit | 0.1 µW (convert to dBm: 10·log10(µW/1000)) |
Conversions and worked examples: Units & conversions.
Byte 110 — status/control
| Bit | Meaning | Access |
|---|---|---|
| 7 | TX_DISABLE pin state | read |
| 6 | soft TX_DISABLE | read/write (if byte 93 bit 6) |
| 5 | RS1 pin state | read |
| 4 | RS0 pin state (rate select) | read |
| 3 | soft RS0 select | read/write |
| 2 | TX_FAULT state | read |
| 1 | RX_LOS state | read |
| 0 | data not ready (1 while monitors are still initialising) | read |
Copper and cable specifics
For passive and active copper (DAC), bytes 60–61 do not hold a wavelength: for passive cable byte 60 flags SFF-8431 Appendix E compliance; for active cable bits mark FC-PI-4 / SFF-8431 limiting or linear compliance. Byte 8 bits 2–3 mark passive/active cable technology and byte 18 carries the length in metres. Details: Copper Ethernet & DAC.
What hosts actually read
A typical switch reads A0h bytes 0–95 on insertion, verifies CC_BASE and CC_EXT, decodes the identifier, connector, compliance codes and rate, matches the vendor block against its policy, and only then polls A2h for DDM — usually every few seconds. The full sequence and its timings: What the host does. Mismatches between these fields and the real optics are the root of most speed & rate and vendor-lock tickets.
In CodingBox
CodingBox reads both A0h and A2h (including paged A2h when declared), labels every field of the tables above in the EEPROM editor, recalculates CC_BASE, CC_EXT and CC_DMI on write, applies internal or external calibration on the DDM screen and shows the decoded identity on Check transceiver.
Byte-by-byte and bit-by-bit tables of both devices: A0h register map, A2h register map.