class Flash – acesso ao armazenamento flash incorporado¶
A classe Flash fornece acesso direto ao nível de blocos ao chip flash QSPI externo do RP2040. O controlador implementa a interface vfs.AbstractBlockDev para que possa ser passado a vfs.mount() em configurações de sistema de ficheiros personalizadas.
A maioria dos scripts persiste dados através do sistema de ficheiros montado automaticamente em / e nunca constrói Flash diretamente. Construa uma manualmente quando necessitar de:
Montar um sistema de ficheiros não predefinido (p. ex., encapsulado com
vfs.VfsFat) numa partição personalizada.Ler ou escrever regiões de firmware ou blocos de dados de fábrica que não pertencem ao sistema de ficheiros.
Implementar um formato de armazenamento em flash personalizado que contorna a camada do sistema de ficheiros.
Construtores¶
- class rp2.Flash Flash¶
Devolve o objeto singleton
Flashdo dispositivo de blocos suportado pelo chip flash QSPI do RP2040. O primeiro bloco exposto é o imediatamente a seguir à região do firmware, pelo que os chamadores veem apenas a área do chip elegível para o sistema de ficheiros.Métodos¶
- readblocks(block_num: int, buf: bytearray) None¶
- readblocks(block_num: int, buf: bytearray, offset: int) None
Lê bytes do flash para
buf. Ponto de entrada padrão do dispositivo de blocosvfs.AbstractBlockDevutilizado pela camada do sistema de ficheiros.Forma simples (
readblocks(block_num, buf)): lê blocos completos a partir do índice de blocoblock_num.len(buf)deve ser um múltiplo do tamanho do bloco flash.Forma alargada (
readblocks(block_num, buf, offset)): lêlen(buf)bytes – não necessariamente um número inteiro de blocos – a partir do byteoffsetdentro do blocoblock_num. Utilizado pelo littlefs e outros sistemas de ficheiros endereçáveis por byte.
- writeblocks(block_num: int, buf: bytes) None¶
- writeblocks(block_num: int, buf: bytes, offset: int) None
Escreve bytes de
bufno flash. Ponto de entrada padrão do dispositivo de blocosvfs.AbstractBlockDevutilizado pela camada do sistema de ficheiros.Forma simples (
writeblocks(block_num, buf)): escreve blocos completos a partir do índice de blocoblock_num.len(buf)deve ser um múltiplo do tamanho do bloco flash. Cada bloco afetado é apagado automaticamente antes de ser escrito.Forma alargada (
writeblocks(block_num, buf, offset)): escrevelen(buf)bytes – não necessariamente um número inteiro de blocos – a partir do byteoffsetdentro do blocoblock_num. Não é realizado nenhum apagamento implícito – o chamador deve garantir que os blocos afetados foram apagados através de uma chamada prévia aioctl(6, block_num).
- ioctl(cmd: int, arg: int) int | None¶
Ponto de entrada de controlo padrão
vfs.AbstractBlockDev. Chamado pela camada do sistema de ficheiros na montagem/desmontagem e em cada sincronização. Valores decmdreconhecidos:1– inicializar. Devolve0em caso de sucesso.2– desinicializar. Devolve0em caso de sucesso.3– sincronizar escritas pendentes. Devolve0.4– devolver o número de blocos flash visíveis ao sistema de ficheiros.5– devolver o tamanho do bloco em bytes (tipicamente o tamanho do setor flash,4096).6– apagar o bloco no índicearg. Necessário antes de utilizar a forma alargada dewriteblocks.7– devolver se o dispositivo suporta o comando de apagamento de bloco (1no RP2040).
Os chamadores diretos normalmente não utilizam este método – o controlador do sistema de ficheiros despacha os códigos padrão automaticamente assim que a
Flashé montada.