MicroPython évolue régulièrement, avec notamment des fonctionnalités supplémentaires dans la bibliothèque standard, des corrections de bugs, ou des améliorations de performance. Si, comme moi, vous voulez profiter de ces nouveautés sur votre pyboard, il faut mettre à jour le firmware de la carte pour un plus récent qui inclut toutes ces nouveautés.
C’est une procédure simple, qui ne dure que quelques minutes. Cependant, comme c’est assez rare de la faire, avoir un billet sous la main comme pense-bête est utile.
Préparation
Installer l’utilitaire dfu-util
Pour mettre à jour la pyboard, nous nous servirons d’un petit logiciel appelé dfu-util
, qu’il faut donc installer. Le plus simple est d’utiliser le gestionnaire de paquet de votre distribution.
Pour ma part, j’utilise Ubuntu, et il me suffit de lancer la commande suivante :
$ sudo apt install dfu-util
Vous pouvez vérifier que l’installation s’est bien passée avec :
$ dfu-util --version
dfu-util 0.9
Copyright 2005-2009 Weston Schmidt, Harald Welte and OpenMoko Inc.
Copyright 2010-2016 Tormod Volden and Stefan Schmidt
This program is Free Software and has ABSOLUTELY NO WARRANTY
Please report bugs to http://sourceforge.net/p/dfu-util/tickets/
Ici, on voit que j’ai installé la version 0.9. Les versions trop anciennes ont quelques fonctionnalités en moins, mais ça ne devrait pas être gênant pour la mise à jour.
Télécharger la version du firmware souhaitée
Le dernier firmware est disponible depuis la page des téléchargements de MicroPython. Il faut ensuite se rendre sur la page correspondant à votre matériel. J’ai une pyboard v1.1, et je me rends donc sur la page dédiée.
En fonction des cartes, il y a plein de fichiers différents disponibles. Si vous ne savez pas quel fichier exact choisir, faites comme moi : dernière version stable et standard. Pour ma carte, il s’agit en l’occurrence de la version v1.15 stable standard qui date d’avril 2021.
Le matériel nécessaire
Pour flasher, il vous faudra
- votre ordinateur (évidemment) ;
- un câble USB pour connecter la pyboard ;
- un câble pour connecter deux pins adjacentes de la pyboard.
Flasher le nouveau firmware
Démarrer la carte en mode mise à jour
Pour commencer, il faut éviter de parasiter la procédure de mise à jour avec des branchements inutiles. Pour ce faire, débranchez tout ce qui est connecté à votre pyboard.
Ensuite, il faut indiquer à la carte de démarrer dans un mode spécial qui permettra de faire la mise à jour. Pour ce faire, connectez une pin 3V3 avec la pin DFU (qui s’appelle aussi BOOT0 ou X17 sur ma carte) et se trouve juste à côté. L’image ci-dessous montre leur position.
Maintenant, connectez la pyboard en USB. La carte démarre et se met en mode mise à jour. Vous pouvez le constater par l’allumage des LED différent d’un démarrage normal (LED bleue et rouge allumées pour ma part).
On peut maintenant vérifier que dfu-util
trouve bien la carte avec la commande suivante, qui permet de lister les périhpériques visibles (sudo
est obligatoire, sinon une erreur d’accès survient) :
dfu-util -l
La commande renvoie une liste de périphériques avec des lignes qui commencent par Found DFU:
.
(optionnel) Faire une sauvegarde du firmware de la carte
Cette étape est optionnelle. Il est possible de faire une sauvegarde du firmware actuellement présent sur la carte, afin de le restaurer si nécessaire plus tard. Cette étape n’est pas obligatoire, parce qu’il est normalement toujours possible de télécharger une version plus ancienne du firware depuis le site de MicroPython.
La commande est la suivante :
sudo dfu-util --alt 0 --upload pyboard-backup.dat -s:524288
Les arguments correspondent respectivement à la mémoire qu’il faut lire, le nom du fichier avec le contenu de ce qui sera téléchargé depuis la carte (upload), et enfin le chiffre à la fin est une adresse mémoire brute.
La commande prend quelques secondes à s’exécuter. Si tout se passe bien, vous verrez à la fin
Upload [=========================] 100% 524288 bytes
Upload done.
Installer le nouveau firmware
Une fois votre sauvegarde faite, si vous avez choisi d’en faire une, il est temps de mettre à jour la carte !
Lancez la commande suivante :
sudo dfu-util --alt 0 --download pybv11-20210418-v1.15.dfu
La commande met quelques dizaines de secondes à s’exécuter. Si tout se passe bien, vous verrez à la fin
Download [=========================] 100% 14592 bytes
Download done.
parsing element 2, address = 0x08020000, size = 346192
Download [=========================] 100% 346192 bytes
Download done.
done parsing DfuSe file
Déconnecter la carte
Pour finir la procédure :
- Déconnecter la pyboard de l’USB
- Retirer la connexion entre X17 et 3V3.
Vérifier le résultat de la mise à jour
Pour vérifier que la procédure s’est bien passée, redémarrez votre carte (n’oubliez pas de déconnecter le fil entre 3V3 et X17 !) et lancer un interpréteur interactif.
On va demander à la carte des infos sur le système qu’elle fait tourner grâce aux commandes suivantes :
>>> import os
>>> os.uname()
(sysname='pyboard', nodename='pyboard', release='1.15.0', version='v1.15 on 2021-04-18', machine='PYBv1.1 with STM32F405RG')
En particulier, je peux lire release='1.15.0'
, qui montre que la carte tourne bien avec la nouvelle version de MicroPython que je viens d’installer.
Je n’avais pas noté la version précédente, mais c’était une version de fin 2019, j’espère profiter de quelques améliorations et nouvelles fonctionnalités en particulier dans la bibliothèque standard, qui évolue régulièrement.
Ce billet s’inspire très largement de la page du wiki MicroPython sur le sujet. Cette page contient quelques infos supplémentaires que je n’ai pas creusées :
- des informations pour la procédure sous Windows ;
- l’existence d’un DFU écrit en Python et plus rapide que
dfu-util
(si attendre 30 secondes est trop pour vous !) ; - quelques infos sur comment éviter les interférences avec d’autres appareils gérant la mise à jour DFU.
Miniature du billet : logo de MicroPython (source).