• Aucun résultat trouvé

[PDF] Support de cours Arduino Bootloader pdf | Cours Arduino

N/A
N/A
Protected

Academic year: 2021

Partager "[PDF] Support de cours Arduino Bootloader pdf | Cours Arduino"

Copied!
15
0
0

Texte intégral

(1)

Installer un Arduino Bootloader

Introduction

La tête haute! Ce tutoriel a été écrit pour les microcontrôleurs AVR avec un chargeur de démarrage Arduino utilisant des broches ICSP. Si vous utilisez un microcontrôleur ARM avec des broches SWD, vous aurez besoin d’un programmateur dédié (par exemple, Atmel JTAG ICE 3 ou Atmel-ICE) pour vous connecter au port SWD.

Avez-vous un Arduino en brique qui n'acceptera plus de code? Ou peut-être avez-vous écrit votre propre firmware et souhaitez-vous le télécharger sur votre Arduino? Ou peut-être voulez-vous simplement en savoir plus sur le fonctionnement interne de l'Arduino, de l'AVR et des microcontrôleurs en général. Eh bien, vous avez de la chance! Ce didacticiel vous expliquera ce qu'est un chargeur de démarrage, pourquoi vous devez l'installer / le réinstaller et passer en revue le processus.

Qu'est-ce qu'un Bootloader?

Les AVR d’Atmel sont d’excellents petits circuits intégrés, mais ils peuvent être un peu difficiles à programmer. Vous avez besoin d’un programmeur spécial et de fichiers .hex sophistiqués, qui ne sont pas très conviviaux pour les débutants. L'Arduino a en grande partie résolu ces problèmes. Ils ont mis un fichier .hex sur leurs puces AVR qui vous permet de programmer la carte par le port série , ce qui signifie que tout ce dont vous avez besoin pour programmer votre Arduino est un câble USB.

Le chargeur de démarrage est essentiellement un fichier .hex qui s'exécute lorsque vous allumez la carte. Il ressemble beaucoup au BIOS qui s'exécute sur votre PC. Il fait deux choses. Tout d'abord, il regarde autour de lui pour voir si l'ordinateur tente de le programmer. Si c'est le cas, il récupère le programme de l'ordinateur et le télécharge dans la mémoire du CI (à un emplacement

(2)

spécifique pour ne pas écraser le chargeur de démarrage). C'est pourquoi, lorsque vous essayez de télécharger du code, l'IDE Arduino réinitialise la puce. Cela éteint et rallume le circuit intégré pour que le chargeur de démarrage puisse recommencer à fonctionner. Si l'ordinateur n'essaie pas de télécharger du code, il demande à la puce d'exécuter le code déjà stocké en mémoire. Une fois que votre programme est localisé et exécuté, Arduino parcourt en permanence le programme et le fait tant que le tableau est alimenté.

Pourquoi installer un chargeur de démarrage?

Si vous construisez votre propre Arduino ou devez remplacer le circuit intégré, vous devrez installer le chargeur de démarrage. Vous pouvez également avoir un mauvais chargeur de démarrage (bien que cela soit très rare) et avoir besoin de le réinstaller. Il existe également des cas dans lesquels vous avez placé votre carte dans un paramètre étrange, réinstallé le chargeur de démarrage et rétabli les paramètres d'usine, ce qui constitue le moyen le plus simple de le réparer. Nous avons vu des cartes sur lesquelles les gens ont désactivé le port série, ce qui signifie qu'il n'y a aucun moyen de télécharger du code sur la carte, alors qu'il peut exister d'autres moyens de résoudre ce problème, la réinstallation du chargeur de démarrage est probablement la plus rapide et la plus simple. Comme je l'ai dit, avoir un mauvais chargeur de démarrage est en réalité très très rare. Si vous avez une nouvelle carte qui n'accepte pas de code, ce n'est pas 99,9% du temps, le chargeur de démarrage. Ce guide vous aidera à résoudre le problème pendant 1% du temps restant.

Sélection d'un programmeur

