Mettre à jour le firmware USB de l'Arduino Uno et Mega

Les Arduino récents, Uno et Mega, comportent une puce Atmel Mega8U2 qui fait office de convertisseur USB / Serie.

Récemment, je suis tombé sur un bug lié à cette puce Mega8U2, qui visiblement ne se produit que sur les systèmes GNU/Linux. Les symptômes sont les suivants :

  • Le périphérique /dev/ttyACM0 ne répond plus,
  • L'IDE Arduino freeze pendant plusieurs secondes,
  • Il faut parfois plus de 4-5 fois pour réussir à programmer l'Arduino

En parcourant les forums, je suis tombé sur ce topic, en anglais, où la solution à ce problème est donné par stimmer. Je vais donc traduire en français la marche à suivre pour la résolution, en espérant que cela puisse servir à d'autres !

ATTENTION ! Je vous encourage à bien vous renseigner sur la procédure, car elle peut être risquée pour un néophyte.

  1. Préparation de la carte : sur l'Arduino Uno, il faut souder une résitance de 100 kΩ aux bornes des pastilles entourées en rouge sur la photo suivante (au dos de la carte) :

    Arrière de l'arduino
  2. Installer le paquet dfu-programmer qui va permettre de reprogrammer la puce :

    # aptitude install dfu-programmer
    
  3. Télécharger le binaire correspondant à votre carte (Uno ou Mega) sur le site suivant : https://github.com/arduino/Arduino/tree/new-extension/hardware/arduino/firmwares/arduino-usbserial (clic sur le fichier, puis clic droit sur le bouton "Raw" et Enregistrer Sous) : * Arduino-usbserial-uno.hex pour l'Arduino Uno * Arduino-usbserial-mega.hexpour l'Arduino Mega

  4. Brancher l'Arduino au PC avec le câble USB.

  5. Faire contact entre les deux pins entourées en rouge sur la photo suivante :

    Arduino de face

    Cette opération permet de faire un reset de la puce Mega8U2. L'Arduino ne doit alors plus apparaître dans /dev/ :

    # ls /dev/ttyACM*
    

    Ne doit rien afficher.

  6. Ensuite, il n'y a plus qu'à flasher la puce avec les commandes suivantes (à faire en root) :

    # dfu-programmer at90usb82 erase
    # dfu-programmer at90usb82 flash --debug 1 Arduino-usbserial-uno.hex
    Validating...
    4058 bytes used (99.07%)
    # dfu-programmer at90usb82 reset
    
  7. Il n'y a alors plus qu'à débrancher puis rebrancher l'Arduino, et tous les bugs cités en introduction seront normalement résolus !

[Sources]

Commentaires

Pour commenter cet article, merci de m'écrire directement par mail : mailto