alif — Alif Ensemble SoC függvények¶
Az alif modul az Alif Ensemble SoC-hoz tartozó port-specifikus funkciókat tesz elérhetővé, beleértve a beépített OSPI flash memóriához tartozó blokkeszköz-burkolót és egy segédfüggvényt a SoC-információk kiírásához a Secure Enclave szolgáltatásokból.
Példa:
import alif
alif.info()
flash = alif.Flash()
Függvények¶
Osztályok¶
- class alif.Flash(*, start: int = -1, len: int = -1)¶
Létrehoz egy blokkeszköz-objektumot, amelyet a beépített OSPI flash memória támogat. Ez az osztály csak akkor érhető el, ha a firmware engedélyezett OSPI-támogatással van lefordítva.
Argumentumok nélkül meghívva visszaadja az alapértelmezett singleton objektumot, amely a flash írható fájlrendszer-régióját fedi le.
A
starta flash tárolórégióba mutató bájteltolás. A flash blokkméretének többszörösének kell lennie, és a flash tárolási tartományán belül kell esnie. Alapértelmezett értéke-1, ami a0eltolásnál való kezdést jelenti.A
lenaz objektum által elérhetővé tett flash-régió hossza bájtban. A flash blokkméretének többszörösének kell lennie, és nem nyúlhat túl a flash tárolórégió végén. Alapértelmezett értéke-1, ami azt jelenti, hogy astart-tól számított összes fennmaradó bájtot használja.Az objektum a puffer-protokollt is implementálja, lehetővé téve a flash-régió csak olvasható, memóriába leképezett elérését az OSPI XIP bázison keresztül. Ez a teljes régió zéró-másolásos nézetét teszi elérhetővé bármilyen flash-olvasás kiadása nélkül:
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
Bájtokat olvas a flashből a
buf-ba. Két túlterhelés teszi elérhetővé az egyszerű és a kibővített interfészt:Egyszerű forma (
readblocks(block_num, buf)): teljes blokkokat olvas ablock_numblokkindextől kezdve. Alen(buf)értéknek a flash blokkméretének többszörösének kell lennie.Kibővített forma (
readblocks(block_num, buf, offset)):len(buf)bájtot olvas – nem feltétlenül egész számú blokkot – ablock_numblokkon belülioffsetbájttól kezdve. Alen(buf)értékre nincs igazítási megkötés.Siker esetén
0-t, hiba esetén negatív hibakódot ad vissza. Vegye figyelembe, hogy a szabványos MicroPython blokkeszköz-protokollNoneértéket ad vissza; azalifillesztőprogram szándékosan teszi elérhetővé a mögöttes OSPI állapotkódot, hogy avfsmegkerülő hívók reagálhassanak a hardverhibákra.
- writeblocks(block_num: int, buf: bytes) int¶
- writeblocks(block_num: int, buf: bytes, offset: int) int
Bájtokat ír a
buf-ból a flashbe. Két túlterhelés teszi elérhetővé az egyszerű és a kibővített interfészt:Egyszerű forma (
writeblocks(block_num, buf)): teljes blokkokat ír ablock_numblokkindextől kezdve. Alen(buf)értéknek a flash blokkméretének többszörösének kell lennie. Minden érintett blokk automatikusan törlődik az írás előtt.Kibővített forma (
writeblocks(block_num, buf, offset)):len(buf)bájtot ír – nem feltétlenül egész számú blokkot – ablock_numblokkon belülioffsetbájttól kezdve. Alen(buf)értékre nincs igazítási megkötés, és nem történik implicit törlés – a hívónak kell biztosítania, hogy az érintett blokkok egy korábbiioctl(6, block_num)hívással törölve legyenek.Siker esetén
0-t, hiba esetén negatív hibakódot ad vissza (a magyarázatot lásd areadblocks()függvénynél).
- ioctl(cmd: int, arg: int) int¶
Blokkeszköz-vezérlési műveletet hajt végre. A
cmda szabványos MicroPythonMP_BLOCKDEV_IOCTL_*parancsok egyike:1(init) —0-t ad vissza.2(deinit) —0-t ad vissza.3(sync) —0-t ad vissza.4(blokkszám) — visszaadja a régióban lévő blokkok számát.5(blokkméret) — visszaadja a flash blokkméretét bájtban.6(blokktörlés) — törli azargindexű blokkot, és visszaadja a törlési művelet eredményét.
Más
cmdértékekNoneértéket adnak vissza.