Boot Loader et port COM

Bonjour à toutes et à tous,

Vous allez pouvoir certainement éclairer ma lanterne.

Lorsque, pour connecter mes modules Arduino (tous des clones) sur mon PC, je change de prise USB, selon le module, le nom du port COM change .. ou pas. Voici ce que j'ai pour deux modules différents :

Module Arduino Uno Mega 2560

Prise USB 1 9 3

Prise USB 2 13 3

Après moult essais sur différents types de modules (Uno, Méga 2560, Nano, Pro mini) mon constat, vous allez pouvoir me le confirmer on me l'infirmer, est :

  • le port COM lié à un module est enregistré dans le module lors du téléversement,
  • quand je reçois un module, il est vierge de boot-loader et de port COM.

Qu'est-ce qui est vrai là-dedans, ou puis-je trouver des infos pertinentes (en français de préférence) à ce sujet.

Merci de votre aide.

Pierre

il n'y a pas de lien entre le bootloader et le port COM choisi par Windows pour communiquer avec ton arduino.
En fait Windows "identifie" ton appareil en fonction du port où tu le connectes sur ton ordinateur, du driver utilisé pour communiquer avec et éventuellement d'un identifiant présent sur ton Arduino (ce dernier peut ne pas exister) ET du port COM disponible au moment du branchement.
A partir de là, Windows peut attribuer un port COM finalement d'une manière assez aléatoire et il ne faut pas compter dessus pour garantir que ce soit toujours le même. Le seul moyen efficace de garder le même port COM est de brancher toujours le même arduino, toujours sur le même port USB de l'ordinateur en évitant d'y brancher autre chose lorsqu'il n'est pas branché...
Ce raisonnement est valable pour tout autre appareil USB reconnu comme un port série/COM par Windows.

A moins de définir le port manuellement.

Gilbert

gilbert45:
A moins de définir le port manuellement.

Ca ne fonctionne que tant que tu branches ton appareil sur le même port physique de ton ordinateur. Si tu le branches ailleurs, ca peut changer aussi.

Je m'étais fait abuser car sur mon ordinateur, je ne branchais toujours qu'un seul Arduino à la fois ; il se retrouvait toujours avec le même numéro de port sur une prise USB donnée.

Je viens de faire l'essai sur un autre ordinateur, et effectivement les numéros de port ne sont pas les mêmes.

Par contre, pour ce qui est du boot-loader, est-il

  • chargé dans le composant qui est ensuite monté sur des cartes (Uno, Nano, ...)
  • chargé dans le composant dès lors que celui-ci est monté sur la carte,
  • chargé lors de la première utilisation de l'IDE Arduino,
  • autre.
    Cordialement.

Pierre

le bootloader c'est un bout de code chargé sur le microcontrolleur (µC pour abréger) pour lui permettre de dialoguer avec l'IDE arduino dans le contexte de développement arduino uniquement. Une puce Atmel peut ne pas avoir de bootloader et fonctionner quand même, en utilisant d'autres moyens de développement.
Le lien entre Windows et ton µC est fait par une autre puce se trouvant sur ta carte "Arduino" qui ne fait que se charger d'établir la communication série/USB entre ton ordinateur et le µC.

Bonjour,

Le bootloader n'a pas de rapport (ou alors très lointain) avec le port com vu par ton PC. Il s'occupe de charger le programme à partir des pins rx et tx du micro.
C'est un composant spécifique qui fait la conversion USB/Serie (atmega16u2 ou ch340) et qui grace au driver crée un port com virtuel sur le PC.
Pour répondre précisément à ta question le bootloader est un programme qui est programmé dans le micro par le port ICSP.

kamill:
... Pour répondre précisément à ta question le bootloader est un programme qui est programmé dans le micro par le port ICSP. ...

Moi, je ne me sers pas du port ICSP, d'ailleurs, sur les Pro Mini, il n'y en a pas.

Bien. Cela veut donc dire que, dans mon cas où je branche mon Arduino sur mon PC, c'est via l'IDE Arduino que cela se passe ? Est-ce fait une bonne fois pour toute (la première fois que je téléverse dans le circuit) ou bien est-ce repris à chaque téléversement dans la mémoire Flash ?

Compte-tenu de cet article, je pense donc que les cartes Arduino (clones) que l'on achète sont vierges de tout soft et que le bootloader est installé via l'ICSP ou bien l'interface série qui communique avec l'IDE Arduino.

