CodingBox Documentation

EEPROM read & write errors on the programmer

Before a module can be diagnosed or coded it has to be read — and then, often, written. Both steps fail in characteristic ways. This page maps each failure to its cause and to the setting or procedure that fixes it, from the module not being seen at all to a write that "succeeds" and quietly disappears.

Module not detected

CheckWhy
Seating and cradlethe module must bottom out in the connector; use the adapter for its form factor — an SFP in a QSFP cradle will not be seen
Power-up timemodules need up to ~2 s (SFP) or longer (CMIS) after insertion before the two-wire bus answers
Module present signalMOD_ABS / ModPrsL must assert; a bent pin or a module without the signal looks absent
Low-power state (CMIS)identity is readable in LowPwr, but some hosts/programmers expect Ready for full access
Bus speedstart at 100 kHz or lower; some modules NACK at 400 kHz
Dead moduleno DDM, no identity at any speed — confirm on a second board before condemning it

Reads return FFh, 00h or garbage

SymptomCauseFix
All FFhI²C NACK — no device at that address, or page not presentcheck the address (A0h identity vs A2h diagnostics on SFP; single A0h with paging on QSFP/CMIS)
All 00hmodule not powered / held in reset; or genuinely blank EEPROMcheck power to the cradle, module present; blank modules exist (uncoded stock)
Right length, wrong contentreading a different page than intendedwrite the page-select byte (127) and re-read; on CMIS also bank select (126)
Garbled / shifted bytesbus too fast, long cable, contention with a hostdrop to ≤ 100 kHz; use short leads; read on the bench, not in a live switch
A2h reads fail, A0h finemodule without diagnostics, or protected diagnostics blockcheck A0h byte 92 bit 6 (DDM implemented); some write-protected types answer A0h only
Values change between readslive monitors — normal; or data not readyDDM bytes are supposed to change; check the data-ready bit before trusting a snapshot

Write fails outright

WRITE FAIL, NACK on data, or the byte reads back unchanged:

CauseHow to recogniseWhat to do
Password required (firmware controller)write refused until the correct value is placed at the password address (SFP A2h 0x7B–0x7E, QSFP 123–126, CMIS 122–125)enter the module's password in Protected memory & passwords; known vendor passwords are applied from the database
Hardware write protectread-only regardless of password, survives power cyclesthe WP pin must be driven by the programmer board — software alone cannot; see Write-protection types
Timingintermittent failures, partial pages writtenslow the clock (~1 kHz is often needed for reliable EEPROM writes), respect write-cycle time (5–10 ms) between bytes/pages, add inter-block delays
Read-only regionspecific bytes never change (checksums, thresholds on some parts, vendor area)the EEPROM has a protected region by design; write only the fields the module allows
Wrong stateCMIS modules may require LowPwr, or a data-path deactivated, before accepting writesput the module in the required state first
Page not selectedyou wrote the right offset on the wrong pageset byte 127 (and 126) before the write and verify by reading back the page-select byte

Write "succeeds" but does not stick

  • Reverts after power cycle — the module stores writes in temporary memory and needs the vendor's save command; without it the old image returns. Handled by a programming script (Write-protection type 4).
  • Reverts immediately — the microcontroller mirrors the EEPROM from its own store and overwrites your bytes; requires the manufacturer's algorithm (type 5).
  • Some bytes stick, others not — a partially protected map; write field by field and verify each.

Host rejects the module after a successful write

CauseFix
Checksums stale — CC_BASE (byte 63), CC_EXT (95), CC_DMI (A2h 95), QSFP 191/223recalculate; CodingBox does this automatically on write (Memory map)
Identity now inconsistent — e.g. vendor changed but compliance codes or wavelength imply different hardwarekeep identity consistent with the real optics (Speed & rate, Physical mismatches)
Wrote to the wrong module type's layoutan XFP written as an SFP, or a QSFP page confusion — restore from backup

Module dead after a write

Writing garbage over calibration constants, thresholds or the vendor-specific area (where some controllers keep their configuration) can brick a module. Recovery path: restore the backup CodingBox took before the write from the code database, then write only the intended fields.

Golden rules

  1. Read and save first — every write should be preceded by a full read that lands in the database.
  2. Identify the protection type before the first write attempt (Write-protection types).
  3. Go slow — clock and inter-byte timing solve most "random" failures.
  4. Write only what you mean — fields, not whole pages, unless restoring an image.
  5. Verify by re-reading after a power cycle.

In CodingBox

CodingBox reads modules with the correct address and paging per form factor, shows raw and decoded bytes in the EEPROM editor, recalculates checksums on write, stores a backup automatically, and supports password entry and programming scripts for protected and save-command modules (Writing a module). If a board-level fault is suspected, see the product Troubleshooting.

The bus mechanics behind these failures — addresses, page select, write cycle time, clock stretching: Two-wire interface.