alif — fonctions du SoC Alif Ensemble

Le module alif expose des fonctionnalités spécifiques au portage pour le SoC Alif Ensemble, notamment un encapsuleur de périphérique bloc pour la mémoire flash OSPI embarquée et un utilitaire permettant d’extraire les informations du SoC depuis les services de l’enclave sécurisée.

Exemple

import alif

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

Fonctions

alif.info() None

Extrait les informations du périphérique recueillies depuis les services de l’enclave sécurisée Alif (services SE) vers le terminal série.

Classes

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

Crée un objet périphérique bloc adossé à la mémoire flash OSPI embarquée. Cette classe n’est disponible que lorsque le micrologiciel est compilé avec la prise en charge OSPI activée.

Lorsqu’elle est appelée sans argument, renvoie l’objet singleton par défaut couvrant la région inscriptible du système de fichiers de la mémoire flash.

start est le décalage en octets dans la région de stockage flash. Doit être un multiple de la taille de bloc flash et se situer dans la plage de stockage flash. Vaut par défaut -1, ce qui signifie un début au décalage 0.

len est la longueur en octets de la région flash exposée par l’objet. Doit être un multiple de la taille de bloc flash et ne pas dépasser la fin de la région de stockage flash. Vaut par défaut -1, ce qui signifie utiliser tous les octets restants à partir de start.

L’objet implémente également le protocole tampon, ce qui permet un accès en lecture seule à la région flash via une projection mémoire (memory-mapped) au moyen de la base OSPI XIP. Cela rend disponible une vue sans copie (zero-copy) de toute la région sans émettre aucune lecture 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

Lit des octets depuis la mémoire flash vers buf. Deux surcharges exposent les interfaces simple et étendue :

Forme simple (readblocks(block_num, buf)) : lit des blocs entiers à partir de l’indice de bloc block_num. len(buf) doit être un multiple de la taille de bloc flash.

Forme étendue (readblocks(block_num, buf, offset)) : lit len(buf) octets – pas nécessairement un nombre entier de blocs – à partir de l’octet offset au sein du bloc block_num. len(buf) n’a aucune contrainte d’alignement.

Renvoie 0 en cas de succès ou un code d’erreur négatif. Notez que le protocole standard de périphérique bloc de MicroPython renvoie None ; le pilote alif expose intentionnellement le code d’état OSPI sous-jacent afin que les appelants qui contournent vfs puissent réagir aux erreurs matérielles.

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

Écrit des octets depuis buf vers la mémoire flash. Deux surcharges exposent les interfaces simple et étendue :

Forme simple (writeblocks(block_num, buf)) : écrit des blocs entiers à partir de l’indice de bloc block_num. len(buf) doit être un multiple de la taille de bloc flash. Chaque bloc concerné est effacé automatiquement avant d’être écrit.

Forme étendue (writeblocks(block_num, buf, offset)) : écrit len(buf) octets – pas nécessairement un nombre entier de blocs – à partir de l’octet offset au sein du bloc block_num. len(buf) n’a aucune contrainte d’alignement, et aucun effacement implicite n’est effectué – l’appelant doit s’assurer que les blocs concernés ont été effacés au moyen d’un appel préalable à ioctl(6, block_num).

Renvoie 0 en cas de succès ou un code d’erreur négatif (voir readblocks() pour l’explication).

ioctl(cmd: int, arg: int) int

Effectue une opération de contrôle de périphérique bloc. cmd est l’une des commandes standard MP_BLOCKDEV_IOCTL_* de MicroPython :

  • 1 (init) — renvoie 0.

  • 2 (deinit) — renvoie 0.

  • 3 (sync) — renvoie 0.

  • 4 (nombre de blocs) — renvoie le nombre de blocs dans la région.

  • 5 (taille de bloc) — renvoie la taille de bloc flash en octets.

  • 6 (effacement de bloc) — efface le bloc à l’indice arg et renvoie le résultat de l’opération d’effacement.

Les autres valeurs de cmd renvoient None.

Constantes

alif.usb_msc: bool

Présent et défini à True uniquement lorsque le micrologiciel est compilé avec la prise en charge de la classe USB Mass Storage activée. L’attribut est absent dans le cas contraire.