třída Flash – přístup k zabudované flash paměti

Třída Flash umožňuje přímý přístup k primárnímu flash zařízení na OpenMV Cam založených na STM32.

Ve většině případů budete chtít pro ukládání trvalých dat na zařízení použít vyšší úroveň abstrakce, například souborový systém přes standardní souborové API Pythonu, ale toto rozhraní je užitečné pro přizpůsobení konfigurace souborového systému nebo implementaci nízkoúrovňového úložného systému pro vaši aplikaci.

Poznámka

OpenMV Cam H7 Plus, Pure Thermal a N6 používají pro primární úložiště externí SPI/QSPI/XSPI flash čip; ostatní OpenMV Cam založené na STM32 používají interní flash paměť uvnitř MCU. Python rozhraní je v obou případech identické.

Konstruktory

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

Vytvoří blokové zařízení kompatibilní s vfs.AbstractBlockDev pro vestavěnou flash paměť. Existují dvě formy:

  • Flash() (bez argumentů): vrátí starší singletonový objekt, který zpřístupňuje celou flash paměť s předřazenou virtuální tabulkou oddílů. Skutečná data flash paměti začínají na bloku 0x100. Tato forma je zastaralá a bude v budoucí verzi MicroPython odstraněna.

  • Flash(start=..., len=...): vrátí nové blokové zařízení, které přistupuje k flash paměti od bytového offsetu start (výchozí 0) v délce len bytů (výchozí: zbytek zařízení). Obě hodnoty musí být násobkem velikosti podkladového bloku (typicky 512 bytů pro interní flash; externí SPI/QSPI/XSPI součástky používají větší velikost mazacího sektoru).

Metody

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

Přečte byty z flash paměti do buf. Dvě varianty zpřístupňují jednoduché a rozšířené rozhraní:

Jednoduchá forma (readblocks(block_num, buf)): čte celé bloky počínaje indexem bloku block_num. len(buf) musí být násobkem velikosti flash bloku.

Rozšířená forma (readblocks(block_num, buf, offset)): čte len(buf) bytů – nikoli nutně celý počet bloků – počínaje bytem offset v rámci bloku block_num. len(buf) nemá žádné omezení zarovnání. Podporováno pouze u objektů vytvořených s explicitními argumenty start / len, nikoli u zastaralého singletonu.

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

Zapíše byty z buf do flash paměti. Dvě varianty zpřístupňují jednoduché a rozšířené rozhraní:

Jednoduchá forma (writeblocks(block_num, buf)): zapisuje celé bloky počínaje indexem bloku block_num. len(buf) musí být násobkem velikosti flash bloku. Každý dotčený blok je před zápisem automaticky vymazán.

Rozšířená forma (writeblocks(block_num, buf, offset)): zapisuje len(buf) bytů – nikoli nutně celý počet bloků – počínaje bytem offset v rámci bloku block_num. len(buf) nemá žádné omezení zarovnání a neprovádí se žádné implicitní mazání – volající musí zajistit, že dotčené bloky byly vymazány předchozím voláním ioctl(6, block_num). Podporováno pouze u objektů vytvořených s explicitními argumenty start / len.

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

Standardní vstupní bod ioctl pro vfs.AbstractBlockDev. Úplný seznam hodnot cmd viz vfs.AbstractBlockDev.ioctl(). cmd=5 vrací velikost flash bloku v bytech; cmd=6 vymaže blok s indexem arg.