klasa Flash – pristup ugrađenoj flash memoriji

Klasa Flash omogućuje izravan pristup na razini blokova vanjskom QSPI flash čipu RP2040. Upravljački program implementira sučelje vfs.AbstractBlockDev tako da se može proslijediti funkciji vfs.mount() za prilagođene konfiguracije datotečnog sustava.

Većina skripti trajno pohranjuje podatke putem automatski montiranog datotečnog sustava na / i nikada izravno ne stvara Flash. Stvorite ga ručno kada trebate:

  • Montirati nestandardni datotečni sustav (npr. omotati s vfs.VfsFat) na prilagođenoj particiji.

  • Čitati ili pisati u regije ugrađenog programa ili blokove tvorničkih podataka koji nisu u vlasništvu datotečnog sustava.

  • Implementirati prilagođeni format pohrane na flash memoriji koji zaobilazi sloj datotečnog sustava.

Konstruktori

class rp2.Flash Flash

Vraća jedinstveni (singleton) objekt blok-uređaja Flash koji se oslanja na QSPI flash čip RP2040. Prvi izloženi blok je onaj neposredno nakon regije ugrađenog programa, pa pozivatelji vide samo područje čipa pogodno za datotečni sustav.

Metode

readblocks(block_num: int, buf: bytearray) None
readblocks(block_num: int, buf: bytearray, offset: int) None

Čita bajtove iz flash memorije u buf. Standardna ulazna točka blok-uređaja vfs.AbstractBlockDev koju koristi sloj datotečnog sustava.

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. Koristi se kod littlefs i drugih datotečnih sustava koji se adresiraju po bajtu.

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

Piše bajtove iz buf u flash memoriju. Standardna ulazna točka blok-uređaja vfs.AbstractBlockDev koju koristi sloj datotečnog sustava.

Jednostavni oblik (writeblocks(block_num, buf)): piše 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)): piše len(buf) bajtova – ne nužno cijeli broj blokova – počevši od bajta offset unutar bloka block_num. Nema implicitnog brisanja – pozivatelj mora osigurati da su zahvaćeni blokovi prethodno obrisani putem poziva ioctl(6, block_num).

ioctl(cmd: int, arg: int) int | None

Standardna upravljačka ulazna točka vfs.AbstractBlockDev. Poziva je sloj datotečnog sustava pri montiranju/demontiranju i pri svakoj sinkronizaciji. Prepoznate vrijednosti cmd:

  • 1 – inicijalizacija. Vraća 0 pri uspjehu.

  • 2 – deinicijalizacija. Vraća 0 pri uspjehu.

  • 3 – sinkronizacija zapisivanja na čekanju. Vraća 0.

  • 4 – vraća broj flash blokova vidljivih datotečnom sustavu.

  • 5 – vraća veličinu bloka u bajtovima (obično veličina flash sektora, 4096).

  • 6 – briše blok na indeksu arg. Obavezno prije korištenja proširenog oblika writeblocks.

  • 7 – vraća podržava li uređaj naredbu brisanja bloka (1 na RP2040).

Izravni pozivatelji obično ne koriste ovu metodu – upravljački program datotečnog sustava automatski upućuje standardne kodove nakon što je Flash montiran.