mimxrt — funkce specifické pro NXP i.MXRT

Modul mimxrt obsahuje funkce a třídy specifické pro rodinu mikrokontrolérů NXP i.MXRT.

Třídy

class mimxrt.Flash

Získá singleton objekt, který zpřístupňuje uživatelskou úložnou oblast vestavěné QSPI flash paměti jako blokové zařízení kompatibilní s vfs.AbstractBlockDev. Čísla bloků jsou relativní vůči začátku této oblasti, nikoli vůči fyzickému začátku flash paměti.

Ve většině případů budete pro ukládání trvalých dat na zařízení chtít použít vyšší úroveň abstrakce – například souborový systém přes standardní souborové API Pythonu. Toto rozhraní je užitečné pro přizpůsobení konfigurace souborového systému nebo implementaci nízkoúrovňového úložného systému pro vaši aplikaci.

Objekt také implementuje buffer protokol, což umožňuje přístup k celé úložné oblasti flash paměti pouze pro čtení namapovaný do paměti přes QSPI XIP base. To zpřístupňuje pohled na oblast bez kopírování, aniž by se prováděla jakákoli čtení flash paměti:

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

Velikost bloku používanou podkladovými sektory flash paměti lze za běhu zjistit pomocí ioctl(5, 0).

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

Přečte bajty z flash paměti do buf. Dvě přetížení zpřístupňují jednoduché a rozšířené rozhraní:

Jednoduchá forma (readblocks(block_num, buf)): přečte celé bloky počínaje indexem bloku block_num. len(buf) musí být násobkem velikosti bloku flash paměti.

Rozšířená forma (readblocks(block_num, buf, offset)): přečte len(buf) bajtů – ne nutně celý počet bloků – počínaje bajtem offset uvnitř bloku block_num. len(buf) nemá žádné omezení na zarovnání.

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

Zapíše bajty z buf do flash paměti. Dvě přetížení zpřístupňují jednoduché a rozšířené rozhraní:

Jednoduchá forma (writeblocks(block_num, buf)): zapíše celé bloky počínaje indexem bloku block_num. len(buf) musí být násobkem velikosti bloku flash paměti. Každý dotčený blok je před zápisem automaticky vymazán.

Rozšířená forma (writeblocks(block_num, buf, offset)): zapíše len(buf) bajtů – ne nutně celý počet bloků – počínaje bajtem offset uvnitř bloku block_num. len(buf) nemá žádné omezení na zarovnání a neprovádí se žádné implicitní mazání – volající musí zajistit, že dotčené bloky byly vymazány předchozím voláním ioctl(6, block_num).

Vyvolá OSError, pokud podkladová operace mazání nebo zápisu flash paměti selže.

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

Standardní vstupní bod ioctl třídy vfs.AbstractBlockDev. Úplný seznam hodnot cmd najdete v vfs.AbstractBlockDev.ioctl(). cmd=5 vrací velikost bloku flash paměti v bajtech; cmd=6 vymaže blok s indexem arg.