Annoncés au début de l'été, les Raspberry Pi 4 commencent à être utilisés par de nombreux utilisateurs dont certains de nos clients. Malheureusement, les firmwares actuels des Raspberry Pi 4 ont un bug qui empêche nos modules de fonctionner correctement. Cet article va vous montrer comment mettre à jour votre Raspberry Pi et corriger ce bug.
TL;DR
Si vous êtes juste intéressé par la solution, voici les 4 commandes à lancer sur votre Raspberry Pi 4 pour fixer le problème :
sudo apt-get update sudo apt-get install rpi-eeprom sudo rpi-eeprom-update -a sudo reboot
Le bug
Dans certaines conditions, le Raspberry Pi 4 perd des paquets USB envoyés par un périphérique USB. Ce problème affecte systématiquement nos modules mais probablement d'autres périphériques USB.
Pour être plus précis, les paquets USB sont correctement transmis entre les modules Yoctopuce et le contrôleur USB du Raspberry Pi, mais ensuite dans certains cas les paquets étaient tout simplement ignorés. En conséquence, l'application qui utilise un module Yoctopuce n'arrive pas à communiquer correctement avec celui-ci.
Heureusement, comme nous allons le voir, il y a une solution.
Les symptômes
Pour les VirtualHubs ou les librairies de programmation qui sont antérieurs à la version 1.10.37780 (10 octobre 2019), les modules Yoctopuce ne sont pas correctement détectés et n'apparaissent jamais dans la liste des modules disponibles. Un message "Closing partially opened device XXXXX" apparaît plusieurs fois dans les logs.
A partir de la version 1.10.37780, nous avons ajouté un workaround qui permet de fonctionner en mode dégradé. C'est-à-dire que les paquets USB sont envoyés plusieurs fois jusqu’à ce que l'application quittance le paquet. Dans ce cas, ces modules Yoctopuce sont utilisables par le VirtualHub et les librairies de programmation mais les communications avec le module sont très lentes.
Quand ce mode dégradé est activé, un message de log "WARNING: Old boot EEPROM of Raspberry Pi 4 contains a bug that affects USB performance. Try to update boot EEPROM with command "sudo rpi-eeprom-update -a" est affiché.
Le message qui indique que la communications fonctionne en mode dégradé
Si vous êtes dans l'une de ces deux situations, c'est que vous avez une version du bootloader du Raspberry Pi qui a un bug et il faut le mettre à jour.
La solution
Au jour d'aujourd'hui, les Raspberry Pi 4 ont par défaut un vieux bootloader qui contient ce bug USB. Ce bug a été fixé dans une version plus récente (v0137ab) mais nous ne savons pas quand il sera déployé en production.
Il faut donc mettre à jour le bootloader du Raspberry Pi manuellement. Pour ce faire, il faut tout d’abord installer le package rpi-eeprom à l'aide de l'utilitaire apt-get.
sudo apt-get update sudo apt-get install rpi-eeprom
Un fois ce package installé, il est possible de vérifier si le bootloader est à jour l'aide de la commande rpi-eeprom-update.
pi@raspberrypi:~ $ sudo rpi-eeprom-update BOOTLOADER: up-to-date CURRENT: Tue 10 Sep 10:41:50 UTC 2019 (1568112110) LATEST: Tue 10 Sep 10:41:50 UTC 2019 (1568112110) VL805: update required CURRENT: 00013701 LATEST: 000137ab pi@raspberrypi:~ $
Si le firmware installé est plus ancien que 000137ab, il faut le mettre à jour. Pour ce faire, il faut utiliser la même commande mais avec l'option -a et redémarrer le Raspberry Pi.
La commande sudo rpi-eeprom-update -a met à jour le firmware.
pi@raspberrypi:~ $ sudo rpi-eeprom-update -a *** INSTALLING EEPROM UPDATES *** BOOTLOADER: up-to-date CURRENT: Tue 10 Sep 10:41:50 UTC 2019 (1568112110) LATEST: Tue 10 Sep 10:41:50 UTC 2019 (1568112110) VL805: update required CURRENT: 00013701 LATEST: 000137ab EEPROM updates pending. Please reboot to apply the update. pi@raspberrypi:~ $ sudo reboot
Une fois ce nouveau firmware installé, les modules Yoctopuce fonctionnent correctement.
Pour conclure
Les Raspberry Pi sont des bonnes machines très pratiques, mais chaque nouvelle itération apporte son lot de bugs qui sont corrigés par la suite.
Comme nous l'avons vu, le Raspberry Pi 4 ne fait pas exception à la règle, mais le fix est déjà disponible et est relativement facile à appliquer.
Pour l'instant, nous n'avons pas détecté d'autre problème, mais nous n'avons pas beaucoup utilisé cette version. Si nous trouvons d'autres problèmes, nous mettrons à jour cette page.
Quelques liens utiles
- Le bug report : https://github.com/raspberrypi/linux/issues/3259#
- La doc de rpi-eeprom-update :
https://www.raspberrypi.org/documentation/hardware/raspberrypi/booteeprom.md - Les firmware disponibles : https://github.com/raspberrypi/rpi-eeprom
EDIT: A l'usage on s'est rendu compte que si ce firmware améliore nettement la situation, il ne règle pas totalement le problème :-(