classe Flash – acesso ao armazenamento flash interno

A classe Flash fornece acesso direto, em nível de bloco, ao chip de flash QSPI externo do RP2040. O driver implementa a interface vfs.AbstractBlockDev, de modo que pode ser passado para vfs.mount() em configurações personalizadas de sistema de arquivos.

A maioria dos scripts persiste dados através do sistema de arquivos montado automaticamente em / e nunca constrói Flash diretamente. Construa uma manualmente quando você precisar:

  • Montar um sistema de arquivos não padrão (por exemplo, encapsulando com vfs.VfsFat) em uma partição personalizada.

  • Ler ou escrever regiões de firmware ou blocos de dados de fábrica que não pertencem ao sistema de arquivos.

  • Implementar um formato de armazenamento em flash personalizado que ignora a camada do sistema de arquivos.

Construtores

class rp2.Flash Flash

Retorna o objeto singleton de dispositivo de bloco Flash apoiado pelo chip de flash QSPI do RP2040. O primeiro bloco exposto é aquele imediatamente após a região de firmware, de modo que os chamadores enxergam apenas a área do chip elegível para o sistema de arquivos.

Métodos

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

Lê bytes da flash para buf. Ponto de entrada padrão de dispositivo de bloco vfs.AbstractBlockDev usado pela camada do sistema de arquivos.

Forma simples (readblocks(block_num, buf)): lê blocos inteiros começando no índice de bloco block_num. len(buf) deve ser um múltiplo do tamanho do bloco da flash.

Forma estendida (readblocks(block_num, buf, offset)): lê len(buf) bytes – não necessariamente um número inteiro de blocos – começando no byte offset dentro do bloco block_num. Usada pelo littlefs e por outros sistemas de arquivos endereçáveis por byte.

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

Escreve bytes de buf na flash. Ponto de entrada padrão de dispositivo de bloco vfs.AbstractBlockDev usado pela camada do sistema de arquivos.

Forma simples (writeblocks(block_num, buf)): escreve blocos inteiros começando no índice de bloco block_num. len(buf) deve ser um múltiplo do tamanho do bloco da flash. Cada bloco afetado é apagado automaticamente antes de ser escrito.

Forma estendida (writeblocks(block_num, buf, offset)): escreve len(buf) bytes – não necessariamente um número inteiro de blocos – começando no byte offset dentro do bloco block_num. Nenhum apagamento implícito é realizado – o chamador deve garantir que os blocos afetados tenham sido apagados por meio de uma chamada anterior a ioctl(6, block_num).

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

Ponto de entrada padrão de controle vfs.AbstractBlockDev. Chamado pela camada do sistema de arquivos no momento da montagem/desmontagem e em cada sincronização. Valores de cmd reconhecidos:

  • 1 – inicializar. Retorna 0 em caso de sucesso.

  • 2 – desinicializar. Retorna 0 em caso de sucesso.

  • 3 – sincronizar escritas pendentes. Retorna 0.

  • 4 – retornar o número de blocos da flash visíveis ao sistema de arquivos.

  • 5 – retornar o tamanho do bloco em bytes (normalmente o tamanho do setor da flash, 4096).

  • 6 – apagar o bloco no índice arg. Necessário antes de usar a forma estendida de writeblocks.

  • 7 – retornar se o dispositivo suporta o comando de apagamento de bloco (1 no RP2040).

Os chamadores diretos normalmente não usam este método – o driver do sistema de arquivos despacha os códigos padrão automaticamente assim que a Flash é montada.