Nous allons parler de deux types de programmeurs différents que vous pouvez utiliser pour installer ou réinstaller les chargeurs de démarrage.

Option 1: programmeurs dédiés

Pour un programmeur rapide et facile, nous vous recommandons d’utiliser le programmateur de poche AVR (Windows uniquement).

(3)

Ou, vous pouvez utiliser le programmeur officiel Atmel-ICE pour ARM, SAM et AVR.

Remarque: Les programmeurs suivants retenus peuvent également être utilisés.

AVR MKII

JTAG ICE3

Le programmeur de poche AVR ou la plupart des options les moins chères fonctionneront parfaitement pour la plupart des applications, mais certaines cartes, notamment celles avec beaucoup de mémoire, comme la carte ATMega2560, peuvent poser des problèmes.

Option 2: Utiliser l'Arduino en tant que programmeur

L'autre option est de récupérer un Arduino Uno (ou Duemilanove). Si vous allez dans l'IDE Arduino, vous verrez un exemple d'esquisse appelée "Arduino en tant que fournisseur de services Internet". Si vous téléchargez ce code sur votre Arduino, il agira essentiellement en tant que programmeur AVR. Ce n'est pas vraiment recommandé pour la production de cartes, ou de cartes avec beaucoup de mémoire, mais, à la rigueur, cela fonctionne plutôt bien. De plus, à compter de cette date, le code ne fonctionne que sur les cartes ATmega328. Peut-être qu'un jour cela fonctionnera sur le Leonardo ou le Due, mais pas encore.

(4)

Branchement du matériel

Programmation série en circuit (ICSP)

Il est très rare de programmer des CI avant qu'ils ne soient soudés sur un PCB. Au lieu de cela, la plupart des microcontrôleurs ont ce qu'on appelle un en-tête de programmation in-system ( ISP ). En particulier, certains fabricants de circuits intégrés, tels que Atmel et Microchip, utilisent une méthode ISP spécialisée pour la programmation de leurs circuits intégrés. Ceci est appelé programmation série en circuit ( ICSP ). La plupart des cartes compatibles Arduino et Arduino auront un en-tête ICSP 2x3 broches. Certains peuvent même en avoir plusieurs en fonction du nombre de circuits intégrés sur le circuit imprimé. Il éclate trois des broches SPI (MISO, MOSI, SCK), l’alimentation, la mise à la terre et la réinitialisation. Ce sont les broches dont vous aurez besoin pour connecter votre programmateur afin de reflasher le firmware sur votre carte.

Ici nous avons le Arduino Uno R3. Il comporte deux en-têtes ICSP: un pour l'ATmega16U2 et un pour l'ATmega328. Pour reflasher le chargeur de démarrage sur cette carte, vous utiliseriez

uniquement l'en-tête ICSP de l'ATmega328.

Sur certaines cartes plus petites, vous ne verrez peut-être pas ce connecteur, mais les broches devraient être cassées ailleurs. Que vous utilisiez un CI SMD ou un CI DIP , les broches ISP devraient être accessibles sous une forme ou une autre. Certaines cartes peuvent avoir uniquement des points de test pour l'en-tête ISP. Si tel est le cas, vous pouvez envisager de vous procurer un adaptateur Pogo ISP . Ce kit vous permet d’établir temporairement une bonne connexion avec des points de test afin de reprogrammer votre CI.

(5)

Remarque: Si vous rencontrez des difficultés pour trouver les broches ICSP sur votre carte Arduino, vous pouvez consulter le site Web ci-dessous pour obtenir des informations détaillées sur la plupart des CI liés à Arduino.

Une fois que vous avez localisé les six broches ICSP sur votre tableau, il est temps de connecter votre programmeur au tableau. Vous pouvez utiliser un câble de programmation pour connecter les deux ou, si vous ne possédez pas de câble, vous pouvez simplement utiliser des câbles de liaison mâle-femelle.

Connexion du programmateur Pocket AVR à la cible

