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¶
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.
startest 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écalage0.lenest 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 destart.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 blocblock_num.len(buf)doit être un multiple de la taille de bloc flash.Forme étendue (
readblocks(block_num, buf, offset)) : litlen(buf)octets – pas nécessairement un nombre entier de blocs – à partir de l’octetoffsetau sein du blocblock_num.len(buf)n’a aucune contrainte d’alignement.Renvoie
0en cas de succès ou un code d’erreur négatif. Notez que le protocole standard de périphérique bloc de MicroPython renvoieNone; le pilotealifexpose intentionnellement le code d’état OSPI sous-jacent afin que les appelants qui contournentvfspuissent 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
bufvers 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 blocblock_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)) : écritlen(buf)octets – pas nécessairement un nombre entier de blocs – à partir de l’octetoffsetau sein du blocblock_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
0en cas de succès ou un code d’erreur négatif (voirreadblocks()pour l’explication).
- ioctl(cmd: int, arg: int) int¶
Effectue une opération de contrôle de périphérique bloc.
cmdest l’une des commandes standardMP_BLOCKDEV_IOCTL_*de MicroPython :1(init) — renvoie0.2(deinit) — renvoie0.3(sync) — renvoie0.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’indicearget renvoie le résultat de l’opération d’effacement.
Les autres valeurs de
cmdrenvoientNone.