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.AbstractBlockDev pour 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 bloc 0x100. 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 octets start (par défaut 0) sur len octets (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 bloc block_num. len(buf) doit être un multiple de la taille de bloc de la 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 dans le bloc block_num. len(buf) n’a aucune contrainte d’alignement. Pris en charge uniquement sur les objets créés avec des arguments start / len explicites, 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 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’index de bloc block_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)) : écrit len(buf) octets – pas nécessairement un nombre entier de blocs – à partir de l’octet offset dans le 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 via un appel préalable à ioctl(6, block_num). Pris en charge uniquement sur les objets créés avec des arguments start / len explicites.

ioctl(cmd: int, arg: int) int | None

Point d’entrée ioctl standard de vfs.AbstractBlockDev. Voir vfs.AbstractBlockDev.ioctl() pour la liste complète des valeurs de cmd. cmd=5 renvoie la taille de bloc de la flash en octets ; cmd=6 efface le bloc d’index arg.