Si vous utilisez un programmateur tel que le programmateur AVR de poche, votre configuration devrait ressembler à la connexion ci-dessous avec la flèche (◄) du câble de programmation AVR connectée à MISO . Si vous examinez attentivement le moulage du connecteur 2x3, vous devriez pouvoir remarquer la flèche (◄) pointant vers la broche 1 par rapport à la position d’un en-tête ICSP standard.

(6)

La tête haute! Il existe une différence subtile dans l'orientation du câble de programmation AVR 2x5 à 2x3 par rapport aux autres câbles 2x3 connectés aux programmeurs Atmel

officiels. Comme le montre l'image ci-dessous avec MISO mis en surbrillance par un point blanc, le câble du programmateur AVR de poche a MISO connecté plus près de l'intérieur du

câble. MISO est connecté au câble de l’AVR MKII plus près de l’extérieur du câble.

Cliquez pour agrandir l'image.

Vous remarquerez peut-être également qu’aucun câble USB de câble n’est connecté à l’un des RedBoards .Etant donné que le programmateur AVR de poche peut fournir une alimentation de 5 V à l’AVR cible avec le commutateur basculé sur la position Power Target , un câble USB n’est pas nécessaire pour le RedBoard.Cependant, le serveur officiel Atmel AVR MKII n’est pas en mesure de fournir l’alimentation au tableau cible. Ainsi, un câble est nécessaire pour se connecter à l'AVR cible.

Il en va de même pour les nouveaux programmeurs Atmel. L'image ci-dessous montre le Atmel JTAG ICE3 connecté à un RedBoard. Comme vous pouvez le constater, la position du câble de l'AVR est connectée au RedBoard de la même manière que l'image avec l'AVR MKII. Étant donné que le programmeur n'est pas en mesure de fournir de l'énergie à la cible, vous aurez besoin d'un câble supplémentaire connecté à l'AVR cible.

(7)

Cliquez pour agrandir l'image.

Connexion de l’Arduino en tant que fournisseur de services Internet

à la cible

Ou, si vous utilisez l'Arduino en tant que programmeur, l'image ci-dessous devrait

apparaître. Assurez-vous d’alimenter votre Arduino en tant que fournisseur d’accès Internet en le connectant à votre ordinateur.

(8)

Cliquez pour agrandir l'image.

Conseil Vous recherchez d'autres exemples en plus de connecter deux Arduino Unos

ensemble? Essayez de consulter la page ArduinoISP de Arduino.cc pour plus d’informations.

Table de branchement

⚡ Alimentez votre cible Arduino! Assurez-vous d'alimenter votre cible Arduino. Sinon, vous ne pourrez pas flasher le fichier .hex sur votre cible.

Voici un tableau pour aider à préciser quelles connexions vont où. En fonction de l'Arduino, vous pouvez avoir accès aux broches ICSP uniquement sur l'en-tête 2x3 ICSP. Veillez à consulter la disposition de la carte pour plus d'informations sur les connexions SPI de l' Arduino .

Programmeur

AVR

Arduino

en tant

que FAI

2x3

ICSP

Header

ATmega328 ATmega2560 ATmega32U4

5V

Vcc / 5V

Broche 2

Vcc

Vcc

Vcc

GND

GND

Broche 6

GND

GND

GND

MOSI

MOSI /

D11

Broche 4

D11

D51

D16

MISO

MISO /

D12

Pin 1

D12

D50

D14

SCK

SCK / D13

Pin 3

D13

D52

D15

Réinitialiser

D10

Broche 5

Réinitialiser

Réinitialiser

Réinitialiser

Code de téléchargement - Easy Way

Remarque: Cet exemple suppose que vous utilisez la dernière version de l'IDE Arduino sur votre bureau. Si vous utilisez Arduino pour la première fois, consultez notre didacticiel sur l’ installation de l’IDE Arduino.

Le moyen le plus simple de télécharger le chargeur de démarrage consiste à utiliser l'IDE Arduino.

Télécharger Arduino en tant que FAI

Attention! Vous devrez télécharger le fichier ArduinoISP.ino sur votre bon Arduino (c’est-à-dire

votre tableau de programmation) avant de pouvoir l’utiliser en tant que programmeur.

