classe Flash – accesso alla memoria flash integrata¶
La classe Flash consente l’accesso diretto al dispositivo flash primario sulle OpenMV Cam basate su STM32.
Nella maggior parte dei casi, per memorizzare dati persistenti sul dispositivo, conviene usare un’astrazione di livello superiore, per esempio il filesystem tramite l’API standard dei file di Python, ma questa interfaccia è utile per personalizzare la configurazione del filesystem o implementare un sistema di archiviazione di basso livello per la propria applicazione.
Nota
Le OpenMV Cam H7 Plus, Pure Thermal ed N6 usano un chip flash SPI/QSPI/XSPI esterno come archiviazione primaria; le altre OpenMV Cam basate su STM32 usano la flash interna all’interno della MCU. L’interfaccia Python è identica in entrambi i casi.
Costruttori¶
- class pyb.Flash¶
- class pyb.Flash(*, start: int = -1, len: int = -1)
Costruisce un block device compatibile con
vfs.AbstractBlockDevper la flash integrata. Esistono due forme:Flash()(senza argomenti): restituisce l’oggetto singleton legacy che espone l’intera flash con una tabella di partizioni virtuale anteposta. I dati flash effettivi iniziano al blocco0x100. Questa forma è deprecata e verrà rimossa in una futura release di MicroPython.Flash(start=..., len=...): restituisce un nuovo block device che accede alla flash a partire dall’offset in bytestart(predefinito0) perlenbyte (predefinito: il resto del dispositivo). Entrambi i valori devono essere multipli della dimensione di blocco sottostante (tipicamente 512 byte per la flash interna; le parti SPI/QSPI/XSPI esterne usano una dimensione di settore di cancellazione più grande).
Metodi¶
- readblocks(block_num: int, buf: bytearray) None¶
- readblocks(block_num: int, buf: bytearray, offset: int) None
Legge byte dalla flash in
buf. Due overload espongono l’interfaccia semplice ed estesa:Forma semplice (
readblocks(block_num, buf)): legge blocchi interi a partire dall’indice di bloccoblock_num.len(buf)deve essere un multiplo della dimensione di blocco della flash.Forma estesa (
readblocks(block_num, buf, offset)): leggelen(buf)byte – non necessariamente un numero intero di blocchi – a partire dal byteoffsetall’interno del bloccoblock_num.len(buf)non ha vincoli di allineamento. Supportata solo sugli oggetti creati con argomentistart/lenespliciti, non sul singleton deprecato.
- writeblocks(block_num: int, buf: bytes | bytearray) None¶
- writeblocks(block_num: int, buf: bytes | bytearray, offset: int) None
Scrive byte da
bufnella flash. Due overload espongono l’interfaccia semplice ed estesa:Forma semplice (
writeblocks(block_num, buf)): scrive blocchi interi a partire dall’indice di bloccoblock_num.len(buf)deve essere un multiplo della dimensione di blocco della flash. Ogni blocco interessato viene cancellato automaticamente prima di essere scritto.Forma estesa (
writeblocks(block_num, buf, offset)): scrivelen(buf)byte – non necessariamente un numero intero di blocchi – a partire dal byteoffsetall’interno del bloccoblock_num.len(buf)non ha vincoli di allineamento e non viene eseguita alcuna cancellazione implicita – il chiamante deve assicurarsi che i blocchi interessati siano stati cancellati tramite una precedente chiamata aioctl(6, block_num). Supportata solo sugli oggetti creati con argomentistart/lenespliciti.
- ioctl(cmd: int, arg: int) int | None¶
Punto di ingresso ioctl standard di
vfs.AbstractBlockDev. Vederevfs.AbstractBlockDev.ioctl()per l’elenco completo dei valori dicmd.cmd=5restituisce la dimensione di blocco della flash in byte;cmd=6cancella il blocco con indicearg.