STM32F74x Tamaño de página Flash y sectores

2

Estoy escribiendo datos en el flash interno de un STM32F746 y me pregunto cuál es la diferencia entre páginas y sectores. ¿Y cuál es el propósito de usar sectores en su lugar? Tenga en cuenta que soy muy nuevo y que la razón por la que pregunto es porque previamente escribí en Flash para saber el tamaño de la página y la cantidad de páginas. Pero ahora tengo 8 sectores en su lugar.

A menos que lo haya perdido en algún lugar, no puedo encontrar ninguna referencia a las páginas o el tamaño de la página en ningún documento al STM32F746

    
pregunta user3660570

1 respuesta

2

El concepto es el mismo, entre página y sectores. La documentación de STM32F7 usa el término sector porque son mucho más grandes que las páginas típicas en la memoria flash externa. Pero no importa.

Por lo tanto, no puedes encontrar referencias a páginas porque lo que llamaste páginas se llaman aquí sectores.

La restricción es: cuando desea borrar, debe borrar todo el sector. Como ha visto, en STM32F7, hay 8 sectores, con diferentes tamaños (4 sectores de 32 Kbytes, 1 sector de 128 Kbytes y 3 sectores de 256 Kbytes). El hecho de que tengan diferentes tamaños le permite tener más flexibilidad en la forma en que organiza su flash. Por ejemplo, podría tener un sector reservado para los datos de configuración. De esta manera, cuando quiera reprogramar esta parte, no tiene que borrar todo el código de firmware. Pero aún tiene que borrar todo el sector de configuración, incluso si necesita cambiar un solo byte. Y es cierto que estos sectores son enormes, por lo que no puede usar este flash tan fácilmente como los flashes serie externos típicos en los que puede organizar las cosas de una manera más flexible (o incluso usar un sistema de archivos). Pero este no es el propósito de estas memorias flash incrustadas.

Si necesita una forma más flexible de almacenar datos persistentes que puedan cambiar con el tiempo, use una memoria flash externa o una EEPROM externa, según sus restricciones. Sin embargo, hay un truco que podrías usar en el flash MCU principal: el borrado solo es necesario cuando cambias los bits de 0 a 1. Para cambiar los bits de 1 a 0, solo necesitas programar los bytes de flash (consulte la nota en el capítulo 3.3.7 en el manual de referencia). La programación de los bytes flash puede realizarse tantas veces como desee en el sector, y puede realizarse en bytes individuales. Por lo tanto, puede aprovechar esto al dividir el enorme sector de "configuración" en pequeños fragmentos que usted programa individualmente, cuando sus datos cambian. Luego, necesita un índice en el que "fusiona" los bits de 1 a 0 para saber en qué parte se pueden encontrar los últimos datos. Finalmente, cuando se han utilizado todos los trozos, borra todo el sector y comienza de nuevo. Esto desperdicia mucho espacio, pero puede darle la flexibilidad que necesita sin comprometer demasiado la resistencia instantánea.

    
respondido por el dim

Lea otras preguntas en las etiquetas