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 Flash oparty 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 blokowego vfs.AbstractBlockDev używany przez warstwę systemu plików.

Postać prosta (readblocks(block_num, buf)): odczytuje całe bloki począwszy od bloku o indeksie block_num. len(buf) musi być wielokrotnością rozmiaru bloku pamięci flash.

Postać rozszerzona (readblocks(block_num, buf, offset)): odczytuje len(buf) bajtów – niekoniecznie całkowitą liczbę bloków – począwszy od bajtu offset w bloku block_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 buf do pamięci flash. Standardowy punkt wejścia urządzenia blokowego vfs.AbstractBlockDev używany przez warstwę systemu plików.

Postać prosta (writeblocks(block_num, buf)): zapisuje całe bloki począwszy od bloku o indeksie block_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)): zapisuje len(buf) bajtów – niekoniecznie całkowitą liczbę bloków – począwszy od bajtu offset w bloku block_num. Nie jest wykonywane żadne niejawne kasowanie – wywołujący musi zapewnić, że objęte zapisem bloki zostały skasowane wcześniejszym wywołaniem ioctl(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ści cmd:

  • 1 – inicjalizacja. Zwraca 0 w przypadku powodzenia.

  • 2 – deinicjalizacja. Zwraca 0 w przypadku powodzenia.

  • 3 – synchronizacja oczekujących zapisów. Zwraca 0.

  • 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 indeksie arg. Wymagane przed użyciem rozszerzonej postaci writeblocks.

  • 7 – zwraca informację, czy urządzenie obsługuje polecenie kasowania bloku (1 na RP2040).

Wywołujący bezpośrednio zwykle nie korzystają z tej metody – sterownik systemu plików automatycznie wysyła standardowe kody, gdy obiekt Flash jest zamontowany.