Para la recuperación confiable de datos de EEPROM, hay varias cosas que se pueden hacer. Consideremos, por ejemplo, almacenar un valor de contador ocasional en el almacenamiento persistente de la EEPROM. Debe tener en cuenta tanto el problema de pérdida de potencia que estamos discutiendo aquí como las características de resistencia de escritura de la EEPROM serial.
Está bien usar la EEPROM en un modo de lectura / escritura (dado que tiene tiempo para hacerlo) siempre y cuando se asegure de poder asegurar que la resistencia al desgaste de las celdas de memoria no se agote. En la duración del producto. Como por ejemplo, he realizado diseños de productos con EEPROM externa, como 93C46, conectado a un microcontrolador a través de 3 pines de puerto. He usado ciertas ubicaciones en la EEPROM para acumular información como el conteo acumulado o el tiempo total transcurrido. He realizado cálculos utilizando los números de resistencia del 93C46 y he descubierto que si desea asegurarse de que un producto pueda durar 10 años, en promedio puede permitir que la ubicación de la EEPROM se actualice una vez cada 10 minutos.
Teniendo esto en cuenta, normalmente diseño mi software para que el microcontrolador mantenga el conteo actual o el acumulador de tiempo en la RAM local y luego una función de temporizador proporciona una actualización "una vez cada 10 minutos" para copiar las ubicaciones de la RAM en la EEPROM. Para muchas aplicaciones, esta solución simple es más que adecuada, ya que la pérdida ocasional de 10 minutos de acumulación no es particularmente crítica.
Si el mantenimiento del recuento debe ser más crítico, puede organizar que el microcontrolador gestione su propio apagado y forzar una actualización final de las ubicaciones de EEPROM desde las ubicaciones de RAM justo antes de apagarse.
Y si se requiere un mantenimiento aún más crítico, puede hacer que se produzca una interrupción de falla de alimentación de advertencia temprana que permitirá al software forzar una actualización de la EEPROM justo antes de que el microcontrolador pierda su suministro de electrones de sangre.
Ahora hay un tema aún más importante a considerar al usar una EEPROM para mantener contadores no volátiles. Esto se relaciona con la forma en que administra el proceso de mantener un almacenamiento confiable de los acumuladores cuando se apaga la alimentación, tal como está en el proceso de escribir en la EEPROM. He abordado este problema a lo largo de los años, en muchos proyectos, de la siguiente manera:
Tomemos el chip 93C46 como ejemplo. Tiene ubicaciones de 16 bits en él. Normalmente uso 2 ubicaciones y hago que mi acumulador tenga 24 bits y luego calculo un tipo XOR simple de CRC sobre estos tres bytes y lo conecto en el 4to byte de los 32 bits del par de ubicaciones EEPROM. Luego, cuando se escribe la EEPROM, el acumulador + CRC se escribe en la EEPROM en dos lugares diferentes. (I.E. el acumulador se almacena de forma redundante en la EEPROM). También asegúrese de escribir su software para que la escritura de una copia del acumularor + CRC esté completamente escrita antes de que se inicie la otra. También es una buena idea interponer un retraso de algunos milisegundos entre el par de operaciones de escritura.
Luego, en el próximo encendido, cuando inicializo la copia basada en RAM de los acumuladores de EEPROM, uso el siguiente concepto. Leí la primera copia del acumulador + CRC de la EEPROM y verifico el CRC. Si es correcto, utilizo el valor de lectura de los otros 24 bits como el valor para escribir en las ubicaciones de la RAM. Si la verificación de la primera ubicación falla, entonces voy a leer la segunda copia y la verifico. Si está bien, se convierte en el valor conectado a las ubicaciones de la memoria RAM. Si ambos han fallado, aplico un valor predeterminado al contador en la memoria RAM, como cero o el recuento "completo". (El recuento "completo" se aplicaría a los casos en los que la ubicación de EEPROM se esté utilizando para realizar un seguimiento si cuántas veces quedan para permitir que suceda algo ... [por ejemplo, cuántas cajas se permiten antes de que el microcontrolador publique un mantenimiento. solicitud ... etc etc].