class Flash – toegang tot het ingebouwde flashgeheugen

De klasse Flash biedt directe toegang op blokniveau tot de externe QSPI-flashchip van de RP2040. Het stuurprogramma implementeert de interface vfs.AbstractBlockDev, zodat het aan vfs.mount() kan worden doorgegeven voor aangepaste bestandssysteemconfiguraties.

De meeste scripts bewaren gegevens via het automatisch aangekoppelde bestandssysteem op / en construeren Flash nooit rechtstreeks. Construeer er handmatig een wanneer je het volgende nodig hebt:

  • Een niet-standaard bestandssysteem aankoppelen (bijv. omhuld met vfs.VfsFat) op een aangepaste partitie.

  • Firmwareregio’s of fabrieksgegevensblokken lezen of schrijven die niet eigendom zijn van het bestandssysteem.

  • Een aangepast opslagformaat op flashgeheugen implementeren dat de bestandssysteemlaag omzeilt.

Constructors

class rp2.Flash Flash

Retourneer het singleton-blokapparaatobject Flash dat wordt ondersteund door de QSPI-flashchip van de RP2040. Het eerste blootgestelde blok is het blok direct na de firmwareregio, zodat aanroepers alleen het voor het bestandssysteem geschikte deel van de chip zien.

Methods

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

Lees bytes uit het flashgeheugen in buf. Standaard blokapparaat-toegangspunt vfs.AbstractBlockDev dat door de bestandssysteemlaag wordt gebruikt.

Eenvoudige vorm (readblocks(block_num, buf)): lees hele blokken vanaf blokindex block_num. len(buf) moet een veelvoud van de flashblokgrootte zijn.

Uitgebreide vorm (readblocks(block_num, buf, offset)): lees len(buf) bytes – niet noodzakelijk een geheel aantal blokken – vanaf byte offset binnen blok block_num. Gebruikt door littlefs en andere byte-adresseerbare bestandssystemen.

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

Schrijf bytes uit buf naar het flashgeheugen. Standaard blokapparaat-toegangspunt vfs.AbstractBlockDev dat door de bestandssysteemlaag wordt gebruikt.

Eenvoudige vorm (writeblocks(block_num, buf)): schrijf hele blokken vanaf blokindex block_num. len(buf) moet een veelvoud van de flashblokgrootte zijn. Elk betrokken blok wordt automatisch gewist voordat het wordt beschreven.

Uitgebreide vorm (writeblocks(block_num, buf, offset)): schrijf len(buf) bytes – niet noodzakelijk een geheel aantal blokken – vanaf byte offset binnen blok block_num. Er wordt geen impliciete wisbewerking uitgevoerd – de aanroeper moet ervoor zorgen dat de betrokken blokken zijn gewist via een voorafgaande aanroep van ioctl(6, block_num).

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

Standaard besturingstoegangspunt vfs.AbstractBlockDev. Wordt aangeroepen door de bestandssysteemlaag bij het aan- en afkoppelen en bij elke synchronisatie. Herkende cmd-waarden:

  • 1 – initialiseren. Retourneert 0 bij succes.

  • 2 – de-initialiseren. Retourneert 0 bij succes.

  • 3 – in behandeling zijnde schrijfbewerkingen synchroniseren. Retourneert 0.

  • 4 – retourneer het aantal flashblokken dat zichtbaar is voor het bestandssysteem.

  • 5 – retourneer de blokgrootte in bytes (doorgaans de flashsectorgrootte, 4096).

  • 6 – wis het blok op index arg. Vereist voordat de uitgebreide vorm van writeblocks wordt gebruikt.

  • 7 – retourneer of het apparaat de blokwiscommando ondersteunt (1 op de RP2040).

Directe aanroepers gebruiken deze methode normaal gesproken niet – het bestandssysteemstuurprogramma verzendt automatisch de standaardcodes zodra de Flash is aangekoppeld.