class Flash – åtkomst till inbyggt flashminne

Klassen Flash ger direkt åtkomst på blocknivå till RP2040:s externa QSPI-flashchip. Drivrutinen implementerar gränssnittet vfs.AbstractBlockDev så att den kan skickas till vfs.mount() för anpassade filsystemskonfigurationer.

De flesta skript lagrar data via det automatiskt monterade filsystemet vid / och konstruerar aldrig Flash direkt. Konstruera ett manuellt när du behöver:

  • Montera ett filsystem som inte är standard (t.ex. omslutet av vfs.VfsFat) på en anpassad partition.

  • Läsa eller skriva firmware-regioner eller fabriksdatablock som inte ägs av filsystemet.

  • Implementera ett anpassat lagringsformat på flashminnet som kringgår filsystemslagret.

Konstruktorer

class rp2.Flash Flash

Returnerar singleton-blockenhetsobjektet Flash som backas av RP2040:s QSPI-flashchip. Det första blocket som exponeras är det som ligger omedelbart efter firmware-regionen, så anropare ser endast den del av chipet som är tillgänglig för filsystemet.

Metoder

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

Läser byte från flashminnet in i buf. Standardingång för blockenheter enligt vfs.AbstractBlockDev som används av filsystemslagret.

Enkel form (readblocks(block_num, buf)): läser hela block med start vid blockindex block_num. len(buf) måste vara en multipel av flashblockstorleken.

Utökad form (readblocks(block_num, buf, offset)): läser len(buf) byte – inte nödvändigtvis ett helt antal block – med start vid byte offset inom block block_num. Används av littlefs och andra byteadresserbara filsystem.

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

Skriver byte från buf till flashminnet. Standardingång för blockenheter enligt vfs.AbstractBlockDev som används av filsystemslagret.

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

Utökad form (writeblocks(block_num, buf, offset)): skriver len(buf) byte – inte nödvändigtvis ett helt antal block – med start vid byte offset inom block block_num. 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).

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

Standardingång för styrning enligt vfs.AbstractBlockDev. Anropas av filsystemslagret vid montering/avmontering och vid varje synkronisering. Igenkända cmd-värden:

  • 1 – initiera. Returnerar 0 vid lyckat resultat.

  • 2 – avinitiera. Returnerar 0 vid lyckat resultat.

  • 3 – synkronisera väntande skrivningar. Returnerar 0.

  • 4 – returnera antalet flashblock som är synliga för filsystemet.

  • 5 – returnera blockstorleken i byte (vanligtvis flashsektorstorleken, 4096).

  • 6 – radera blocket vid index arg. Krävs innan den utökade writeblocks-formen används.

  • 7 – returnera huruvida enheten stöder blockraderingskommandot (1 på RP2040).

Direkta anropare använder normalt inte denna metod – filsystemsdrivrutinen skickar standardkoderna automatiskt så snart Flash är monterad.