clasa Flash – acces la stocarea flash încorporată

Clasa Flash permite accesul direct la dispozitivul flash principal de pe plăcile OpenMV Cam bazate pe STM32.

În majoritatea cazurilor, pentru a stoca date persistente pe dispozitiv, veți dori să folosiți o abstracțiune de nivel mai înalt, de exemplu sistemul de fișiere prin API-ul standard de fișiere al Python, însă această interfață este utilă pentru a personaliza configurația sistemului de fișiere sau pentru a implementa un sistem de stocare de nivel jos pentru aplicația dumneavoastră.

Notă

OpenMV Cam H7 Plus, Pure Thermal și N6 folosesc un cip flash SPI/QSPI/XSPI extern pentru stocarea principală; celelalte plăci OpenMV Cam bazate pe STM32 folosesc memoria flash internă din MCU. Interfața Python este identică în ambele cazuri.

Constructori

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

Construiește un dispozitiv bloc compatibil cu vfs.AbstractBlockDev pentru memoria flash de pe placă. Există două forme:

  • Flash() (fără argumente): returnează obiectul singleton vechi care expune întreaga memorie flash cu un tabel de partiții virtual adăugat la început. Datele flash propriu-zise încep la blocul 0x100. Această formă este depreciată și va fi eliminată într-o versiune viitoare a MicroPython.

  • Flash(start=..., len=...): returnează un dispozitiv bloc nou care accesează memoria flash începând de la decalajul de octet start (implicit 0) pentru len octeți (implicit: restul dispozitivului). Ambele valori trebuie să fie multipli ai dimensiunii blocului de bază (de obicei 512 octeți pentru memoria flash internă; componentele SPI/QSPI/XSPI externe folosesc o dimensiune mai mare a sectorului de ștergere).

Metode

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

Citește octeți din memoria flash în buf. Două supraîncărcări expun interfețele simplă și extinsă:

Forma simplă (readblocks(block_num, buf)): citește blocuri întregi începând de la indicele de bloc block_num. len(buf) trebuie să fie un multiplu al dimensiunii blocului flash.

Forma extinsă (readblocks(block_num, buf, offset)): citește len(buf) octeți – nu neapărat un număr întreg de blocuri – începând de la octetul offset din interiorul blocului block_num. len(buf) nu are nicio constrângere de aliniere. Suportată doar pe obiectele create cu argumentele explicite start / len, nu pe singletonul depreciat.

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

Scrie octeți din buf în memoria flash. Două supraîncărcări expun interfețele simplă și extinsă:

Forma simplă (writeblocks(block_num, buf)): scrie blocuri întregi începând de la indicele de bloc block_num. len(buf) trebuie să fie un multiplu al dimensiunii blocului flash. Fiecare bloc afectat este șters automat înainte de a fi scris.

Forma extinsă (writeblocks(block_num, buf, offset)): scrie len(buf) octeți – nu neapărat un număr întreg de blocuri – începând de la octetul offset din interiorul blocului block_num. len(buf) nu are nicio constrângere de aliniere și nu se realizează nicio ștergere implicită – apelantul trebuie să se asigure că blocurile afectate au fost șterse printr-un apel ioctl(6, block_num) anterior. Suportată doar pe obiectele create cu argumentele explicite start / len.

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

Punct de intrare ioctl standard vfs.AbstractBlockDev. Vezi vfs.AbstractBlockDev.ioctl() pentru lista completă de valori cmd. cmd=5 returnează dimensiunea blocului flash în octeți; cmd=6 șterge blocul cu indicele arg.