classe Flash – accesso alla memoria flash integrata¶
La classe Flash fornisce accesso diretto, a livello di blocco, al chip di memoria flash QSPI esterna dell’RP2040. Il driver implementa l’interfaccia vfs.AbstractBlockDev, quindi può essere passato a vfs.mount() per configurazioni di filesystem personalizzate.
La maggior parte degli script conserva i dati attraverso il filesystem montato automaticamente in / e non costruisce mai direttamente un oggetto Flash. Costruiscine uno manualmente quando hai bisogno di:
Montare un filesystem non predefinito (ad es. avvolgendolo con
vfs.VfsFat) su una partizione personalizzata.Leggere o scrivere regioni di firmware o blocchi di dati di fabbrica che non sono di proprietà del filesystem.
Implementare un formato di archiviazione su flash personalizzato che aggira il livello del filesystem.
Costruttori¶
- class rp2.Flash Flash¶
Restituisce l’oggetto block-device singleton
Flashsupportato dal chip di memoria flash QSPI dell’RP2040. Il primo blocco esposto è quello immediatamente successivo alla regione del firmware, così i chiamanti vedono solo l’area del chip idonea al filesystem.Metodi¶
- readblocks(block_num: int, buf: bytearray) None¶
- readblocks(block_num: int, buf: bytearray, offset: int) None
Legge byte dalla flash in
buf. Punto di ingresso standard del block-devicevfs.AbstractBlockDevusato dal livello del filesystem.Forma semplice (
readblocks(block_num, buf)): legge blocchi interi a partire dall’indice di bloccoblock_num.len(buf)deve essere un multiplo della dimensione del blocco della flash.Forma estesa (
readblocks(block_num, buf, offset)): leggelen(buf)byte – non necessariamente un numero intero di blocchi – a partire dal byteoffsetall’interno del bloccoblock_num. Usata da littlefs e da altri filesystem indirizzabili a byte.
- writeblocks(block_num: int, buf: bytes) None¶
- writeblocks(block_num: int, buf: bytes, offset: int) None
Scrive byte da
bufnella flash. Punto di ingresso standard del block-devicevfs.AbstractBlockDevusato dal livello del filesystem.Forma semplice (
writeblocks(block_num, buf)): scrive blocchi interi a partire dall’indice di bloccoblock_num.len(buf)deve essere un multiplo della dimensione del blocco della flash. Ogni blocco interessato viene cancellato automaticamente prima di essere scritto.Forma estesa (
writeblocks(block_num, buf, offset)): scrivelen(buf)byte – non necessariamente un numero intero di blocchi – a partire dal byteoffsetall’interno del bloccoblock_num. Non viene eseguita alcuna cancellazione implicita – il chiamante deve assicurarsi che i blocchi interessati siano stati cancellati tramite una precedente chiamataioctl(6, block_num).
- ioctl(cmd: int, arg: int) int | None¶
Punto di ingresso di controllo standard
vfs.AbstractBlockDev. Chiamato dal livello del filesystem al momento del montaggio/smontaggio e a ogni sincronizzazione. Valori dicmdriconosciuti:1– inizializza. Restituisce0in caso di successo.2– deinizializza. Restituisce0in caso di successo.3– sincronizza le scritture in sospeso. Restituisce0.4– restituisce il numero di blocchi flash visibili al filesystem.5– restituisce la dimensione del blocco in byte (tipicamente la dimensione del settore della flash,4096).6– cancella il blocco all’indicearg. Richiesto prima di usare la forma estesa diwriteblocks.7– restituisce se il dispositivo supporta il comando di cancellazione dei blocchi (1su RP2040).
I chiamanti diretti normalmente non usano questo metodo – il driver del filesystem invia automaticamente i codici standard una volta che la
Flashè montata.