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

alif.info() None

Kiírja az Alif Secure Enclave szolgáltatásokból (SE services) gyűjtött eszközinformációkat a soros terminálra.

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 start a 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 a 0 eltolásnál való kezdést jelenti.

A len az 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 a start-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 a block_num blokkindextől kezdve. A len(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 – a block_num blokkon belüli offset bájttól kezdve. A len(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-protokoll None értéket ad vissza; az alif illesztőprogram szándékosan teszi elérhetővé a mögöttes OSPI állapotkódot, hogy a vfs megkerü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 a block_num blokkindextől kezdve. A len(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 – a block_num blokkon belüli offset bájttól kezdve. A len(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ábbi ioctl(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 a readblocks() függvénynél).

ioctl(cmd: int, arg: int) int

Blokkeszköz-vezérlési műveletet hajt végre. A cmd a szabványos MicroPython MP_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 az arg indexű blokkot, és visszaadja a törlési művelet eredményét.

Más cmd értékek None értéket adnak vissza.

Konstansok

alif.usb_msc: bool

Csak akkor van jelen és True értékre állítva, ha a firmware engedélyezett USB Mass Storage Class támogatással van lefordítva. Egyébként az attribútum hiányzik.