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.AbstractBlockDevpara 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 bloque0x100. 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 bytesstart(por defecto0) durantelenbytes (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 bloqueblock_num.len(buf)debe ser un múltiplo del tamaño de bloque de la flash.Forma extendida (
readblocks(block_num, buf, offset)): leelen(buf)bytes – no necesariamente un número entero de bloques – empezando en el byteoffsetdentro del bloqueblock_num.len(buf)no tiene ninguna restricción de alineación. Solo se admite en objetos creados con argumentosstart/lenexplí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
bufa 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 bloqueblock_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)): escribelen(buf)bytes – no necesariamente un número entero de bloques – empezando en el byteoffsetdentro del bloqueblock_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 aioctl(6, block_num). Solo se admite en objetos creados con argumentosstart/lenexplícitos.
- ioctl(cmd: int, arg: int) int | None¶
Punto de entrada ioctl estándar de
vfs.AbstractBlockDev. Consultavfs.AbstractBlockDev.ioctl()para ver la lista completa de valores decmd.cmd=5devuelve el tamaño de bloque de la flash en bytes;cmd=6borra el bloque con índicearg.