Dernière révision : septembre 2023










ATmega328P : installer un bootloader

Philippe Notez (philippe.notez@musee-info.fr)





Sommaire

Introduction

L’électronique et l’informatique ont profondément modifié notre société. C’est certainement la révolution industrielle la plus rapide de l’histoire de l’humanité. En effet, l’ordinateur que nous connaissons aujourd’hui était tout simplement inimaginable il y a seulement une cinquantaine d’années. Et avec les Arduino, les ESP8266 ou les Raspberry Pi Pico, l'aventure est loin d'être terminée.

L’auteur ne pourra en aucun cas être tenu responsable des dommages qui résulteraient de l’utilisation des informations publiées sur ce site, sous licence Creative Commons BY-NC-SA. Toute reproduction ou modification d'un document, même partielle, est autorisée à condition que son origine et le nom de l'auteur soient clairement indiqués (BY), qu'il soit utilisé à des fins non commerciales (NC), que son mode de diffusion soit identique au document initial (SA), et que cela ne porte pas atteinte à l’auteur.

Ce document vous propose de créer vos propres cartes basées sur le microcontrôleur ATmega328P, en espérant toujours être le plus clair et précis possible. Malgré tout le soin apporté à la rédaction, l'auteur vous remercie de bien vouloir le contacter si vous relevez la moindre erreur ou omission, et vous souhaite une agréable lecture.

Si vous avez apprécié ce document, vous pouvez faire un don ici. Merci pour votre soutien.


Le bootloader

Le bootloader est un micrologiciel permettant d'utiliser la laison série de l'ATmega328P pour transférer (téléverser) un programme (sketch) via un câble USB et un convertisseur USB-RS-232. Une carte Arduino possède un ATmega328P avec bootloader et un convertisseur USB - RS-232, on peut donc téléverser un sketch depuis un port USB de son ordinateur.

Le bootloader possède deux inconvénients :
  • il attend la réception d'un caractère sur la liaison série. Si aucun caractère n'est reçu, le sketch est exécuté. Le démarrage (à la mise sous tension ou lors d'un reset) est donc ralenti par cette attente
  • il occupe une partie de la mémore flash (environ 2 kio*)
Si on a besoin d'un démarrage immédiat et / ou de la totalité de la mémoire flash, on devra donc s'en passer.

Sans bootloader, un ATmega328P ne peut se programmer qu'à travers son bus SPI. Il faudra donc choisir un programmateur capable de gérer ce bus. A noter qu'une carte Arduino possède un connecteur ICSP (In Circuit Serial Programming), comportant 6 broches (MISO, MOSI, SCK, RESET, VCC et GND), et permettant de réinstaller le bootloader si besoin.


Utiliser une carte Arduino Uno comme programmateur

Nous utilisons le bus SPI d'un ATmega328P installé sur une carte Arduino Uno pour programmer un ATmega328P seul, c'est à dire uniquement le circuit intégré :



Nous devons donc connecter les broches 17, 18, 19 (bus SPI) et 1 (reset) :


Pour éviter tout reset intempestif, une résistance de 10 kohm est placée en pull-up sur la broche 1. J'ai utilisé un quartz de 20 MHz (maximum autorisé), vous pouvez néanmoins le supprimer, ainsi que les deux condensateurs. L'ATmega328P fonctionnera alors avec son oscillateur interne (1 à 8 MHz). A noter qu'à 1 MHz, l'ATmega328P consommera le minimum d'énergie.

Ouvrez l'EDI Arduino (Arduino IDE) :
  • Fichiers, Exemples, ArduinoISP
  • Outils, Type de carte, Arduino AVR Boards, Arduino Uno
  • Croquis, Téléverser (on téléverse dans le programmateur, c'est à dire l'ATmega328P sur la carte Arduino)
  • Fichiers, Préférences, URL de gestionnaire de cartes supplémentaires, ajoutez la ligne suivante :
    https://mcudude.github.io/MiniCore/package_MCUdude_MiniCore_index.json
  • Outils, Type de carte, Gestionnaire de carte, MiniCore, Installer
  • Outils, Type de carte, MiniCore, ATmega328
  • Outils, Clock, External 20 MHz (à remplacer par la fréquence de l'oscillateur que vous utilisez)
  • Outils, BOD, BOD 2.7 V (Brown-Out Detection)
  • Outils, Variant, 328P / 328PA
  • Outils, Bootloader, Yes (UART0)
  • Outils, Programmateur, Arduino as ISP
  • Outils, Graver la séquence d'initialisation (on grave la configuration, inclus le bootlaoder puisqu'on a choisi Yes)
Si on choisit de ne pas installer le bootloader, on téléverse un sketch en utilisant le menu «Croquis», puis «Téléverser avec un programmateur». Néanmoins, puisqu'on a choisi d'installer le bootlaoder, on va utiliser la liaison série de l'ATmega328P pour téléverser un sketch, grâce au schéma suivant :


J'ai utilisé un convertisseur USB - RS-232 de type FTDI FT232RL, mais vous pouvez bien-sûr utiliser un CH340 par exemple. A noter l'ajout d'un condensateur (100 nF) entre la broche DTR du FT232RL et la broche 1 de l'ATmega328P. Nous avons créé un prototype (très simple) basé sur l'ATmega328P. Vous pouvez désormais créer vos propres cartes !

Pour information, le téléversement d'un sketch utilise le logiciel AVRDUDE (AVR Downloader / UploaDEr) et le protocole STK500 (STK500V2 pour une carte Mega2560). Il est donc possible de téléverser un sketch en ligne de commande, sans utiliser l'EDI de l'Arduino.


* 1 ki (kilo informatique) = 1024 et non pas 1000, donc 1 kio = 1024 octets et 16 kio = 16384 octets.



Haut de page