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.AbstractBlockDevpara 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 bloco0x100. 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 bytesstart(predefinição0) durantelenbytes (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 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 – a partir do byteoffsetdentro do blocoblock_num.len(buf)não tem restrição de alinhamento. Apenas suportado em objetos criados com argumentos explícitosstart/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
bufpara 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 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 – a partir do byteoffsetdentro do blocoblock_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 aioctl(6, block_num). Apenas suportado em objetos criados com argumentos explícitosstart/len.
- ioctl(cmd: int, arg: int) int | None¶
Ponto de entrada ioctl
vfs.AbstractBlockDevpadrão. Consultevfs.AbstractBlockDev.ioctl()para a lista completa de valores decmd.cmd=5devolve o tamanho do bloco flash em bytes;cmd=6apaga o bloco com índicearg.