Prenez un bon tableau connu ou un Arduino Uno. Ouvrez votre IDE Arduino. Dans votre menu, sélectionnez Fichier> Exemples> 11.ArduinoISP> ArduinoISP pour ouvrir l’Arduino en tant qu’esquisse ISP.

(9)

Sélectionnez le port COM de votre Arduino en tant que fournisseur de services Internet. Le port COM peut être différent selon la façon dont il est énuméré sur votre ordinateur.

(10)

Graver un chargeur de démarrage sur votre cible

Laissez l’Arduino en tant que FAI (c’est-à-dire votre programmeur) connecté à votre

ordinateur. Si ce n'est déjà fait, connectez votre cible Arduino. Sélectionnez ensuite la définition de carte pour votre Arduino cible sous Outils> Carte .

(11)

Sélectionnez le programmeur que vous utilisez sous Outils> Programmeur . Dans ce cas, notre programmeur est un Arduino en tant que FAI, sélectionnez donc ArduinoISP . Vous devrez également sélectionner le port COM auquel Arduino en tant que FAI est connecté si vous n'avez pas déjà sélectionné le port COM.

(12)

Enfin, sélectionnez Burn Bootloader . Ceci prendra la carte que vous avez sélectionnée dans l'EDI Arduino et recherchera le chargeur de démarrage associé dans le fichier board.txt . Ensuite, il trouvera le chargeur de démarrage dans le dossier du programme de l'EDI Arduino (plus précisément « … \ Arduino \ hardware \ arduino \ avr \ bootloaders ») et l'installera. Cela ne fonctionne que si la carte est correctement installée dans l'EDI et que vous avez le bon chargeur de démarrage.

(13)

Si, pour une raison quelconque, vous souhaitez utiliser un chargeur de démarrage qui n'est pas installé dans l'IDE Arduino, visitez la section suivante. Cependant, il est probablement plus simple d'installer le chargeur de démarrage à partir de l'IDE Arduino. Pour ceux qui sont curieux de connaître les paramètres tels que les bits de fusion, n’ayez pas peur. Arduino s’occupe de tous les détails désordonnés lorsque vous gravez des chargeurs d’amorçage.

Code de téléchargement - Hard Way

Le plus dur est pour ceux qui veulent utiliser la ligne de commande . Cette méthode peut être préférable si vous modifiez et recompilez et que vous ne voulez pas avoir à mettre à jour continuellement l'EDI, mais sinon, c'est plutôt inutile.Encore une fois, vous devrez obtenir le programmeur et tout brancher. Dans cet exemple, nous utilisons avrdude sous Windows. Ce processus comporte trois étapes:

 Définir les bits de fusible (c.-à-d. Faible, élevé et étendu)  Fichier Flash .hex

(14)

 Définir les bits de verrouillage

La première étape consiste à définir les fusebits. Les fusibles sont la partie de la puce AVR qui détermine, par exemple, si vous utilisez un cristal externe ou si vous souhaitez une détection de baisse de tension. Les commandes répertoriées ci-dessous sont spécifiquement destinées aux Arduino Uno utilisant un ATMega328. Elles fonctionneront probablement sur d’autres cartes similaires, telles que la Duemilanove, mais assurez-vous de savoir ce que vous faites avant de jouer avec des fusebits. Tous les bits de fusible requis sont répertoriés dans le

fichier boards.txt pour différentes cartes.Encore une fois, si vous avez un

fichier boards.txt installé, utilisez simplement Easy Way. La deuxième étape consiste à télécharger le programme. La dernière étape consiste à définir les bits de verrouillage.

Remarque: ces fusibles ne fonctionneront pas sur une carte 3,3V / 8 MHz. Si vous utilisez un autre microcontrôleur, vous devrez également ajuster le paramètre partno .

Programmeur AVR de poche

Bits Fusibles

Si vous utilisez AVR Pocket Programmer pour programmer votre Arduino Uno cible, tapez les commandes suivantes dans la ligne de commande pour définir les bits de fusible.

