Evitar el desgaste de EEPROM

Resumen: si actualiza periódicamente un valor en la EEPROM cada pocos minutos (o varios segundos), puede encontrarse con el problema del desgaste de las células EEPROM. Para evitar esto, debe reducir la frecuencia de las entradas en la celda. Para algunos tipos de EEPROM, incluso las velocidades de grabación más de una vez por hora pueden ser un problema.



Cuando registra datos, el tiempo vuela rápido


EEPROM se usa universalmente para guardar configuraciones y registros de operación en sistemas embebidos. Por ejemplo, es posible que desee que la función de cuadro negro registre los datos más recientes en el momento de un accidente o pérdida de energía. He visto especificaciones que requieren el registro de dichos datos cada pocos segundos.

Pero el problema es que la EEPROM tiene un recurso de número de registro limitado. Después de 100,000 o un millón de registros (dependiendo del chip específico), algunos de sus sistemas comenzarán a experimentar problemas con la falla de EEPROM. (Busque en la hoja de datos un número específico. Si desea liberar una gran cantidad de dispositivos, el "peor de los casos" es probablemente más importante que el "típico"). Un millón de registros parece un gran número, pero de hecho terminará muy rápidamente. Veamos un ejemplo, suponiendo que necesitamos almacenar el voltaje medido en una celda cada 15 segundos.

1,000,000 de registros con un registro en 15 segundos dan registros por minuto:
1,000,000 / (4 * 60 minutos / hora * 24 horas / día) = 173.6 días.
En otras palabras, su EEPROM se quedará sin reservas de un millón de registros en menos de 6 meses.

A continuación se muestra un gráfico que muestra el tiempo de uso (en años) según el período de actualización de una celda EEPROM específica. La línea límite para un producto con una esperanza de vida de 10 años es una actualización cada 5 minutos y 15 segundos para un chip con un recurso de 1 millón de registros. Para una EEPROM con un recurso de 100K, puede actualizar una celda específica no más de una vez cada 52 minutos. Esto significa que no debe esperar actualizar la celda cada pocos segundos si desea que su producto funcione durante años, no meses. Lo anterior escala linealmente, sin embargo, en este dispositivo también hay factores secundarios, como la temperatura y el modo de acceso.



Disminuir frecuencia


La forma más sencilla de resolver el problema es simplemente escribir datos con menos frecuencia. En algunos casos, los requisitos del sistema lo permiten. O puede grabar solo con cualquier cambio importante. Sin embargo, con una entrada relacionada con el evento, tenga en cuenta un posible escenario en el que el valor fluctuará constantemente y causará una secuencia de eventos que conducirán al desgaste de la EEPROM.
(Sería bueno si puede determinar cuántas veces se ha registrado una EEPROM. Pero esto requerirá un contador que se almacenará en la EEPROM ... y el problema se convierte en un problema de desgaste del contador).

Interrupción de reducción de nutrición


Algunos procesadores tienen una interrupción de baja potencia que se puede utilizar para escribir un último valor en la EEPROM, mientras que el sistema se apaga debido a la pérdida de potencia. En general, almacena el valor de interés en la RAM y lo guarda en la EEPROM solo cuando la alimentación está apagada. O tal vez escriba la EEPROM de vez en cuando y escriba otra copia en la EEPROM como parte del procedimiento de apagado para asegurarse de que se escriban los datos más recientes.
Es importante asegurarse de que haya un condensador de potencia grande que mantenga un voltaje suficiente para programar la EEPROM durante un tiempo suficientemente largo. Esto podría funcionar si necesita escribir uno o dos valores, pero no un gran bloque de datos. ¡Atención, hay mucho margen de error!

Anillo de amortiguación


La solución clásica al problema de desgaste es usar el buffer de anillo FIFO que contiene N entradas de último valor. También debe guardar un puntero al final del búfer en la EEPROM. Esto reduce el desgaste de EEPROM en un valor proporcional al número de copias en este búfer. Por ejemplo, si un búfer pasa por 10 direcciones diferentes para guardar un solo valor, cada celda particular se modifica 10 veces menos y el recurso de escritura aumenta 10 veces. También necesitará un contador o sello de tiempo por separado para cada una de las 10 copias, de modo que pueda determinar cuál es el último en el momento del cierre. En otras palabras, necesita dos buffers, uno para el valor y otro para el contador. (Si guarda el contador en la misma dirección, esto provocará su deterioro, ya que debería aumentar con cada ciclo de grabación). La desventaja de este método esque necesita 10 veces más espacio para obtener una vida 10 veces más larga. Puede ser inteligente y empacar el contador junto con los datos. Si escribe una gran cantidad de datos, agregar algunos bytes al contador no es un problema tan grande. Pero en cualquier caso, necesitará mucha EEPROM.
Atmel ha preparado una nota de aplicación que contiene todos los detalles sangrientos:
AVR-101: Almacenamiento EEPROM de alta resistencia: www.atmel.com/images/doc2526.pdf

Un caso especial para el contador del número de registros.


A veces necesita guardar el contador, no los valores en sí. Por ejemplo, es posible que desee saber la cantidad de veces que se encendió el dispositivo o el tiempo de funcionamiento de su dispositivo. Lo peor de los contadores es que cambian constantemente el bit menos significativo, desgastando las células EEPROM inferiores más rápido. Pero aquí es posible aplicar algunos trucos. Hay varias ideas inteligentes en el applet de Microchip, como el uso de un código Gray para que solo un bit de un contador multibyte cambie cuando cambie el valor del contador. También recomiendan el uso de códigos correctivos para compensar el desgaste. (No sé qué tan efectivo será el uso de tales códigos, porque dependerá de cuán independientes sean los errores en los bits en los bytes del contador, uso bajo su propio riesgo, aprox. Autor). Ver nota de aplicación:ww1.microchip.com/downloads/en/AppNotes/01449A.pdf

Nota: para aquellos que deseen saber más, Microchip ha preparado un documento que contiene información detallada sobre la disposición de las células EEPROM y su uso con diagramas:
ftp.microchip.com/tools /memory/total50/tutorial.html

Avíseme si tiene alguna idea interesante sobre cómo lidiar con el uso de EEPROM.

Fuente: Phil Koopman, Better Embedded System SW
Betterembsw.blogspot.ru/2015/07/avoiding-eeprom-wearout.html

Nota del traductor: en los últimos años, los chips EEPROM han aparecido con la organización de limpieza de páginas (similar a los chips FLASH), donde es posible direccionar las celdas (leer, escribir y borrar) byte por bye, pero el chip borra toda la página de forma invisible para el usuario y lo sobrescribe con nuevos datos. Aquellos. Habiendo borrado las celdas en la dirección 0, en realidad borramos y reescribimos las celdas con las direcciones 0 ... 255 (con un tamaño de página de 256 bytes), por lo que el truco del búfer no ayudará en este caso. Cuando se agota el recurso de registro de dicho microcircuito, no falla una celda, sino toda la página. En las hojas de datos de dichos microcircuitos, el recurso de grabación se indica para la página y no para una celda específica. Consulte, por ejemplo, la hoja de datos sobre 25LC1024 de Microchip.

Source: https://habr.com/ru/post/es385213/


All Articles