J'ose espérer avoir compris :cold_sweat: .

Cordialement.

Pierre

Pour ce qui est du changement du numéro de port USB, si le port est défini manuellement pour un module, il reste toujours le même quelque soit l' entrée utilisée.

En tout cas sur Windows 7 et Windows 10

Gilbert

Bonjour,

ChPr:
Moi, je ne me sers pas du port ICSP, d’ailleurs, sur les Pro Mini, il n’y en a pas.

ProMini_ICSP_k.png

ChPr:
Moi, je ne me sers pas du port ICSP, d'ailleurs, sur les Pro Mini, il n'y en a pas.

Bien sur que si. Il n'y a pas de connecteur ICSP, mais on peut tout à fait programmer en se connectant directement sur les pins correspondantes.
Edit: Grillé par Icare

Si je comprends bien, et dès lors que l'on possède l'IDE Arduino, le port ICSP ne sert à rien pour autant qu'on ne souhaite programmer que des cartes Arduino car elles possèdent une interface USB/série (même la Pro Mini a un adaptateur série spécifique).

Le port ICSP n'est alors utile que pour programmer des µC qui ne possèdent pas d'interfaçage à un PC. Oui, non ?

Cordialement.

Pierre

Mon grain de sel :

  1. En aucun cas un bootloader est obligatoire.
    La programmation naturelle (façon Atmel bien sûr, mais c'est quand même lui le concepteur du micro, ce n'est pas arduino) la méthode "naturelle" disais je est le mode ISP.
    Le bootloader "bouffe" des octets dans la flash.

  2. Un micro avr "sortie usine" a ses "fuses" configurés pour rendre les tests automatiques (chez Atmel) les plus simples et les plus rapides possibles.
    Il va de soit que cette configuration ne nous satisfait pas : oscillateur interne peu précis à circuit Résistance/Capacité, de fréquence 8 MHz et diviseur par 8 activé. Mais pour Atmel les tests sont plus simples à faire à 1MHz qu'à 20 MHz.

Il faudra donc reconfigurer les fuses pour utiliser le micro "aux petits oignons".
Cette configuration ne peut se faire qu'en mode ISP sur le connecteur ISCP.

  1. Comment programmer un micro de manière courante ?
    L'utilisateur a souvent besoin d'envoyer des messages sur un terminal du PC.
    Pour cela il dispose d'une interface USB/Série.
    La tentation est grande d'utiliser cette interface pour la programmation à la place du programmeur ISP.

C'est faisable à condition de graver dans une partie réservée de la mémoire du micro un petit programme : le bootloader.
Cette solution qui a été inventée bien avant qu'arduino existe n'est aucunement obligatoire mais elle est bien pratique, c'est pour cela qu'elle est la plus répandue.

Quel bootloader ?
Après avoir lu sur les bootloaders je me suis fais la remarque suivante :
Bootloader de la UNO = environ 500 octets.
Bootloader de la Duemilanoce, nano = environ 2000 octets.

Interface USB/Série
UNO = Atmega 16U2 -> vue comme un périphérique de stockage (Linux port /dev/ttyACMx)
Duemilanove, Nano : FTDI et secondes sources (Prolific, CH340, etc) -> vue comme un périphériques "classique" (Linux port /dev/ttyUSBx)

Ce qui laisse à penser que :
a) Si le bootloader de la UNO n'est toujours pas utilisé sur la nano c'est que le boatloader du micro dépends des possibilités de l'interface USB/UART à laquelle il est connecté.
b) C'est sans doute la raison du choix du 16U2 qui fait gagner 1,5K (sur un total de 32k ce n'est pas négligeable) malgré tous ses déboires de déprogrammation.

Position Arduino :
Arduino est une société qui doit faire des bénéfices en vendant des cartes. Arduino a tout intérêt à ce que ses clients restent captifs de son univers.
C'est pour cela qu'Arduino n'est pas très clair.
Quand Arduino parle de graver un bootloader il laisse entendre qu'on ne peut pas s'en passer alors que c'est possible avec une autre solution que la sienne.
Quand Arduino donne un programme pour graver un bootloader il ne dit pas (clairement) qu'au préalable il configure aussi les fuses.
Conclusion : toujours actionner son esprit critique quelque soit le fournisseur.