Klasse Flash – Zugriff auf den integrierten Flash-Speicher

Die Klasse Flash bietet direkten, blockweisen Zugriff auf den externen QSPI-Flash-Chip des RP2040. Der Treiber implementiert die Schnittstelle vfs.AbstractBlockDev, sodass er für benutzerdefinierte Dateisystemkonfigurationen an vfs.mount() übergeben werden kann.

Die meisten Skripte speichern Daten über das automatisch eingehängte Dateisystem unter / und erstellen niemals direkt eine Flash-Instanz. Erstellen Sie eine manuell, wenn Sie Folgendes benötigen:

  • Einhängen eines nicht standardmäßigen Dateisystems (z. B. umhüllt mit vfs.VfsFat) auf einer benutzerdefinierten Partition.

  • Lesen oder Schreiben von Firmware-Bereichen oder Werksdatenblöcken, die nicht zum Dateisystem gehören.

  • Implementierung eines benutzerdefinierten Flash-Speicherformats, das die Dateisystemebene umgeht.

Konstruktoren

class rp2.Flash Flash

Gibt das Singleton-Blockgeräteobjekt Flash zurück, das vom QSPI-Flash-Chip des RP2040 gespeist wird. Der erste freigegebene Block ist derjenige unmittelbar nach dem Firmware-Bereich, sodass Aufrufer nur den für das Dateisystem geeigneten Bereich des Chips sehen.

Methoden

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

Liest Bytes aus dem Flash in buf. Standardmäßiger Blockgeräte-Einstiegspunkt von vfs.AbstractBlockDev, der von der Dateisystemebene verwendet wird.

Einfache Form (readblocks(block_num, buf)): Liest ganze Blöcke beginnend beim Blockindex block_num. len(buf) muss ein Vielfaches der Flash-Blockgröße sein.

Erweiterte Form (readblocks(block_num, buf, offset)): Liest len(buf) Bytes – nicht notwendigerweise eine ganze Anzahl von Blöcken – beginnend beim Byte offset innerhalb von Block block_num. Wird von littlefs und anderen byteadressierbaren Dateisystemen verwendet.

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

Schreibt Bytes aus buf in den Flash. Standardmäßiger Blockgeräte-Einstiegspunkt von vfs.AbstractBlockDev, der von der Dateisystemebene verwendet wird.

Einfache Form (writeblocks(block_num, buf)): Schreibt ganze Blöcke beginnend beim Blockindex block_num. len(buf) muss ein Vielfaches der Flash-Blockgröße sein. Jeder betroffene Block wird vor dem Schreiben automatisch gelöscht.

Erweiterte Form (writeblocks(block_num, buf, offset)): Schreibt len(buf) Bytes – nicht notwendigerweise eine ganze Anzahl von Blöcken – beginnend beim Byte offset innerhalb von Block block_num. Es wird kein implizites Löschen durchgeführt – der Aufrufer muss sicherstellen, dass die betroffenen Blöcke durch einen vorherigen Aufruf ioctl(6, block_num) gelöscht wurden.

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

Standardmäßiger Steuerungs-Einstiegspunkt von vfs.AbstractBlockDev. Wird von der Dateisystemebene beim Ein- und Aushängen sowie bei jeder Synchronisierung aufgerufen. Erkannte cmd-Werte:

  • 1 – initialisieren. Gibt bei Erfolg 0 zurück.

  • 2 – deinitialisieren. Gibt bei Erfolg 0 zurück.

  • 3 – ausstehende Schreibvorgänge synchronisieren. Gibt 0 zurück.

  • 4 – gibt die Anzahl der für das Dateisystem sichtbaren Flash-Blöcke zurück.

  • 5 – gibt die Blockgröße in Bytes zurück (typischerweise die Flash-Sektorgröße, 4096).

  • 6 – löscht den Block am Index arg. Erforderlich vor der Verwendung der erweiterten writeblocks-Form.

  • 7 – gibt zurück, ob das Gerät den Blocklöschbefehl unterstützt (1 beim RP2040).

Direkte Aufrufer verwenden diese Methode normalerweise nicht – der Dateisystemtreiber leitet die Standardcodes automatisch weiter, sobald das Flash-Objekt eingehängt ist.