Comment graver le chargeur de démarrage?

15

On m'a demandé de "graver le chargeur de démarrage" sur mon Arduino pour corriger une erreur que j'obtenais. Comment puis-je faire ceci? (Et quel est exactement le chargeur de démarrage?)

Le gars avec le chapeau
la source
Il est assez facile de graver le chargeur de démarrage sur arduino à condition de suivre les bonnes étapes. Cette vidéo peut vous aider: YouTube - Comment graver Bootloader sur ATMEGA328P-AU (SMD) | ARDUINO MINI fait maison
Sandesh HS

Réponses:

15

Le chargeur de démarrage est un petit programme qui est (presque) toujours sur un Arduino. Il gère le téléchargement et le démarrage des croquis que vous faites, et clignote la LED de la broche 13 à chaque réinitialisation de la carte.


Pour graver le chargeur de démarrage:

  1. Procurez-vous un AVR ISP , USBtinyISP , ParallelProgrammer ou une autre carte Arduino . Ce sera votre FAI.
  2. Sauf indication contraire, connectez le FAI aux broches ICSP de votre carte.
  3. Alimentez votre carte avec un câble USB ou une alimentation externe.
  4. Ouvrez l'IDE Arduino.
  5. Assurez-vous d'avoir sélectionné la bonne carte sur laquelle vous gravez Tools ► Board ►dans l'IDE. Revérifiez cela même si vous pouviez télécharger des programmes correctement; le téléchargement ne nécessite pas toujours la bonne carte.
  6. Sélectionnez le programmeur approprié à Tools ► Programmer ►.
  7. Cliquez Tools ► Burn Bootloaderet attendez. Cela ne devrait pas prendre plus d'une minute et ne prend souvent que quelques secondes.

Sources:

Le gars avec le chapeau
la source
1
L'AVRISP est à peu près EOL (fin de vie) à ce stade. Au minimum, vous voulez un AVRISPmk2. Il existe également de nombreux autres outils plus sophistiqués (AVR One! Par exemple). Vous devriez probablement dire{line 1} or other dedicated ISP programmer.
Connor Wolf
Sur des cartes comme l'Arduino Yun, chaque fois que vous "téléchargez via wifi", vous gravez le chargeur de démarrage fusionné avec votre croquis. Cela grâce au fait que le CPU Linux est connecté à l'AVR MCU via SPI, de sorte que vous pouvez imiter un FAI avec un logiciel.
Federico Fissore
@FedericoFissore - est-ce pour cela que cela prend si longtemps?
TheDoctor
Oui, cela et le fait que le bitbang GPIO est plus lent. Il y a un effort continu pour l'accélérer.
Federico Fissore
8

Qu'est-ce qu'un chargeur de démarrage?

Et quel est exactement le chargeur de démarrage?

Le chargeur de démarrage est un petit morceau de code résidant dans la partie "haute" de la mémoire du programme. Normalement, il n'est pas effacé lorsque vous téléchargez de nouveaux croquis. Son but est qu'il soit activé immédiatement après une réinitialisation (les fusibles sont configurés pour commencer le code à l'adresse du chargeur de démarrage plutôt qu'à l'adresse 0x0000). Le chargeur de démarrage attendra un court instant (comme une seconde) pour voir si des données de "programmation" arrivent sur le port série.

  • Si tel est le cas, il lit ces données et les décode pour reprogrammer le reste de la mémoire flash. En collaboration avec le programme de téléchargement (normalement avrdude), le nouveau croquis est envoyé via le port série. Le chargeur de démarrage efface les pages de mémoire flash et les remplace par le nouveau code. Une fois terminé, il exécute le nouveau code.

  • Si aucune instruction n'arrive, le chargeur de démarrage passe à l'adresse 0x0000 pour exécuter l'esquisse existante sur la carte.


Comment remplacer le chargeur de démarrage

Une autre méthode pour programmer un chargeur de démarrage consiste à utiliser un croquis que j'ai écrit il y a quelque temps et qui s'exécute sur:

  • Uno (ou similaire, comme Duemilanove)
  • Leonardo
  • Mega2560

La carte "programmation" exécute l'esquisse qui contient des chargeurs de démarrage pour un certain nombre de cartes codées en dur. Vous connectez la carte de programmation à la carte cible (la carte voulant le chargeur de démarrage) avec 6 fils de raccordement comme indiqué.

Programmeur de chargeur de démarrage pour Uno

Cette photo particulière illustre un Uno en programmant un autre.

Vous exécutez l'esquisse (en utilisant le moniteur série pour lui donner des commandes). Il identifie d'abord la puce cible:

Atmega chip programmer.
Written by Nick Gammon.
Entered programming mode OK.
Signature = 0x1E 0x95 0x0F 
Processor = ATmega328P
Flash memory size = 32768 bytes.
LFuse = 0xFF 
HFuse = 0xDE 
EFuse = 0xFD 
Lock byte = 0xCF 
Bootloader address = 0x7E00
Bootloader length = 512 bytes.
Type 'L' to use Lilypad (8 MHz) loader, or 'U' for Uno (16 MHz) loader ...
Type 'G' to program the chip with the bootloader ...

Vous appuyez sur G pour le programmer.

Erasing chip ...
Writing bootloader ...
Committing page starting at 0x7E00
Committing page starting at 0x7E80
Committing page starting at 0x7F00
Committing page starting at 0x7F80
Written.
Verifying ...
No errors found.
Writing fuses ...
LFuse = 0xFF 
HFuse = 0xDE 
EFuse = 0xFD 
Lock byte = 0xCF 
Done.
Type 'C' when ready to continue with another chip ...

Pour un Uno, cela prend une seconde. La programmation d'un Mega2560 prend 3 secondes.

Instructions détaillées au programmeur du chargeur de démarrage Atmega

Le code peut être téléchargé depuis Github: nickgammon / arduino_sketches

Nick Gammon
la source
Devez-vous sélectionner le type de puce sur laquelle vous gravez (Tools-> Board ..)? Quelle carte dois-je sélectionner lorsque je brûle le chargeur de démarrage pour une puce autonome?
Camilo
Vous sélectionnez le type de carte que vous utilisez pour graver le chargeur de démarrage dans l'EDI. L'esquisse du chargeur de démarrage détecte automatiquement le type de carte cible.
Nick Gammon