alif — funkcije Alif Ensemble SoC-a

Modul alif izlaže funkcionalnost specifičnu za priključak za Alif Ensemble SoC, uključujući omotač blok-uređaja za ugrađenu OSPI flash memoriju i pomoćnu funkciju za ispis informacija o SoC-u iz usluga Secure Enclave.

Primjer:

import alif

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

Funkcije

alif.info() None

Ispisuje informacije o uređaju prikupljene iz usluga Alif Secure Enclave (SE usluge) na serijski terminal.

Klase

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

Stvara objekt blok-uređaja podržan ugrađenom OSPI flash memorijom. Ova klasa dostupna je samo kada je ugrađeni program izgrađen s omogućenom OSPI podrškom.

Kada se pozove bez argumenata, vraća zadani singleton objekt koji pokriva zapisivo područje datotečnog sustava u flash memoriji.

start je bajtni odmak unutar područja flash pohrane. Mora biti višekratnik veličine flash bloka i unutar raspona flash pohrane. Zadana vrijednost je -1 što znači početak na odmaku 0.

len je duljina u bajtovima flash područja koje objekt izlaže. Mora biti višekratnik veličine flash bloka i ne smije se protezati preko kraja područja flash pohrane. Zadana vrijednost je -1 što znači korištenje svih preostalih bajtova počevši od start.

Objekt također implementira protokol međuspremnika, omogućujući pristup flash području mapiran u memoriju samo za čitanje putem OSPI XIP baze. Time se dostupnim čini prikaz cijelog područja bez kopiranja, bez izvođenja ikakvih flash čitanja:

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

Čita bajtove iz flash memorije u buf. Dva preopterećenja izlažu jednostavno i prošireno sučelje:

Jednostavni oblik (readblocks(block_num, buf)): čita cijele blokove počevši od indeksa bloka block_num. len(buf) mora biti višekratnik veličine flash bloka.

Prošireni oblik (readblocks(block_num, buf, offset)): čita len(buf) bajtova – ne nužno cijeli broj blokova – počevši od bajta offset unutar bloka block_num. len(buf) nema ograničenje poravnanja.

Vraća 0 u slučaju uspjeha ili negativni kod pogreške. Imajte na umu da standardni MicroPython protokol blok-uređaja vraća None; upravljački program alif namjerno izlaže pripadajući OSPI statusni kod kako bi pozivatelji koji zaobilaze vfs mogli reagirati na hardverske pogreške.

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

Zapisuje bajtove iz buf u flash memoriju. Dva preopterećenja izlažu jednostavno i prošireno sučelje:

Jednostavni oblik (writeblocks(block_num, buf)): zapisuje cijele blokove počevši od indeksa bloka block_num. len(buf) mora biti višekratnik veličine flash bloka. Svaki zahvaćeni blok automatski se briše prije zapisivanja.

Prošireni oblik (writeblocks(block_num, buf, offset)): zapisuje len(buf) bajtova – ne nužno cijeli broj blokova – počevši od bajta offset unutar bloka block_num. len(buf) nema ograničenje poravnanja i ne izvodi se implicitno brisanje – pozivatelj mora osigurati da su zahvaćeni blokovi izbrisani prethodnim pozivom ioctl(6, block_num).

Vraća 0 u slučaju uspjeha ili negativni kod pogreške (obrazloženje vidi u readblocks()).

ioctl(cmd: int, arg: int) int

Izvodi upravljačku operaciju blok-uređaja. cmd je jedna od standardnih MicroPython MP_BLOCKDEV_IOCTL_* naredbi:

  • 1 (init) — vraća 0.

  • 2 (deinit) — vraća 0.

  • 3 (sync) — vraća 0.

  • 4 (broj blokova) — vraća broj blokova u području.

  • 5 (veličina bloka) — vraća veličinu flash bloka u bajtovima.

  • 6 (brisanje bloka) — briše blok na indeksu arg i vraća rezultat operacije brisanja.

Ostale vrijednosti cmd vraćaju None.

Konstante

alif.usb_msc: bool

Prisutno i postavljeno na True samo kada je ugrađeni program izgrađen s omogućenom podrškom za USB Mass Storage Class. Inače atribut nije prisutan.