STM32F74x Tamaño de página Flash y sectores

Estoy escribiendo datos en la memoria flash interna 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 la razón por la que pregunto es porque anteriormente escribí para flashear sabiendo 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 alguna parte, no puedo encontrar ninguna referencia a las páginas o el tamaño de la página en ningún documento del STM32F746.

Respuestas (1)

El concepto es el mismo, entre página y sectores. La documentación de STM32F7 usa el término de 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 puede encontrar referencias a páginas porque lo que llamó páginas aquí se llaman sectores.

La restricción es: cuando desea borrar, debe borrar todo el sector. Como has 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 datos de configuración. De esta manera, cuando desee reprogramar esta parte, no tendrá que borrar todo el código de firmware. Pero aún debe borrar todo el sector de configuración, incluso si necesita cambiar solo un byte. Y es cierto que estos sectores son enormes, por lo que no puede usar este flash tan fácilmente como los típicos flashes seriales externos en los que podría organizar las cosas de una manera más flexible (o incluso usar un sistema de archivos).

Si necesita una forma más flexible de almacenar datos persistentes que pueden cambiar con el tiempo, use una memoria flash externa o una EEPROM externa, según sus limitaciones. Sin embargo, hay un truco que podrías usaren el flash MCU principal: el borrado solo se requiere cuando cambia los bits de 0 a 1. Para cambiar los bits de 1 a 0, solo necesita programar los bytes flash (consulte la nota en el capítulo 3.3.7 en el manual de referencia) . La programación de los flash bytes se puede realizar tantas veces como se desee sobre el sector, y se puede realizar sobre bytes individuales. Entonces, podría aprovechar esto dividiendo el enorme sector de "configuración" en pequeños fragmentos que programe individualmente, cuando cambien sus datos. Luego, necesita un índice en el que "fusione" los bits del 1 al 0 para saber en qué fragmento se pueden encontrar los datos más recientes. Finalmente, cuando se hayan usado todos los trozos, borras todo el sector y empiezas de nuevo. Esto desperdicia mucho espacio, pero puede brindarle la flexibilidad que necesita sin comprometer demasiado la resistencia del flash.

¿Cuál es el número mínimo de sectores físicos en los que se puede ejecutar? STM32F7 también puede utilizar una disposición de 23 sectores. Entonces, ¿4 es suficiente? La documentación de SPIFFS habla sobre el uso de una memoria flash de 2 MB con un tamaño de sector de 6 kb.
@tothphu ¿El número mínimo de sectores en los que puede ejecutarse su sistema? Ciertamente es 1, siempre que su sistema sea lo suficientemente simple. No estoy seguro de entender la pregunta. De todos modos, esta es otra pregunta y debe hacerse por separado. Asegúrese de explicar claramente lo que quiere lograr.
bueno, sí, si puede mantener todo el tamaño del sector en la memoria, entonces 1 sector es suficiente. Sin embargo, creo que aún puede usar un sistema de archivos, dado que puede tener algunos bloques físicos.
@tothphu tener un sistema de archivos en un flash MCU interno parece muy inadecuado. Teóricamente, puede, pero dada la organización con sectores enormes y la resistencia generalmente mucho más baja que un chip flash externo, no creo que logre lo que espera. Solo usa un flash externo. El flash interno es para el código que casi nunca cambia y, eventualmente, un poco de datos de configuración que cambian de vez en cuando. No para usarlo como un disco duro.
AFAIK STM32F7 tiene una resistencia de 100k en el flash (2MiB en total). Además, el tamaño del bloque de borrado es de 128 KiB (con la configuración correcta y desde ~256 KiB en adelante), mientras que puede escribirse en 8 bytes (en lugar de ~256 bytes en una memoria flash externa). Guardar configuraciones o similares puede ahorrarle componentes de hardware adicionales. También a veces esto es una ocurrencia tardía, cuando las modificaciones de HW no son deseables.
Por supuesto, y estoy de acuerdo en que el flash interno se puede usar totalmente para almacenar configuraciones (de ahí mi respuesta). Pero esto no implica usar un sistema de archivos. Aprovechar un sistema de archivos completo para almacenar configuraciones en flash interno es innecesario e imprudente, en mi opinión. Debido a que los índices del archivo también deben actualizarse, se realizan más escrituras que el mínimo, etc. Pero puede estar en desacuerdo.