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 Flash supportato 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-device vfs.AbstractBlockDev usato dal livello del filesystem.

Forma semplice (readblocks(block_num, buf)): legge blocchi interi a partire dall’indice di blocco block_num. len(buf) deve essere un multiplo della dimensione del blocco della flash.

Forma estesa (readblocks(block_num, buf, offset)): legge len(buf) byte – non necessariamente un numero intero di blocchi – a partire dal byte offset all’interno del blocco block_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 buf nella flash. Punto di ingresso standard del block-device vfs.AbstractBlockDev usato dal livello del filesystem.

Forma semplice (writeblocks(block_num, buf)): scrive blocchi interi a partire dall’indice di blocco block_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)): scrive len(buf) byte – non necessariamente un numero intero di blocchi – a partire dal byte offset all’interno del blocco block_num. Non viene eseguita alcuna cancellazione implicita – il chiamante deve assicurarsi che i blocchi interessati siano stati cancellati tramite una precedente chiamata ioctl(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 di cmd riconosciuti:

  • 1 – inizializza. Restituisce 0 in caso di successo.

  • 2 – deinizializza. Restituisce 0 in caso di successo.

  • 3 – sincronizza le scritture in sospeso. Restituisce 0.

  • 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’indice arg. Richiesto prima di usare la forma estesa di writeblocks.

  • 7 – restituisce se il dispositivo supporta il comando di cancellazione dei blocchi (1 su RP2040).

I chiamanti diretti normalmente non usano questo metodo – il driver del filesystem invia automaticamente i codici standard una volta che la Flash è montata.