classe Flash – accès à la mémoire flash de stockage intégrée

La classe Flash offre un accès direct, au niveau bloc, à la puce de mémoire flash QSPI externe du RP2040. Le pilote implémente l’interface vfs.AbstractBlockDev, de sorte qu’il peut être passé à vfs.mount() pour des configurations de système de fichiers personnalisées.

La plupart des scripts persistent les données via le système de fichiers monté automatiquement à / et ne construisent jamais directement un objet Flash. Construisez-en un manuellement lorsque vous devez :

  • Monter un système de fichiers non par défaut (par exemple en l’enveloppant avec vfs.VfsFat) sur une partition personnalisée.

  • Lire ou écrire des régions de micrologiciel ou des blocs de données d’usine qui n’appartiennent pas au système de fichiers.

  • Implémenter un format de stockage personnalisé sur la mémoire flash qui contourne la couche du système de fichiers.

Constructeurs

class rp2.Flash Flash

Renvoie l’objet périphérique-bloc singleton Flash adossé à la puce de mémoire flash QSPI du RP2040. Le premier bloc exposé est celui qui suit immédiatement la région du micrologiciel, de sorte que les appelants ne voient que la zone de la puce admissible au système de fichiers.

Méthodes

readblocks(block_num: int, buf: bytearray) None
readblocks(block_num: int, buf: bytearray, offset: int) None

Lit des octets depuis la mémoire flash dans buf. Point d’entrée standard du périphérique-bloc vfs.AbstractBlockDev utilisé par la couche du système de fichiers.

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 mémoire 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 à l’intérieur du bloc block_num. Utilisée par littlefs et d’autres systèmes de fichiers adressables à l’octet.

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

Écrit des octets de buf vers la mémoire flash. Point d’entrée standard du périphérique-bloc vfs.AbstractBlockDev utilisé par la couche du système de fichiers.

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 mémoire 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 à l’intérieur du bloc block_num. 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 ioctl(6, block_num) préalable.

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

Point d’entrée de contrôle standard vfs.AbstractBlockDev. Appelé par la couche du système de fichiers au moment du montage/démontage et à chaque synchronisation. Valeurs cmd reconnues :

  • 1 – initialiser. Renvoie 0 en cas de succès.

  • 2 – désinitialiser. Renvoie 0 en cas de succès.

  • 3 – synchroniser les écritures en attente. Renvoie 0.

  • 4 – renvoie le nombre de blocs de mémoire flash visibles par le système de fichiers.

  • 5 – renvoie la taille de bloc en octets (généralement la taille de secteur de la mémoire flash, 4096).

  • 6 – efface le bloc à l’index arg. Requis avant d’utiliser la forme étendue de writeblocks.

  • 7 – renvoie si le périphérique prend en charge la commande d’effacement de bloc (1 sur RP2040).

Les appelants directs n’utilisent normalement pas cette méthode – le pilote du système de fichiers répartit automatiquement les codes standard une fois que l’objet Flash est monté.