Errores de lectura y escritura de EEPROM en el programador
Antes de poder diagnosticar o codificar un módulo hay que leerlo, y después, a menudo, escribirlo. Ambos pasos fallan de formas características. Esta página asocia cada fallo con su causa y con el ajuste o procedimiento que lo soluciona, desde que el módulo no se ve en absoluto hasta una escritura que «tiene éxito» y desaparece en silencio.
Módulo no detectado
| Comprobación | Por qué |
|---|---|
| Asiento y zócalo | el módulo debe asentarse a fondo en el conector; use el adaptador de su factor de forma: un SFP en un zócalo QSFP no se verá |
| Tiempo de arranque | los módulos necesitan hasta ~2 s (SFP) o más (CMIS) tras la inserción antes de que el bus de dos hilos responda |
| Señal de módulo presente | MOD_ABS / ModPrsL debe activarse; un pin doblado o un módulo sin esa señal parece ausente |
| Estado de bajo consumo (CMIS) | la identidad es legible en LowPwr, pero algunos hosts/programadores esperan Ready para el acceso completo |
| Velocidad del bus | empiece a 100 kHz o menos; algunos módulos responden NACK a 400 kHz |
| Módulo muerto | sin DDM, sin identidad a ninguna velocidad: confírmelo en una segunda placa antes de descartarlo |
Las lecturas devuelven FFh, 00h o basura
| Síntoma | Causa | Solución |
|---|---|---|
| Todo FFh | NACK de I²C: no hay dispositivo en esa dirección, o la página no está presente | compruebe la dirección (identidad A0h frente a diagnóstico A2h en SFP; A0h único con paginación en QSFP/CMIS) |
| Todo 00h | módulo sin alimentación / mantenido en reset; o EEPROM realmente en blanco | compruebe la alimentación al zócalo, la presencia del módulo; existen módulos en blanco (stock sin codificar) |
| Longitud correcta, contenido incorrecto | se está leyendo una página distinta de la prevista | escriba el byte de selección de página (127) y vuelva a leer; en CMIS también la selección de banco (126) |
| Bytes corruptos / desplazados | bus demasiado rápido, cable largo, contención con un host | baje a ≤ 100 kHz; use cables cortos; lea en el banco, no en un conmutador en producción |
| Las lecturas A2h fallan, A0h bien | módulo sin diagnóstico, o bloque de diagnóstico protegido | compruebe el byte 92 bit 6 de A0h (DDM implementado); algunos tipos protegidos contra escritura solo responden en A0h |
| Los valores cambian entre lecturas | monitores en vivo: es normal; o data not ready | se espera que los bytes de DDM cambien; compruebe el bit de datos listos antes de confiar en una instantánea |
La escritura falla por completo
WRITE FAIL, NACK en los datos, o el byte se vuelve a leer sin cambios:
| Causa | Cómo reconocerlo | Qué hacer |
|---|---|---|
| Se requiere contraseña (controlador con firmware) | la escritura se rechaza hasta que se coloca el valor correcto en la dirección de la contraseña (SFP A2h 0x7B–0x7E, QSFP 123–126, CMIS 122–125) | introduzca la contraseña del módulo en Memoria protegida y contraseñas; las contraseñas de fabricante conocidas se aplican desde la base de datos |
| Protección de escritura por hardware | solo lectura independientemente de la contraseña, sobrevive a los ciclos de encendido | el pin WP debe ser accionado por la placa programadora; el software por sí solo no puede hacerlo; véase Tipos de protección de escritura |
| Temporización | fallos intermitentes, páginas escritas parcialmente | reduzca la velocidad del reloj (a menudo se necesita ~1 kHz para escrituras fiables de EEPROM), respete el tiempo de ciclo de escritura (5–10 ms) entre bytes/páginas, añada retardos entre bloques |
| Región de solo lectura | ciertos bytes nunca cambian (sumas de comprobación, umbrales en algunas piezas, área del fabricante) | la EEPROM tiene una región protegida por diseño; escriba solo los campos que el módulo permite |
| Estado incorrecto | los módulos CMIS pueden requerir LowPwr, o una ruta de datos desactivada, antes de aceptar escrituras | ponga primero el módulo en el estado requerido |
| Página no seleccionada | escribió el desplazamiento correcto en la página equivocada | fije el byte 127 (y 126) antes de la escritura y verifique releyendo el byte de selección de página |
La escritura «tiene éxito» pero no se mantiene
- Revierte tras un ciclo de encendido — el módulo almacena las escrituras en memoria temporal y necesita el comando de guardado del fabricante; sin él vuelve la imagen antigua. Lo gestiona un script de programación (Tipo 4 de protección de escritura).
- Revierte de inmediato — el microcontrolador refleja la EEPROM desde su propio almacén y sobrescribe sus bytes; requiere el algoritmo del fabricante (tipo 5).
- Algunos bytes se mantienen, otros no — un mapa parcialmente protegido; escriba campo a campo y verifique cada uno.
El host rechaza el módulo tras una escritura correcta
| Causa | Solución |
|---|---|
| Sumas de comprobación obsoletas — CC_BASE (byte 63), CC_EXT (95), CC_DMI (A2h 95), QSFP 191/223 | recalcúlelas; CodingBox lo hace automáticamente al escribir (Mapa de memoria) |
| Identidad ahora inconsistente — por ejemplo, se cambió el fabricante pero los códigos de cumplimiento o la longitud de onda implican un hardware distinto | mantenga la identidad coherente con la óptica real (Velocidad y tasa, Incompatibilidades físicas) |
| Se escribió en el diseño de otro tipo de módulo | un XFP escrito como SFP, o una confusión de página QSFP: restaure desde la copia de seguridad |
Módulo muerto tras una escritura
Escribir basura sobre las constantes de calibración, los umbrales o el área específica del fabricante (donde algunos controladores guardan su configuración) puede inutilizar un módulo. Vía de recuperación: restaure la copia de seguridad que CodingBox tomó antes de la escritura desde la code database, y después escriba solo los campos previstos.
Reglas de oro
- Lea y guarde primero — toda escritura debe ir precedida de una lectura completa que quede en la base de datos.
- Identifique el tipo de protección antes del primer intento de escritura (Tipos de protección de escritura).
- Vaya despacio — el reloj y la temporización entre bytes resuelven la mayoría de los fallos «aleatorios».
- Escriba solo lo que pretende — campos, no páginas enteras, salvo al restaurar una imagen.
- Verifique releyendo tras un ciclo de encendido.
En CodingBox
CodingBox lee los módulos con la dirección y la paginación correctas según el factor de forma, muestra los bytes en bruto y decodificados en el EEPROM editor, recalcula las sumas de comprobación al escribir, guarda una copia de seguridad automáticamente, y admite la introducción de contraseñas y scripts de programación para módulos protegidos y con comando de guardado (Escritura de un módulo). Si se sospecha un fallo a nivel de placa, véase la solución de problemas del producto.
La mecánica del bus detrás de estos fallos — direcciones, selección de página, tiempo de ciclo de escritura, clock stretching: Interfaz de dos hilos.
Por qué un módulo responde como lo hace — memoria emulada por MCU, ventana de arranque, clock stretching, regiones protegidas: Controlador y firmware.