alif — funções do SoC Alif Ensemble¶
O módulo alif expõe funcionalidades específicas da porta para o SoC Alif Ensemble, incluindo um wrapper de dispositivo de blocos para a flash OSPI embarcada e um auxiliar para obter 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 blocos respaldado pela flash OSPI embarcada. Esta classe só está disponível quando o firmware é compilado com suporte a OSPI habilitado.
Quando chamado sem argumentos, retorna o objeto singleton padrão que cobre a região gravável do sistema de arquivos da flash.
starté o deslocamento em bytes dentro da região de armazenamento da flash. Deve ser múltiplo do tamanho do bloco da flash e estar dentro da faixa de armazenamento da flash. O padrã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 do bloco da flash e não estender além do fim da região de armazenamento da flash. O padrão é-1, o que significa usar todos os bytes restantes a partir destart.O objeto também implementa o protocolo de buffer, permitindo acesso somente leitura mapeado em memória à região da flash por meio da base OSPI XIP. Isso disponibiliza uma visão zero-copy de toda a região sem emitir nenhuma leitura da 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 estendida:Forma simples (
readblocks(block_num, buf)): lê blocos inteiros começando no índice de blocoblock_num.len(buf)deve ser múltiplo do tamanho do bloco da flash.Forma estendida (
readblocks(block_num, buf, offset)): lêlen(buf)bytes – não necessariamente um número inteiro de blocos – começando no byteoffsetdentro do blocoblock_num.len(buf)não tem restrição de alinhamento.Retorna
0em caso de sucesso ou um código de erro negativo. Observe que o protocolo padrão de dispositivo de blocos do MicroPython retornaNone; o driveralifexpõe intencionalmente o código de status subjacente do OSPI 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 estendida:Forma simples (
writeblocks(block_num, buf)): escreve blocos inteiros começando no índice de blocoblock_num.len(buf)deve ser múltiplo do tamanho do 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 – começando no byteoffsetdentro do blocoblock_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 chamadaioctl(6, block_num)anterior.Retorna
0em caso de sucesso ou um código de erro negativo (vejareadblocks()para a justificativa).
- ioctl(cmd: int, arg: int) int¶
Realiza uma operação de controle do dispositivo de blocos.
cmdé um dos comandos padrãoMP_BLOCKDEV_IOCTL_*do MicroPython:1(init) — retorna0.2(deinit) — retorna0.3(sync) — retorna0.4(contagem de blocos) — retorna o número de blocos na região.5(tamanho do bloco) — retorna o tamanho do bloco da flash em bytes.6(apagar bloco) — apaga o bloco no índicearge retorna o resultado da operação de apagamento.
Outros valores de
cmdretornamNone.