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 blocco block_num. len(buf) deve essere un multiplo della dimensione dei blocchi flash.

Forma estesa (readblocks(block_num, buf, offset)): legge len(buf) byte – non necessariamente un numero intero di blocchi – a partire dal byte offset all’interno del blocco block_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 buf sulla flash. Due overload espongono l’interfaccia semplice ed estesa:

Forma semplice (writeblocks(block_num, buf)): scrive blocchi interi a partire dall’indice di blocco block_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)): scrive len(buf) byte – non necessariamente un numero intero di blocchi – a partire dal byte offset all’interno del blocco block_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 a ioctl(6, block_num).

Solleva OSError se 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. Vedi vfs.AbstractBlockDev.ioctl() per l’elenco completo dei valori di cmd. cmd=5 restituisce la dimensione dei blocchi flash in byte; cmd=6 cancella il blocco con indice arg.