klasa Flash – pristup ugrađenoj flash pohrani

Klasa Flash omogućuje izravan pristup primarnom flash uređaju na STM32-baziranim OpenMV Cam kamerama.

U većini slučajeva, za pohranu trajnih podataka na uređaju, poželjet ćete koristiti apstrakciju više razine, na primjer datotečni sustav putem Pythonovog standardnog API-ja za datoteke, ali ovo sučelje korisno je za prilagodbu konfiguracije datotečnog sustava ili implementaciju niskorazinskog sustava pohrane za vašu aplikaciju.

Napomena

OpenMV Cam H7 Plus, Pure Thermal i N6 koriste vanjski SPI/QSPI/XSPI flash čip za primarnu pohranu; ostale STM32-bazirane OpenMV Cam kamere koriste internu flash memoriju unutar MCU. Python sučelje je identično u oba slučaja.

Konstruktori

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

Stvara blok uređaj kompatibilan s vfs.AbstractBlockDev za ugrađenu flash memoriju. Postoje dva oblika:

  • Flash() (bez argumenata): vraća zastarjeli singleton objekt koji izlaže cijelu flash memoriju s virtualnom tablicom particija dodanom na početak. Stvarni flash podaci počinju na bloku 0x100. Ovaj oblik je zastario i bit će uklonjen u budućem izdanju MicroPythona.

  • Flash(start=..., len=...): vraća svjež blok uređaj koji pristupa flash memoriji počevši od bajtnog odmaka start (zadano 0) za len bajtova (zadano: ostatak uređaja). Obje vrijednosti moraju biti višekratnici osnovne veličine bloka (obično 512 bajtova za internu flash memoriju; vanjski SPI/QSPI/XSPI dijelovi koriste veću veličinu sektora brisanja).

Metode

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

Čita bajtove iz flash memorije u buf. Dvije inačice izlažu jednostavno i prošireno sučelje:

Jednostavni oblik (readblocks(block_num, buf)): čita cijele blokove počevši od indeksa bloka block_num. len(buf) mora biti višekratnik veličine flash bloka.

Prošireni oblik (readblocks(block_num, buf, offset)): čita len(buf) bajtova – ne nužno cijeli broj blokova – počevši od bajta offset unutar bloka block_num. len(buf) nema ograničenje poravnanja. Podržano samo na objektima stvorenima s izričitim argumentima start / len, ne na zastarjelom singletonu.

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

Zapisuje bajtove iz buf u flash memoriju. Dvije inačice izlažu jednostavno i prošireno sučelje:

Jednostavni oblik (writeblocks(block_num, buf)): zapisuje cijele blokove počevši od indeksa bloka block_num. len(buf) mora biti višekratnik veličine flash bloka. Svaki zahvaćeni blok automatski se briše prije zapisivanja.

Prošireni oblik (writeblocks(block_num, buf, offset)): zapisuje len(buf) bajtova – ne nužno cijeli broj blokova – počevši od bajta offset unutar bloka block_num. len(buf) nema ograničenje poravnanja i ne provodi se nikakvo implicitno brisanje – pozivatelj mora osigurati da su zahvaćeni blokovi obrisani prethodnim pozivom ioctl(6, block_num). Podržano samo na objektima stvorenima s izričitim argumentima start / len.

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

Standardna ulazna točka ioctl za vfs.AbstractBlockDev. Pogledajte vfs.AbstractBlockDev.ioctl() za potpuni popis vrijednosti cmd. cmd=5 vraća veličinu flash bloka u bajtovima; cmd=6 briše blok s indeksom arg.