class Flash – pääsy sisäänrakennettuun flash-muistiin

Flash-luokka mahdollistaa suoran pääsyn STM32-pohjaisten OpenMV Cam -kameroiden ensisijaiseen flash-laitteeseen.

Useimmissa tapauksissa pysyvän datan tallentamiseen laitteeseen kannattaa käyttää korkeamman tason abstraktiota, esimerkiksi tiedostojärjestelmää Pythonin standardin tiedosto-API:n kautta, mutta tämä rajapinta on hyödyllinen tiedostojärjestelmän määrityksen mukauttamiseen tai matalan tason tallennusjärjestelmän toteuttamiseen sovellustasi varten.

Muista

OpenMV Cam H7 Plus, Pure Thermal ja N6 käyttävät ulkoista SPI/QSPI/XSPI flash-piiriä ensisijaisena tallennustilana; muut STM32-pohjaiset OpenMV Cam -kamerat käyttävät MCU:n sisäistä flash-muistia. Python-rajapinta on molemmissa tapauksissa identtinen.

Konstruktorit

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

Luo vfs.AbstractBlockDev-yhteensopiva lohkolaite laudan flash-muistille. Kaksi muotoa on olemassa:

  • Flash() (ilman argumentteja): palauttaa vanhan singleton-objektin, joka tuo esiin koko flash-muistin virtuaalisella osiotaulukolla edeltämänä. Varsinainen flash-data alkaa lohkosta 0x100. Tämä muoto on vanhentunut ja poistetaan tulevassa MicroPython-julkaisussa.

  • Flash(start=..., len=...): palauttaa uuden lohkolaitteen, joka käyttää flash-muistia tavusiirtymästä start (oletus 0) alkaen len tavun verran (oletus: laitteen loppuosa). Molempien arvojen on oltava taustalla olevan lohkokoon monikertoja (tyypillisesti 512 tavua sisäiselle flash-muistille; ulkoiset SPI/QSPI/XSPI-osat käyttävät suurempaa pyyhintäsektorin kokoa).

Metodit

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

Lue tavuja flash-muistista puskuriin buf. Kaksi ylikuormitusta tuo esiin yksinkertaisen ja laajennetun rajapinnan:

Yksinkertainen muoto (readblocks(block_num, buf)): lukee kokonaisia lohkoja lohkoindeksistä block_num alkaen. len(buf) on oltava flash-lohkokoon monikerta.

Laajennettu muoto (readblocks(block_num, buf, offset)): lukee len(buf) tavua – ei välttämättä kokonaista lohkomäärää – alkaen tavusta offset lohkon block_num sisällä. len(buf) ei ole kohdistusrajoituksia. Tuettu vain objekteissa, jotka on luotu eksplisiittisillä start / len -argumenteilla, ei vanhentuneessa singletonissa.

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

Kirjoita tavuja puskurista buf flash-muistiin. Kaksi ylikuormitusta tuo esiin yksinkertaisen ja laajennetun rajapinnan:

Yksinkertainen muoto (writeblocks(block_num, buf)): kirjoittaa kokonaisia lohkoja lohkoindeksistä block_num alkaen. len(buf) on oltava flash-lohkokoon monikerta. Jokainen vaikutuksen alainen lohko pyyhitään automaattisesti ennen kirjoittamista.

Laajennettu muoto (writeblocks(block_num, buf, offset)): kirjoittaa len(buf) tavua – ei välttämättä kokonaista lohkomäärää – alkaen tavusta offset lohkon block_num sisällä. len(buf) ei ole kohdistusrajoituksia, ja mitään implisiittistä pyyhintää ei suoriteta – kutsujan on varmistettava, että vaikutuksen alaiset lohkot on pyyhitty aiemmalla ioctl(6, block_num) -kutsulla. Tuettu vain objekteissa, jotka on luotu eksplisiittisillä start / len -argumenteilla.

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

Standardi vfs.AbstractBlockDev ioctl -sisääntulopiste. Katso cmd-arvojen täydellinen luettelo kohdasta vfs.AbstractBlockDev.ioctl(). cmd=5 palauttaa flash-lohkokoon tavuina; cmd=6 pyyhkii lohkon, jonka indeksi on arg.