alif — funcții pentru SoC-ul Alif Ensemble

Modulul alif expune funcționalități specifice portului pentru SoC-ul Alif Ensemble, inclusiv un învelitor de tip dispozitiv bloc pentru memoria flash OSPI integrată și o funcție auxiliară pentru extragerea informațiilor despre SoC din serviciile Secure Enclave.

Exemplu:

import alif

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

Funcții

alif.info() None

Extrage informațiile despre dispozitiv colectate din serviciile Alif Secure Enclave (servicii SE) către terminalul serial.

Clase

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

Creează un obiect dispozitiv bloc susținut de memoria flash OSPI integrată. Această clasă este disponibilă doar atunci când firmware-ul este compilat cu suportul OSPI activat.

Atunci când este apelat fără argumente, returnează obiectul singleton implicit care acoperă regiunea de flash a sistemului de fișiere în care se poate scrie.

start este decalajul în octeți în cadrul regiunii de stocare flash. Trebuie să fie un multiplu al dimensiunii blocului de flash și să se afle în intervalul de stocare flash. Implicit este -1, ceea ce înseamnă pornirea de la decalajul 0.

len este lungimea în octeți a regiunii de flash expuse de obiect. Trebuie să fie un multiplu al dimensiunii blocului de flash și să nu depășească sfârșitul regiunii de stocare flash. Implicit este -1, ceea ce înseamnă utilizarea tuturor octeților rămași de la start.

Obiectul implementează de asemenea protocolul de tampon (buffer), permițând accesul mapat în memorie, doar pentru citire, la regiunea de flash prin baza OSPI XIP. Acest lucru face disponibilă o vedere fără copiere a întregii regiuni fără a emite vreo citire din flash:

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

Citește octeți din flash în buf. Două forme suprasolicitate expun interfețele simplă și extinsă:

Forma simplă (readblocks(block_num, buf)): citește blocuri întregi începând cu indicele de bloc block_num. len(buf) trebuie să fie un multiplu al dimensiunii blocului de flash.

Forma extinsă (readblocks(block_num, buf, offset)): citește len(buf) octeți – nu neapărat un număr întreg de blocuri – începând cu octetul offset din cadrul blocului block_num. len(buf) nu are nicio constrângere de aliniere.

Returnează 0 la succes sau un cod de eroare negativ. Rețineți că protocolul standard de dispozitiv bloc MicroPython returnează None; driverul alif expune intenționat codul de stare OSPI subiacent, astfel încât apelanții care ocolesc vfs să poată reacționa la erorile hardware.

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

Scrie octeți din buf în flash. Două forme suprasolicitate expun interfețele simplă și extinsă:

Forma simplă (writeblocks(block_num, buf)): scrie blocuri întregi începând cu indicele de bloc block_num. len(buf) trebuie să fie un multiplu al dimensiunii blocului de flash. Fiecare bloc afectat este șters automat înainte de a fi scris.

Forma extinsă (writeblocks(block_num, buf, offset)): scrie len(buf) octeți – nu neapărat un număr întreg de blocuri – începând cu octetul offset din cadrul blocului block_num. len(buf) nu are nicio constrângere de aliniere și nu se efectuează nicio ștergere implicită – apelantul trebuie să se asigure că blocurile afectate au fost șterse printr-un apel ioctl(6, block_num) prealabil.

Returnează 0 la succes sau un cod de eroare negativ (consultați readblocks() pentru explicație).

ioctl(cmd: int, arg: int) int

Efectuează o operație de control a dispozitivului bloc. cmd este una dintre comenzile standard MicroPython MP_BLOCKDEV_IOCTL_*:

  • 1 (init) — returnează 0.

  • 2 (deinit) — returnează 0.

  • 3 (sync) — returnează 0.

  • 4 (numărul de blocuri) — returnează numărul de blocuri din regiune.

  • 5 (dimensiunea blocului) — returnează dimensiunea blocului de flash în octeți.

  • 6 (ștergerea blocului) — șterge blocul de la indicele arg și returnează rezultatul operației de ștergere.

Alte valori cmd returnează None.

Constante

alif.usb_msc: bool

Prezent și setat la True doar atunci când firmware-ul este compilat cu suportul USB Mass Storage Class activat. În caz contrar, atributul lipsește.