class Flash – acceso al almacenamiento flash integrado

La clase Flash proporciona acceso directo, a nivel de bloque, al chip de memoria flash QSPI externa del RP2040. El controlador implementa la interfaz vfs.AbstractBlockDev, por lo que puede pasarse a vfs.mount() para configuraciones de sistema de archivos personalizadas.

La mayoría de los scripts conservan datos mediante el sistema de archivos montado automáticamente en / y nunca construyen Flash directamente. Construya uno manualmente cuando necesite:

  • Montar un sistema de archivos no predeterminado (por ejemplo, envolviéndolo con vfs.VfsFat) en una partición personalizada.

  • Leer o escribir regiones de firmware o bloques de datos de fábrica que no pertenecen al sistema de archivos.

  • Implementar un formato de almacenamiento en flash personalizado que omita la capa del sistema de archivos.

Constructores

class rp2.Flash Flash

Devuelve el objeto de dispositivo de bloque singleton Flash respaldado por el chip de memoria flash QSPI del RP2040. El primer bloque expuesto es el que está inmediatamente después de la región de firmware, de modo que quien lo invoca solo ve el área del chip elegible para el sistema de archivos.

Métodos

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

Lee bytes de la memoria flash hacia buf. Punto de entrada estándar de dispositivo de bloque vfs.AbstractBlockDev utilizado por la capa del sistema de archivos.

Forma simple (readblocks(block_num, buf)): lee bloques completos comenzando en el índice de bloque block_num. len(buf) debe ser un múltiplo del tamaño de bloque de la memoria flash.

Forma extendida (readblocks(block_num, buf, offset)): lee len(buf) bytes – no necesariamente un número entero de bloques – comenzando en el byte offset dentro del bloque block_num. Lo usan littlefs y otros sistemas de archivos direccionables por bytes.

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

Escribe bytes de buf en la memoria flash. Punto de entrada estándar de dispositivo de bloque vfs.AbstractBlockDev utilizado por la capa del sistema de archivos.

Forma simple (writeblocks(block_num, buf)): escribe bloques completos comenzando en el índice de bloque block_num. len(buf) debe ser un múltiplo del tamaño de bloque de la memoria flash. Cada bloque afectado se borra automáticamente antes de escribirse.

Forma extendida (writeblocks(block_num, buf, offset)): escribe len(buf) bytes – no necesariamente un número entero de bloques – comenzando en el byte offset dentro del bloque block_num. No se realiza ningún borrado implícito – quien invoca debe asegurarse de que los bloques afectados hayan sido borrados mediante una llamada previa a ioctl(6, block_num).

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

Punto de entrada de control estándar de vfs.AbstractBlockDev. Lo llama la capa del sistema de archivos al montar/desmontar y en cada sincronización. Valores de cmd reconocidos:

  • 1 – inicializar. Devuelve 0 en caso de éxito.

  • 2 – desinicializar. Devuelve 0 en caso de éxito.

  • 3 – sincronizar las escrituras pendientes. Devuelve 0.

  • 4 – devuelve el número de bloques de flash visibles para el sistema de archivos.

  • 5 – devuelve el tamaño de bloque en bytes (normalmente el tamaño de sector de la memoria flash, 4096).

  • 6 – borra el bloque en el índice arg. Necesario antes de usar la forma extendida de writeblocks.

  • 7 – devuelve si el dispositivo admite el comando de borrado de bloques (1 en el RP2040).

Quienes invocan directamente normalmente no usan este método – el controlador del sistema de archivos despacha los códigos estándar automáticamente una vez que Flash está montado.