mimxrt — Funktionalität speziell für NXP i.MXRT

Das Modul mimxrt enthält Funktionen und Klassen, die speziell für die NXP-i.MXRT-Familie von Mikrocontrollern sind.

Klassen

class mimxrt.Flash

Ruft das Singleton-Objekt ab, das den Benutzer-Speicherbereich des integrierten QSPI-Flash als ein zu vfs.AbstractBlockDev kompatibles Block-Gerät bereitstellt. Blocknummern sind relativ zum Anfang dieses Bereichs, nicht zum physischen Anfang des Flash.

In den meisten Fällen möchten Sie, um persistente Daten auf dem Gerät zu speichern, eine höhere Abstraktionsebene verwenden – zum Beispiel das Dateisystem über Pythons Standard-Datei-API. Diese Schnittstelle ist nützlich, um die Dateisystemkonfiguration anzupassen oder ein Low-Level-Speichersystem für Ihre Anwendung zu implementieren.

Das Objekt implementiert außerdem das Puffer-Protokoll, das einen schreibgeschützten, speicherabgebildeten Zugriff auf den gesamten Flash-Speicherbereich über die QSPI-XIP-Basis ermöglicht. Dadurch wird eine Zero-Copy-Ansicht des Bereichs verfügbar gemacht, ohne dass Flash-Lesevorgänge ausgegeben werden:

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

Die von den zugrunde liegenden Flash-Sektoren verwendete Blockgröße kann zur Laufzeit mit ioctl(5, 0) abgefragt werden.

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

Liest Bytes aus dem Flash in buf. Zwei Überladungen stellen die einfache und die erweiterte Schnittstelle bereit:

Einfache Form (readblocks(block_num, buf)): liest ganze Blöcke beginnend bei Blockindex block_num. len(buf) muss ein Vielfaches der Flash-Blockgröße sein.

Erweiterte Form (readblocks(block_num, buf, offset)): liest len(buf) Bytes – nicht notwendigerweise eine ganze Anzahl von Blöcken – beginnend bei Byte offset innerhalb von Block block_num. len(buf) unterliegt keiner Ausrichtungsbeschränkung.

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

Schreibt Bytes aus buf in den Flash. Zwei Überladungen stellen die einfache und die erweiterte Schnittstelle bereit:

Einfache Form (writeblocks(block_num, buf)): schreibt ganze Blöcke beginnend bei Blockindex block_num. len(buf) muss ein Vielfaches der Flash-Blockgröße sein. Jeder betroffene Block wird vor dem Schreiben automatisch gelöscht.

Erweiterte Form (writeblocks(block_num, buf, offset)): schreibt len(buf) Bytes – nicht notwendigerweise eine ganze Anzahl von Blöcken – beginnend bei Byte offset innerhalb von Block block_num. len(buf) unterliegt keiner Ausrichtungsbeschränkung, und es wird kein implizites Löschen durchgeführt – der Aufrufer muss sicherstellen, dass die betroffenen Blöcke über einen vorherigen Aufruf von ioctl(6, block_num) gelöscht wurden.

Löst OSError aus, wenn der zugrunde liegende Flash-Lösch- oder Schreibvorgang fehlschlägt.

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

Standard-Einstiegspunkt ioctl für vfs.AbstractBlockDev. Die vollständige Liste der cmd-Werte finden Sie unter vfs.AbstractBlockDev.ioctl(). cmd=5 gibt die Flash-Blockgröße in Bytes zurück; cmd=6 löscht den Block mit dem Index arg.