alif — Alif Ensemble SoC-Funktionen¶
Das Modul alif stellt portspezifische Funktionalität für das Alif Ensemble SoC bereit, einschließlich eines Blockgeräte-Wrappers für den integrierten OSPI-Flash und eines Hilfsmittels zum Ausgeben von SoC-Informationen aus den Diensten der Secure Enclave.
Beispiel:
import alif
alif.info()
flash = alif.Flash()
Funktionen¶
Klassen¶
- class alif.Flash(*, start: int = -1, len: int = -1)¶
Erstellt ein Blockgeräte-Objekt, das auf dem integrierten OSPI-Flash basiert. Diese Klasse ist nur verfügbar, wenn die Firmware mit aktivierter OSPI-Unterstützung erstellt wurde.
Wenn sie ohne Argumente aufgerufen wird, gibt sie das standardmäßige Singleton-Objekt zurück, das den beschreibbaren Dateisystembereich des Flash abdeckt.
startist der Byte-Offset in den Flash-Speicherbereich. Muss ein Vielfaches der Flash-Blockgröße sein und innerhalb des Flash-Speicherbereichs liegen. Standardwert ist-1, was bedeutet, dass bei Offset0begonnen wird.lenist die Länge in Bytes des vom Objekt bereitgestellten Flash-Bereichs. Muss ein Vielfaches der Flash-Blockgröße sein und darf nicht über das Ende des Flash-Speicherbereichs hinausreichen. Standardwert ist-1, was bedeutet, dass alle verbleibenden Bytes abstartverwendet werden.Das Objekt implementiert außerdem das Buffer-Protokoll, was einen schreibgeschützten, speicherabgebildeten Zugriff auf den Flash-Bereich über die OSPI-XIP-Basis ermöglicht. Dadurch wird eine Zero-Copy-Sicht auf den gesamten Bereich verfügbar, ohne dass Flash-Lesevorgänge ausgelöst werden:
flash = alif.Flash() view = memoryview(flash) magic = bytes(view[:4]) # read the first 4 bytes directly from XIP
- readblocks(block_num: int, buf: bytearray) int¶
- readblocks(block_num: int, buf: bytearray, offset: int) int
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 ab dem Blockindexblock_num.len(buf)muss ein Vielfaches der Flash-Blockgröße sein.Erweiterte Form (
readblocks(block_num, buf, offset)): liestlen(buf)Bytes – nicht notwendigerweise eine ganze Anzahl von Blöcken – beginnend bei Byteoffsetinnerhalb von Blockblock_num.len(buf)unterliegt keiner Ausrichtungsbeschränkung.Gibt bei Erfolg
0oder einen negativen Fehlercode zurück. Beachten Sie, dass das standardmäßige MicroPython-Blockgeräte-ProtokollNonezurückgibt; deralif-Treiber stellt absichtlich den zugrunde liegenden OSPI-Statuscode bereit, sodass Aufrufer, dievfsumgehen, auf Hardwarefehler reagieren können.
- writeblocks(block_num: int, buf: bytes) int¶
- writeblocks(block_num: int, buf: bytes, offset: int) int
Schreibt Bytes aus
bufin den Flash. Zwei Überladungen stellen die einfache und die erweiterte Schnittstelle bereit:Einfache Form (
writeblocks(block_num, buf)): schreibt ganze Blöcke ab dem Blockindexblock_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)): schreibtlen(buf)Bytes – nicht notwendigerweise eine ganze Anzahl von Blöcken – beginnend bei Byteoffsetinnerhalb von Blockblock_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 durch einen vorherigenioctl(6, block_num)-Aufruf gelöscht wurden.Gibt bei Erfolg
0oder einen negativen Fehlercode zurück (siehereadblocks()für die Begründung).
- ioctl(cmd: int, arg: int) int¶
Führt eine Blockgeräte-Steuerungsoperation durch.
cmdist einer der standardmäßigen MicroPython-MP_BLOCKDEV_IOCTL_*-Befehle:1(init) — gibt0zurück.2(deinit) — gibt0zurück.3(sync) — gibt0zurück.4(Blockanzahl) — gibt die Anzahl der Blöcke im Bereich zurück.5(Blockgröße) — gibt die Flash-Blockgröße in Bytes zurück.6(Blocklöschung) — löscht den Block am Indexargund gibt das Ergebnis der Löschoperation zurück.
Andere
cmd-Werte gebenNonezurück.