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¶
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.
startis 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 offset0.lenis 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 vanafstartworden 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 blokindexblock_num.len(buf)moet een veelvoud zijn van de flash-blokgrootte.Uitgebreide vorm (
readblocks(block_num, buf, offset)): leestlen(buf)bytes – niet noodzakelijk een heel aantal blokken – vanaf byteoffsetbinnen blokblock_num.len(buf)heeft geen uitlijningsbeperking.Retourneert
0bij succes of een negatieve foutcode. Merk op dat het standaard MicroPython block-device-protocolNoneretourneert; dealif-driver stelt opzettelijk de onderliggende OSPI-statuscode bloot, zodat aanroepers dievfsomzeilen kunnen reageren op hardwarefouten.
- writeblocks(block_num: int, buf: bytes) int¶
- writeblocks(block_num: int, buf: bytes, offset: int) int
Schrijf bytes uit
bufnaar het flashgeheugen. Twee overloads bieden de eenvoudige en de uitgebreide interface:Eenvoudige vorm (
writeblocks(block_num, buf)): schrijft volledige blokken vanaf blokindexblock_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)): schrijftlen(buf)bytes – niet noodzakelijk een heel aantal blokken – vanaf byteoffsetbinnen blokblock_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 voorafgaandeioctl(6, block_num)-aanroep.Retourneert
0bij succes of een negatieve foutcode (ziereadblocks()voor de redenering).
- ioctl(cmd: int, arg: int) int¶
Voert een block-device-besturingsbewerking uit.
cmdis een van de standaard MicroPythonMP_BLOCKDEV_IOCTL_*-commando’s:1(init) — retourneert0.2(deinit) — retourneert0.3(sync) — retourneert0.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 indexargen retourneert het resultaat van de wisbewerking.
Andere
cmd-waarden retournerenNone.