Comment graver le bootloader?

On ma demandé de « graver le chargeur de démarrage » sur mon Arduino pour corriger une erreur que jobtenais. Comment puis-je faire ceci? (Et quel est exactement le bootloader?)

Commentaires

Réponse

Le bootloader 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 fait clignoter la LED de la broche 13 chaque fois que la carte se réinitialise.


Pour graver le chargeur de démarrage:

  1. Obtenez un AVR FAI, USBtinyISP , ParallelProgrammer , ou similaire; ou utilisez 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 lIDE Arduino.
  5. Assurez-vous davoir sélectionné la bonne carte sur laquelle vous gravez à Tools ► Board ► dans lEDI. Revérifiez cela même si vous pouviez télécharger correctement les programmes; le téléchargement ne nécessite pas toujours la bonne carte.
  6. Sélectionnez le programmeur approprié à Tools ► Programmer ►.
  7. Cliquez sur Tools ► Burn Bootloader et attendez. Cela ne devrait pas prendre plus dune minute, et ne prend souvent que quelques secondes.

Sources:

Commentaires

  • LAVRISP 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 simplement dire {line 1} or other dedicated ISP programmer.
  • Sur des cartes comme lArduino Yun, chaque fois que vous " téléversez via wifi ", vous ' gravez le chargeur de démarrage fusionné avec votre croquis. Ceci grâce au fait que le processeur Linux est connecté au MCU AVR via SPI, de sorte que vous pouvez imiter un FAI avec un logiciel.
  • @FedericoFissore – est-ce pourquoi cela prend si longtemps?
  • Oui, cela et le fait que le bitbanging GPIO est plus lent. Il y a un effort continu pour laccélérer.

Réponse

Quest-ce quun bootloader?

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 nest pas effacé lorsque vous téléchargez de nouveaux croquis. Son but est dêtre activé immédiatement après une réinitialisation (les fusibles sont configurés pour commencer le code à ladresse du chargeur de démarrage plutôt quà ladresse 0x0000). Le chargeur de démarrage attendra un court instant (une seconde par exemple) pour voir si les données de « programmation » arrivent sur le port série.

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

  • Si aucune instruction narrive, le bootloader saute à ladresse 0x0000 pour exécuter le croquis existant sur la carte.


Comment remplacer le bootloader

Une autre méthode pour programmer un bootloader est dutiliser un sketch que jai écrit il y a quelque temps et qui fonctionne sur un:

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

Le tableau de « programmation » exécute le croquis qui a 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 en particulier illustre un Uno en programmant un autre.

Vous exécutez lesquisse (en opérant via Serial Monitor pour lui donner des commandes). Il identifie dabord 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 ... 

Le 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. Pour programmer un Mega2560 prend 3 secondes.

Instructions détaillées sur Programmeur de chargeur de démarrage Atmega

Le code peut être téléchargé à partir de Github: nickgammon / arduino_sketches

Commentaires

  • Devez-vous sélectionner le type de la puce sur laquelle vous gravez (Tools- > Board ..)?Quelle carte dois-je sélectionner lorsque je grave le chargeur de démarrage sur une puce autonome?
  • Vous sélectionnez le type de carte que vous utilisez pour graver le chargeur de démarrage dans lEDI. Lesquisse du chargeur de démarrage détecte automatiquement le type de carte cible.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *