100k EEPROM escribe "por bit" o como un todo?

6

Tal como lo entiendo, la vida útil de una EEPROM suele tener una determinada cantidad (por ejemplo, 100k) de escrituras. ¿Esto es "por byte" o se escribe en el sistema EEPROM en su conjunto?

Por ejemplo, Si la EEPROM tiene 4k bytes, ¿podría hacer 400 millones de escrituras si estuvieran distribuidas uniformemente?

Específicamente, estoy hablando de la EEPROM en el Arduino Mega 1280/2560.

Informe: Gracias stevenvh y Majenko por sus útiles explicaciones. Pregunté porque quería saber si tenía que molestarme en actualizar solo las variables sucias al guardar una gran cantidad de datos (una configuración grande). Desde la perspectiva del desgaste, la respuesta parece ser 'no': el desgaste ocurre en el "nivel de bits" y solo se produce al poner los bits a cero. Desde una perspectiva de velocidad, tal vez tenga sentido minimizar el tamaño de las escrituras, pero si esto no es una consideración para su aplicación, entonces no necesita preocuparse por ello.     

pregunta aaaidan

3 respuestas

12

No solo se especifican los ciclos de escritura, sino los ciclos de borrado / escritura . En el AVR EEPROM se puede borrar por byte. Borrado establece todos los bits en 1 , escribiendo los bits de forma selectiva. No puedes programar un 1 , solo 0 s. Si desea establecer al menos un bit en 1 , debe borrar ese byte.
El borrado elimina las cargas de la puerta flotante del FET, pero en cada ciclo de borrado, una parte de la carga permanece en la puerta flotante, que no se eliminará a través del túnel cuántico. Esta carga se acumula y después de varios ciclos, queda tanta carga en la puerta flotante que el bit aún leerá 0 después del borrado. Eso es lo que determina la vida de la EEPROM, se borra en lugar de escribir. Por lo tanto, puede escribir con seguridad 0 s adicional, siempre y cuando no borre.
Como resultado, si la hoja de datos especifica 100k ciclos de borrado / escritura, puede tener un máximo de 800k ciclos de escritura, un bit a la vez, para borrados de 100k.

Si está utilizando solo una parte del espacio de memoria EEPROM, puede extender su vida útil distribuyendo los datos, como dice Matt, esto se denomina nivelación de desgaste . El método más simple de nivelación de desgaste al escribir bloques de datos es incluir un contador con los datos. Supongamos que necesita mantener 14 bytes de datos. Agregue un contador de 17 bits como dos bytes, probablemente tenga un poco de repuesto para el bit 17. Incrementa el contador antes de escribir el bloque de 16 bytes. Si el contador ha alcanzado los 100 000, sabe que este bloque se está volviendo poco confiable, por lo que se mueve a los siguientes 16 bytes. Use esto hasta que se use también. Y así. Una memoria de 4k consta de 256 bloques de dieciséis bytes, por lo que puede extender los ciclos originales de 100k a 25 millones.
Debería ser obvio que su ganancia es mayor con bloques de datos más pequeños.

lecturas adicionales
data retención en un microcontrolador

    
respondido por el stevenvh
5

Es por bit, o más específicamente, por puerta.

Lo que usted propone se conoce como "nivelación de desgaste" y se usa comúnmente para extender la vida útil de la memoria flash, especialmente las unidades SSD.

    
respondido por el Majenko
4

Hay algunas variaciones en la tecnología flash y EEPROM, pero al menos con algunas tecnologías flash, un poco con "oomph" suficiente para escribir un cero y luego más tarde con solo "oomph" para escribir un "1 "Normalmente no causaría mucho desgaste. Por otro lado, golpear un poco con una cantidad excesiva de energía para borrarlo puede causar un desgaste considerable. Desafortunadamente, no es práctico regular la cantidad precisa de energía utilizada para escribir y borrar bits individuales. En su lugar, uno debe golpear un bloque completo con un pulso de "borrado" a la vez, e incluso si cada bit estuviera programado de manera idéntica, algunos bits se borrarán más rápido que otros. Si uno no estaba interesado en la velocidad de borrado y tenía la capacidad de leer los bits como cargados 1/2, cargado 1/4, cargado 1/8 o menos, podría ser posible mejorar la resistencia al golpear la matriz completa con un pulso de borrado corto y luego, si cada bit tenía más de 1/4 de carga, golpea todos los bits que estaban a menos de 1/8 con un pulso que los cargaría en aproximadamente 1/8 (para que terminen entre 1/8 y 1/4 cargado), luego golpee la matriz completa con otro pulso de borrado, etc. hasta que ningún bit haya cargado más de 1/4. Tal enfoque evitaría el borrado excesivo, que es uno de los principales factores de desgaste en la memoria flash. Desafortunadamente, este enfoque no solo agrega complejidad, sino que probablemente duplicaría los tiempos de borrado, y probablemente los aumentaría más que eso.

    
respondido por el supercat

Lea otras preguntas en las etiquetas