samedi 20 octobre 2018

ARDUINO : problèmes de téléversement

ARDUINO : problèmes de téléversement

Dans ce document nous allons essayer de recenser toutes les sources possibles de problèmes pendant le téléversement d'une carte ARDUINO.

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.

Si le téléversement échoue, le bootloader lance l'application, qui est généralement l'exemple "blink" pour une carte neuve. Donc si la LED D13 clignote c'est normal.

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
  • 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 faudra probablement utiliser une loupe si votre vue n'est pas excellente.

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 CEUI-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 pour des raisons 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.

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.

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 tuto est disponible ICI.

Dans ce tuto, vous verrez qu'il est possible de graver le bootloader d'une UNO à l'aide d'une MEGA. Je l'ai essayé, et cela fonctionne.
Il faut faire la manip suivante : 
  • branchement USB de la MEGA sur le PC 
  • branchement SPI MEGA / UNO
  • condo 10µF entre RESET et masse de la MEGA
  • ouverture sketch ArduinoISP 
  • choisir type de carte : Arduino/Genuino Mega or Mega2560 
  • téléversement du sketch dans la MEGA (bouton téléverser) 
  • choisir type de carte : Arduino/Genuino Uno 
  • choisir Programmateur : Arduino as ISP
  • Outils / Graver la séquence d'initialisation
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"

Dans ce cas, l'application que vous allez téléverser va écraser le bootloader. En d'autres termes elle prend la place de celui-ci et il sera impossible après cette opération de téléverser par la voie normale qui utilise le câble USB. Il faut prendre l'habitude d'effectuer le téléversement par 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 : https://www.arduino.cc/en/Guide/Troubleshooting#upload

6. Mises à jour

29/12/2018 : mise à jour paragraphe  3.8. Le bootloader

2 commentaires:

  1. Bonjour,
    Le téléversement dans mon mega2560 ne réussit qu'avec l'alimentation 5v des composants débranchés.
    Avez-vous une explication ?
    Merci.

    RépondreSupprimer
    Réponses
    1. Difficile de répondre sans schéma.
      Posez plutôt votre question sur https://forum.arduino.cc/index.php?board=33.0
      Par contre fournissez la liste des composants et un schéma de branchement.

      Supprimer