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¶
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.
startje 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 odmaku0.lenje 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 odstart.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 blokablock_num.len(buf)mora biti višekratnik veličine flash bloka.Prošireni oblik (
readblocks(block_num, buf, offset)): čitalen(buf)bajtova – ne nužno cijeli broj blokova – počevši od bajtaoffsetunutar blokablock_num.len(buf)nema ograničenje poravnanja.Vraća
0u slučaju uspjeha ili negativni kod pogreške. Imajte na umu da standardni MicroPython protokol blok-uređaja vraćaNone; upravljački programalifnamjerno izlaže pripadajući OSPI statusni kod kako bi pozivatelji koji zaobilazevfsmogli reagirati na hardverske pogreške.
- writeblocks(block_num: int, buf: bytes) int¶
- writeblocks(block_num: int, buf: bytes, offset: int) int
Zapisuje bajtove iz
bufu 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 blokablock_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)): zapisujelen(buf)bajtova – ne nužno cijeli broj blokova – počevši od bajtaoffsetunutar blokablock_num.len(buf)nema ograničenje poravnanja i ne izvodi se implicitno brisanje – pozivatelj mora osigurati da su zahvaćeni blokovi izbrisani prethodnim pozivomioctl(6, block_num).Vraća
0u slučaju uspjeha ili negativni kod pogreške (obrazloženje vidi ureadblocks()).
- ioctl(cmd: int, arg: int) int¶
Izvodi upravljačku operaciju blok-uređaja.
cmdje jedna od standardnih MicroPythonMP_BLOCKDEV_IOCTL_*naredbi:1(init) — vraća0.2(deinit) — vraća0.3(sync) — vraća0.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 indeksuargi vraća rezultat operacije brisanja.
Ostale vrijednosti
cmdvraćajuNone.