alif — Alif Ensemble SoC-functies

De alif-module biedt poortspecifieke functionaliteit voor de Alif Ensemble SoC, waaronder een block-device-wrapper voor het ingebouwde OSPI-flashgeheugen en een hulpfunctie om SoC-informatie op te halen uit de Secure Enclave-services.

Voorbeeld:

import alif

alif.info()
flash = alif.Flash()

Functies

alif.info() None

Dumpt apparaatinformatie verzameld uit de Alif Secure Enclave-services (SE-services) naar de seriële terminal.

Klassen

class alif.Flash(*, start: int = -1, len: int = -1)

Maakt een block-device-object aan dat wordt ondersteund door het ingebouwde OSPI-flashgeheugen. Deze klasse is alleen beschikbaar wanneer de firmware is gebouwd met OSPI-ondersteuning ingeschakeld.

Indien aangeroepen zonder argumenten, retourneert het standaard-singletonobject dat het beschrijfbare bestandssysteemgebied van het flashgeheugen omvat.

start is de byte-offset in het flashopslaggebied. Moet een veelvoud zijn van de flash-blokgrootte en binnen het flashopslagbereik vallen. Standaard -1, wat betekent dat er wordt gestart bij offset 0.

len is de lengte in bytes van het flashgebied dat door het object wordt blootgesteld. Moet een veelvoud zijn van de flash-blokgrootte en mag niet voorbij het einde van het flashopslaggebied reiken. Standaard -1, wat betekent dat alle resterende bytes vanaf start worden gebruikt.

Het object implementeert ook het bufferprotocol, wat alleen-lezen memory-mapped toegang tot het flashgebied mogelijk maakt via de OSPI XIP-basis. Hierdoor is een zero-copy-weergave van het volledige gebied beschikbaar zonder dat er flash-leesbewerkingen worden uitgevoerd:

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

Lees bytes uit het flashgeheugen in buf. Twee overloads bieden de eenvoudige en de uitgebreide interface:

Eenvoudige vorm (readblocks(block_num, buf)): leest volledige blokken vanaf blokindex block_num. len(buf) moet een veelvoud zijn van de flash-blokgrootte.

Uitgebreide vorm (readblocks(block_num, buf, offset)): leest len(buf) bytes – niet noodzakelijk een heel aantal blokken – vanaf byte offset binnen blok block_num. len(buf) heeft geen uitlijningsbeperking.

Retourneert 0 bij succes of een negatieve foutcode. Merk op dat het standaard MicroPython block-device-protocol None retourneert; de alif-driver stelt opzettelijk de onderliggende OSPI-statuscode bloot, zodat aanroepers die vfs omzeilen kunnen reageren op hardwarefouten.

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

Schrijf bytes uit buf naar het flashgeheugen. Twee overloads bieden de eenvoudige en de uitgebreide interface:

Eenvoudige vorm (writeblocks(block_num, buf)): schrijft volledige blokken vanaf blokindex block_num. len(buf) moet een veelvoud zijn van de flash-blokgrootte. Elk betrokken blok wordt automatisch gewist voordat het wordt beschreven.

Uitgebreide vorm (writeblocks(block_num, buf, offset)): schrijft len(buf) bytes – niet noodzakelijk een heel aantal blokken – vanaf byte offset binnen blok block_num. len(buf) heeft geen uitlijningsbeperking, en er wordt geen impliciete wisbewerking uitgevoerd – de aanroeper moet ervoor zorgen dat de betrokken blokken zijn gewist via een voorafgaande ioctl(6, block_num)-aanroep.

Retourneert 0 bij succes of een negatieve foutcode (zie readblocks() voor de redenering).

ioctl(cmd: int, arg: int) int

Voert een block-device-besturingsbewerking uit. cmd is een van de standaard MicroPython MP_BLOCKDEV_IOCTL_*-commando’s:

  • 1 (init) — retourneert 0.

  • 2 (deinit) — retourneert 0.

  • 3 (sync) — retourneert 0.

  • 4 (block count) — retourneert het aantal blokken in het gebied.

  • 5 (block size) — retourneert de flash-blokgrootte in bytes.

  • 6 (block erase) — wist het blok op index arg en retourneert het resultaat van de wisbewerking.

Andere cmd-waarden retourneren None.

Constanten

alif.usb_msc: bool

Aanwezig en ingesteld op True alleen wanneer de firmware is gebouwd met ondersteuning voor USB Mass Storage Class ingeschakeld. Anders ontbreekt het attribuut.