Preservar el estado de las variables en la RAM en caso de falla de energía

Estoy desarrollando un código con el microcontrolador Nuc240 (ARM Cortex M0). Donde necesito almacenar el valor en algunas de las variables para el flash de datos interno. Utilizo el procedimiento ISP para esto, pero he visto la siguiente declaración en la hoja de datos del microcontrolador, sobre Data Flash.

'El tamaño de cada unidad de borrado es de 512 bytes.'

La memoria flash de datos comienza desde 0x20000, y si necesito actualizar esta ubicación, primero tendré que borrar esta ubicación, ¿significa esto que si borro 0x20000, la memoria hasta 0x20200 también se borrará? y eso podría resultar en otros valores almacenados en estas ubicaciones. ¿Cómo puedo superar esta situación?

Podría considerar un microcontrolador que use memoria no volátil de acceso aleatorio (por ejemplo, FRAM) en lugar de flash.

Respuestas (2)

Bueno, si desea conservar los datos en el bloque de borrado, primero debe leer ese bloque, almacenarlo en la RAM, hacer los cambios que necesite hacer, borrar el bloque flash, escribir el bloque desde la RAM. Suficientemente simple.

¿Puedes comentar un ejemplo?

Debe realizar una operación de lectura, modificación y escritura (RMW), en la que lee la página completa de 512 bytes en la RAM, cambia los valores que deben actualizarse, luego borra y vuelve a escribir la página flash.

Existe la preocupación de que la energía pueda fallar mientras se ejecuta este procedimiento, por lo que se han diseñado esquemas más elaborados que "rebotan" los datos entre dos páginas flash separadas que son mucho más robustos contra esto. Sin embargo, el sistema en general aún debe manejar la posibilidad de que la actualización haya ocurrido o no antes de la falla de energía.

Esto es especialmente crítico cuando los datos en cuestión son las propias instrucciones del procesador (es decir, actualización de firmware remota). Debe garantizar que no importa en qué parte del proceso falle la energía, el sistema siempre puede volver a funcionar, ejecutando el firmware original o el firmware nuevo. De lo contrario, terminas "bloqueando" el sistema.