COPY CODElanguage:bash avrdude -b 19200 -c usbtiny -p m328p -v -e -U efuse:w:0x05: m -U hfuse:w:0xD6:m -U lfuse:w:0xFF:m

Hex File et Lock Bits

Une fois les bits de fusible définis, nous pouvons envoyer un fichier .hex compilé à la carte cible et définir les bits de verrouillage. Entrez ce qui suit dans une ligne de commande. Assurez-vous que vous vous trouvez dans le même répertoire que votre fichier .hex et réglez

le ...hexfilename.hex que vous utilisez pour flasher votre cible. Pour flasher le chargeur de démarrage Arduino Uno, allez dans le dossier du programme Arduino. Sur un système

d'exploitation Windows, il ressemblera à ce chemin … \ arduino-1.8.5 \ hardware \ arduino \ avr \ bootloaders \ optiboot . Il y a peu de fichiers dans le dossier, mais celui qui nous intéresse est le fichier optiboot_atmega328.hex .

COPY CODE language:bash avrdude -b 19200 -c usbtiny -p m328p -v -e -U flash:w:hexf ilename.hex -U lock:w:0x0F:m

Arduino en tant que FAI

Bits Fusibles

Si vous utilisez Arduino en tant que fournisseur de services Internet pour programmer votre Arduino Uno cible, tapez les commandes suivantes dans la ligne de commande pour définir les bits de fusible.

COPY CODE language:bash avrdude -P comport -b 19200 -c avrisp -p m328p -v -e -U ef use:w:0x05:m -U hfuse:w:0xD6:m -U lfuse:w:0xFF:m

Hex File et Lock Bits

Une fois les bits de fusible définis, nous pouvons envoyer un fichier .hex compilé à la carte cible et définir les bits de verrouillage. Entrez ce qui suit dans une ligne de commande. Assurez-vous

(15)

que vous vous trouvez dans le même répertoire que votre fichier .hex et réglez

le ...hexfilename.hex que vous utilisez pour flasher votre cible. Pour flasher le chargeur de démarrage Arduino Uno, allez dans le dossier du programme Arduino. Sur un système

d'exploitation Windows, il ressemblera à ce chemin … \ arduino-1.8.5 \ hardware \ arduino \ avr \ bootloaders \ optiboot . Il y a peu de fichiers dans le dossier, mais celui qui nous intéresse est le fichier optiboot_atmega328.hex .

COPY CODE language:bash avrdude -P comport -b 19200 -c avrisp -p m328p -v -e -U fl ash:w:hexfilename.hex -U lock:w:0x0F:m

Une dernière info. Comme nous l'avons indiqué précédemment, un chargeur de démarrage est essentiellement un fichier .hex . Ainsi, vous pouvez utiliser cette méthode pour télécharger et coder ce que vous souhaitez sur vos CI.

Figure

Table de branchement

Références

Documents relatifs

Ainsi, de la même manière que dans le cas du don et du contre-don, comme l’écrit Pierre Bourdieu, la « période intercalaire, qui ne doit pas être trop courte (comme on le voit

C’est particulièrement ce que montre le premier chapitre ( « Réduire les inégalités de genre, un enjeu de politique agricole » ) qui insiste sur le fait que, dans le contexte des

Apparaissant d'abord dans des milieux urbains et intellectuels, l'agriculture biologique s'inscrit dans le mouvement plus large de contestation des années

Conclusion – La condition des faisant fonction est donc ambivalente : autorisée à faire plus, surclassée, mais dans des conditions qui, comparées à celles des

Ainsi, grâce à leur intense activité, à la motivation de leurs adeptes mais aussi à leur souci affiché de vivre dans leur temps, les Durville ont-ils contribué à

Résumé : Cette communication analyse les mutations de l’industrie des médias dans un contexte de convergence qui favorise l’expansion des groupes des médias mais

L’article propose d’étudier la conduite des politiques de lutte contre la pauvreté (LCP) à destination des personnes sans-abri sur le territoire de la Région de

Based on this information and using the theory of quantitative games, we lift most of the linear-time–branching-time spectrum of van Glabbeek [24] to the quantitative setting, while