alif — funkce Alif Ensemble SoC¶
Modul alif zpřístupňuje funkce specifické pro port Alif Ensemble SoC, včetně obalu blokového zařízení pro vestavěnou OSPI flash paměť a pomocné funkce pro výpis informací o SoC ze služeb Secure Enclave.
Příklad:
import alif
alif.info()
flash = alif.Flash()
Funkce¶
Třídy¶
- class alif.Flash(*, start: int = -1, len: int = -1)¶
Vytvoří objekt blokového zařízení podpořený vestavěnou OSPI flash pamětí. Tato třída je dostupná pouze tehdy, je-li firmware sestaven s povolenou podporou OSPI.
Při volání bez argumentů vrací výchozí singletonový objekt pokrývající zapisovatelnou oblast souborového systému ve flash paměti.
startje bajtový offset do úložné oblasti flash paměti. Musí být násobkem velikosti bloku flash paměti a v rámci rozsahu úložiště flash. Výchozí hodnota je-1, což znamená začátek na offsetu0.lenje délka v bajtech oblasti flash paměti zpřístupněné objektem. Musí být násobkem velikosti bloku flash paměti a nesmí přesahovat za konec úložné oblasti flash. Výchozí hodnota je-1, což znamená použít všechny zbývající bajty odstart.Objekt rovněž implementuje protokol bufferu, což umožňuje paměťově mapovaný přístup pouze pro čtení k oblasti flash paměti přes OSPI XIP základní adresu. To zpřístupňuje pohled na celou oblast bez kopírování, aniž by se prováděly jakékoli čtecí operace flash paměti:
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
Načte bajty z flash paměti do
buf. Dvě varianty zpřístupňují jednoduché a rozšířené rozhraní:Jednoduchá forma (
readblocks(block_num, buf)): čte celé bloky počínaje indexem blokublock_num.len(buf)musí být násobkem velikosti bloku flash paměti.Rozšířená forma (
readblocks(block_num, buf, offset)): čtelen(buf)bajtů – ne nutně celý počet bloků – počínaje bajtemoffsetv rámci blokublock_num.len(buf)nemá žádné omezení zarovnání.Vrací
0při úspěchu nebo záporný chybový kód. Pamatujte, že standardní protokol blokového zařízení MicroPythonu vracíNone; ovladačalifzáměrně zpřístupňuje podkladový stavový kód OSPI, aby volající, kteří obcházejívfs, mohli reagovat na hardwarové chyby.
- writeblocks(block_num: int, buf: bytes) int¶
- writeblocks(block_num: int, buf: bytes, offset: int) int
Zapíše bajty z
bufdo flash paměti. Dvě varianty zpřístupňují jednoduché a rozšířené rozhraní:Jednoduchá forma (
writeblocks(block_num, buf)): zapisuje celé bloky počínaje indexem blokublock_num.len(buf)musí být násobkem velikosti bloku flash paměti. Každý dotčený blok je před zápisem automaticky vymazán.Rozšířená forma (
writeblocks(block_num, buf, offset)): zapisujelen(buf)bajtů – ne nutně celý počet bloků – počínaje bajtemoffsetv rámci blokublock_num.len(buf)nemá žádné omezení zarovnání a neprovádí se žádné implicitní vymazání – volající musí zajistit, že dotčené bloky byly vymazány předchozím volánímioctl(6, block_num).Vrací
0při úspěchu nebo záporný chybový kód (zdůvodnění vizreadblocks()).
- ioctl(cmd: int, arg: int) int¶
Provádí řídicí operaci blokového zařízení.
cmdje jeden ze standardních příkazů MicroPythonuMP_BLOCKDEV_IOCTL_*:1(init) — vrací0.2(deinit) — vrací0.3(sync) — vrací0.4(počet bloků) — vrací počet bloků v oblasti.5(velikost bloku) — vrací velikost bloku flash paměti v bajtech.6(vymazání bloku) — vymaže blok na indexuarga vrátí výsledek operace vymazání.
Ostatní hodnoty
cmdvracejíNone.