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 a 0x100 blokkná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 a start bájteltolástól (alapértelmezett 0) kezdődően len bá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 buf pufferbe. 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 a block_num blokkindextől kezdve. A len(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 – a block_num blokkon belül az offset bájttól kezdve. A len(buf) értékére nem vonatkozik igazítási megkötés. Csak az explicit start / len argumentumokkal 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 buf pufferbő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 a block_num blokkindextől kezdve. A len(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 – a block_num blokkon belül az offset bájttól kezdve. A len(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ábbi ioctl(6, block_num) hívással törölve legyenek. Csak az explicit start / len argumentumokkal létrehozott objektumokon támogatott.

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

Szabványos vfs.AbstractBlockDev ioctl belépési pont. A cmd értékek teljes listáját lásd a vfs.AbstractBlockDev.ioctl() metódusnál. A cmd=5 a flash blokkméretét adja vissza bájtokban; a cmd=6 az arg indexű blokkot törli.