Arduino: probleme de communication

Domorizon

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

 

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

Translate »