Leer y reescribir la EEPROM de un SFP por el bus I2C de una Raspberry Pi en vez de comprar un programador
Tengo en casa un estante de SFP retirados y me gustaría poder leer su EEPROM, reparar un módulo cuyo checksum se corrompió, y de vez en cuando recodificar uno para un switch que es quisquilloso con las cadenas de vendedor. Comprar un programador comercial para un puñado de módulos al año no tiene sentido aquí, así que estoy tratando de averiguar hasta dónde llega realmente un montaje casero.
Lo que hay en el banco:
- Raspberry Pi con el bus I2C sacado a una jaula SFP que cableé yo mismo
- una placa programadora USB CH341A que sobró de un trabajo de BIOS
- una pila mixta de módulos SFP/SFP+ de 1G y 10G, más dos QSFP+ que también me gustaría revisar
Las lecturas funcionan al menos en el sentido de que algo responde en el bus:
$ i2cdetect -y 1
0 1 2 3 4 5 6 7 8 9 a b c d e f
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: 50 51 -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
$ i2cdump -y 1 0x50
Lo que ya hice:
- volqué A0h a mano y comparé los bytes contra los offsets de campo de SFF-8472, lo cual es lento y fácil de hacer mal
- escribí unos cuantos bytes con el CH341A: se quedan, pero nada me recalcula los checksums, así que el módulo vuelve como basura hasta que los parcheo yo mismo
- dejé los módulos QSFP+ sin tocar, porque la jaula que armé solo acepta SFP
¿Entonces cómo se ve realmente la herramienta abierta para esto: hay algo que conozca el layout de memoria, verifique los bytes de checksum después de una escritura, y también pueda manejar una ranura QSFP+? ¿Y dónde deja de bastar un montaje casero?
Comments 4
Para trabajo simple de SFP/SFP+ la Pi basta. El módulo es solo dos dispositivos I2C, que es exactamente lo que muestra tu salida de i2cdetect en 0x50 y 0x51, y no pasa nada más mágico que eso. Lo que te ahorra el conteo de bytes es sfppi: maneja el bus I2C de la Pi, te decodifica los campos, y revisa CC_BASE y CC_EXT y se ofrece a arreglarlos después de una escritura. Ese es precisamente el paso que el CH341A no hace por ti. El CH341A no es inútil, lee y escribe bien, simplemente no tiene idea de qué significan los bytes, así que cada checksum sigue siendo tu problema.
Para QSFP+ tu jaula soldada no va a ayudar. El diseño comunitario al que la gente apunta es Hubble, un programador abierto con una ranura QSFP junto a la de SFP, así que esa es la dirección si quieres tocar esos dos módulos. También hay un montaje básico de Reveltronics que se usa para forzar por fuerza bruta contraseñas de escritura en módulos que se niegan a escribir de plano. Yo nunca lo he necesitado, así que tómalo como una referencia y pruébalo en hardware que puedas permitirte perder.
Eso coincide con lo que veo aquí. La segunda página también está ahí, así que las dos mitades de la memoria se pueden leer:
Voy a rehacer el cableado de la jaula correctamente y luego probar la ruta del checksum en un módulo que no me importa antes de tocar nada que quiera conservar. El QSFP+ se queda aparcado por ahora, construir una segunda jaula para dos módulos al año es difícil de justificar, así que esos se quedarán de solo lectura hasta que decida si Hubble vale el esfuerzo.
Agrego esto del otro extremo del rango de precios, ya que no todos construyen lo propio: las herramientas que se ven en uso diario son el SNR SFP Writer, la serie SFPTotal Plus, y varios dispositivos hechos a medida alrededor de placas CH341, que es el mismo chip que ya tienes en el banco.
Algo que vale la pena saber antes de meterse a fondo es que no todos los módulos son una EEPROM simple. Algunos llevan su propio microcontrolador que emula la memoria A0/A2 en vez de exponer un chip real, siendo un Medick SFP-10G-BX con un C8051F392 dentro el ejemplo que sigue apareciendo. Esos pueden implementar contraseñas de escritura o desafíos de vendedor, y ninguna cantidad de tocar el bus los convierte en una EEPROM tonta. El caso más desagradable que menciona la gente es la EEPROM interactiva con claves de HP/Aruba.
Una nota práctica para tu propia jaula: acierta el pinout o vas a perseguir fantasmas. TX_Disable es el pin 3, Mod_Abs es el pin 6, VeeR es el pin 9. Mod_Abs en particular decide si algo cree que hay un módulo presente en absoluto.
Y el lado del riesgo, ya que rara vez se menciona hasta que alguien tiene un módulo muerto. Muchos módulos quieren una contraseña de 4 bytes antes de aceptar una escritura. La mayoría de esas contraseñas andan circulando públicamente y no hay una utilidad universal, así que terminas con un montón de herramientas específicas de vendedor e imágenes sacadas de bases de datos de firmware o del fabricante. Equivócate en algo de eso y tienes un módulo inutilizado que costó más que el programador.
Así que antes de tocar la EEPROM en absoluto, comprueba que el módulo realmente esté roto: lee temperatura, voltaje, corriente de polarización y potencia TX/RX de DDM desde A0h/A2h, limpia los pestillos, los contactos y las lentes, cambia por un módulo de buen estado conocido, y haz una prueba de carga del enlace con iperf3. La mitad de los módulos que supuestamente necesitan reflasheo solo necesitan limpieza.
Si prefieres pagar en vez de soldar, ten en cuenta que las cajas comerciales vienen con sus propias condiciones. La FS Box sí recodifica bien, la gente logró que módulos FS SFP-GE-BX funcionaran en un Intel X710 con autoselect de esa forma, pero solo programa módulos FS y meter un módulo que no es FS le ha ganado a los usuarios bloqueos de cuenta de una semana.