classe Flash – acesso ao armazenamento flash interno¶
A classe Flash permite acesso direto ao dispositivo flash primário nas OpenMV Cams baseadas em STM32.
Na maioria dos casos, para armazenar dados persistentes no dispositivo, você vai querer usar uma abstração de nível mais alto, por exemplo o sistema de arquivos via a API de arquivos padrão do Python, mas esta interface é útil para personalizar a configuração do sistema de arquivos ou implementar um sistema de armazenamento de baixo nível para sua aplicação.
Nota
A OpenMV Cam H7 Plus, Pure Thermal e N6 usam um chip de flash SPI/QSPI/XSPI externo para o armazenamento primário; as outras OpenMV Cams baseadas em STM32 usam a flash interna dentro do MCU. A interface Python é idêntica em ambos os casos.
Construtores¶
- class pyb.Flash¶
- class pyb.Flash(*, start: int = -1, len: int = -1)
Constrói um dispositivo de blocos compatível com
vfs.AbstractBlockDevpara a flash embarcada. Existem duas formas:Flash()(sem argumentos): retorna o objeto singleton legado que expõe toda a flash com uma tabela de partições virtual anteposta. Os dados reais da flash começam no bloco0x100. Esta forma está obsoleta e será removida em uma versão futura do MicroPython.Flash(start=..., len=...): retorna um novo dispositivo de blocos que acessa a flash começando no deslocamento de bytestart(padrão0) porlenbytes (padrão: o restante do dispositivo). Ambos os valores devem ser um múltiplo do tamanho de bloco subjacente (tipicamente 512 bytes para a flash interna; as partes SPI/QSPI/XSPI externas usam um tamanho de setor de apagamento maior).
Métodos¶
- readblocks(block_num: int, buf: bytearray) None¶
- readblocks(block_num: int, buf: bytearray, offset: int) None
Lê bytes da flash para
buf. Duas sobrecargas expõem as interfaces simples e estendida: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 de 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.len(buf)não tem restrição de alinhamento. Suportada apenas em objetos criados com argumentosstart/lenexplícitos, não no singleton obsoleto.
- writeblocks(block_num: int, buf: bytes | bytearray) None¶
- writeblocks(block_num: int, buf: bytes | bytearray, offset: int) None
Escreve bytes de
bufpara a flash. Duas sobrecargas expõem as interfaces simples e estendida: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 de 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.len(buf)não tem restrição de alinhamento, e 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). Suportada apenas em objetos criados com argumentosstart/lenexplícitos.
- ioctl(cmd: int, arg: int) int | None¶
Ponto de entrada ioctl padrão de
vfs.AbstractBlockDev. Vejavfs.AbstractBlockDev.ioctl()para a lista completa de valores decmd.cmd=5retorna o tamanho de bloco da flash em bytes;cmd=6apaga o bloco com índicearg.