Hay varias estrategias para detectar tales fallas.
Una sencilla funciona e incluso detecta casos en los que su dispositivo se apaga durante una escritura:
Supongamos que tiene un bloque de n bytes que desea escribir:
[ xx xx xx xx xx xx ]
En lugar de solo escribir ese bloque, encapsúelo con dos contadores y una suma de comprobación (crc, por ejemplo) como este:
[ counter1 xx xx xx xx xx xx checksum counter2]
Escribir algoritmo:
Antes de escribir datos, primero lea el valor anterior de counter1:
a = eeprom_read_read (counter1_offset)
Ahora sobrescribe los datos con contadores incrementados y una suma de comprobación:
eeprom_write(counter1_offset, a+1);
eeprom_write(data_offset, data);
eeprom_write(checksum_offset, calc_checksum...);
eeprom_write(counter2_offset, a+1);
Algoritmo de lectura:
Si desea acceder a sus datos en el eeprom, lea siempre los contadores y la suma de comprobación junto con los datos. Si counter1 difiere de counter2, es probable que haya una falla de energía durante la operación de escritura. Si los contadores son iguales pero la suma de comprobación no coincide, tiene una celda de eeprom defectuosa.