Bootloader ?

Bonjour,

J'ai écumé pas mal de sites et forums, écrits en cow-boy ou autre, mais je n'arrive pas à bien comprendre les systèmes de bootloader de l'arduino UNO.

Ce que je crois comprendre :

Il existe un bootloader de base dans le chip avr328 et un bootloader créé par Mr Arduino et qui permet de charget un sketch... ai-je juste ?

je ne sais pas comment utiliser le bootloader du chip, par exemple pour installer un bootloader Arduino sur un chip vierge ?
Le paquet de 6 pin ICSP sert au boot du chip ou celui Arduino ?

Est-ce que je peux charger un sketch à partir du bootloader du chip lui-même ?

Merci d'éclairer un peu ma lanterne... (Je sais, je devrais mieux me lancer dans le maccramé que de faire pilote d'arduino...mais que voulez-vous, l'orgueil :o)

Merci encore.

Bonjour Carburapeur

La notion de bootloader n'est pas si compliquée.

Déjà rappelons qu'une carte Arduino c'est 90% le chip ATmega328P de Mr Atmel autour duquel Mr Arduino à mis quelques composants pour que çà tourne et quelques connecteurs. Mais l'environnement Arduino c'est pas que la carte, c'est aussi la notion de shield et l'environnement de programmation qui bien que 100% C/C++ est rendu facile d'accès pour les débutant, ainsi que la communauté crée autour.

La flash interne des ATmega est partitionnable, c'est à dire que l'on peu l'effacer par morceau. C'est peut être pas évident pour vous mais il y à 15 ans, les flash n'étaient pas partitionnables et l'effacement était toujours à 100%.
L'intérêt c'est qu'on va pouvoir mettre 2 programmes dans la flash :

  • le premier, petit, va être au début de la flash et démarrer tout seul au reset. C'est le bootloader.
  • le 2nd qui s'étale dans ce qui reste de la flash c'est ton application

Au début, le chip ATmega est vierge. Le seul moyen d'écrire un programme dans la flash c'est un programmateur ICSP. C'est pas méchant, ca coute entre 5 et 20€ et il y a des softs, y compris l'environnement Arduino pour s'en servir.
Quand tu achète une carte Arduino, Mr Arduino a déjà mis le bootloader (et souvent le programme blink)

Le bootloader est donc un premier petit programme qui démarre à la mise sous tension.
A son démarrage, il va configurer la liaison série à un certain débit, attendre quelques instants et s'il ne reçoit rien, il lance le programme principal.
S'il reçoit quelque chose, il va tenter de dialoguer avec le programme qui se trouve à l'autre bout de la liaison série sur le PC. S'ils se comprennent, le PC va pouvoir demander au bootloader d'effacer le haut de la flash (mais pas le bootloader lui même hein !) puis lui envoyer un nouvau programme à écrire dans la flash. Une fois finit, on redemarre et le nouveau programme commence.

Il existe essentiellement 2 type de bootloaders :

  • celui d'Atmel qui s'appelle si je ne me trompe pas DFU et qui fonctionne avec un certain protocole et un soft PC de chez Atmel
  • ceux de l'OpenSource qui fonctionne avec le logiciel open-source AVRdude

Les différents bootloaders utilisés sur Arduino fonctionnent avec AVRdude qui est le programme que l'IDE Arduino lance une fois la compilation finie : quand tu voit passer dans la fenetre noire en bas des truc genre "sync" "trying to connect" etc... c'est AVRdude.

Mais il y a plusieurs bootloaders Arduino. Je n'ai pas les détails de l'historique mais par exemple sur DueMilanove et sur UNO la vitesse de la liaison série n'est pas la même. La taille du bootloader est légèrement différente.
Il y ausi Optiboot qui vient d'une autre partie de la communauté, ....

Il n'y a pas forcement de criticité à choisir un bootloader si tu part d'un chip vierge. Après il faut configurer correctement l'IDE Arduino pour qu'il sache causer avec.

GRAND MERCI pour cette rapide réponse !

Tout s'éclaircit à présent, mais subsistent quelques coins sombres :

ICSP, sert donc à entrer un programme dans un chip Amtel vierge.
ICSP, c'est donc les 6 pinoches que je vois sur ma UNO...
ICSP est donc l'interface hard qui permet d'accéder au bootloader que Mr Amtel a inséré dans ses puces vierges ; j'ai juste ?

Bon... alors
Est-ce que les deux bootloader ; celui de Mr Amtel et celui de Mr Arduino coexistent dans la puce, ou bien Mr Arduino a t'il sauvagement effacé le bootloader de Mr Amtel ?
(j'ai cru comprendre dans des post's q'on pouvait utiliser le bootloader Amtel sur Arduino UNO ?!)

Mmmrr...plus je réfléchis et moins je comprends

Bonjour,
ICSP (In-Circuit System Programming) sert à programmer un AVR, que ce soit pour flasher un bootloader ou non.

Pour donner un exemple d'application:
Je termine actuellement un projet qui tourne avec un Duemilanove, que je programme via USB.
Le circuit imprimé final ne comprend que les composants nécessaires (l'AVR et quelques trucs autour) mais j'ai ajouté un connecteur ICSP pour être capable de modifier mon logiciel via l'ICSP sans devoir enlever l'AVR de son support et le remettre dans une carte Arduino.

Bonjour

ICSP est donc l'interface hard qui permet d'accéder au bootloader que Mr Amtel a inséré dans ses puces vierges ; j'ai juste ?

Non. ICSP ('programmation sur place') fait appel à un hardware interne , pas à un soft bootloader interne.
ICSP peut agir sur toute la mémoire flash , y compris sur la zone réservée éventuellement au bootloader.
ICSP peut donc implanter, effacer, remplacer un bootloader.
ICSP peut aussi agir sur des réglages ('fusibles') autrement innaccesibles.

En gros (côté microcontrolleur) : ICSP = flashage 'hardware', 'bootloader' = petit soft d'amorce chargeant le code de l'application.
Le bootloader est facultatif. Il facilite la vie de nombreux utilisateurs mais occupe une partie de la mémoire flash.

Mr Arduino n'a pas effacé le 'bootloader Atmel' du ATMega328 pour mettre l'un des siens vu que le ATMega328 sort d'usine totalement vierge, sans bootloader.
*Certains micros Atmel (les ATMega8u2 et ATMega16u2 des cartes récentes, le ATMega32u4 des cartes Leornardo ....) sortent d'usine avec le bootloader Atmel 'DFU'.*Dans le cas des cartes Leonardo et cartes similaires à micro ATMega32u4 le producteur de la carte remplace de bootloader DFU par 'Caterina'

Pour info à ma connaissance seul Adafruit vend des ATMega équipés du bootloader Arduino.
J'en ai commandé un pour remettre sur ma carte Duemilanove que l'actuel aura "déménagé" sur son circuit imprimé final.

Tout est limpide à présent ! plus un seul nuage : merci à tous pour vos réponses.
Ce forum est vraiment très efficace.

patg_:
Pour info à ma connaissance seul Adafruit vend des ATMega équipés du bootloader Arduino.

Faux.
Lextronic, Selectronic pour n'en citer que 2 vendent aussi des chip Arduino qui sont des ATmega328P préprogrammés avec le bootloader de l'ArduinoUNO.

j'ai commencé comme çà avec juste un chip sur une breadboard (cf le lien de ma signature sur ma Barbuduino :wink: )
Je n'ai acheté une VinciDuino (clone de Leonardo) que récemment pour jouer avec l'USB.