Flash osztály – hozzáférés a beépített flash tárolóhoz¶
A Flash osztály közvetlen hozzáférést tesz lehetővé az STM32-alapú OpenMV Cam kamerák elsődleges flash eszközéhez.
A legtöbb esetben az eszközön tartós adatok tárolásához célszerű egy magasabb szintű absztrakciót használni, például a fájlrendszert a Python szabványos fájl-API-ján keresztül, de ez a felület hasznos a fájlrendszer-konfiguráció testreszabásához, vagy egy alacsony szintű tárolórendszer megvalósításához az alkalmazásához.
Megjegyzés
Az OpenMV Cam H7 Plus, Pure Thermal és N6 külső SPI/QSPI/XSPI flash chipet használ elsődleges tárolóként; a többi STM32-alapú OpenMV Cam az MCU belső flash memóriáját használja. A Python felület mindkét esetben azonos.
Konstruktorok¶
- class pyb.Flash¶
- class pyb.Flash(*, start: int = -1, len: int = -1)
Egy
vfs.AbstractBlockDev-kompatibilis blokkeszköz létrehozása a beépített flash memóriához. Két formája létezik:Flash()(argumentumok nélkül): visszaadja a régebbi szingleton objektumot, amely a teljes flash memóriát egy elé fűzött virtuális partíciós táblával teszi elérhetővé. A tényleges flash adatok a0x100blokknál kezdődnek. Ez a forma elavult, és egy jövőbeli MicroPython kiadásban el lesz távolítva.Flash(start=..., len=...): visszaad egy új blokkeszközt, amely a flash memóriát astartbájteltolástól (alapértelmezett0) kezdődőenlenbájton keresztül (alapértelmezett: az eszköz fennmaradó része) éri el. Mindkét értéknek az alapul szolgáló blokkméret többszörösének kell lennie (belső flash esetén jellemzően 512 bájt; a külső SPI/QSPI/XSPI alkatrészek nagyobb törlési szektorméretet használnak).
Metódusok¶
- readblocks(block_num: int, buf: bytearray) None¶
- readblocks(block_num: int, buf: bytearray, offset: int) None
Bájtok olvasása a flash memóriából a
bufpufferbe. Két túlterhelés teszi elérhetővé az egyszerű és a kibővített felületet:Egyszerű forma (
readblocks(block_num, buf)): teljes blokkokat olvas ablock_numblokkindextől kezdve. Alen(buf)értékének a flash blokkméret többszörösének kell lennie.Kibővített forma (
readblocks(block_num, buf, offset)):len(buf)bájtot olvas – nem feltétlenül egész számú blokkot – ablock_numblokkon belül azoffsetbájttól kezdve. Alen(buf)értékére nem vonatkozik igazítási megkötés. Csak az explicitstart/lenargumentumokkal létrehozott objektumokon támogatott, az elavult szingletonon nem.
- writeblocks(block_num: int, buf: bytes | bytearray) None¶
- writeblocks(block_num: int, buf: bytes | bytearray, offset: int) None
Bájtok írása a
bufpufferből a flash memóriába. Két túlterhelés teszi elérhetővé az egyszerű és a kibővített felületet:Egyszerű forma (
writeblocks(block_num, buf)): teljes blokkokat ír ablock_numblokkindextől kezdve. Alen(buf)értékének a flash blokkméret többszörösének kell lennie. Minden érintett blokk automatikusan törlésre kerül az írás előtt.Kibővített forma (
writeblocks(block_num, buf, offset)):len(buf)bájtot ír – nem feltétlenül egész számú blokkot – ablock_numblokkon belül azoffsetbájttól kezdve. Alen(buf)értékére nem vonatkozik igazítási megkötés, és nem történik implicit törlés – a hívónak kell biztosítania, hogy az érintett blokkok egy korábbiioctl(6, block_num)hívással törölve legyenek. Csak az explicitstart/lenargumentumokkal létrehozott objektumokon támogatott.
- ioctl(cmd: int, arg: int) int | None¶
Szabványos
vfs.AbstractBlockDevioctl belépési pont. Acmdértékek teljes listáját lásd avfs.AbstractBlockDev.ioctl()metódusnál. Acmd=5a flash blokkméretét adja vissza bájtokban; acmd=6azargindexű blokkot törli.