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.AbstractBlockDevfö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 block0x100. 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örskjutningenstart(standard0) förlenbytes (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 blockindexblock_num.len(buf)måste vara en multipel av flashminnets blockstorlek.Utökad form (
readblocks(block_num, buf, offset)): läserlen(buf)bytes – inte nödvändigtvis ett helt antal block – med början vid byteoffsetinom blockblock_num.len(buf)har ingen justeringsbegränsning. Stöds endast på objekt som skapats med explicitastart/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
buftill 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 blockindexblock_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)): skriverlen(buf)bytes – inte nödvändigtvis ett helt antal block – med början vid byteoffsetinom blockblock_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 tillioctl(6, block_num). Stöds endast på objekt som skapats med explicitastart/len-argument.
- ioctl(cmd: int, arg: int) int | None¶
Standardingångspunkt för ioctl enligt
vfs.AbstractBlockDev. Sevfs.AbstractBlockDev.ioctl()för den fullständiga listan övercmd-värden.cmd=5returnerar flashminnets blockstorlek i bytes;cmd=6raderar blocket med indexarg.