alif — funciones del SoC Alif Ensemble

El módulo alif expone funcionalidad específica del puerto para el SoC Alif Ensemble, incluido un envoltorio de dispositivo de bloques para la memoria flash OSPI integrada y un ayudante para volcar información del SoC desde los servicios del Secure Enclave.

Ejemplo:

import alif

alif.info()
flash = alif.Flash()

Funciones

alif.info() None

Vuelca al terminal serie la información del dispositivo recopilada de los servicios del Secure Enclave de Alif (servicios SE).

Clases

class alif.Flash(*, start: int = -1, len: int = -1)

Crea un objeto de dispositivo de bloques respaldado por la memoria flash OSPI integrada. Esta clase solo está disponible cuando el firmware se compila con compatibilidad OSPI habilitada.

Cuando se llama sin argumentos, devuelve el objeto singleton predeterminado que cubre la región de la memoria flash del sistema de archivos donde se puede escribir.

start es el desplazamiento en bytes dentro de la región de almacenamiento de la memoria flash. Debe ser un múltiplo del tamaño de bloque de la memoria flash y estar dentro del rango de almacenamiento de la memoria flash. El valor predeterminado es -1, lo que significa empezar en el desplazamiento 0.

len es la longitud en bytes de la región de la memoria flash expuesta por el objeto. Debe ser un múltiplo del tamaño de bloque de la memoria flash y no extenderse más allá del final de la región de almacenamiento de la memoria flash. El valor predeterminado es -1, lo que significa usar todos los bytes restantes a partir de start.

El objeto también implementa el protocolo de búfer, lo que permite el acceso de solo lectura mapeado en memoria a la región de la memoria flash a través de la base OSPI XIP. Esto hace que una vista sin copia de toda la región esté disponible sin emitir ninguna lectura de la memoria 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

Lee bytes de la memoria flash a buf. Dos sobrecargas exponen las interfaces simple y extendida:

Forma simple (readblocks(block_num, buf)): lee bloques completos a partir del índice de bloque block_num. len(buf) debe ser un múltiplo del tamaño de bloque de la memoria flash.

Forma extendida (readblocks(block_num, buf, offset)): lee len(buf) bytes – no necesariamente un número entero de bloques – a partir del byte offset dentro del bloque block_num. len(buf) no tiene restricción de alineación.

Devuelve 0 en caso de éxito o un código de error negativo. Ten en cuenta que el protocolo estándar de dispositivo de bloques de MicroPython devuelve None; el controlador alif expone intencionadamente el código de estado OSPI subyacente para que los llamadores que omiten vfs puedan reaccionar a errores de hardware.

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

Escribe bytes de buf en la memoria flash. Dos sobrecargas exponen las interfaces simple y extendida:

Forma simple (writeblocks(block_num, buf)): escribe bloques completos a partir del índice de bloque block_num. len(buf) debe ser un múltiplo del tamaño de bloque de la memoria flash. Cada bloque afectado se borra automáticamente antes de escribirse.

Forma extendida (writeblocks(block_num, buf, offset)): escribe len(buf) bytes – no necesariamente un número entero de bloques – a partir del byte offset dentro del bloque block_num. len(buf) no tiene restricción de alineación, y no se realiza ningún borrado implícito – el llamador debe asegurarse de que los bloques afectados se hayan borrado mediante una llamada previa a ioctl(6, block_num).

Devuelve 0 en caso de éxito o un código de error negativo (consulta readblocks() para conocer el motivo).

ioctl(cmd: int, arg: int) int

Realiza una operación de control del dispositivo de bloques. cmd es uno de los comandos estándar MP_BLOCKDEV_IOCTL_* de MicroPython:

  • 1 (init) — devuelve 0.

  • 2 (deinit) — devuelve 0.

  • 3 (sync) — devuelve 0.

  • 4 (recuento de bloques) — devuelve el número de bloques de la región.

  • 5 (tamaño de bloque) — devuelve el tamaño de bloque de la memoria flash en bytes.

  • 6 (borrado de bloque) — borra el bloque en el índice arg y devuelve el resultado de la operación de borrado.

Otros valores de cmd devuelven None.

Constantes

alif.usb_msc: bool

Presente y con valor True solo cuando el firmware se compila con compatibilidad de clase de almacenamiento masivo USB habilitada. El atributo está ausente en caso contrario.