[résolu] Arduino Uno R3 planté

Bonsoir,
Oui, le sujet est estampillé "résolu" avant même que j'aie posé la question, car c'est plus pour expliquer "clairement" ce que je viens de faire que je poste ce message.

Il y a quelques jours, mon Uno R3 a brutalement cessé de causer à mon ordinateur.
Quand je le branchait via le cable USB, il s'alimentait, faisait ses quelques clignotements habituels, mais coté PC, c'est comme si je n'avais rien branché.

J'ai "googlé" et trouvé quelques infos sur la façon de reflasher le composant qui gèrer la liaison l'USB, mais les explications étaient assez éparses et cryptiques.
Donc, si vous avez le même souci et êtes dans les mêmes conditions que moi, voila la recette qui a marché pour mon cas, c'est à dire :

  • Uno R3
  • PC sous Linux Fedora

Je n'ai rien inventé, ce qui suit est juste un remix des explications qu'on trouve sur internet, notamment :

[u]/![/u] Bien sur ... #include <a_vos_risques_et_perils.h>

Passer le Uno en "dfu mode"
Pour cela, brancher le Uno sur l'usb puis shunter les pattes de reset du composant pendant une bonne seconde :

La commande lsusb doit alors afficher une line de ce style :

Bus 001 Device 004: ID 03eb:2fef Atmel Corp.

("bus" et "device" dépendent de la prise usb que vous avez utilisé, mais "ID 03eb:2fef" c'est l'identifiant du composant lui même, et pas de l'arduino vers lequel il fait "passe plat".

S'il n'y a pas de ligne qui ressemble à ça, la vérité est ailleurs, je ne peux rien pour vous.

Récupérer le firmware qui va bien : firmware uno r3
Mettre ce fichier au chaud, il va servir plus tard. Mais bien vérifier qu'il est rapatrié correctement (il ne doit contenir que des lignes de chiffres hexa commençant par des ":")
Certaines sont plus courtes (à la fin notamment), pas de panique, c'est normal.

Installer libusb-devel (en étant root)

yum install libusb-devel

Rapatrier les sources de dfu-programmer

git clone https://github.com/dfu-programmer/dfu-programmer.git

Modifier src/arguments.c :
avec votre éditeur de texte préféré, autour des lignes 90, il y a une déclaration

static struct target_mapping_structure target_map

.
Y ajouter (l'emplacement n'a pas d'importance, perso je l'ai mis après l'entrée "at90usb162" puisque c'en est une variante):

   { "at90usb162unor3",tar_at90usb162,     ADC_AVR,   0x2FEF, 0x03eb, 0x04000, 0x1000, BL_TOP,    128, 128, 0x0200 },

Recompiler le tout

./bootstrap.sh
./configure
make
make install

(en étant root pour la dernière instruction)
Vous avez alors la commande dfu_programmer qui est dispo dans /usr/local/bin, avec une "target" pour l'identifiant usb du R3

Vous pouvez vérifier que le composant est toujours vivant et que la commande fonctionne en exécutant :

/usr/local/bin/dfu-programmer at90usb162unor3 get

Ça doit afficher un truc du genre Bootloader Version: 0x20 (32)

Sinon, là aussi, le problème est plus grave, ne faites pas la suite sans vraiment savoir ce que vous faites.

flasher le composant
Jusque là, on risquait pas grand chose. À partir de cette étape, on va vraiment tripoter la mémoire flash, donc soyez bien sur que c'est pas juste le cable usb qui déconne, ou un court circuit par ailleurs ...

En étant root, suivre les 3 étapes suivantes :

Vider la mémoire flash du composant (ça .. ça fait peur !)

/usr/local/bin/dfu-programmer at90usb162unor3 erase

(j'ai vraiment hésité avant de taper sur "entrée" ...)

Installer le nouveau

/usr/local/bin/dfu-programmer at90usb162unor3 flash Arduino-COMBINED-dfu-usbserial-atmega16u2-Uno-Rev3.hex --suppress-bootloader-mem

Faire un reset du composant :

/usr/local/bin/dfu-programmer at90usb162unor3 reset

Débrancher puis rebrancher le Uno
Cette fois lsusb doit lister ça :

Bus 001 Device 006: ID 2341:0043 Arduino SA Uno R3 (CDC ACM)

Si oui, c'est gagné !
Sinon ... heu ... faites le 112 :frowning: