Guía paso a paso
Programar la EEPROM del HAT SX1255 (Little PA): 2 métodos
Cómo grabar el identificador de HAT en la EEPROM 24C256 del SX1255 HAT «Little PA» de dos formas: directamente desde la Raspberry Pi con un script Python, o con un programador externo CH341A y el software IMSProg en Windows o Linux.
⚠️ Importante: confirma la revisión exacta de tu placa (v1.0/v1.1/v1.2) mirando el serigrafiado de la PCB o el repositorio oficial antes de grabar. Escribir la versión equivocada no daña el hardware, pero puede provocar que algún parámetro del device tree no case con tu placa real.
Qué necesitas antes de empezar
Según el método que elijas, necesitarás una cosa u otra (o ambas si quieres verificar de forma cruzada):
- La placa SX1255 HAT «Little PA» con su EEPROM 24C256 en blanco o pendiente de reprogramar.
- Método 1 (Raspberry Pi): una Raspberry Pi con conector HAT de 40 pines (Pi 2/3/4/5) y el script
write_eeprom2.py. - Método 2 (programador externo): un programador USB CH341A, una pinza de test SOIC8, y el software IMSProg (Windows, binarios listos) o IMSProg (Linux, compilando desde el código).

🛒 comprar programador CH341A aquí
Método 1: directamente desde la Raspberry Pi
Ejecuta el script (instala dependencias solo)
La primera vez que lo lanzas, write_eeprom2.py comprueba e instala automáticamente i2c-tools, python3-smbus, smbus2 y el módulo del kernel i2c-dev. No hay que preparar nada a mano de antemano.
sudo python3 write_eeprom2.py ================================================================================ Comprobando dependencias del sistema... / Checking system dependencies... ================================================================================ [OK] i2c-tools ya instalado / already installed [OK] python3-smbus ya instalado / already installed [OK] modulo i2c-dev ya cargado / kernel module already loaded [OK] smbus2 (pip) ya instalado / already installed ================================================================================
El script crea el bus dedicado y detecta la EEPROM
En lugar de escanear todos los buses del sistema (lo que en Raspberry Pi 5 puede confundirse con los buses DDC de HDMI), el script crea un bus por software apuntando directamente a los pines dedicados ID_SD/ID_SC (27/28) del HAT, y comprueba que responde limpiamente en 0x50:
Preparando bus I2C dedicado para la EEPROM del HAT (pines 27/28, ID_SD/ID_SC)...
Modelo detectado / Detected model: Raspberry Pi 5 Model B Rev 1.1
[..] Cargando overlay i2c-gpio (SDA=GPIO0, SCL=GPIO1, bus=20)...
[OK] Bus dedicado /dev/i2c-20 creado correctamente
Comprobando EEPROM en bus dedicado 20, direccion 0x50...
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: 50 -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
[OK] Unico dispositivo detectado en 0x50 (patron limpio)
Estado actual de la EEPROM: EEPROM en blanco, sin programar (todo 0xFF)⚠️ Antes de escribir: comprueba que tienes puesto el puente (jumper) marcado como «WP» en la serigrafía de la placa. Sin ese puente colocado, la EEPROM tiene activada la protección contra escritura y el script no podrá grabar nada (la escritura fallará o no surtirá efecto real, aunque parezca completarse). Coloca el jumper en WP antes de continuar al siguiente paso, y retíralo de nuevo al terminar si quieres dejar la EEPROM protegida.
Elige la versión y confirma la escritura
=== Selecciona la version de firmware / Select firmware version === 1) v1.0 2) v1.1 3) v1.2 4) Archivo personalizado (.bin) / Custom file (.bin) Opcion / Option [1-4]: 3 Version seleccionada / Selected version: v1.2 (1883 bytes) ¿Escribir 'v1.2' en bus 20? / Write 'v1.2' to bus 20? (s/n): s Escribiendo 'v1.2' (1883 bytes) en bus 20, direccion 0x50... Wrote 0/1883 bytes Wrote 64/1883 bytes ... Wrote 1792/1883 bytes Wrote 1856/1883 bytes EEPROM write complete ✓
Verifica la grabación con i2ctransfer
Fija la dirección interna a 0x0000 explícitamente y lee los primeros 16 bytes:
sudo i2ctransfer -y 20 w2@0x50 0x00 0x00 r16 0x52 0x2d 0x50 0x69 0x01 0x00 0x03 0x00 0x5b 0x07 0x00 0x00 0x01 0x00 0x00 0x00
52 2d 50 69 = "R-Pi" (cabecera válida) · 03 00 = 3 bloques de datos · 5b 07 00 00 = 1883 bytes, exactamente el tamaño del binario escrito. Grabación íntegra confirmada.
Método 2: con un programador externo CH341A + IMSProg
Este método no necesita Raspberry Pi ni conector de 40 pines: se conecta la pinza de test directamente sobre el chip 24C256 de la placa. Sirve tanto para grabar como para hacer una copia de seguridad de una EEPROM ya programada antes de tocar nada.
Instala IMSProg
En Windows, descarga el binario ya compilado desde github.com/Anime4000/IMSProg/releases y ejecútalo directamente. En Linux, compílalo desde el código fuente en github.com/bigbigmdm/imsprog siguiendo las instrucciones de compilación (CMake + Qt6) del propio repositorio.
Conecta la pinza SOIC8 al chip — el pin 1 es la clave
Es el paso donde más se falla. En la pinza de test SOIC8, el cable rojo de los 8 que salen de ella marca la posición del pin 1. En el chip 24C256 de la placa, el pin 1 está marcado con un punto o muesca grabado en una de las esquinas de la carcasa negra. Ambas marcas tienen que coincidir exactamente al cerrar la pinza:




