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.AbstractBlockDevkompatibles 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 Block0x100. 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-Offsetstart(Standard0) fürlenBytes (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 Blockindexblock_num.len(buf)muss ein Vielfaches der Flash-Blockgröße sein.Erweiterte Form (
readblocks(block_num, buf, offset)): liestlen(buf)Bytes – nicht notwendigerweise eine ganze Anzahl von Blöcken – ab Byteoffsetinnerhalb von Blockblock_num.len(buf)unterliegt keiner Ausrichtungsbeschränkung. Wird nur bei Objekten unterstützt, die mit explizitenstart/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
bufin den Flash. Zwei Überladungen stellen die einfache und die erweiterte Schnittstelle bereit:Einfache Form (
writeblocks(block_num, buf)): schreibt ganze Blöcke ab dem Blockindexblock_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)): schreibtlen(buf)Bytes – nicht notwendigerweise eine ganze Anzahl von Blöcken – ab Byteoffsetinnerhalb von Blockblock_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 vonioctl(6, block_num)gelöscht wurden. Wird nur bei Objekten unterstützt, die mit explizitenstart/len-Argumenten erstellt wurden.
- ioctl(cmd: int, arg: int) int | None¶
Standard-ioctl-Einstiegspunkt für
vfs.AbstractBlockDev. Siehevfs.AbstractBlockDev.ioctl()für die vollständige Liste dercmd-Werte.cmd=5gibt die Flash-Blockgröße in Bytes zurück;cmd=6löscht den Block mit Indexarg.