Wie brenne ich den Bootloader?

15

Ich wurde angewiesen, den Bootloader auf meinem Arduino zu "brennen", um einen Fehler zu beheben, den ich bekam. Wie kann ich das machen? (Und was genau ist der Bootloader?)

Der Typ mit dem Hut
quelle
Es ist ziemlich einfach, Bootloader auf Arduino zu brennen, vorausgesetzt, Sie befolgen die richtigen Schritte. Dieses Video könnte Ihnen helfen: YouTube - So brennen Sie den Bootloader auf ATMEGA328P-AU (SMD) | Hausgemachte ARDUINO MINI
Sandesh HS

Antworten:

15

Der Bootloader ist ein kleines Programm, das (fast) immer auf einem Arduino läuft. Es verwaltet das Hochladen und Starten der von Ihnen erstellten Skizzen und blinkt die Pin 13-LED, wenn die Karte zurückgesetzt wird.


So brennen Sie den Bootloader:

  1. Besorgen Sie sich einen AVR ISP , USBtinyISP , ParallelProgrammer oder eine andere Arduino- Karte . Dies wird Ihr ISP sein.
  2. Verbinden Sie den ISP mit den ICSP-Pins auf Ihrer Platine, sofern nicht anders angegeben.
  3. Versorgen Sie Ihr Board entweder mit einem USB-Kabel oder einem externen Netzteil.
  4. Öffnen Sie die Arduino IDE.
  5. Stellen Sie sicher, dass Sie die richtige Karte ausgewählt haben, auf die Sie Tools ► Board ►in der IDE brennen . Überprüfen Sie dies noch einmal, selbst wenn Sie Programme korrekt hochladen konnten. Das Hochladen erfordert nicht immer das richtige Board.
  6. Wählen Sie den entsprechenden Programmierer unter Tools ► Programmer ►.
  7. Klicken Sie auf Tools ► Burn Bootloaderund warten Sie. Es sollte nicht länger als eine Minute dauern und dauert oft nur ein paar Sekunden.

Quellen:

Der Typ mit dem Hut
quelle
1
Das AVRISP ist zu diesem Zeitpunkt so ziemlich EOL (End-of-Life). Zumindest möchten Sie einen AVRISPmk2. Es gibt auch viele andere, schickere Tools (z. B. AVR One!). Sie sollten wahrscheinlich nur sagen{line 1} or other dedicated ISP programmer.
Connor Wolf
Auf Boards wie dem Arduino Yun brennen Sie jedes Mal, wenn Sie "über WLAN hochladen", den mit Ihrer Skizze verschmolzenen Bootloader. Dies ist darauf zurückzuführen, dass die Linux-CPU über SPI mit der AVR-MCU verbunden ist, sodass Sie einen ISP mit Software imitieren können.
Federico Fissore
@ FedericoFissore - dauert es deshalb so lange?
TheDoctor
Ja, das und die Tatsache, dass GPIO-Bitbanging langsamer ist. Es wird ständig versucht, dies zu beschleunigen.
Federico Fissore
8

Was ist ein Bootloader?

Und was genau ist der Bootloader?

Der Bootloader ist ein kleines Stück Code, das sich im "hohen" Teil des Programmspeichers befindet. Normalerweise wird es nicht gelöscht, wenn Sie neue Skizzen hochladen. Sein Zweck ist es, unmittelbar nach einem Reset aktiviert zu werden (die Sicherungen sind so konfiguriert, dass der Code an der Bootloader-Adresse und nicht an der Adresse 0x0000 beginnt). Der Bootloader wartet eine kurze Zeit (z. B. eine Sekunde), um festzustellen, ob "Programmierdaten" an der seriellen Schnittstelle eingehen.

  • In diesem Fall werden diese Daten gelesen und dekodiert, um den Rest des Flash-Speichers neu zu programmieren. In Verbindung mit dem Upload-Programm (normalerweise avrdude) wird die neue Skizze über die serielle Schnittstelle gesendet. Der Bootloader löscht Seiten des Flash-Speichers und ersetzt sie durch den neuen Code. Sobald dies erledigt ist, wird der neue Code ausgeführt.

  • Wenn keine Anweisungen eingehen, springt der Bootloader zur Adresse 0x0000, um die vorhandene Skizze auf der Karte auszuführen.


So ersetzen Sie den Bootloader

Eine alternative Methode, um einen Bootloader zu programmieren, ist die Verwendung einer Skizze, die ich vor einiger Zeit geschrieben habe.

  • Uno (oder ähnlich, wie Duemilanove)
  • Leonardo
  • Mega2560

Auf der "Programmier" -Karte wird die Skizze ausgeführt, in der Bootloader für eine Reihe von Karten fest programmiert sind. Sie verbinden die Programmierplatine mit der Zielplatine (der Platine, die den Bootloader benötigt) mit 6 Verbindungskabeln, wie in der Abbildung gezeigt.

Bootloader-Programmierer für Uno

Dieses besondere Foto zeigt ein Uno, das ein anderes programmiert.

Sie führen die Skizze aus (über den seriellen Monitor, um ihm Befehle zu geben). Zuerst wird der Zielchip identifiziert:

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 ...

Drücken Sie G , um es zu programmieren.

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 ...

Für einen Uno dauert dies eine Sekunde. Das Programmieren eines Mega2560 dauert 3 Sekunden.

Detaillierte Anleitung beim Atmega Bootloader Programmer

Code kann von Github heruntergeladen werden : nickgammon / arduino_sketches

Nick Gammon
quelle
Müssen Sie den Typ des Chips auswählen, auf den Sie brennen (Tools-> Board ..)? Welches Board wähle ich aus, wenn ich den Bootloader auf einen eigenständigen Chip brenne?
Camilo
Sie wählen den Kartentyp aus, mit dem Sie den Bootloader in der IDE brennen . Die Bootloader-Skizze erkennt den Typ der Zielplatine automatisch.
Nick Gammon