classe Flash – accès au stockage flash intégré¶
La classe Flash permet un accès direct au périphérique flash principal sur les OpenMV Cam basées sur STM32.
Dans la plupart des cas, pour stocker des données persistantes sur l’appareil, vous voudrez utiliser une abstraction de plus haut niveau, par exemple le système de fichiers via l’API de fichiers standard de Python, mais cette interface est utile pour personnaliser la configuration du système de fichiers ou implémenter un système de stockage de bas niveau pour votre application.
Note
Les OpenMV Cam H7 Plus, Pure Thermal et N6 utilisent une puce flash SPI/QSPI/XSPI externe pour le stockage principal ; les autres OpenMV Cam basées sur STM32 utilisent la mémoire flash interne du MCU. L’interface Python est identique dans les deux cas.
Constructeurs¶
- class pyb.Flash¶
- class pyb.Flash(*, start: int = -1, len: int = -1)
Construit un périphérique de blocs compatible
vfs.AbstractBlockDevpour la mémoire flash embarquée. Il existe deux formes :Flash()(sans arguments) : renvoie l’objet singleton hérité qui expose toute la mémoire flash avec une table de partition virtuelle ajoutée en préfixe. Les données flash réelles commencent au bloc0x100. Cette forme est obsolète et sera supprimée dans une future version de MicroPython.Flash(start=..., len=...): renvoie un nouveau périphérique de blocs qui accède à la mémoire flash en commençant au décalage en octetsstart(par défaut0) surlenoctets (par défaut : le reste du périphérique). Les deux valeurs doivent être un multiple de la taille de bloc sous-jacente (généralement 512 octets pour la flash interne ; les composants SPI/QSPI/XSPI externes utilisent une taille de secteur d’effacement plus grande).
Méthodes¶
- readblocks(block_num: int, buf: bytearray) None¶
- readblocks(block_num: int, buf: bytearray, offset: int) None
Lit des octets de la mémoire flash dans
buf. Deux surcharges exposent les interfaces simple et étendue :Forme simple (
readblocks(block_num, buf)) : lit des blocs entiers à partir de l’index de blocblock_num.len(buf)doit être un multiple de la taille de bloc de la flash.Forme étendue (
readblocks(block_num, buf, offset)) : litlen(buf)octets – pas nécessairement un nombre entier de blocs – à partir de l’octetoffsetdans le blocblock_num.len(buf)n’a aucune contrainte d’alignement. Pris en charge uniquement sur les objets créés avec des argumentsstart/lenexplicites, pas sur le singleton obsolète.
- writeblocks(block_num: int, buf: bytes | bytearray) None¶
- writeblocks(block_num: int, buf: bytes | bytearray, offset: int) None
Écrit des octets de
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’index de blocblock_num.len(buf)doit être un multiple de la taille de bloc de la 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’octetoffsetdans le 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 via un appel préalable àioctl(6, block_num). Pris en charge uniquement sur les objets créés avec des argumentsstart/lenexplicites.
- ioctl(cmd: int, arg: int) int | None¶
Point d’entrée ioctl standard de
vfs.AbstractBlockDev. Voirvfs.AbstractBlockDev.ioctl()pour la liste complète des valeurs decmd.cmd=5renvoie la taille de bloc de la flash en octets ;cmd=6efface le bloc d’indexarg.