Symptom index: where to start
You have a symptom, not a diagnosis. Find the row that matches what you see, run the first checks, and follow the link to the detailed material. Every row assumes the diagnostic ladder as the baseline: levels → clean → swap → OTDR.
Link state
| Symptom | First checks | Likely causes | Read |
|---|---|---|---|
| Port down, module shows unsupported / invalid / Mod_Inv | host log, identity on the bench | vendor lock; identity or compliance codes the host rejects | Vendor lock, No link checklist |
| Port down, Rx −40 dBm / LOS on both ends | is Tx enabled? fibre continuity? | fibre cut, Tx disabled by host, Tx/Rx crossed, wrong BiDi pair, wrong wavelength for the mux | No link checklist, Physical mismatches |
| Port down, Rx and Tx levels fine | FEC and speed on both ends; AN on DAC | FEC mismatch, rate/breakout config, SGMII vs 1000BASE-X, CDR at wrong rate | Speed & rate, FEC & link training |
| Port down, Rx very high (> −3 dBm) on a short link | long-reach optic on a short span? | receiver overload | Physical mismatches |
| Works in one direction / LOS on one end only | compare Rx on both ends | dirty connector or weak laser on the failing side; polarity | DDM levels, Physical mismatches |
| Link flaps up/down | levels, CRC counters, connectors | contamination, marginal budget, thermal throttling | Link flapping |
| 400G/800G module recognised but never ready, stuck LowPwr | CMIS module state, power class vs port | handshake / firmware / power class | CMIS issues, Power & thermal |
| DAC does not link, optic in the same port does | AN/link training, cable length, identity | AN disabled, unsupported cable, too long for the host | Copper & DAC, Speed & rate |
Link up, but…
| Symptom | First checks | Likely causes | Read |
|---|---|---|---|
| CRC / input errors climbing | Rx level vs baseline; FEC corrected counters; clean | dirt, marginal budget, dispersion at 10G+ on long CWDM | Link flapping, DDM levels |
| Slow throughput on a multi-lane link, no alarms | per-lane Rx/bias | one degraded lane hidden by LACP | Failures, Per-lane diagnostics |
| Works at 25G, dead at 10G (or 100G ok, 4×25G breakout not) | rate codes, CDR bypass, host breakout config | CDR range, module not breakout-capable, missing extended compliance code | Speed & rate, CDR |
| Absurd DDM values (0 °C, +10 dBm, 0.00 V) | byte 92 calibration bits | external calibration not applied, zeroed constants | Calibration |
| Tx power identical across a batch | compare modules | constant Tx written to memory | DDM levels |
| Module hot, port disables it, "power exceeds" log | power class byte vs port rating; airflow | class mismatch, thermal shutdown | Power & thermal |
| Everything fine for a year, then sudden failures | Tx bias trend, batch | laser ageing, bad batch, heat | Failures |
| Modules died after a switch firmware upgrade | host release notes; identity | stricter identity checks; clones failing authentication | Vendor lock, Failures |
On the bench (programmer / CodingBox)
| Symptom | First checks | Likely causes | Read |
|---|---|---|---|
| Module not detected on the programmer | seating, form-factor adapter, power-up time | not seated, wrong cradle, module in LowPwr | EEPROM read/write errors |
| Reads return FFh / 00h or garbage | address (A0h/A2h/page), bus speed | I²C NACK, wrong page, bus too fast | EEPROM read/write errors |
| WRITE FAIL | password, WP type, clock speed | protected module, hardware WP, timing | Write-protection types, EEPROM recoding |
| Write "succeeds" but reverts after power cycle | module type | temporary storage needs a save command | Write-protection types |
| Host rejects module after edit | checksums | stale CC_BASE / CC_EXT / CC_DMI | Memory map |
Access networks
| Symptom | First checks | Likely causes | Read |
|---|---|---|---|
| ONU does not register on the OLT | serial / LOID, PON standard, ONU Rx | whitelist, wrong wavelength plan (GPON vs XGS-PON), Rx out of class | PON problems |
| ONU shows LOS | SC/APC cleanliness, splitter, polish | dirt, UPC in an APC plant, fibre | PON problems |
If nothing matches
Work the no-link checklist top to bottom, then read the module on the bench with CodingBox: the Check transceiver screen tells you what the module claims to be, and DDM what it is actually doing.