alif — funkcje SoC Alif Ensemble¶
Moduł alif udostępnia funkcjonalność specyficzną dla portu układu SoC Alif Ensemble, w tym opakowanie urządzenia blokowego dla wbudowanej pamięci flash OSPI oraz funkcję pomocniczą do wypisywania informacji o SoC z usług Secure Enclave.
Przykład:
import alif
alif.info()
flash = alif.Flash()
Funkcje¶
Klasy¶
- class alif.Flash(*, start: int = -1, len: int = -1)¶
Tworzy obiekt urządzenia blokowego opartego na wbudowanej pamięci flash OSPI. Ta klasa jest dostępna tylko wtedy, gdy oprogramowanie układowe zostało zbudowane z włączoną obsługą OSPI.
Wywołana bez argumentów zwraca domyślny obiekt singleton obejmujący zapisywalny obszar systemu plików w pamięci flash.
startto przesunięcie w bajtach względem obszaru pamięci flash. Musi być wielokrotnością rozmiaru bloku pamięci flash i mieścić się w zakresie obszaru pamięci flash. Domyślnie-1, co oznacza początek od przesunięcia0.lento długość w bajtach obszaru pamięci flash udostępnianego przez obiekt. Musi być wielokrotnością rozmiaru bloku pamięci flash i nie może wykraczać poza koniec obszaru pamięci flash. Domyślnie-1, co oznacza wykorzystanie wszystkich pozostałych bajtów odstart.Obiekt implementuje również protokół bufora, umożliwiając dostęp tylko do odczytu do obszaru pamięci flash mapowanego w pamięci poprzez bazę OSPI XIP. Dzięki temu dostępny jest widok całego obszaru bez kopiowania, bez wykonywania jakichkolwiek odczytów z pamięci 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
Odczytuje bajty z pamięci flash do
buf. Dwa przeciążenia udostępniają interfejs prosty i rozszerzony:Forma prosta (
readblocks(block_num, buf)): odczytuje całe bloki począwszy od indeksu blokublock_num.len(buf)musi być wielokrotnością rozmiaru bloku pamięci flash.Forma rozszerzona (
readblocks(block_num, buf, offset)): odczytujelen(buf)bajtów – niekoniecznie całkowitą liczbę bloków – począwszy od bajtuoffsetw blokublock_num.len(buf)nie ma ograniczeń wyrównania.Zwraca
0w przypadku powodzenia lub ujemny kod błędu. Należy pamiętać, że standardowy protokół urządzenia blokowego MicroPython zwracaNone; sterownikalifcelowo udostępnia bazowy kod stanu OSPI, aby wywołujący, którzy omijająvfs, mogli reagować na błędy sprzętowe.
- writeblocks(block_num: int, buf: bytes) int¶
- writeblocks(block_num: int, buf: bytes, offset: int) int
Zapisuje bajty z
bufdo pamięci flash. Dwa przeciążenia udostępniają interfejs prosty i rozszerzony:Forma prosta (
writeblocks(block_num, buf)): zapisuje całe bloki począwszy od indeksu blokublock_num.len(buf)musi być wielokrotnością rozmiaru bloku pamięci flash. Każdy objęty blok jest automatycznie kasowany przed zapisem.Forma rozszerzona (
writeblocks(block_num, buf, offset)): zapisujelen(buf)bajtów – niekoniecznie całkowitą liczbę bloków – począwszy od bajtuoffsetw blokublock_num.len(buf)nie ma ograniczeń wyrównania, a żadne niejawne kasowanie nie jest wykonywane – wywołujący musi zapewnić, że objęte bloki zostały skasowane wcześniejszym wywołaniemioctl(6, block_num).Zwraca
0w przypadku powodzenia lub ujemny kod błędu (uzasadnienie zobacz wreadblocks()).
- ioctl(cmd: int, arg: int) int¶
Wykonuje operację sterującą urządzeniem blokowym.
cmdjest jednym ze standardowych poleceń MicroPythonMP_BLOCKDEV_IOCTL_*:1(init) — zwraca0.2(deinit) — zwraca0.3(sync) — zwraca0.4(liczba bloków) — zwraca liczbę bloków w obszarze.5(rozmiar bloku) — zwraca rozmiar bloku pamięci flash w bajtach.6(kasowanie bloku) — kasuje blok o indeksieargi zwraca wynik operacji kasowania.
Inne wartości
cmdzwracająNone.