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.AbstractBlockDev para 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 bloco 0x100. 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 byte start (padrão 0) por len bytes (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 bloco block_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 byte offset dentro do bloco block_num. len(buf) não tem restrição de alinhamento. Suportada apenas em objetos criados com argumentos start / len explí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 buf para 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 bloco block_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)): escreve len(buf) bytes – não necessariamente um número inteiro de blocos – começando no byte offset dentro do bloco block_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 a ioctl(6, block_num). Suportada apenas em objetos criados com argumentos start / len explícitos.

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

Ponto de entrada ioctl padrão de vfs.AbstractBlockDev. Veja vfs.AbstractBlockDev.ioctl() para a lista completa de valores de cmd. cmd=5 retorna o tamanho de bloco da flash em bytes; cmd=6 apaga o bloco com índice arg.