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.AbstractBlockDevpro 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 bloku0x100. 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 offsetustart(výchozí0) v délcelenbytů (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 blokublock_num.len(buf)musí být násobkem velikosti flash bloku.Rozšířená forma (
readblocks(block_num, buf, offset)): čtelen(buf)bytů – nikoli nutně celý počet bloků – počínaje bytemoffsetv rámci blokublock_num.len(buf)nemá žádné omezení zarovnání. Podporováno pouze u objektů vytvořených s explicitními argumentystart/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
bufdo 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 blokublock_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)): zapisujelen(buf)bytů – nikoli nutně celý počet bloků – počínaje bytemoffsetv rámci blokublock_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ímioctl(6, block_num). Podporováno pouze u objektů vytvořených s explicitními argumentystart/len.
- ioctl(cmd: int, arg: int) int | None¶
Standardní vstupní bod ioctl pro
vfs.AbstractBlockDev. Úplný seznam hodnotcmdvizvfs.AbstractBlockDev.ioctl().cmd=5vrací velikost flash bloku v bytech;cmd=6vymaže blok s indexemarg.