¿Qué sucedería en caso de un corte de energía durante el borrado de la memoria NOR o la programación?

2

Estoy usando un flash NOR conectado a SPI (AT25DF321a) para proteger los datos contra pérdidas durante un corte de energía.

¿Pero cómo se protege el flash contra la pérdida de energía? ¿Qué pasaría si la alimentación se apagara durante el borrado o la programación? ¿Es posible detectar tales casos programáticamente? (sumas de comprobación y así sucesivamente)

Por ejemplo, si se interrumpió un borrado, ¿hay todos los "1" al comienzo del bloque borrado? ¿Al final? ¿O es totalmente indefinido?
Tengo la misma pregunta sobre la programación: ¿están los bits programados en algún orden?

    
pregunta edo1

1 respuesta

4

En términos generales, la memoria flash funciona al proporcionar una operación de borrado que establece incondicionalmente los bits en un estado (por ejemplo, todos), y una operación de programa independiente que establece los bits de manera selectiva en el otro estado (por ejemplo, ceros).

Si se produce un fallo de alimentación durante cualquiera de las operaciones, es posible que no haya cambiado ninguno de los bits, algunos de los bits o todos los bits, y los bits pueden estar en un estado parcialmente modificado. En otras palabras, tienes que asumir que los contenidos no están definidos.

Cuando sabe que se ha producido un fallo de alimentación (o cualquier otro restablecimiento inesperado), necesita realizar verificaciones de integridad en las áreas afectadas de la memoria (suponiendo que sabe cuáles son) y reiniciar la operación interrumpida para poder realizar Seguro que todos los bits se cambian completamente.

Una forma de gestionar esto es aprovechar el hecho de que puede borrar una página de la memoria y luego programar los bits de forma selectiva en esa página de uno en uno. Esto se puede utilizar para crear un "cuadro de indicadores de estado" en el que graba sus intenciones antes de realizar una operación importante en un bloque de memoria. Si se produce una falla en el suministro eléctrico, solo debe mirar esta página del panel de resultados para determinar qué bloques de memoria pueden ser sospechosos y qué operación debe repetirse en ellos.

Una vez diseñé un sistema integrado que podría actualizar su firmware de forma remota. Para hacer que esto sea lo más robusto (e infalible) posible, reservo dos áreas de memoria flash que podrían contener una copia completa del firmware. Un área podría borrarse y programarse con una versión actualizada, mientras que la otra contenía la versión de trabajo existente. El "truco" fue que mantuve el byte de estado para cada área en la otra área . En cada reinicio, el código de inicio examinaría los dos bytes de estado para determinar qué área tenía una copia válida del firmware y si había operaciones parciales que debían completarse en cualquiera de las áreas.

    
respondido por el Dave Tweed

Lea otras preguntas en las etiquetas