class Flash – toegang tot ingebouwde flashopslag

De Flash-klasse biedt directe toegang tot het primaire flashapparaat op de STM32-gebaseerde OpenMV Cams.

In de meeste gevallen wilt u, om persistente data op het apparaat op te slaan, een abstractie op hoger niveau gebruiken, bijvoorbeeld het bestandssysteem via de standaard bestand-API van Python, maar deze interface is nuttig om de configuratie van het bestandssysteem aan te passen of om een laag-niveau opslagsysteem voor uw applicatie te implementeren.

Notitie

De OpenMV Cam H7 Plus, Pure Thermal en N6 gebruiken een externe SPI/QSPI/XSPI-flashchip voor primaire opslag; de andere STM32-gebaseerde OpenMV Cams gebruiken het interne flashgeheugen in de MCU. De Python-interface is in beide gevallen identiek.

Constructors

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

Construeer een met vfs.AbstractBlockDev compatibel blokapparaat voor het ingebouwde flashgeheugen. Er bestaan twee vormen:

  • Flash() (zonder argumenten): geeft het verouderde singleton-object terug dat het volledige flashgeheugen blootstelt met een virtuele partitietabel ervoor. De feitelijke flashdata begint bij blok 0x100. Deze vorm is verouderd en zal in een toekomstige MicroPython-release worden verwijderd.

  • Flash(start=..., len=...): geeft een nieuw blokapparaat terug dat het flashgeheugen benadert vanaf byte-offset start (standaard 0) over len bytes (standaard: de rest van het apparaat). Beide waarden moeten een veelvoud zijn van de onderliggende blokgrootte (doorgaans 512 bytes voor intern flashgeheugen; de externe SPI/QSPI/XSPI-onderdelen gebruiken een grotere wissectorgrootte).

Methods

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

Lees bytes uit het flashgeheugen in buf. Twee overloads bieden de eenvoudige en de uitgebreide interface:

Eenvoudige vorm (readblocks(block_num, buf)): leest volledige blokken vanaf blokindex block_num. len(buf) moet een veelvoud zijn van de flash-blokgrootte.

Uitgebreide vorm (readblocks(block_num, buf, offset)): leest len(buf) bytes – niet noodzakelijk een geheel aantal blokken – vanaf byte offset binnen blok block_num. len(buf) heeft geen uitlijningsbeperking. Alleen ondersteund op objecten die zijn aangemaakt met expliciete start / len-argumenten, niet op de verouderde singleton.

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

Schrijf bytes uit buf naar het flashgeheugen. Twee overloads bieden de eenvoudige en de uitgebreide interface:

Eenvoudige vorm (writeblocks(block_num, buf)): schrijft volledige blokken vanaf blokindex block_num. len(buf) moet een veelvoud zijn van de flash-blokgrootte. Elk betrokken blok wordt automatisch gewist voordat het wordt geschreven.

Uitgebreide vorm (writeblocks(block_num, buf, offset)): schrijft len(buf) bytes – niet noodzakelijk een geheel aantal blokken – vanaf byte offset binnen blok block_num. len(buf) heeft geen uitlijningsbeperking, en 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). Alleen ondersteund op objecten die zijn aangemaakt met expliciete start / len-argumenten.

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

Standaard ioctl-ingangspunt van vfs.AbstractBlockDev. Zie vfs.AbstractBlockDev.ioctl() voor de volledige lijst met cmd-waarden. cmd=5 geeft de flash-blokgrootte in bytes terug; cmd=6 wist het blok met index arg.