EEPROM leyendo y escribiendo

4

Se sabe que hay ciclos limitados de lectura y escritura para EEPROM. Supongamos que escribo cierta información importante en la EEPROM y la leo después de apagarla y encenderla. Supongamos que en algún momento la EEPROM falla, ¿cómo saber esta condición? ¿Cuáles son los cheques que puedo poner? Otra pregunta es la comprobación de un byte de La memoria EEPROM como escribir un valor conocido y leer el mismo valor equivale a verificar la memoria EEPROM completa, por ejemplo, 4K.

    
pregunta rajesh

2 respuestas

5

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.

    
respondido por el Nils Pipenbrinck
2

Durante años, he implementado el almacenamiento de pequeños conjuntos de datos en EEPROM (en la mayoría de los casos, el tipo de serie con una interfaz SPI o I2C) almacenando dos copias de los datos. Cada copia tiene un CRC de 16 bits adjunto. Las dos copias se almacenan en la EEPROM de manera secuencial, de modo que si se interrumpe el proceso de actualización del almacenamiento (pérdida de energía o reinicio accidental / inesperado), solo una de las dos copias está afectada.

En el encendido, lea ambas copias de los datos y verifique los CRC. Si el CRC de la primera copia está bien, utilícelo como los datos más recientes. Si el CRC de la primera copia es incorrecto, entonces recurra al uso de la segunda copia si su CRC es correcto. Esta será en casi todos los casos la copia previamente almacenada del conjunto de datos. Si el CRC del segundo conjunto de datos es incorrecto, debe recurrir a la configuración de los parámetros en el conjunto de datos a valores predeterminados.

Escribir EEPROM en serie puede llevar mucho tiempo, por lo que está más expuesto a la posibilidad de interrupción. Por lo tanto, llevo el algoritmo anterior un paso más allá y si ambas copias del conjunto de datos tienen buenos CRC y si el contenido de ambos es el mismo, entonces guardo una copia del conjunto de datos en la RAM del procesador. Al momento de actualizar el conjunto de datos cuando se han realizado cambios, comparo la nueva imagen con la copia almacenada en byte byte RAM y solo almaceno los bytes que realmente están cambiando. Esto acelera significativamente el proceso porque normalmente solo unos pocos bytes a la vez cambian cuando el conjunto de datos es algo así como un almacén de parámetros.

Si está operando en EEPROM en serie, es una buena idea también actualizar los datos cuidadosamente en los "límites de tamaño de página" internos del chip, ya que puede eliminar el tiempo de escritura típico de 10 ms para cada byte al distribuir ese tiempo a través de múltiples bytes hasta el tamaño de página. En los últimos años he cambiado a usar la tecnología FRAM en serie en lugar de EEPROM en serie porque esta tecnología no tiene la propiedad de desgaste como EEPROM. FRAM también tiene la hermosa propiedad en la que la escritura y la lectura operan a la velocidad de la interfaz serial completa sin necesidad de tener una penalización de tiempo de escritura de 10 ms. Por supuesto, las piezas cuestan más, pero esto puede ser una gran ventaja.

Tres cosas más a considerar con respecto al almacenamiento de conjuntos de datos en EEPROM (o FRAM).

  1. Es un hecho de la vida que el software integrado cambia continuamente y que los parámetros pueden agregarse al conjunto de datos y eliminarse. Dado que el conjunto de datos almacenado es un paquete binario, puede parecer que tiene el CRC correcto, aunque se haya utilizado una versión de software diferente para escribir los parámetros que la versión de software actualizada actual que está leyendo el conjunto de parámetros. Este problema se resuelve agregando un número de versión de software a su código y almacenando ese número en el conjunto de datos junto con los otros parámetros. Al momento de leer los datos, el número de versión almacenado se compara con el número de versión actual del software. Si es diferente, entonces el software sabe aplicar valores predeterminados a todos los miembros del conjunto de datos para crear un conjunto de datos nuevo y válido en lugar de utilizar los datos defectuosos.
  2. Es una buena idea comparar los parámetros leídos de un conjunto de datos almacenados con un conjunto esperado de criterios. Para los tipos de datos numéricos, verifique el rango de cada valor para asegurarse de que sean buenos. Para las cadenas, verifique las longitudes y que los caracteres de cadena almacenados estén dentro del rango del conjunto de códigos que se está utilizando. Si algunos parámetros no son válidos, es aconsejable declarar el conjunto de datos como no válido y aplicar valores predeterminados a todo.
  3. Puede ser una buena idea mantener un parámetro en el conjunto de datos que cuente la cantidad de veces que una u otra copia del conjunto de datos se lee con un error de CRC. Si este número aumenta a un cierto nivel, querrá alertar al usuario de que la EEPROM puede estar desgastándose y necesita ser reemplazada. Alternativamente, puede organizar mover el conjunto de datos a otra parte de la EEPROM para que comience con un nuevo conjunto de celdas sin usar. Tenga en cuenta que FRAM no necesita esto ya que no se desgasta de la misma manera que EEPROM. Además, si evita escribir en la EEPROM con demasiada frecuencia, por ejemplo, limitar las escrituras a una vez cada 15 minutos, las especificaciones de por vida de la EEPROM le permitirán utilizar el dispositivo de almacenamiento durante 15 a 20 años sin tener que preocuparse por el desgaste. fenómeno. La mayoría de los dispositivos electrónicos no son aplicables después de ese número de años de todos modos.
respondido por el Michael Karas

Lea otras preguntas en las etiquetas