ARDUINO : problèmes de téléversement

Dans ce tuto nous allons essayer de recenser toutes les sources possibles de problèmes pendant le téléversement d'une carte ARDUINO.
J'ai essayé de regrouper ici une certaine quantité de problèmes rencontrés sur le forum. Ce n'est certainement pas complet mais cela pourrait le devenir avec le temps.

1. Le principe
Lors du téléversement L'IDE ARDUINO affiche le message "Téléversement ...".
Ensuite les opérations suivantes s'enchaînent :

reset de la carte par le fil DTR de la liaison série
le bootloader de l'ARDUINO se met à l'écoute de la ligne série
l'IDE envoie le fichier .hex au bootloader
celui-ci extrait les données binaires de chaque message et les écrit dans la mémoire FLASH
le bootloader lance l'application

Trop de débutants confondent compilation et téléversement. Le code C n'est pas envoyé à l'ARDUINO tel quel, il est d'abord compilé pour fabriquer un fichier en langage machine, dépendant du processeur utilisé.
Dans un premier temps, l'IDE affiche "Compilation du croquis". S'il y a un problème dans votre code, le fichier .hex ne sera pas généré et le téléversement n'aura pas lieu.
Ensuite, si la compilation s'est bien passée, il affiche "Téléversement ...", et c'est à ce moment que les ennuis peuvent commencer.

2. Les drivers USB
Selon l'OS que vous utilisez, il vous faudra installer on non un driver pour le convertisseur USB / série implanté sur la carte.
Selon l'origine le convertisseur peut être de différents types :

FT232RL
CP2102
CH340G
ATMEGA8 (anciennes version de UNO ou MEGA)
ATMEGA16U2
etc.

2.1. Windows
Il faut absolument identifier le convertisseur et utiliser le driver adapté. Pour une NANO par exemple, celui-ci est situé sous la carte.

Il y a beaucoup de tutos sur le WEB qui expliquent cette opération, CELUI-CI par exemple.

Si votre carte possède un convertisseur CH340G, il faut télécharger le driver ICI. Il y a aussi des tutos, dont CELUI-CI.

Après l'installation, en branchant la carte ARDUINO, un port série supplémentaire doit apparaître dans le "Gestionnaire de Périphériques".
En débranchant la carte le port doit disparaître.

2.2. LINUX
Les possesseurs d'un système LINUX n'auront pas à installer de driver, car la majeure partie de ceux-ci font partie de la distribution.
Il suffit de vérifier avec dmesg que le branchement de la carte ARDUINO provoque la création d'un nouveau port de communication.

[11319.753230] usb 2-1.1.1: new full-speed USB device number 12 using ehci-pci
[11319.846506] usb 2-1.1.1: New USB device found, idVendor=1a86, idProduct=7523
[11319.846512] usb 2-1.1.1: New USB device strings: Mfr=0, Product=2, SerialNumber=0
[11319.846515] usb 2-1.1.1: Product: USB2.0-Serial
[11319.846943] ch341 2-1.1.1:1.0: ch341-uart converter detected
[11319.848601] usb 2-1.1.1: ch341-uart converter now attached to ttyUSB1

A la déconnexion, avec dmesg vous verrez ceci :

[11484.934167] usb 2-1.1.1: USB disconnect, device number 12
[11484.934444] ch341-uart ttyUSB1: ch341-uart converter now disconnected from ttyUSB1
[11484.934479] ch341 2-1.1.1:1.0: device disconnected

Il se peut que l'IDE ne parvienne pas à ouvrir le port par manque de privilèges. Suivez ces INSTRUCTIONS.

2.3. La suite
Tant que le port n'apparaît pas dans le "Gestionnaire de Périphériques" Windows ou dans les messages affichés par dmesg, c'est tout à fait inutile d'aller plus loin.
Cette étape est essentielle et obligatoire.

4 Likes

3. Les problèmes

3.1. Les broches de la carte
Certaines cartes dont la NANO, sont livrées avec deux barrettes de broches mâles. Ces barrettes doivent être soudées proprement sur la carte.
Cela ne devrait pas gêner le téléversement si les elles ne le sont pas, mais l'exécution du code pourrait poser problème.
Certains ont déjà essayé de faire tourner une application avec les barrettes enfichées dans une breadboard et la carte simplement posée dessus, sans soudures. Et ce n'est pas une blague, c'est malheureusement arrivé !

3.2. Le type de carte et le processeur
Le bon type de carte doit être sélectionné dans le menu "Outils / Type de carte".
Pour certaines cartes le processeur peut être choisi dans le menu "Outils / Processeur".

Cas particulier : avec l'ARDUINO NANO vous avez le choix entre :

