mimxrt — az NXP i.MXRT-specifikus funkcionalitás

A mimxrt modul az NXP i.MXRT mikrovezérlő-családra jellemző függvényeket és osztályokat tartalmazza.

Osztályok

class mimxrt.Flash

Lekéri azt az egyke (singleton) objektumot, amely a fedélzeti QSPI flash memória felhasználói tárolóterületét egy vfs.AbstractBlockDev-kompatibilis blokkeszközként teszi elérhetővé. A blokkszámok az adott terület kezdetéhez viszonyítottak, nem a flash fizikai kezdetéhez.

A legtöbb esetben az eszközön történő tartós adattároláshoz egy magasabb szintű absztrakciót érdemes használni – például a fájlrendszert a Python szabványos fájl-API-ján keresztül. Ez az interfész a fájlrendszer-konfiguráció testreszabására vagy egy alacsony szintű tárolórendszer megvalósítására hasznos az alkalmazásodhoz.

Az objektum a pufferprotokollt is megvalósítja, lehetővé téve a teljes flash-tárolóterület csak olvasható, memóriába leképezett elérését a QSPI XIP báziscím révén. Ez a terület másolásmentes nézetét teszi elérhetővé anélkül, hogy bármilyen flash-olvasást kiadna:

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

Az alapul szolgáló flash-szektorok által használt blokkméret futásidőben lekérdezhető a ioctl(5, 0) használatával.

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

Byte-okat olvas a flash memóriából a buf pufferbe. Két túlterhelés teszi elérhetővé az egyszerű és a kibővített interfészt:

Egyszerű forma (readblocks(block_num, buf)): teljes blokkokat olvas a block_num blokkindextől kezdve. A len(buf) értéknek a flash blokkméretének többszörösének kell lennie.

Kibővített forma (readblocks(block_num, buf, offset)): len(buf) byte-ot olvas – nem feltétlenül egész számú blokkot – a block_num blokkon belüli offset byte-tól kezdve. A len(buf) értékre nincs igazítási megkötés.

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

Byte-okat ír a buf pufferből a flash memóriába. Két túlterhelés teszi elérhetővé az egyszerű és a kibővített interfészt:

Egyszerű forma (writeblocks(block_num, buf)): teljes blokkokat ír a block_num blokkindextől kezdve. A len(buf) értéknek a flash blokkméretének többszörösének kell lennie. Minden érintett blokk automatikusan törlődik, mielőtt kiíródna.

Kibővített forma (writeblocks(block_num, buf, offset)): len(buf) byte-ot ír – nem feltétlenül egész számú blokkot – a block_num blokkon belüli offset byte-tól kezdve. A len(buf) értékre nincs igazítási megkötés, és nem történik implicit törlés – a hívónak kell biztosítania, hogy az érintett blokkok egy korábbi ioctl(6, block_num) híváson keresztül törlődtek.

OSError kivételt vált ki, ha az alapul szolgáló flash-törlési vagy -írási művelet sikertelen.

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

Szabványos vfs.AbstractBlockDev ioctl belépési pont. A cmd értékek teljes listáját lásd a vfs.AbstractBlockDev.ioctl() metódusnál. A cmd=5 a flash blokkméretét adja vissza byte-ban; a cmd=6 törli az arg indexű blokkot.