Bootloader brennen

15.04.2018

Um einen Bootloader auf einen Arduino zu brennen benötigt man einen AVR ISP Programmer.

Es gibt fertige, man kann sich aber für den Zweck auch aus einem 2. Arduino einen Programmer für Arduino Bootloader bauen.

 

Diamex ALL-AVR ISP-Programmer

All AVR ISP Programmer

Den Diamex ALL-AVR ISP-Programmer hatte ich vor einigen Jahren mal gekauft, also lag es nahe, diesen Programmer zu nutzen.

Die erste Hürde war, dieses Teil unter Windows 10 zum laufen zu bekommen ...

Es gibt keine Treiberunterstützung für Win10. Nach Recherchen im www bin ich auf folgenden Link gestoßen: libusbK-release

Damit lässt sich ein Treiber Setup für den Programmer erstellen.
Nach dem Installieren (oder Entpacken) libusbK-inf-wizard.exe starten und libusbk oder libusb0 auswählen, WinUSB funktioniert nicht ..

Mit diesem Installer kann nun der Treiber für den Diamex Programmer installiert werden.

In der Arduino IDE lässt er sich unter "AVRISP mkII" ansprechen.

 

 

 

 

Arduino als ISP Programmer nutzen

Eigenes Dev Board

Es ist auch möglich einen Arduino zu nutzen, um auf einen Zweiten einen Bootloader zu brennen. In meinem Beispiel habe ich die minimale Verdrahtung auf einer Lochraster Platine vorgenommen und direkt verlötet.

Die Methode auf dem Breadboard ist mir auf Dauer doch zu wackelig.


Ich nutze diese Lochrasterplatine als Test Shield für diverse Schaltungen. Im Moment sind ein PCA9685 12 Bit PWM Controller und ein MCP23017 port expander aufgesteckt. Damit kann man die bestehenden Arduino Ports über den I2C Bus sehr einfach erweitern. Dazu aber an anderer Stelle mehr.

 

Arduino als ISP Programmer Um den ersten Arduino als Programmer zu nutzen, muss noch der passende Sketch aufgespielt werden.

Unter Datei -> Beispiele -> ArduinoISP -> Arduino ISP laden und in den Programmer spielen
Unter Werkzeuge -> Programmer -> Arduino as ISP auswählen

Nach entsprechender Verdrahtung kann jetzt der Bootloader auf den 2. Arduino aufgespielt werden

 

Arduino als ISP Programmer - ISP Pin Header

Zum Schluß noch die Belegung des ISP Pin Headers, man kann also auch direkt auf einen Pin Header verdrahten und damit einen beliebigen Arduino über diesen ISP Port flashen.

AVR ISP Shield

Es gibt noch eine weitere Variante, wenn man nicht unbedingt basteln möchte, kann dieses Shield einfach auf einen UNO aufgesteckt werden und kann als Programmer genutzt werden.

Gekauft habe ich das Teil bei eBay. (Bei meinem Kauf sehr schnelle Lieferung in ca 1 - 2 Wochen)

Den FTDI Adapter ebenso (den Händler kann ich nicht empfehlen, sehr lange Lieferzeiten)

 

Um nur auf einem anderen Arduino einen Bootloader zu brennen, benötigt man nur noch den 6 poligen ISP Stecker, zur Not einzeln mit Steckbrücken verbinden. Hier bitte aufpassen, zB ist der ISP auf dem Nano um 180 Grad gegenüber dem UNO versetzt.

Falls man einen zB einen ATmega328P im Nullkraftsockel Programmieren möchte, benötigt man zusätzlich noch den FTDI Adapter.
Dies kann dann - nachdem der Bootloader geschrieben wurde - ebenso über die Arduino IDE machen, als ob ein Arduino angeschlossen wäre:
Um die Sache einfacher zu gestalten, habe ich direkt eine Steckbuchse aufgelötet. Einer der Kontakte bleibt frei, dieser ist beim FTDI Adapter nicht auf GND verdrahtet.


Den Bootloader des ATmega328P kann man auch ohne diesen Adapter schreiben.

Der Programmer kann mit dem mitgelieferten Sketch Arduino ISP betrieben werden.
In der Beschreibung wird auf einen anderen verwiesen, der auch nirgends aufzufinden ist .. ich habe den Sketch hier mit zum Download gestellt, es wird in dem Fall der Buzzer und die LEDs wie beschrieben mit angesteuert.
Es ist aber nicht notwendig diesen Sketch zu nutzen, der in der IDE mitgelieferte tut auch seinen Dienst.

Als Programmer auf jeden Fall immer "Arduino as ISP" auswählen

 

Nachdem ich auch recht lange nach dem Datenblatt und dem Sketch gesucht habe, stelle ich dies hier zum Download zur Verfügung.

AVR ISP Shield Manual.pdf

OPENSMART_ISP.zip

 

Bootloader flashen

In der Arduino IDE wie gezeigt den passenden Programmer und den korrekten Arduino einstellen, auf den gebrannt werden soll.

Es existiert inzwischen die Auswahl "Atmega 328p" und "Atmega 328p (Bootloader old)"

Die auf den Screenshots zu sehenden Einträge sind eigene Änderungen, um die Warnmeldungen beim Brennen mit dem "AVRISP mkII" zu unterdrücken.

Die Warnmeldungen sind nicht schlimm, der Bootloader wird trotzdem korrekt geschrieben.

Es gibt keine universellen *.config Files, die alle Programmer korrekt abbildet, dass diese Warnmeldungen nicht erscheinen.