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
Flashapoiado 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 blocovfs.AbstractBlockDevusado pela camada do sistema de arquivos.Forma simples (
readblocks(block_num, buf)): lê blocos inteiros começando no índice de blocoblock_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 byteoffsetdentro do blocoblock_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
bufna flash. Ponto de entrada padrão de dispositivo de blocovfs.AbstractBlockDevusado pela camada do sistema de arquivos.Forma simples (
writeblocks(block_num, buf)): escreve blocos inteiros começando no índice de blocoblock_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)): escrevelen(buf)bytes – não necessariamente um número inteiro de blocos – começando no byteoffsetdentro do blocoblock_num. Nenhum apagamento implícito é realizado – o chamador deve garantir que os blocos afetados tenham sido apagados por meio de uma chamada anterior aioctl(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 decmdreconhecidos:1– inicializar. Retorna0em caso de sucesso.2– desinicializar. Retorna0em caso de sucesso.3– sincronizar escritas pendentes. Retorna0.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 índicearg. Necessário antes de usar a forma estendida dewriteblocks.7– retornar se o dispositivo suporta o comando de apagamento de bloco (1no 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.