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

alif.info() None

Gibt Geräteinformationen, die von den Alif Secure Enclave Services (SE-Diensten) erfasst wurden, auf dem seriellen Terminal aus.

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.

start ist 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 Offset 0 begonnen wird.

len ist 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 ab start verwendet 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 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.

Gibt bei Erfolg 0 oder einen negativen Fehlercode zurück. Beachten Sie, dass das standardmäßige MicroPython-Blockgeräte-Protokoll None zurückgibt; der alif-Treiber stellt absichtlich den zugrunde liegenden OSPI-Statuscode bereit, sodass Aufrufer, die vfs umgehen, auf Hardwarefehler reagieren können.

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

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 ab dem 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 durch einen vorherigen ioctl(6, block_num)-Aufruf gelöscht wurden.

Gibt bei Erfolg 0 oder einen negativen Fehlercode zurück (siehe readblocks() für die Begründung).

ioctl(cmd: int, arg: int) int

Führt eine Blockgeräte-Steuerungsoperation durch. cmd ist einer der standardmäßigen MicroPython-MP_BLOCKDEV_IOCTL_*-Befehle:

  • 1 (init) — gibt 0 zurück.

  • 2 (deinit) — gibt 0 zurück.

  • 3 (sync) — gibt 0 zurü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 Index arg und gibt das Ergebnis der Löschoperation zurück.

Andere cmd-Werte geben None zurück.

Konstanten

alif.usb_msc: bool

Vorhanden und nur dann auf True gesetzt, wenn die Firmware mit aktivierter Unterstützung für die USB Mass Storage Class erstellt wurde. Andernfalls ist das Attribut nicht vorhanden.