clase Flash – acceso al almacenamiento flash integrado

La clase Flash permite el acceso directo al dispositivo de memoria flash principal en las OpenMV Cam basadas en STM32.

En la mayoría de los casos, para almacenar datos persistentes en el dispositivo, querrás usar una abstracción de más alto nivel, por ejemplo el sistema de archivos a través de la API de archivos estándar de Python, pero esta interfaz resulta útil para personalizar la configuración del sistema de archivos o implementar un sistema de almacenamiento de bajo nivel para tu aplicación.

Nota

Las OpenMV Cam H7 Plus, Pure Thermal y N6 usan un chip de memoria flash SPI/QSPI/XSPI externo para el almacenamiento principal; las demás OpenMV Cam basadas en STM32 usan la memoria flash interna dentro del MCU. La interfaz de Python es idéntica en ambos casos.

Constructores

class pyb.Flash
class pyb.Flash(*, start: int = -1, len: int = -1)

Construye un dispositivo de bloques compatible con vfs.AbstractBlockDev para la memoria flash integrada. Existen dos formas:

  • Flash() (sin argumentos): devuelve el objeto singleton heredado que expone toda la memoria flash con una tabla de particiones virtual antepuesta. Los datos reales de la flash comienzan en el bloque 0x100. Esta forma está obsoleta y se eliminará en una futura versión de MicroPython.

  • Flash(start=..., len=...): devuelve un dispositivo de bloques nuevo que accede a la memoria flash empezando en el desplazamiento de bytes start (por defecto 0) durante len bytes (por defecto: el resto del dispositivo). Ambos valores deben ser múltiplos del tamaño de bloque subyacente (normalmente 512 bytes para la flash interna; las piezas SPI/QSPI/XSPI externas usan un tamaño de sector de borrado mayor).

Métodos

readblocks(block_num: int, buf: bytearray) None
readblocks(block_num: int, buf: bytearray, offset: int) None

Lee bytes de la memoria flash hacia buf. Dos sobrecargas exponen las interfaces simple y extendida:

Forma simple (readblocks(block_num, buf)): lee bloques completos empezando en el índice de bloque block_num. len(buf) debe ser un múltiplo del tamaño de bloque de la flash.

Forma extendida (readblocks(block_num, buf, offset)): lee len(buf) bytes – no necesariamente un número entero de bloques – empezando en el byte offset dentro del bloque block_num. len(buf) no tiene ninguna restricción de alineación. Solo se admite en objetos creados con argumentos start / len explícitos, no en el singleton obsoleto.

writeblocks(block_num: int, buf: bytes | bytearray) None
writeblocks(block_num: int, buf: bytes | bytearray, offset: int) None

Escribe bytes desde buf a la memoria flash. Dos sobrecargas exponen las interfaces simple y extendida:

Forma simple (writeblocks(block_num, buf)): escribe bloques completos empezando en el índice de bloque block_num. len(buf) debe ser un múltiplo del tamaño de bloque de la flash. Cada bloque afectado se borra automáticamente antes de escribirse.

Forma extendida (writeblocks(block_num, buf, offset)): escribe len(buf) bytes – no necesariamente un número entero de bloques – empezando en el byte offset dentro del bloque block_num. len(buf) no tiene ninguna restricción de alineación, y no se realiza ningún borrado implícito – quien llama debe asegurarse de que los bloques afectados se hayan borrado mediante una llamada previa a ioctl(6, block_num). Solo se admite en objetos creados con argumentos start / len explícitos.

ioctl(cmd: int, arg: int) int | None

Punto de entrada ioctl estándar de vfs.AbstractBlockDev. Consulta vfs.AbstractBlockDev.ioctl() para ver la lista completa de valores de cmd. cmd=5 devuelve el tamaño de bloque de la flash en bytes; cmd=6 borra el bloque con índice arg.