ATmega328p
ATmega328p (Old Bootloader)
ATmega168

Le choix "ATmega328p (Old Bootloader)" correspond à une ancienne version du bootloader. Si en choisissant "ATmega328p" le téléversement ne fonctionne pas choisissez "ATmega328p (Old Bootloader)".

L'ARDUINO PRO MINI se décline en quatre versions :

ATmega328p (5V, 16MHz)
ATmega328p (3.3V, 8MHz)
ATmega168 (5V, 16MHz)
ATmega168 (3.3V, 8MHz)

Choisissez bien l'option qui correspond à la carte que vous avez acheté. Si par exemple dans votre code vous ouvrez la ligne série à 115200 baud, que vous avez choisi l'option 115200 dans le moniteur série et que vous voyez des caractères étranges s'afficher, il est probable que la fréquence choisie pour le processeur ne soit pas la bonne.

3.3. L'USB
Le port de communication doit être choisi dans le menu "Outils / Port".
Il peut arriver que vous ayez plusieurs cartes branchées et que le port choisi ne corresponde pas à la carte voulue.
Vérifiez en branchant et débranchant la carte que le port choisi est le bon.
Lorsque l'on débute il vaut mieux travailler avec une seule carte à la fois.

Une source de problème peut être le câble USB. Utilisez un câble court et en bon état. Les cas de panne due au câble sont plutôt rares.

Par contre une source d'erreur récurrente est l'utilisation de câbles de recharge de téléphone portable ou de balladeur, donc 2 fils, sans les deux fils de données. C'est ballot ...

3.4. La ligne série
Le convertisseur USB / série envoie les caractères à transmettre à la ligne série de l'ATmega.
Les deux pins D0 (RX) et D1 (TX) ne doivent pas être reliées à d'autres composants ou modules (Bluetooth par exemple) pendant le téléversement.
Certaines cartes, la DUE par exemple, possèdent un port USB dédié. Utiliser de préférence ce port dit "Native USB Port".

3.5. Logiciels annexes
Certains logiciels peuvent bloquer l'accès au port série. Fermez tous les programmes susceptibles d'ouvrir les ports de communication, les terminaux série en particulier.
Certains dongles peuvent également poser problème, y compris certains dongles de souris / clavier. Essayez en les retirant.

3.6. Le RESET
Sur certaines cartes, le RESET automatique peut ne pas fonctionner, ou ne pas fonctionner avec certains PC.
Appuyez sur le bouton RESET un peu avant que le téléversement ne commence.

