class Flash – acesso ao armazenamento flash integrado

A classe Flash permite o acesso direto ao dispositivo flash principal nos OpenMV Cams baseados em STM32.

Na maioria dos casos, para armazenar dados persistentes no dispositivo, é preferível utilizar uma abstração de nível superior, por exemplo, o sistema de ficheiros através da API de ficheiros padrão do Python, mas esta interface é útil para personalizar a configuração do sistema de ficheiros ou implementar um sistema de armazenamento de baixo nível para a sua aplicação.

Nota

O OpenMV Cam H7 Plus, Pure Thermal e N6 utiliza um chip flash SPI/QSPI/XSPI externo para armazenamento principal; os outros OpenMV Cams baseados em STM32 utilizam 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 integrada. Existem duas formas:

  • Flash() (sem argumentos): devolve 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 numa futura versão do MicroPython.

  • Flash(start=..., len=...): devolve um novo dispositivo de blocos que acede à flash a partir do offset em bytes start (predefinição 0) durante len bytes (predefinição: o resto do dispositivo). Ambos os valores devem ser múltiplos do tamanho de bloco subjacente (tipicamente 512 bytes para flash interna; as partes SPI/QSPI/XSPI externas utilizam um tamanho de sector 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 completos a partir do í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 – a partir do byte offset dentro do bloco block_num. len(buf) não tem restrição de alinhamento. Apenas suportado em objetos criados com argumentos explícitos start / len, 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 completos a partir do í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 – a partir do byte offset dentro do bloco block_num. len(buf) não tem restrição de alinhamento, e não é realizado nenhum apagamento implícito – quem chama deve garantir que os blocos afetados foram apagados através de uma chamada prévia a ioctl(6, block_num). Apenas suportado em objetos criados com argumentos explícitos start / len.

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

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