Arduino: probleme de communication

Parfois, tout ne se passe pas aussi bien qu’on le souhaiterait !
Par exemple, ce weekend, j’ai voulu aller un peu trop vite en branchant ma carte Ethernet WIZNet directement sur ma carte Arduino Mega 2560 comme je le fais habituellement… Et d’un seul coup, impossible d’envoyer les nouveaux programmes vers ma carte Arduino !!!

 

avrdude: ser_recv(): programmer is not responding
avrdude: stk500_recv(): programmer is not responding

avrdude: stk500v2_getsync(): timeout communicating with programmer
avrdude: stk500v2_ReceiveMessage(): timeout

 

C’est moche, très moche… impossible même d’envoyer le programme d’exemple « blink » fourni dans l’IDE Arduino; j’ai beau essayer la série des versions 1.0.x ou la dernière release de l’IDE, il est toujours impossible d’envoyer le programme.

 

Je me lance alors dans une recherche sur Internet; on trouve de tout: de celui qui n’a pas correctement choisi son type de carte ou de port de communication dans l’IDE, qui se trompe dans le port sous Linux ou MacOS, d’un pilote de port USB/Série sous Windows qui ne serait plus bon, etc… Au final, c’est tout simplement une déprogrammation du chipset AVR qui sert à recevoir les commandes série pour programmer votre Arduino.

 

Quelques explications:

1 – Schéma du Mega 2560 et son port série

Schéma cablage Arduino Mega 2560
Schéma câblage Arduino Mega 2560

La connexion USB vers le Mega2560 se fait au travers un deuxième AVR (AVR 8U2 ou 16U2 pour une carte UNO R2/R3 ou un Mega) : son rôle est de transformer le « signal série » reçu du PC pour le renvoyer vers l’entrée série du Mega2560 (port série « 0 »). Le Mega ne sait pas gérer une entrée USB, cela est donc reporté sur un AVR qui sait le faire et ici, dans notre cas, il s’agit d’un « Mega8U2 » (NB: prenez une loupe et regardez le nom du chipset situé juste en dessous du port USB de la carte).

Toutes les cartes Arduino ne sont pas dans ce type de schéma : certaines possèdent leur port série connecté sur un « vrai » port série tandis que d’autres sont capable de gérer un port USB en direct avec le PC/MAC.

 

2 – La raison au final…

La raison de la déprogrammation semble liée à des problèmes d’alimentation de la carte Arduino; le Blog Arduino 103 apporte un début de réponse en indiquant qu’une alimentation un peu trop faible, permet la déprogrammation du premier AVR.

C’est un peu ce qui s’est passé chez moi : j’ai connecté ma carte Ethernet sur ma carte Arduino sans une alimentation supplémentaire pour l’aider dans son fonctionnement et j’ai envoyé un programme vers la carte… ça a fonctionné… puis un autre… et là, ce fut la « cata » : le problème d’alimentation apparaît et provoque un changement dans le boot dans de l’AVR qui sert de passerelle.

 

3 – La solution pour résoudre le problème.

Pour reprogrammer le 1er AVR de notre carte Arduino, il faut un certain nombres d’éléments:

Le mode DFU de la carte Arduino est un peu comme celui des iPhones ou autre mobile sous Android : on met la carte dans un mode qui va lui permettre de se mettre dans un mode « récupération« ; dans notre cas, on va restaurer le firmware situé dans le 1er AVR.

Mais pour activer le mode DFU, il faut avant tout faire quelques manipulations sur la carte visée : elles diffèrent entre la carte UNO version 2 & 3 et la carte MEGA !!!

Tous les firmwares  de boot pour ces AVR « passerelle » sont livrés avec l’installation de l’IDE Arduino (C:\Program Files (x86)\Arduino\hardware\arduino\avr\firmwares\atmegaxxu2)

Sur Arduino 2560, pour passer la carte en mode DFU, il faut réaliser quelques « court circuits« ; commencer brancher la carte sur le port USB puis par strapper les 2 points rouge (en mettant un jumper par exemple sur les connecteurs de l’autre face de la platine), ce qui provoque la disparition du port COM dans le gestionnaire de périphérique sous Windows.

Puis strapper les 2 points vert quelques secondes; relacher d’abord les points (rien ne se passe dans le « Gestionnaire de périphérique » Windows) vert puis les points rouges : c’est là qu’apparaitra un nouveau périphérique dénommé « Atmel USB Devives » / « AT90USB82 » (image ci-dessous) dans le « Gestionnaire de périphériques » sous Windows.

Nota :

Si périphérique n’apparaît pas correctement, il faut alors installer le pilote Windows du mode DFU de la carte indiqué ci-dessus; voir dans l’archive de l’IDE Arduino.

 

Screen Shot 08-02-14 at 01.51 AMLe périphérique installé, on lance alors le programme FLIP d’Atmel; on sélectionne le périphérique (Menu « Devices » puis « Select ») : ici on choisi le module qui est apparu dans le « Gestionnaire de périphérique » sous Windows: il s’agit dans notre cas du « AT90USB82 » car le chipset sur la carte est un 8U2 !

Screen Shot 08-02-14 at 02.06 AM

Il faut ensuite ouvrir le port de communication: menu « Settings« , « Communications » puis « USB » ou représentant une prise USB sur l’interface…

Screen Shot 08-02-14 at 02.06 AM 002

… puis on valide l’ouverture du port. Screen Shot 08-02-14 at 02.06 AM 003Toutes les icônes grisées prennent des couleurs 😉  et la barre d’état en bas à droite, indique « USB ON » confirme l’ouverture du port, prêt à recevoir la transmission d’informations.

Screen Shot 08-02-14 at 02.21 AM

A cet instant, les LED Tx & Rx de la carte s’allument toutes les deux.

Il ne reste plus qu’à sélectionner le firmware au format « .hex » via le menu « File » puis « Load HEX File » pour ouvrir le sélecteur de fichier. Sélectionner le fichier qui vous convient :

  • Arduino-usbserial-mega.hex : pour une carte Mega avec un chipset 8U2
  • Arduino-usbserial-uno.hex : pour une carte Uno avec un chipset 8U2
  • Arduino-usbserial-atmega16u2-Mega2560-Rev3.hex : pour une carte Mega avec un chipset 16U2
  • Arduino-usbserial-atmega16u2-Uno-Rev3.hex : pour une carte Uno avec un chipset 16U2

Tous ces firmwares sont disponible sur le GitHub d’Arduino ou dans les répertoires de l’installation de l’IDE Arduino (sur PC Windows : C:\Program Files (x86)\Arduino\hardware\arduino\avr\firmwares\atmegaxxu2\arduino-usbserial)

Cliquez sur le bouton « RUN » et ensuite, tout vas très vite: le firmware est transmis dans le canal (USB) de communication ouvert juste avant.

Il ne reste plus qu’à déconnecter la carte Arduino et à la rebrancher: un nouveau port de communication sous Windows apparait (NB: sous Linux, c’est toujours le même nom de port COM) et la carte est à nouveau fonctionnelle.

 

Sources :

  • https://www.arduino.cc/en/Hacking/DFUProgramming8U2
  • https://arduino103.blogspot.fr/2013/11/arduino-mega2560-reprogrammer-le.html

 

Comments

No comments yet. Why don’t you start the discussion?

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.