mimxrt — funcționalitate specifică NXP i.MXRT

Modulul mimxrt conține funcții și clase specifice familiei de microcontrolere NXP i.MXRT.

Clase

class mimxrt.Flash

Obține obiectul singleton care expune regiunea de stocare a utilizatorului din memoria flash QSPI integrată ca dispozitiv de tip bloc compatibil cu vfs.AbstractBlockDev. Numerele blocurilor sunt relative la începutul acelei regiuni, nu la începutul fizic al memoriei flash.

În majoritatea cazurilor, pentru a stoca date persistente pe dispozitiv, veți dori să folosiți o abstractizare de nivel superior – de exemplu, sistemul de fișiere prin API-ul standard de fișiere al Python. Această interfață este utilă pentru a personaliza configurația sistemului de fișiere sau pentru a implementa un sistem de stocare de nivel scăzut pentru aplicația dvs.

Obiectul implementează de asemenea protocolul buffer, permițând accesul în mod doar-citire prin mapare în memorie la întreaga regiune de stocare flash prin baza QSPI XIP. Acest lucru face disponibilă o vizualizare fără copiere (zero-copy) a regiunii, fără a emite vreo citire din flash:

flash = mimxrt.Flash()
view = memoryview(flash)
magic = bytes(view[:4])      # read the first 4 bytes directly from XIP

Dimensiunea blocului folosită de sectoarele flash subiacente poate fi interogată în timpul execuției cu ioctl(5, 0).

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

Citește octeți din flash în buf. Două supraîncărcări expun interfața simplă și pe cea extinsă:

Forma simplă (readblocks(block_num, buf)): citește blocuri întregi începând de la indicele de bloc block_num. len(buf) trebuie să fie un multiplu al dimensiunii blocului flash.

Forma extinsă (readblocks(block_num, buf, offset)): citește len(buf) octeți – nu neapărat un număr întreg de blocuri – începând de la octetul offset din interiorul blocului block_num. len(buf) nu are nicio constrângere de aliniere.

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

Scrie octeți din buf în flash. Două supraîncărcări expun interfața simplă și pe cea extinsă:

Forma simplă (writeblocks(block_num, buf)): scrie blocuri întregi începând de la indicele de bloc block_num. len(buf) trebuie să fie un multiplu al dimensiunii blocului flash. Fiecare bloc afectat este șters automat înainte de a fi scris.

Forma extinsă (writeblocks(block_num, buf, offset)): scrie len(buf) octeți – nu neapărat un număr întreg de blocuri – începând de la octetul offset din interiorul blocului block_num. len(buf) nu are nicio constrângere de aliniere și nu se efectuează nicio ștergere implicită – apelantul trebuie să se asigure că blocurile afectate au fost șterse printr-un apel anterior ioctl(6, block_num).

Generează OSError dacă operația subiacentă de ștergere sau scriere în flash eșuează.

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

Punctul de intrare ioctl standard pentru vfs.AbstractBlockDev. Consultați vfs.AbstractBlockDev.ioctl() pentru lista completă de valori cmd. cmd=5 returnează dimensiunea blocului flash în octeți; cmd=6 șterge blocul cu indicele arg.