espflash — Programmateur de micrologiciel pour le programme d’amorçage ROM de l’ESP32¶
Ce module fournit une implémentation minimale de ESPFlash qui communique avec le programme d’amorçage ROM de l’ESP32 via une UART. Il est destiné aux mises à jour in-system du micrologiciel de l’ESP32 sur les modules compagnons (par exemple, le module U-blox NINA-W10 utilisé sur les cartes Arduino), et ne remplace pas l’utilitaire complet esptool. Les fonctionnalités avancées (chargeur stub, autres puces ESP, deflate, démarrage sécurisé, etc.) ne sont volontairement pas prises en charge.
Le pilote bascule RESET et GPIO0 pour mettre l’ESP32 en mode téléchargement, puis émet des commandes encadrées en SLIP pour lire la taille de la mémoire flash, configurer l’interface SPI, écrire l’image du micrologiciel et la vérifier au moyen d’une empreinte MD5.
Exemple pour l’Arduino Nano RP2040 Connect (la seule carte prise en charge par OpenMV où espflash est actuellement figé dans le micrologiciel). Les broches de réinitialisation et de boot-strap du NINA-W102 sont respectivement les GPIO 3 et GPIO 2 du RP2040, et l”UART0 du NINA est câblée à l”UART1 du RP2040 (TX = GPIO 8, RX = GPIO 9):
from machine import Pin, UART
from espflash import ESPFlash
reset = Pin(3, Pin.OUT) # NINA RESET
gpio0 = Pin(2, Pin.OUT) # NINA GPIO0
uart = UART(1, 115200, timeout=1000)
esp = ESPFlash(reset, gpio0, uart)
esp.bootloader()
esp.set_baudrate(921600)
size = esp.flash_read_size()
esp.flash_attach()
esp.flash_config(size)
esp.flash_write_file("NINA_FW.bin")
esp.flash_verify_file("NINA_FW.bin")
esp.reboot()
class ESPFlash¶
- class espflash.ESPFlash(reset: 'machine.Pin', gpio0: 'machine.Pin', uart: 'machine.UART', log_enabled: bool = False)¶
Construit un objet
ESPFlashqui pilote le programme d’amorçage ROM de l’ESP32.reset est une instance
machine.Pinconnectée à la ligneRESETde l’ESP32, configurée en sortie.gpio0 est une instance
machine.Pinconnectée à la ligneGPIO0de l’ESP32, configurée en sortie.uart est une instance
machine.UARTconnectée aux brochesUART0de l’ESP32. Elle doit être initialisée à 115200 bauds avec un délai d’attente de lecture non nul.log_enabled active la journalisation détaillée des trames SLIP échangées avec le programme d’amorçage. Utile uniquement pour le débogage.
Le constructeur tentera d’importer
hashlib. Sihashlib.md5est disponible, l’empreinte MD5 calculée au fil de l’eau et utilisée parESPFlash.flash_verify_file()sera calculée automatiquement pendant l’écriture.- set_baudrate(baudrate: int, timeout: int = 350) None¶
Change le débit en bauds de l’UART du programme d’amorçage.
baudrate est le nouveau débit en bauds vers lequel basculer. S’il diffère du débit en bauds actuellement actif, une commande
CHANGE_BAUDRATEest émise vers le programme d’amorçage avant que l’UART locale ne soit reconfigurée.timeout est réservé et actuellement inutilisé.
N’a aucun effet si l’objet UART sous-jacent n’implémente pas de méthode
init().
- bootloader(retry: int = 6) bool¶
Pilote
RESETetGPIO0pour entrer en mode téléchargement ROM de l’ESP32 et se synchroniser avec le programme d’amorçage.retry est le nombre de tentatives de réinitialisation/synchronisation avant d’abandonner.
Renvoie
Trueen cas de succès, sinon lève uneException.
- flash_read_size() int¶
Lit l’identifiant JEDEC de la mémoire flash SPI et renvoie la taille de la mémoire flash en octets.
Lève une
Exceptionsi les bits de taille signalés sont hors de la plage attendue0x12-0x19.
- flash_attach() None¶
Se rattache à la mémoire flash SPI. Doit être appelée une fois après
bootloader()et avant toute opération de lecture/écriture en mémoire flash.
- flash_config(flash_size: int = 2 * 1024 * 1024) None¶
Configure les paramètres de la mémoire flash SPI.
flash_size est la taille totale de la mémoire flash en octets, généralement la valeur renvoyée par
flash_read_size().
Les tailles de bloc, de secteur et de page sont fixées respectivement à 64 KiB, 4 KiB et 256 octets.
- flash_write_file(path: str, blksize: int = 0x1000) None¶
Écrit une image de micrologiciel en mémoire flash en commençant à l’offset 0.
path est le chemin dans le système de fichiers du binaire de micrologiciel à programmer.
blksize est la taille en octets de chaque bloc de données envoyé au programme d’amorçage. Doit être un multiple de la taille de secteur.
Le dernier bloc est complété avec
0xFFjusqu’à atteindre une taille blksize complète. Si la prise en charge de MD5 est disponible, l’empreinte MD5 calculée au fil de l’eau est mise à jour pendant l’écriture afin queflash_verify_file()puisse être appelée sans arguments.
- flash_verify_file(path: str, digest: bytes | None = None, offset: int = 0) None¶
Vérifie le contenu de la mémoire flash par rapport à un fichier de micrologiciel.
path est le chemin dans le système de fichiers du binaire de micrologiciel de référence ; sa taille détermine le nombre d’octets à vérifier.
digest est une empreinte MD5 optionnelle, pré-calculée et encodée en hexadécimal, du fichier. Si
None, l’empreinte calculée lors du plus récent appel àflash_write_file()est utilisée.offset est l’offset en octets dans la mémoire flash à partir duquel commence la vérification.
Lève une
Exceptionsi aucune empreinte n’est disponible ou si le contenu de la mémoire flash ne correspond pas à l’empreinte de référence.