Preservar el estado de las variables en la RAM en el fallo de alimentación

3

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

  

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

La memoria flash de datos comienza en 0x20000, y si necesito actualizar esta ubicación primero tendré que borrar esta ubicación, ¿significa 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?

    
pregunta Arun Joe

2 respuestas

0

Bueno, si desea conservar los datos en el bloque de borrado, primero debe leer ese bloque, almacenarlo en el ram, hacer los cambios que necesite hacer, borrar el bloque de flash, escribir el bloque del ram. Bastante simple.

    
respondido por el ziza
3

Debe realizar una operación de lectura-modificación-escritura (RMW), en la que lea la página completa de 512 bytes en la RAM, cambie los valores que deben actualizarse, luego borre y vuelva a escribir el flash página.

Existe la preocupación de que la energía podría fallar mientras se está ejecutando este procedimiento, por lo que se han diseñado esquemas más elaborados que "rebotan" los datos entre dos páginas flash separadas y 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 que se produzca un fallo de alimentación.

Esto es especialmente importante cuando los datos en cuestión son las propias instrucciones del procesador (es decir, la actualización del firmware remoto). Debe garantizar que no importa en qué parte del proceso falle la alimentación, el sistema siempre puede volver al estado de funcionamiento, ejecutando el firmware original o el nuevo firmware. De lo contrario, terminas "bricking" el sistema.

    
respondido por el Dave Tweed

Lea otras preguntas en las etiquetas