Flash osztály – hozzáférés a beépített flash tárolóhoz

A Flash osztály közvetlen, blokkszintű hozzáférést biztosít az RP2040 külső QSPI flash chipjéhez. A meghajtó megvalósítja a vfs.AbstractBlockDev interfészt, így átadható a vfs.mount() függvénynek egyéni fájlrendszer-konfigurációkhoz.

A legtöbb szkript a / alatt automatikusan csatolt fájlrendszeren keresztül tárol adatokat, és soha nem hozza létre közvetlenül a Flash objektumot. Akkor hozz létre egyet manuálisan, ha:

  • Nem alapértelmezett fájlrendszert szeretnél csatolni (pl. a vfs.VfsFat osztállyal csomagolva) egy egyéni partíción.

  • Olyan firmware-régiókat vagy gyári adatblokkokat akarsz olvasni vagy írni, amelyek nem a fájlrendszerhez tartoznak.

  • Egyéni, flash-alapú tárolási formátumot szeretnél megvalósítani, amely megkerüli a fájlrendszer-réteget.

Konstruktorok

class rp2.Flash Flash

Visszaadja az RP2040 QSPI flash chipje által támogatott, egyetlen Flash blokkeszköz-objektumot. Az első közzétett blokk az, amely közvetlenül a firmware-régió után következik, így a hívók a chipnek csak a fájlrendszer számára elérhető területét látják.

Metódusok

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

Bájtokat olvas a flash memóriából a buf pufferbe. Ez a szabványos vfs.AbstractBlockDev blokkeszköz-belépési pont, amelyet a fájlrendszer-réteg használ.

Egyszerű forma (readblocks(block_num, buf)): teljes blokkokat olvas a block_num blokkindextől kezdve. A len(buf) értéknek a flash blokkméret többszörösének kell lennie.

Kibővített forma (readblocks(block_num, buf, offset)): len(buf) bájtot olvas – nem feltétlenül egész számú blokkot – a block_num blokkon belüli offset bájttól kezdve. A littlefs és más bájtcímezhető fájlrendszerek használják.

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

Bájtokat ír a buf pufferből a flash memóriába. Ez a szabványos vfs.AbstractBlockDev blokkeszköz-belépési pont, amelyet a fájlrendszer-réteg használ.

Egyszerű forma (writeblocks(block_num, buf)): teljes blokkokat ír a block_num blokkindextől kezdve. A len(buf) értéknek a flash blokkméret többszörösének kell lennie. Minden érintett blokk automatikusan törlődik az írás előtt.

Kibővített forma (writeblocks(block_num, buf, offset)): len(buf) bájtot ír – nem feltétlenül egész számú blokkot – a block_num blokkon belüli offset bájttól kezdve. Nem történik implicit törlés – a hívónak kell biztosítania, hogy az érintett blokkok egy korábbi ioctl(6, block_num) hívással törölve legyenek.

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

Szabványos vfs.AbstractBlockDev vezérlési belépési pont. A fájlrendszer-réteg hívja meg csatoláskor/lecsatoláskor és minden szinkronizáláskor. Felismert cmd értékek:

  • 1 – inicializálás. Sikeres esetben 0 értékkel tér vissza.

  • 2 – deinicializálás. Sikeres esetben 0 értékkel tér vissza.

  • 3 – függőben lévő írások szinkronizálása. 0 értékkel tér vissza.

  • 4 – a fájlrendszer számára látható flash blokkok számának visszaadása.

  • 5 – a blokkméret visszaadása bájtban (jellemzően a flash szektorméret, 4096).

  • 6 – az arg indexű blokk törlése. Szükséges a kibővített writeblocks forma használata előtt.

  • 7 – annak visszaadása, hogy az eszköz támogatja-e a blokktörlési parancsot (1 az RP2040 esetén).

A közvetlen hívók általában nem használják ezt a metódust – a fájlrendszer-meghajtó automatikusan kiküldi a szabványos kódokat, amint a Flash csatolva van.