alif — funções do SoC Alif Ensemble¶
O módulo alif expõe funcionalidades específicas da plataforma para o SoC Alif Ensemble, incluindo um wrapper de dispositivo de bloco para a memória flash OSPI integrada e um utilitário para apresentar informações do SoC a partir dos serviços do Secure Enclave.
Exemplo:
import alif
alif.info()
flash = alif.Flash()
Funções¶
Classes¶
- class alif.Flash(*, start: int = -1, len: int = -1)¶
Cria um objeto de dispositivo de bloco suportado pela memória flash OSPI integrada. Esta classe só está disponível quando o firmware é compilado com suporte OSPI ativado.
Quando invocada sem argumentos, devolve o objeto singleton predefinido que abrange a região de sistema de ficheiros gravável da flash.
starté o deslocamento em bytes na região de armazenamento da flash. Deve ser múltiplo do tamanho de bloco da flash e estar dentro do intervalo de armazenamento da flash. Por omissão é-1, o que significa começar no deslocamento0.lené o comprimento em bytes da região da flash exposta pelo objeto. Deve ser múltiplo do tamanho de bloco da flash e não ultrapassar o fim da região de armazenamento da flash. Por omissão é-1, o que significa usar todos os bytes restantes a partir destart.O objeto implementa também o protocolo de buffer, permitindo acesso de leitura por mapeamento de memória à região da flash via a base XIP OSPI. Isto disponibiliza uma vista sem cópia de toda a região sem emitir qualquer leitura de flash:
flash = alif.Flash() view = memoryview(flash) magic = bytes(view[:4]) # read the first 4 bytes directly from XIP
- readblocks(block_num: int, buf: bytearray) int¶
- readblocks(block_num: int, buf: bytearray, offset: int) int
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 blocoblock_num.len(buf)deve ser múltiplo do tamanho de bloco da flash.Forma alargada (
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.Devolve
0em caso de sucesso ou um código de erro negativo. Note que o protocolo padrão de dispositivo de bloco do MicroPython devolveNone; o driveralifexpõe intencionalmente o código de estado OSPI subjacente para que os chamadores que ignoramvfspossam reagir a erros de hardware.
- writeblocks(block_num: int, buf: bytes) int¶
- writeblocks(block_num: int, buf: bytes, offset: int) int
Escreve bytes de
bufna flash. Duas sobrecargas expõem as interfaces simples e alargada:Forma simples (
writeblocks(block_num, buf)): escreve blocos completos a partir do índice de blocoblock_num.len(buf)deve ser múltiplo do tamanho de bloco da flash. Cada bloco afetado é apagado automaticamente antes de ser escrito.Forma alargada (
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 nenhum apagamento implícito é efetuado – o chamador deve garantir que os blocos afetados foram apagados através de uma chamada prévia aioctl(6, block_num).Devolve
0em caso de sucesso ou um código de erro negativo (consultereadblocks()para a justificação).
- ioctl(cmd: int, arg: int) int¶
Executa uma operação de controlo do dispositivo de bloco.
cmdé um dos comandos padrão do MicroPythonMP_BLOCKDEV_IOCTL_*:1(init) — devolve0.2(deinit) — devolve0.3(sync) — devolve0.4(contagem de blocos) — devolve o número de blocos na região.5(tamanho de bloco) — devolve o tamanho de bloco da flash em bytes.6(apagar bloco) — apaga o bloco no índicearge devolve o resultado da operação de apagamento.
Outros valores de
cmddevolvemNone.