3.7. La panne
Vous avez peut effectué une manipulation précédente (erreur de tension d'alimentation par exemple) qui a détruit le convertisseur USB ou le processeur.
Si l'un des deux composants chauffe, il est probablement mort.
Cela vous incitera certainement à ne jamais commander une seule carte, sauf pour les modèles dont le prix est élevé.

3.8. Le bootloader
Il peut arriver que le bootloader soit détruit accidentellement à cause par exemple d'une chute lente de l'alimentation et des fuses mal programmés.

Dans un premier temps, il est judicieux de déterminer si c'est réellement la cause du problème. Lorsque vous appuyez sur le bouton RESET, la LED connectée sur la pin 13 doit s'allumer brièvement. Si ce n'est pas le cas, le bootloader est absent.

Il est possible de reprogrammer le bootloader en utilisant une autre carte UNO par exemple. Cette opération s'effectue en reliant le bus SPI de la UNO au connecteur ICSP de la carte à reprogrammer :

Un tutoriel sur ce forum.

Le tutoriel officiel ICI.

On peut également utiliser un programmateur USBasp.

Sous LINUX, j'ai écrit un tuto ICI.

Il y a CELUI-CI aussi.

4. Travailler sans le bootloader
Le bootloader ARDUINO n'est pas absolument nécessaire. On peut fort bien s'en passer en utilisant un programmateur comme celui décrit dans le paragraphe précédent.

Cela permet de gagner 2K en mémoire FLASH.
Le port USB de votre carte pourra être connecté au PC pour bénéficier du moniteur série (console).

Dans l'IDE ARDUINO, choisir dans le menu Outils / Programmateur : "USBasp" ou "Arduino as ISP" ou un autre programmateur de votre choix.
Dans le menu Croquis / Téléverser avec un programmateur

Pour revenir à la situation "normale", avec bootloader et téléversement par l'USB, choisir dans le menu Outils / Graver la séquence d'initialisation.

5. Références
Le guide officiel
La version BLOG

@+

Très bon tuto, qui j'espère évitera des messages à répétition...

1 Like

C'est justement ce que je recherche, éviter de répéter à l'infini les mêmes phrases et les mêmes conseils.

merci lesept
@+

1 Like

:slight_smile: belle initiative , Bravo et merci :slight_smile:

1 Like

Cela me trottait dans la tête depuis un moment.

merci dfgh
@+

@jfs
Jean-françois, ne pourrait-on pas épingler ce post en tête des tutoriels ou même à la racine du forum français?

Salut, et merci encore Hbachetti

J'ai rien lu de ce qui précédè qui ne soit aussi simple que ce qui m'est arrivé à ce sujet.

Et c'est très simple.

J'ai réalisé mon tuto au fablab de ma ville. Succès !
J'arrive chez moi ! paf ! le pc ne reconnais plus ma carte arduino ! Disparue la carte !

J'ai vaqué sur le net ! lu mille posts ! milles blogs ! J'ai regardé sous toutes les pierres !

C'était le câble ! un câble usb pc-arduino se dessoude très facilement et est finalement la partie la moins fiable dans la réalisation d'un tuto.

A bonne entendeur

salut.

Le câble dessoudé ?
ou la prise USB sur la carte ?

On ne le saura jamais ::slight_smile:

Bonjour à vous , j'ai besoin d'aide s.v.p. :
Je viens de recevoir mon arduino uno wifi chinois, c’est une carte D1 wifi avec un processeur 340G.
Je ne sais pas téléverser de sketch j’ai essayer blink ,il y a ce message dans la console :

( Arduino : 1.8.1 (Windows 10), Carte : "Arduino Uno WiFi"

C:\Program Files (x86)\Arduino\arduino-builder -dump-prefs -logger=machine -hardware C::--
………………………………………………………………………………………………………
……………………………………………………………………………………………………….
ect..
et finalement :

avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0x80

avrdude done. Thank you.

Problème de téléversement vers la carte. Voir http://www.arduino.cc/en/Guide/Troubleshooting#upload pour suggestions. )

Il y a bien dans le gestionnaire de périphériques USB SERIAL CH340(COM4)

J’ai même essayé un nouveau chargement sur le site chinois :le SR341SER.ZIP
J’espère que j’ai bien procédé.

Sur la carte uno une led permanente « ON »
sur le petit module WIFI un flash bleu quand on appuie sur bouton reset

Je ne sais pas quoi faire?
merci d'avance pour votre aide

Je peux difficilement en dire plus que ce qui figure déjà dans le tuto.
Peut-être absence de bootloader ?

Bonjour hbachetti,

Oui , peut-être qu'il n'y a pas de bootloader mais comment s'en assurer?

D'autre part de quel bootloader cette carte a -t-elle besoin ?

Je ne vois pas de processeur donc il est sûrement intégré avec le module WIFI ESP8266MOD

Il n'y a pas le port ICSP .

Peut-on le bootloader par copie à l'aide d' un arduino uno équipé d'un MEGA 328P?

ma carte "D1" doit-elle avoir ce même bootloader ?

merci pour l'intêret que vous portez à mon problème

Bonjour, çà marche , enfin en tout càs j'ai réussi à charger blink.

Cette carte n'étant pas un véritable arduino uno wifi , il fallait ajouter dans le gestionnaire de carte

les ESP8266 modules et j'ai sélectionné ensuite WeMos D1(retired) et j'ai téléversé blink.

Voilà si çà peut aider..

Bon week-end

Il faut toujours sélectionner le bon type de carte, car le bootloader est différent pour chaque carte.
Ce qui est normal : inutile d'essayer de charger du code compilé pour une UNO dans un ESP8266.
@+

Super

celui là, je l'imprime.

Super tuto! Merci !J'ai eu besoin de le consulter récemment :confused: ... Dans mon cas c'était le bootloader que j'avais du corrompre par une mauvaise manip. Heureusement, j'avais quelques ATMEGA préparés pour ce genre de coup dur.

Dans l'esprit "mieux vaut prévenir que guérir", je vous conseille tous d'en préparer une paire d'avance. Pour quelques dizaines de centimes, il ne faut vraiment pas s'en priver. J'ai fait un petit tuto pour une carte R3 (les consignes, en français, diffèrent de la page ici qui m'a donné du fil à retordre: les puces préparées n'étaient pas du tout compatibles de ma carte Uno).

Le tuto: Arduino: préparer quelques pièces de rechange (ATMEGA328P, bootloader & co) – RandomCraftr

Par contre j'aurai bien voulu faire ça sans l'IDE (que j'ai du réinstaller exprès), mais je n'ai pas trouvé comment réaliser la manip "Burn bootloader" de l'IDE avec l'IDE en ligne. Une idée ?

En ligne de commande tu veux dire ?

L'éditeur en ligne: je veux dire create.arduino.com.