Si además tu programador CH341A tiene un jumper físico de voltaje (etiquetado 3.3V/5V junto al zócalo o al cable de la pinza), colócalo en 3.3V — es el voltaje de trabajo del 24C256 en este HAT.
Detecta el modelo de programador en IMSProg
Conecta el CH341A por USB. En el menú Programador, elige el modelo que coincida con tu placa comparándola visualmente (CH341A/B v1.2, CH341A v1.7, CH347T v1.0 o v1.1 — cada uno tiene un aspecto distinto). Confirma que abajo aparece «CH341A: Conectado» en verde.

Selecciona el chip: 24_EEPROM / MICROCHIP / 24C256
En el panel Chip, configura exactamente:
- Tipo: 24_EEPROM
- Fabricación: MICROCHIP
- Nombre: 24C256
- Talla: 32 K
- Tamaño de página: 32
- VCC, voltios: 3.3 V
- Velocidad del I2C: 400 kHz (bájala a 100 kHz si la lectura falla)

Desmarca «Borrar» y «Comprobar borrado»
En Opciones automáticas, quita el check de Borrar y Comprobar borrado. Estas dos opciones están pensadas para memorias flash SPI (que necesitan un ciclo de borrado por sectores antes de poder escribir); una EEPROM I2C como el 24C256 admite sobrescritura directa byte a byte, así que ese borrado previo no aplica aquí y solo alarga el proceso innecesariamente. Deja marcadas Escribe y Verifique.

Lee la EEPROM y guarda una copia .bin
Pulsa Leer. Si todo está bien conectado, el editor hexadecimal debe mostrar una cabecera reconocible en vez de ceros o basura:
0000 52 2D 50 69 01 00 03 00 5B 07 00 00 01 00 00 00 R-Pi....[....... 0010 26 00 00 00 08 24 28 D8 B7 08 B6 81 15 46 2B 9D &....$(...F+. 0020 70 5B 24 3C 55 12 02 01 06 08 4F 48 32 45 41 54 p[$<U.....OH2EAT
Con Archivo > Guardar, guarda ese volcado como un .bin — es tu copia de seguridad de la EEPROM tal y como estaba antes de tocar nada.
📥 Aquí puedes descargar la copia de seguridad usada en esta guía.

Carga el nuevo .bin y escribe
Con Archivo > Abrir, carga el .bin que quieras grabar (por ejemplo, la versión correcta extraída del repositorio de la placa). Comprueba de nuevo que Borrar y Comprobar borrado siguen desmarcados, y pulsa el icono de Escribir en la barra de herramientas (o ¡Arranca! si prefieres el flujo automático con las casillas marcadas). Al terminar, el programa verifica automáticamente y muestra el resultado en la barra de progreso.

💡 Consejo: antes de reescribir una EEPROM ya programada, lee y guarda siempre una copia con el método 2 (aunque solo vayas a usar el método 1). Así, si algo sale mal, siempre puedes volver al estado anterior con ese mismo programador.









