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.AbstractBlockDevpentru 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 blocul0x100. 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 octetstart(implicit0) pentrulenocteț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 blocblock_num.len(buf)trebuie să fie un multiplu al dimensiunii blocului flash.Forma extinsă (
readblocks(block_num, buf, offset)): citeștelen(buf)octeți – nu neapărat un număr întreg de blocuri – începând de la octetuloffsetdin interiorul bloculuiblock_num.len(buf)nu are nicio constrângere de aliniere. Suportată doar pe obiectele create cu argumentele explicitestart/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 blocblock_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)): scrielen(buf)octeți – nu neapărat un număr întreg de blocuri – începând de la octetuloffsetdin interiorul bloculuiblock_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 apelioctl(6, block_num)anterior. Suportată doar pe obiectele create cu argumentele explicitestart/len.
- ioctl(cmd: int, arg: int) int | None¶
Punct de intrare ioctl standard
vfs.AbstractBlockDev. Vezivfs.AbstractBlockDev.ioctl()pentru lista completă de valoricmd.cmd=5returnează dimensiunea blocului flash în octeți;cmd=6șterge blocul cu indicelearg.