Der Bootloader für den Arduino Due lässt sich in wenigen Schritten neu erstellen. In diesem Artikel wird gezeigt wie.
Der Bootloader des Arduino Due befindet sich auf dem Atmega16u2, welcher sich in unmittelbarer Nähe zum Stromanschluss befindet. Leider lässt sich der zum jetzigen Zeitpunkt ausgelieferte Bootloader nicht mit der Arduino IDE kompilieren. Ursachen dafür sind, dass der Atmega16u2 vom mitgelieferten Compiler(avr-gcc) nicht unterstützt wird und der Compiler, der mit der Arduino IDE in Version 1.5.7 (Linux x86_64) ausgeliefert wird, zu neu für den Bootloader zusein scheint.
Der benötigte Compiler ist bei der lokalen Linux Distribution auch bereits in Version 4.9 enthalten und somit auch zu neu um den Bootloader zu erstellen. Aus diesem Grund wird auf ein Ubuntu 12.04 System zurückgegriffen. Für dieses HowTo wurde sich für die Server Variante entschieden, weil die Installation minimal ist und relativ schnell geht. Alternativ kann natürlich auch die Desktop Version oder eine Docker Instanz verwendet werden.
Nach der Installation werden weitere Pakete benötigt. Welche wie folgt installiert werden können.
$ sudo apt-get install avr-libc gcc-avr make unzip avrdude
Ist dies geschafft kann die Arduino IDE und die benötigte USB Bibliothek heruntergeladen werden.
Wichtiger Hinweis: Unbedingt auf die Version der LUFA Bibliothek achten. Der Bootloader lässt sich zum jetzigen Zeitpunkt nur mit der Version 100807 erstellen.
$ wget http://www.fourwalledcubicle.com/files/LUFA/LUFA-100807.zip
$ wget http://downloads.arduino.cc/arduino-1.5.7-linux64.tgz
Anschließend beide Archive entpacken.
$ unzip LUFA-100807.zip
$ tar -xvf arduino-1.5.7-linux64.tgz
Nach dem entpacken die Quellen der Firmware in das Projects-Verzeichnis der USB Bibliothek kopieren.
$ cp -a arduino-1.5.7/hardware/arduino/sam/firmwares/atmega16u2/arduino-usbserial LUFA\ 100807/Projects/
Zum Erstellen des Bootloaders muss in das gerade kopierte Verzeichnis gewechselt werden.
$ cd LUFA\ 100807/Projects/arduino-usbserial
In diesem Verzeichnis sollte das Erstellen des Bootloader mit zwei Befehlen möglich sein.
$ make clean
$ make
[...]
--------- Target Information ---------
AVR Model: atmega16u2
Board: USER
Clock: 16000000Hz CPU, 16000000Hz Master
--------------------------------------
Size after:
AVR Memory Usage
----------------
Device: atmega16u2
Program: 4410 bytes (26.9% Full)
(.text + .data + .bootloader)
Data: 314 bytes (61.3% Full)
(.data + .bss + .noinit)
War der Erstellungsprozess erfolgreich, liegt die Firmware in Form einer HEX-Datei mit dem Namen Arduino-usbserial.hex vor. Diese Datei kann zum Beispiel mit dem Programm avrdude auf den Atmega16u2 geladen werden. Wie der Arduino dafür angeschlossen werden muss ist auf der Webseite "Upgrading the firmware of the Arduino Due Programming port 16U2"(englisch) beschrieben. Wird ein USBtinyISP Programmiergerät verwendet, könnte der benötigte Befehl wie folgt aussehen.
$ sudo avrdude -p m16u2 -c usbtiny -vvv -U flash:w:Arduino-usbserial.hex:i
Anschließend befindet sich der Bootloader auf dem Mikrocontroller und der Arduino Due sollte sich wieder wie gewohnt über den Programmer-Port programmieren lassen.
Links
- Webseite: LUFA (englisch)
- Webseite: Upgrading the firmware of the Arduino Due Programming port 16U2 (englisch)
- Webseite: Arduino (englisch)
- Webseite: Ubuntu (englisch)