klasa Flash – dostęp do wbudowanej pamięci flash¶
Klasa Flash zapewnia bezpośredni dostęp na poziomie bloków do zewnętrznego układu pamięci flash QSPI mikrokontrolera RP2040. Sterownik implementuje interfejs vfs.AbstractBlockDev, dzięki czemu można go przekazać do vfs.mount() w celu skonfigurowania niestandardowych systemów plików.
Większość skryptów zachowuje dane za pośrednictwem automatycznie zamontowanego systemu plików w / i nigdy nie tworzy bezpośrednio obiektu Flash. Twórz go ręcznie, gdy potrzebujesz:
Zamontować niedomyślny system plików (np. opakować klasą
vfs.VfsFat) na niestandardowej partycji.Odczytać lub zapisać obszary oprogramowania układowego albo bloki danych fabrycznych, które nie należą do systemu plików.
Zaimplementować niestandardowy format przechowywania danych w pamięci flash, który omija warstwę systemu plików.
Konstruktory¶
- class rp2.Flash Flash¶
Zwraca pojedynczy obiekt urządzenia blokowego
Flashoparty na układzie pamięci flash QSPI mikrokontrolera RP2040. Pierwszy udostępniony blok znajduje się bezpośrednio za obszarem oprogramowania układowego, więc wywołujący widzi wyłącznie obszar układu dostępny dla systemu plików.Metody¶
- readblocks(block_num: int, buf: bytearray) None¶
- readblocks(block_num: int, buf: bytearray, offset: int) None
Odczytuje bajty z pamięci flash do
buf. Standardowy punkt wejścia urządzenia blokowegovfs.AbstractBlockDevużywany przez warstwę systemu plików.Postać prosta (
readblocks(block_num, buf)): odczytuje całe bloki począwszy od bloku o indeksieblock_num.len(buf)musi być wielokrotnością rozmiaru bloku pamięci flash.Postać rozszerzona (
readblocks(block_num, buf, offset)): odczytujelen(buf)bajtów – niekoniecznie całkowitą liczbę bloków – począwszy od bajtuoffsetw blokublock_num. Używana przez littlefs i inne systemy plików z adresowaniem bajtowym.
- writeblocks(block_num: int, buf: bytes) None¶
- writeblocks(block_num: int, buf: bytes, offset: int) None
Zapisuje bajty z
bufdo pamięci flash. Standardowy punkt wejścia urządzenia blokowegovfs.AbstractBlockDevużywany przez warstwę systemu plików.Postać prosta (
writeblocks(block_num, buf)): zapisuje całe bloki począwszy od bloku o indeksieblock_num.len(buf)musi być wielokrotnością rozmiaru bloku pamięci flash. Każdy objęty zapisem blok jest automatycznie kasowany przed zapisem.Postać rozszerzona (
writeblocks(block_num, buf, offset)): zapisujelen(buf)bajtów – niekoniecznie całkowitą liczbę bloków – począwszy od bajtuoffsetw blokublock_num. Nie jest wykonywane żadne niejawne kasowanie – wywołujący musi zapewnić, że objęte zapisem bloki zostały skasowane wcześniejszym wywołaniemioctl(6, block_num).
- ioctl(cmd: int, arg: int) int | None¶
Standardowy punkt wejścia sterujący
vfs.AbstractBlockDev. Wywoływany przez warstwę systemu plików podczas montowania/odmontowywania oraz przy każdej synchronizacji. Rozpoznawane wartościcmd:1– inicjalizacja. Zwraca0w przypadku powodzenia.2– deinicjalizacja. Zwraca0w przypadku powodzenia.3– synchronizacja oczekujących zapisów. Zwraca0.4– zwraca liczbę bloków pamięci flash widocznych dla systemu plików.5– zwraca rozmiar bloku w bajtach (zazwyczaj rozmiar sektora pamięci flash,4096).6– kasuje blok o indeksiearg. Wymagane przed użyciem rozszerzonej postaciwriteblocks.7– zwraca informację, czy urządzenie obsługuje polecenie kasowania bloku (1na RP2040).
Wywołujący bezpośrednio zwykle nie korzystają z tej metody – sterownik systemu plików automatycznie wysyła standardowe kody, gdy obiekt
Flashjest zamontowany.