class Flash – Zugriff auf integrierten Flash-Speicher

Die Klasse Flash ermöglicht den direkten Zugriff auf das primäre Flash-Gerät auf den STM32-basierten OpenMV Cams.

In den meisten Fällen werden Sie zum Speichern persistenter Daten auf dem Gerät eine höherstufige Abstraktion verwenden wollen, zum Beispiel das Dateisystem über die Standard-Datei-API von Python; diese Schnittstelle ist jedoch nützlich, um die Dateisystemkonfiguration anzupassen oder ein systemnahes Speichersystem für Ihre Anwendung zu implementieren.

Bemerkung

Die OpenMV Cam H7 Plus, Pure Thermal und N6 verwenden einen externen SPI/QSPI/XSPI-Flash-Chip als primären Speicher; die anderen STM32-basierten OpenMV Cams verwenden den internen Flash innerhalb der MCU. Die Python-Schnittstelle ist in beiden Fällen identisch.

Konstruktoren

class pyb.Flash
class pyb.Flash(*, start: int = -1, len: int = -1)

Erstellt ein zu vfs.AbstractBlockDev kompatibles Blockgerät für den integrierten Flash. Es gibt zwei Formen:

  • Flash() (ohne Argumente): gibt das alte Singleton-Objekt zurück, das den gesamten Flash mit einer vorangestellten virtuellen Partitionstabelle bereitstellt. Die eigentlichen Flash-Daten beginnen bei Block 0x100. Diese Form ist veraltet und wird in einer zukünftigen MicroPython-Version entfernt.

  • Flash(start=..., len=...): gibt ein neues Blockgerät zurück, das auf den Flash ab Byte-Offset start (Standard 0) für len Bytes (Standard: der Rest des Geräts) zugreift. Beide Werte müssen ein Vielfaches der zugrunde liegenden Blockgröße sein (typischerweise 512 Bytes für internen Flash; die externen SPI/QSPI/XSPI-Bausteine verwenden eine größere Löschsektorgröße).

Methoden

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

Liest Bytes aus dem Flash in buf. Zwei Überladungen stellen die einfache und die erweiterte Schnittstelle bereit:

Einfache Form (readblocks(block_num, buf)): liest ganze Blöcke ab dem 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 – ab Byte offset innerhalb von Block block_num. len(buf) unterliegt keiner Ausrichtungsbeschränkung. Wird nur bei Objekten unterstützt, die mit expliziten start / len-Argumenten erstellt wurden, nicht beim veralteten Singleton.

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

Schreibt Bytes aus buf in den Flash. Zwei Überladungen stellen die einfache und die erweiterte Schnittstelle bereit:

Einfache Form (writeblocks(block_num, buf)): schreibt ganze Blöcke ab dem 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 – ab Byte offset innerhalb von Block block_num. len(buf) unterliegt keiner Ausrichtungsbeschränkung, und es wird kein implizites Löschen durchgeführt – der Aufrufer muss sicherstellen, dass die betroffenen Blöcke durch einen vorherigen Aufruf von ioctl(6, block_num) gelöscht wurden. Wird nur bei Objekten unterstützt, die mit expliziten start / len-Argumenten erstellt wurden.

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

Standard-ioctl-Einstiegspunkt für vfs.AbstractBlockDev. Siehe vfs.AbstractBlockDev.ioctl() für die vollständige Liste der cmd-Werte. cmd=5 gibt die Flash-Blockgröße in Bytes zurück; cmd=6 löscht den Block mit Index arg.