mimxrt — funcionalidade específica do NXP i.MXRT

O módulo mimxrt contém funções e classes específicas da família de microcontroladores NXP i.MXRT.

Classes

class mimxrt.Flash

Obtém o objeto singleton que expõe a região de armazenamento do usuário do flash QSPI embarcado como um dispositivo de blocos compatível com vfs.AbstractBlockDev. Os números de bloco são relativos ao início dessa região, não ao início físico do flash.

Na maioria dos casos, para armazenar dados persistentes no dispositivo, você vai querer usar uma abstração de mais alto nível – por exemplo, o sistema de arquivos via API de arquivos padrão do Python. 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.

O objeto também implementa o protocolo de buffer, permitindo acesso somente leitura mapeado em memória a toda a região de armazenamento flash via a base XIP do QSPI. Isso disponibiliza uma visão sem cópia da região sem emitir nenhuma leitura de flash:

flash = mimxrt.Flash()
view = memoryview(flash)
magic = bytes(view[:4])      # read the first 4 bytes directly from XIP

O tamanho de bloco usado pelos setores de flash subjacentes pode ser consultado em tempo de execução com ioctl(5, 0).

readblocks(block_num: int, buf: bytearray) None
readblocks(block_num: int, buf: bytearray, offset: int) None

Lê bytes do 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 do 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.

writeblocks(block_num: int, buf: bytes) None
writeblocks(block_num: int, buf: bytes, offset: int) None

Escreve bytes de buf para o 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 do 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).

Levanta OSError se a operação subjacente de apagamento ou escrita do flash falhar.

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 do flash em bytes; cmd=6 apaga o bloco com índice arg.