Saltar al contenido

¿Cómo usar correctamente la memoria flash STM32 como EEPROM?

No dejes de divulgar nuestra página y códigos con otro, necesitamos tu ayuda para aumentar esta comunidad.

Solución:

Sí, como ya ha descubierto, no puede borrar menos de una página a la vez.
Sin embargo, si sus parámetros ocupan mucho menos que el tamaño de una página, podría considerar crear un esquema en el que, en lugar de escribir en la misma dirección cada vez y borrar entre cada escritura, escriba en una dirección diferente dentro de la página en cada escribe. Solo borre la página cuando esté llena.
Entonces, cuando desee leer sus parámetros, comience a leer desde el principio de la página y continúe leyendo hasta que llegue a un bloque de parámetros lleno de entradas 0xff. Entonces sabrás que el bloque anterior fue el último que escribiste.

Sin duda, hay muchas otras formas de hacer este tipo de cosas, por ejemplo, podría usar un campo de bits al comienzo de la página para indicar qué bloques dentro de la página se han escrito en lugar de tener que escanear potencialmente toda la página. Pero esto puede depender del soporte de hardware. Algunos micros, como el STM32L0, no le permitirán escribir nada más que 0x0000 en una ubicación flash si actualmente no está completamente borrado a 0xffff, lo que le impide usarlo como un campo de bits y borrar 1 bit a la vez.

Sí, se debe borrar una página completa (configurada en 0xFF) antes de que pueda comenzar a escribir en ella.

Con la mayoría de las memorias flash externas, puede escribir en una página varias veces sin borrar, siempre y cuando esté escribiendo en ubicaciones de bytes no utilizadas anteriormente. Por favor, vea esta respuesta.

Sin embargo, el controlador de memoria flash interno en el STM32 no permitirá ninguna escritura a menos que se borre toda la página.

Si quiere ir por la ruta fácil, ST tiene una solución de software disponible gratuitamente que proporciona una capa de emulación de EEPROM utilizando un área de memoria flash interna. Proporciona un conjunto simple de funciones y maneja todas las complejidades “bajo el capó”. Permite la granularidad de lectura y escritura de un solo byte, y maneja el borrado por usted.

No sé qué microcontrolador estás usando. Aquí están los documentos de emulación de EEPROM para los microcontroladores STM32F0xx y STM32F10x.

Por ejemplo, escribes un byte usando EE_WriteVariable(). El software asigna esta ubicación a una página flash, lee esa página, inserta su byte donde corresponde, luego programa una página completamente nueva en otra página flash. Rebota de un lado a otro entre las páginas y mantiene todo esto oculto para ti.

Sin embargo, esto requiere bastante tiempo. No solo toma un tiempo, sino que su bus de memoria puede detenerse mientras espera que se complete una escritura flash, por lo que no puede hacer esto en aplicaciones críticas de tiempo.

Si este software no funciona para su aplicación, puede crear una solución tan compleja como necesite. Una vez escribí un gran sistema para manejar datos de configuración de misión crítica, cuyos datos podían cambiar sobre la marcha. Utilizaba múltiples sectores, ubicaciones redundantes, verificación de crc, nivelación de desgaste, etc. No podía confiar en una tabla de contenido, porque ¿qué sucede si el sistema se apaga en medio de la actualización de TOC? Por lo tanto, tenía una rutina para descubrir el banco de configuración flash “activo” (léase: “escrito más recientemente”) durante la inicialización … etc., etc.

Sección de Reseñas y Valoraciones

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *