mimxrt — funzionalità specifiche per NXP i.MXRT¶
Il modulo mimxrt contiene funzioni e classi specifiche per la famiglia di microcontrollori NXP i.MXRT.
Classi¶
- class mimxrt.Flash¶
Ottiene l’oggetto singleton che espone la regione di archiviazione utente della flash QSPI integrata come dispositivo a blocchi compatibile con
vfs.AbstractBlockDev. I numeri dei blocchi sono relativi all’inizio di quella regione, non all’inizio fisico della flash.Nella maggior parte dei casi, per memorizzare dati persistenti sul dispositivo, è preferibile usare un’astrazione di livello superiore, ad esempio il filesystem tramite l’API standard dei file di Python. Questa interfaccia è utile per personalizzare la configurazione del filesystem o per implementare un sistema di archiviazione di basso livello per la tua applicazione.
L’oggetto implementa anche il protocollo buffer, consentendo un accesso in sola lettura mappato in memoria all’intera regione di archiviazione flash tramite la base XIP della QSPI. Questo rende disponibile una vista zero-copy della regione senza eseguire alcuna lettura dalla flash:
flash = mimxrt.Flash() view = memoryview(flash) magic = bytes(view[:4]) # read the first 4 bytes directly from XIP
La dimensione dei blocchi utilizzata dai settori flash sottostanti può essere interrogata a runtime con
ioctl(5, 0).- readblocks(block_num: int, buf: bytearray) None¶
- readblocks(block_num: int, buf: bytearray, offset: int) None
Legge byte dalla flash nel
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 dei blocchi 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.
- writeblocks(block_num: int, buf: bytes) None¶
- writeblocks(block_num: int, buf: bytes, offset: int) None
Scrive byte da
bufsulla 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 dei blocchi 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).Solleva
OSErrorse l’operazione sottostante di cancellazione o scrittura della flash fallisce.
- ioctl(cmd: int, arg: int) int | None¶
Punto di ingresso ioctl standard di
vfs.AbstractBlockDev. Vedivfs.AbstractBlockDev.ioctl()per l’elenco completo dei valori dicmd.cmd=5restituisce la dimensione dei blocchi flash in byte;cmd=6cancella il blocco con indicearg.