clasa Flash – acces la stocarea flash încorporată

Clasa Flash oferă acces direct, la nivel de bloc, la cipul flash QSPI extern al RP2040. Driverul implementează interfața vfs.AbstractBlockDev, astfel încât poate fi transmis lui vfs.mount() pentru configurări personalizate de sistem de fișiere.

Majoritatea scripturilor persistă datele prin sistemul de fișiere montat automat la / și nu construiesc niciodată direct un obiect Flash. Construiți unul manual atunci când aveți nevoie să:

  • Montați un sistem de fișiere non-implicit (de ex. încapsulat cu vfs.VfsFat) pe o partiție personalizată.

  • Citiți sau scrieți regiuni de firmware sau blocuri de date din fabrică care nu aparțin sistemului de fișiere.

  • Implementați un format personalizat de stocare pe flash care ocolește stratul sistemului de fișiere.

Constructori

class rp2.Flash Flash

Returnează obiectul singleton de tip dispozitiv-bloc Flash susținut de cipul flash QSPI al RP2040. Primul bloc expus este cel imediat după regiunea de firmware, astfel încât apelanții văd doar zona cipului eligibilă pentru sistemul de fișiere.

Metode

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

Citește octeți din memoria flash în buf. Punctul de intrare standard de tip dispozitiv-bloc vfs.AbstractBlockDev utilizat de stratul sistemului de fișiere.

Forma simplă (readblocks(block_num, buf)): citește blocuri întregi începând de la indexul de bloc block_num. len(buf) trebuie să fie un multiplu al dimensiunii blocului flash.

Forma extinsă (readblocks(block_num, buf, offset)): citește len(buf) octeți – nu neapărat un număr întreg de blocuri – începând de la octetul offset din interiorul blocului block_num. Utilizată de littlefs și de alte sisteme de fișiere adresabile la nivel de octet.

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

Scrie octeți din buf în memoria flash. Punctul de intrare standard de tip dispozitiv-bloc vfs.AbstractBlockDev utilizat de stratul sistemului de fișiere.

Forma simplă (writeblocks(block_num, buf)): scrie blocuri întregi începând de la indexul de bloc block_num. len(buf) trebuie să fie un multiplu al dimensiunii blocului flash. Fiecare bloc afectat este șters automat înainte de a fi scris.

Forma extinsă (writeblocks(block_num, buf, offset)): scrie len(buf) octeți – nu neapărat un număr întreg de blocuri – începând de la octetul offset din interiorul blocului block_num. Nu se efectuează nicio ștergere implicită – apelantul trebuie să se asigure că blocurile afectate au fost șterse printr-un apel anterior ioctl(6, block_num).

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

Punctul de intrare standard de control vfs.AbstractBlockDev. Apelat de stratul sistemului de fișiere la montare/demontare și la fiecare sincronizare. Valori cmd recunoscute:

  • 1 – inițializare. Returnează 0 în caz de succes.

  • 2 – dezinițializare. Returnează 0 în caz de succes.

  • 3 – sincronizează scrierile în așteptare. Returnează 0.

  • 4 – returnează numărul de blocuri flash vizibile pentru sistemul de fișiere.

  • 5 – returnează dimensiunea blocului în octeți (de obicei dimensiunea sectorului flash, 4096).

  • 6 – șterge blocul de la indexul arg. Necesar înainte de a folosi forma extinsă writeblocks.

  • 7 – returnează dacă dispozitivul acceptă comanda de ștergere a blocului (1 pe RP2040).

În mod normal, apelanții direcți nu folosesc această metodă – driverul sistemului de fișiere distribuie automat codurile standard odată ce obiectul Flash este montat.