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¶
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.
starteste 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 decalajul0.leneste 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 lastart.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 blocblock_num.len(buf)trebuie să fie un multiplu al dimensiunii blocului de flash.Forma extinsă (
readblocks(block_num, buf, offset)): citeștelen(buf)octeți – nu neapărat un număr întreg de blocuri – începând cu octetuloffsetdin cadrul bloculuiblock_num.len(buf)nu are nicio constrângere de aliniere.Returnează
0la succes sau un cod de eroare negativ. Rețineți că protocolul standard de dispozitiv bloc MicroPython returneazăNone; driverulalifexpune intenționat codul de stare OSPI subiacent, astfel încât apelanții care ocolescvfssă 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 blocblock_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)): scrielen(buf)octeți – nu neapărat un număr întreg de blocuri – începând cu octetuloffsetdin cadrul bloculuiblock_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 apelioctl(6, block_num)prealabil.Returnează
0la succes sau un cod de eroare negativ (consultațireadblocks()pentru explicație).
- ioctl(cmd: int, arg: int) int¶
Efectuează o operație de control a dispozitivului bloc.
cmdeste una dintre comenzile standard MicroPythonMP_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 indiceleargși returnează rezultatul operației de ștergere.
Alte valori
cmdreturneazăNone.