mimxrt — funcionalidade específica para NXP i.MXRT

O módulo mimxrt contém funções e classes específicas para a 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 utilizador da flash QSPI integrada 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 da flash.

Na maioria dos casos, para armazenar dados persistentes no dispositivo, deverá utilizar uma abstração de nível superior – por exemplo, o sistema de ficheiros através da API de ficheiros padrão do Python. 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.

O objeto também implementa o protocolo de buffer, permitindo acesso de leitura mapeado em memória a toda a região de armazenamento flash através da base XIP do QSPI. Isto torna disponível uma vista de cópia zero da região sem emitir quaisquer leituras de flash:

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

O tamanho do bloco utilizado 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 da flash para buf. Duas sobrecargas expõem as interfaces simples e alargada:

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 do bloco de flash.

Forma alargada (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.

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

Escreve bytes de buf para a flash. Duas sobrecargas expõem as interfaces simples e alargada:

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 do bloco de flash. Cada bloco afetado é apagado automaticamente antes de ser escrito.

Forma alargada (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).

Lança OSError se a operação de apagamento ou escrita na flash subjacente falhar.

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

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