SFF-8472 A2h register map
The diagnostics device at two-wire address A2h holds everything that changes while an SFP-class module runs: alarm and warning thresholds, calibration constants, live monitors, status and control bits, latched flags, user EEPROM and the vendor pages. This page lists the lower 128 bytes byte by byte and the upper-page layout, compiled against SFF-8472 Rev 12.4. Narrative: SFF-8472, Thresholds & alarms, Calibration.
Legend: rsvd = reserved · opt = optional, implemented only if the corresponding A0h option bit is set · all 16-bit values are big-endian (lower byte address = MSB).
Monitor formats (used by thresholds, monitors and constants)
| Monitor | Format | LSB | Range |
|---|---|---|---|
| Temperature | signed 16-bit two's complement | 1/256 °C | −128 … +128 °C |
| Vcc | unsigned 16-bit | 100 µV | 0 … 6.55 V |
| Tx bias | unsigned 16-bit | 2 µA | 0 … 131 mA |
| Tx power / Rx power | unsigned 16-bit | 0.1 µW | 0 … 6.55 mW (−40 … +8.2 dBm) |
| Laser temperature (opt) | signed 16-bit | 1/256 °C | as temperature |
| TEC current (opt) | signed 16-bit | 0.1 mA | ±3.2 A; positive = heating |
Alarm and warning thresholds — bytes 0–55
| Bytes | Field | Bytes | Field |
|---|---|---|---|
| 0–1 | Temperature high alarm | 2–3 | Temperature low alarm |
| 4–5 | Temperature high warning | 6–7 | Temperature low warning |
| 8–9 | Vcc high alarm | 10–11 | Vcc low alarm |
| 12–13 | Vcc high warning | 14–15 | Vcc low warning |
| 16–17 | Tx bias high alarm | 18–19 | Tx bias low alarm |
| 20–21 | Tx bias high warning | 22–23 | Tx bias low warning |
| 24–25 | Tx power high alarm | 26–27 | Tx power low alarm |
| 28–29 | Tx power high warning | 30–31 | Tx power low warning |
| 32–33 | Rx power high alarm | 34–35 | Rx power low alarm |
| 36–37 | Rx power high warning | 38–39 | Rx power low warning |
| 40–41 | Laser temp / wavelength high alarm (opt) | 42–43 | … low alarm (opt) |
| 44–45 | … high warning (opt) | 46–47 | … low warning (opt) |
| 48–49 | TEC current high alarm (opt) | 50–51 | TEC current low alarm (opt) |
| 52–53 | TEC current high warning (opt) | 54–55 | TEC current low warning (opt) |
Thresholds use the same format as the monitor they bound; on externally calibrated modules they are in raw units, to be converted with the constants below.
External calibration constants — bytes 56–91
Present and meaningful only when A0h byte 92 bit 4 (externally calibrated) is set.
| Bytes | Constant | Format | Used as |
|---|---|---|---|
| 56–59 | Rx_PWR(4) | IEEE-754 single float | Rx_power = Σ Rx_PWR(i) × raw^i, i = 4…0 |
| 60–63 | Rx_PWR(3) | float | (typically 0) |
| 64–67 | Rx_PWR(2) | float | (typically 0) |
| 68–71 | Rx_PWR(1) | float | slope (typically 1.0 for internal-like behaviour) |
| 72–75 | Rx_PWR(0) | float | offset |
| 76–77 | Tx_I(slope) | unsigned 16-bit, LSB 1/256 | Tx_bias = slope × raw + offset |
| 78–79 | Tx_I(offset) | signed 16-bit | — |
| 80–81 | Tx_PWR(slope) | unsigned 16-bit, LSB 1/256 | Tx_power = slope × raw + offset |
| 82–83 | Tx_PWR(offset) | signed 16-bit | — |
| 84–85 | T(slope) | unsigned 16-bit, LSB 1/256 | Temperature = slope × raw + offset |
| 86–87 | T(offset) | signed 16-bit | — |
| 88–89 | V(slope) | unsigned 16-bit, LSB 1/256 | Vcc = slope × raw + offset |
| 90–91 | V(offset) | signed 16-bit | — |
| 92–94 | rsvd | — | — |
| 95 | CC_DMI | (Σ bytes 0–94) mod 256 | Checksums |
Real-time monitors — bytes 96–109
| Bytes | Monitor | Notes |
|---|---|---|
| 96–97 | Temperature | module internal |
| 98–99 | Vcc | supply inside the module |
| 100–101 | Tx bias | laser bias current |
| 102–103 | Tx power | from the monitor photodiode |
| 104–105 | Rx power | average (A0h 92.3 = 1) or OMA |
| 106–107 | Laser temperature or wavelength (opt) | temperature format, or wavelength in 0.05 nm units for tunable modules per SFF-8690 |
| 108–109 | TEC current (opt) | signed, 0.1 mA |
Status and control — bytes 110–127
| Byte | Field | Bits |
|---|---|---|
| 110 | Status/control | 7 TX_DISABLE state (pin or soft) · 6 soft TX_DISABLE (R/W, if A0h 93.6) · 5 RS1 state · 4 RS0 / rate-select state · 3 soft RS0 select (R/W, if 93.3) · 2 TX_FAULT state · 1 RX_LOS state · 0 data not ready (1 while monitors initialise) |
| 111 | rsvd | reserved for SFF-8079 |
| 112 | Alarm flags | 7 temp high · 6 temp low · 5 Vcc high · 4 Vcc low · 3 Tx bias high · 2 Tx bias low · 1 Tx power high · 0 Tx power low |
| 113 | Alarm flags | 7 Rx power high · 6 Rx power low · 5 laser temp/wavelength high (opt) · 4 … low (opt) · 3 TEC current high (opt) · 2 TEC current low (opt) · 1–0 rsvd |
| 114 | Tx input EQ / Rx output emphasis control (opt) | bits 7–4 Tx input equalisation level, 3–0 Rx output emphasis level (active cables, SFF-8431); else rsvd |
| 115 | rsvd | — |
| 116 | Warning flags | same layout as byte 112 (temp, Vcc, Tx bias, Tx power high/low) |
| 117 | Warning flags | same layout as byte 113 (Rx power, laser temp, TEC current) |
| 118 | Extended status/control | 7–4 rsvd · 3 soft RS1 select (R/W) · 2 power level operation state (1 = level 2/3 active) · 1 power level select (write 1 to request level 2) · 0 power level 3 select rev 12.3 |
| 119–122 | Vendor specific | often password change area on controller-based modules |
| 123–126 | Vendor specific | often password entry area (e.g. 00 00 10 11 defaults on some controllers) — Write-protection types |
| 127 | Page select | selects the upper page (128–255) when A0h byte 64 bit 4 is set; 00h default |
Flags in 112–117 are latched: they stay set until read, and the host clears them by reading. Alarm and warning flags are implemented only when A0h byte 93 bit 7 is set.
Upper pages — bytes 128–255 via byte 127
| Page | Bytes | Contents |
|---|---|---|
| 00h / 01h | 128–247 | User EEPROM — 120 bytes free for the host or vendor (page 01h is an alias of 00h in most implementations) |
| 00h / 01h | 248–255 | Vendor control — vendor-specific control functions |
| 02h | 128–255 | Control functions — SFF-8690 tunable registers: 128–129 dither control · 130–131 tuning capability flags · 132–133 first frequency THz · 134–135 first frequency GHz ×0.1 · 136–137 last frequency THz · 138–139 … GHz · 140–141 grid spacing GHz ×0.1 · 144–145 channel number set · 146–147 wavelength set ×0.05 nm · 152 Tx dither/wavelength control · 168–169 frequency error GHz ×0.1 · 170–171 wavelength error nm ×0.005 · 172 tuning status (bits: Tx tuning in progress, wavelength unlocked, tuning error) · 173–175 latched status/flags |
| 03h–7Fh | — | reserved |
| 80h–FFh | — | vendor specific |
Decoding example
A2h bytes 96–105 read 1A 80 80 E8 1B 58 0F A0 03 E8 on an internally calibrated module: temperature 0x1A80 / 256 = 26.5 °C; Vcc 0x80E8 × 100 µV = 3.300 V; bias 0x1B58 × 2 µA = 14.0 mA; Tx 0x0FA0 × 0.1 µW = 400 µW = −3.98 dBm; Rx 0x03E8 × 0.1 µW = 100 µW = −10.0 dBm. Bytes 110 = 00 → Tx enabled, no fault, no LOS, data ready; 112–117 all 00 → no flags. Step-by-step with tools: Reading DDM with tools.
Related maps
- SFF-8472 A0h map — identity block.
- SFF-8636 lower page 00h — the QSFP equivalent (monitors, flags, controls).
- CMIS lower page — the CMIS equivalent.