Mettre à jour MicroPython sur une pyboard sous Linux

Comment avoir une version plus récente du firmware

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 :

  1. Déconnecter la pyboard de l’USB
  2. 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).

4 commentaires

Ce n’est pas seulement un microcontrôleur, c’est une carte de prototypage complète. Pour ce prix-là, on a un microcontrôleur basé sur un cœur Cortex-M4 32-bits et plein d’autres choses qui font ce qu’est une carte très confortable pour mes quelques projets actuels. Plutôt que paraphraser, je cite la boutique officielle :

  • STM32F405RG microcontroller
  • 168 MHz Cortex M4 CPU with hardware floating point
  • 1024KiB flash ROM and 192KiB RAM
  • Micro USB connector for power and serial communication
  • Micro SD card slot, supporting standard and high capacity SD cards
  • 3-axis accelerometer (MMA7660)
  • Real time clock with optional battery backup
  • 24 GPIO on left and right edges and 5 GPIO on bottom row, plus LED and switch GPIO available on bottom row
  • 3x 12-bit analog to digital converters, available on 16 pins, 4 with analog ground shielding
  • 2x 12-bit digital to analog (DAC) converters, available on pins X5 and X6
  • 4 LEDs (red, green, yellow and blue)
  • 1 reset and 1 user switch
  • On-board 3.3V LDO voltage regulator, capable of supplying up to 250mA, input voltage range 3.6V to 16V
  • DFU bootloader in ROM for easy upgrading of firmware Source : https://store.micropython.org/product/PYBv1.1

Dans sa définition, elle semble assez proche de l’Arduino Due, qui coûte sensiblement le même prix, mais je connais mal. On trouve évidemment des clones moins chers.

J’ai regardé du côté du Raspberry Pico :

  • RP2040 microcontroller
  • 133 MHz Dual-core Arm Cortex M0+ processor
  • 264KB of SRAM, and 2MB of on-board Flash memory
  • USB 1.1 with device and host support
  • 26 × multi-function GPIO pins
  • 2 × SPI, 2 × I2C, 2 × UART
  • 3 × 12-bit ADC
  • 16 × controllable PWM channels
  • 8 × Programmable I/O (PIO) state machines for custom peripheral support

Certes, ça manque de LED, ou de MicroSD, mais ça coûte 4€20, et programmable en MicroPython (ou C/C++, mais c’est pas le sujet). Du coup, ça fait un peu mal à la comparaison :/ Les deux composants que je vois manquer, ce serait les convertisseurs DAC et le LDO.

Mais du coup, si je comprends bien tu prototypes avec, et si tu as un projet que tu souhaites passer en "final", tu achètes un autre microcontrôleur pour remplacer la Pyboard, c’est ça ?

+0 -0

Sur le genre de cartes dont on parle, c’est le microcontrôleur qui fait l’essentiel du prix. On peut aussi gagner beaucoup en faisant de la production de très grande série.

Je pense que la Raspberry Pico est produite en grande série, ce qui peut faire des économies massives et permettre un prix attractif. Le choix d’avoir un microcontrôleur custom (R2040) peut être lié au nombre d’exemplaires produits. Avec une puce custom, on peut intégrer pas mal de choses à l’intérieur de la puce et avoir ainsi beaucoup de fonctionnalités avec des prix bas (le silicium ne coûte presque rien, mais l’outillage pour une carte custom oui). Aussi, c’est un cœur peu puissant à l’intérieur, un Cortex M0, cœur le moins puissant et le plus économe en énergie de la gamme Cortex M, qui est probablement peu cher.

En comparaison la pyboard est probablement produite en beaucoup plus petite série, le cœur est un Cortex M4, qui est beaucoup plus puissant et probablement beaucoup plus cher.


Mais du coup, si je comprends bien tu prototypes avec, et si tu as un projet que tu souhaites passer en "final", tu achètes un autre microcontrôleur pour remplacer la Pyboard, c’est ça ?

Toutes les petites cartes comme ça sont des cartes de prototypage ou de hobbyiste dans le sens où si tu voulais faire un produit en plus grand nombre, tu ajusterais ton hardware à ton application et au nombre d’exemplaires de ta production, pour avoir le plus juste prix.

Pour ma part, j’ai envie d’avoir une carte qui peut me faire plusieurs projets. Je fais un projet avec et quand j’en veux plus, je le démonte et utilise la carte pour autre chose.

+1 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte