klass Flash – åtkomst till inbyggt flashminne

Flash-klassen ger direktåtkomst till den primära flashenheten på de STM32-baserade OpenMV Cam-korten.

I de flesta fall, för att lagra beständig data på enheten, vill du använda en abstraktion på högre nivå, till exempel filsystemet via Pythons standard-fil-API, men detta gränssnitt är användbart för att anpassa filsystemskonfigurationen eller implementera ett lagringssystem på låg nivå för din applikation.

Anteckning

OpenMV Cam H7 Plus, Pure Thermal och N6 använder ett externt SPI/QSPI/XSPI-flashchip för primär lagring; de övriga STM32-baserade OpenMV Cam-korten använder det interna flashminnet i MCU:n. Python-gränssnittet är identiskt i båda fallen.

Konstruktorer

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

Skapa en blockenhet kompatibel med vfs.AbstractBlockDev för det inbyggda flashminnet. Det finns två former:

  • Flash() (inga argument): returnerar det äldre singleton-objektet som exponerar hela flashminnet med en virtuell partitionstabell tillagd i början. Den faktiska flashdatan börjar vid block 0x100. Denna form är föråldrad och kommer att tas bort i en framtida MicroPython-version.

  • Flash(start=..., len=...): returnerar en ny blockenhet som kommer åt flashminnet med början vid byteförskjutningen start (standard 0) för len bytes (standard: resten av enheten). Båda värdena måste vara en multipel av den underliggande blockstorleken (vanligtvis 512 bytes för internt flashminne; de externa SPI/QSPI/XSPI-delarna använder en större raderingssektorstorlek).

Metoder

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

Läs bytes från flashminnet till buf. Två överlagringar exponerar det enkla och det utökade gränssnittet:

Enkel form (readblocks(block_num, buf)): läser hela block med början vid blockindex block_num. len(buf) måste vara en multipel av flashminnets blockstorlek.

Utökad form (readblocks(block_num, buf, offset)): läser len(buf) bytes – inte nödvändigtvis ett helt antal block – med början vid byte offset inom block block_num. len(buf) har ingen justeringsbegränsning. Stöds endast på objekt som skapats med explicita start / len-argument, inte på den föråldrade singletonen.

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

Skriv bytes från buf till flashminnet. Två överlagringar exponerar det enkla och det utökade gränssnittet:

Enkel form (writeblocks(block_num, buf)): skriver hela block med början vid blockindex block_num. len(buf) måste vara en multipel av flashminnets blockstorlek. Varje berört block raderas automatiskt innan det skrivs.

Utökad form (writeblocks(block_num, buf, offset)): skriver len(buf) bytes – inte nödvändigtvis ett helt antal block – med början vid byte offset inom block block_num. len(buf) har ingen justeringsbegränsning, och ingen implicit radering utförs – anroparen måste säkerställa att de berörda blocken har raderats via ett föregående anrop till ioctl(6, block_num). Stöds endast på objekt som skapats med explicita start / len-argument.

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

Standardingångspunkt för ioctl enligt vfs.AbstractBlockDev. Se vfs.AbstractBlockDev.ioctl() för den fullständiga listan över cmd-värden. cmd=5 returnerar flashminnets blockstorlek i bytes; cmd=6 raderar blocket med index arg.