EEPROM
El sistema IRStart utiliza la EEPROM interna del microcontrolador ATtiny en el módulo para almacenar de forma persistente los comandos RC5 programados durante la fase de pairing.
Medio de Almacenamiento
| Característica | Detalle |
|---|---|
| Tipo | EEPROM interna del ATtiny |
| Capacidad | 64 B (ATtiny13) / 512 B (ATtiny85) |
| Tecnología | EEPROM on-chip AVR |
| Librería | EEPROM.h (Arduino) |
Layout de Datos
| Offset | Tamaño | Campo | Descripción |
|---|---|---|---|
0x00 |
1 B | EEPROM_ADDR_RC5_START |
Comando START programado |
0x10 |
1 B | EEPROM_ADDR_RC5_STOP |
Comando STOP programado |
Nota: Las direcciones están separadas por 16 bytes (
EEPROM_ADDR_RC5_START = 0,EEPROM_ADDR_RC5_STOP = 16), aunque cada valor ocupa solo 1 byte. Esto deja espacio para expansión futura de datos de configuración.
Operaciones
Inicialización
void rc5_init() {
rc5_stored_data[DATA_START] = EEPROM.read(EEPROM_ADDR_RC5_START);
rc5_stored_data[DATA_STOP] = EEPROM.read(EEPROM_ADDR_RC5_STOP);
}
Al arrancar, se cargan los comandos almacenados en un array en RAM
(rc5_stored_data[2]).
Programación (Escritura)
Cuando el módulo recibe un comando con dirección ADDRESS_PROG (0x0B):
command→rc5_stored_data[DATA_STOP]command + 1→rc5_stored_data[DATA_START]- Se escribe en EEPROM con
EEPROM.write() - Se ejecuta
module_feedback()para confirmar
| Condición | Comando STOP guardado | Comando START guardado |
|---|---|---|
id == 0 |
command (del mando) |
command + 1 |
id != 0 |
(id << 1) & 0xFE |
(id << 1) \| 1 |
Verificación (Lectura)
En cada comando con dirección ADDRESS_COMP (0x07), el módulo compara el
comando recibido con los valores almacenados en RAM:
if (command == rc5_stored_data[DATA_START]) {
module_start();
} else if (command == rc5_stored_data[DATA_STOP]) {
module_stop();
}
Mecanismo de Integridad
| Mecanismo | Detalle |
|---|---|
| Checksum | ❌ No implementado |
| Validación | ❌ No se validan los datos al cargar |
| Valores por defecto | ❌ No se detecta EEPROM virgen (0xFF) |
| Copia de seguridad | ❌ Sin redundancia |
⚠️ Advertencia: No hay verificación de integridad de los datos en EEPROM. Si la EEPROM está sin inicializar (valores 0xFF), los comandos no coincidirán con ningún código RC5 válido (los comandos RC5 son de 6 bits, máximo 0x3F). Esto actúa como protección implícita, pero no se notifica al usuario. Ver EE-01.
Reset de EEPROM
Existe código comentado para restaurar la EEPROM a valores por defecto:
rc5.cpp:90-96 (comentado)
// void rc5_reset_eeprom() {
// EEPROM.write(EEPROM_ADDR_RC5_START, 0);
// EEPROM.write(EEPROM_ADDR_RC5_STOP, 0);
// rc5_init();
// module_feedback();
// }
main.cpp:23-25 (comentado)
// if (!digitalRead(PIN_RESET)) {
// rc5_reset_eeprom();
// }
El pin PIN_RESET (PB2) y la lógica de reset están definidos en pinout.h pero no implementados.
Documento generado el 2025-06-25. Ver también Protocolos IR, Arquitectura Software, Problemas Conocidos.