====== Flashen des AVRs direkt aus Instant Contiki mit avrdude ======
Das Entwickeln mit Instant Contiki kann weiter vereinfacht werden, wenn auf AVR Studio verzichtet wird. Durch den Einsatz von [[http://www.nongnu.org/avrdude/|avrdude]] kann auch der Upload auf den Mikrocontroller direkt aus Instant Contiki erfolgen. Dazu muss avrdude auf Instant Contiki installiert werden.
Mit Datum vom 15.2.2016 wird allerdings immer noch ''avrdude'' 6.0.1 aus den Paketquellen installiert. Es empfiehlt sich auf die Version 6.2 zu wechseln (selbst kompilieren, siehe unten).
sudo apt-get install avrdude
:!: avrdude 6.2 on OSX (''$ brew install avrdude'')
===== Grundsätzlicher Ablauf =====
Der Aufruf von avrdude geschieht über die Kommandozeile mit
sudo avrdude -c [Programmiergerät] -P [Anschlussport der Programmers] -p [AVR Typbezeichnung] -Uflash:w:[Name der Datei zum Upload]
wobei der letzte Befehlsteil -U wie Upload besagt, dass der flash-Speicher beschrieben (w wie write) werden soll. Wird z.B. als Programmer der JTAG MKII benutzt, als Zielmikrocontroller der Raven USB Stick (AT90USB1287), als Quelldatei die Datei ''ravenusbstick.hex'' und als Zielspeichertyp das Flashrom des Mikrocontrollers, dann sieht der Befehl aus wie folgt.
sudo avrdude -c jtagmkII -P usb -p usb1287 -U flash:w:ravenusbstick.hex
Soll auf den gleichen Mikrocontroller der EEPROM beschrieben werden, so funktioniert folgender Befehl.
sudo avrdude -c jtagmkII -P usb -p usb1287 -U eeprom:w:ravenusbstick.eeprom
:!: Seit avrdude Version 6.2 kann auch direkt die elf-Datei als Quelle verwendet werden:
sudo avrdude -c jtag3 -P usb -p usb1287 -U flash:w:ravenusbstick.elf
sudo avrdude -c jtag3 -P usb -p usb1287 -U eeprom:w:ravenusbstick.elf
==== avrdude Device-Parameter für ausgewählte Microcontroller im Labor ====
^ Board ^ Mikrocontroller ^ avrdude-Parameter ^
| Atmel Raven USB-Stick | AT90USB1287 | usb1287 |
| Atmel Raven | ATmega1284P | m1284p |
| AN Solutions | ATmega1281 | m1281 |
==== avrdude Parameter für ausgewählte Programmieradapter ====
^ Programmieradapter ^ avrdude-Parameter ^
| Atmel JTAG ICE mkII | jtagmkII |
| Atmel AVR JTAGICE3 in JTAG mode | jtag3 |
==== Abfrage der Device Signatur ====
Bevor versucht wird den Mikrocontroller neu zu programmieren ist es ratsam zu überprüfen,
ob die Parameter richtig gewählt wurden. Mit der Kommandozeilenoption ''params'' lässt sich die
Device Signatur abfragen und vergleichen:
sudo avrdude -c jtag3 -p m1281 params
===== Installation einer aktuelleren Version von ''avrdude'' =====
:!: **AVR JTAGICE3**
InstantContiki installiert aus den Paketquellen immer noch 6.0.1. Der JTAGICE3 mit neuerer Firmware benötigt
mindestens ''avrdude'' 6.1, da Atmel das Protokoll geändert hat.
Mit den folgenden Befehlen werden benötigte Bibliotheken für die Übersetzung von ''avrdude'' installiert:
sudo apt-get install libusb-dev
sudo apt-get install libusb-1.0-0-dev
sudo apt-get install libelf-dev
avrdude kann hier heruntergeladen werden: http://download.savannah.gnu.org/releases/avrdude/ \\
Es wird anschließend mit:
./configure
make
sudo make install
übersetzt und installiert.
===== Herstellen der .hex und .eeprom Files mit avr-objcopy =====
Prinzipiell sollte das Flashen mit .elf Files in avrdude ebenfalls möglich sein, leider ergaben sich in der Praxis häufig Probleme, weshalb empfohlen wird die .elf Datei in eine .hex Datei für das Flash ROM und eine hex Datei für den EEPROM zu zerlegen.
Das Programm avr-objcopy ermöglicht es aus einer .elf Datei einzelne Sections zu extrahieren bzw. ein Format in ein anders zu konvertieren. Es erfüllt also genau die gewünschte Funktion. Es kann über ''sudo apt-get install avrdude'' innerhalb Instant Contiki installiert werden.
Nach dem Kompilierungsvorgang des Contiki Quellcodes, und somit der Erstellung der .elf Datei, kann mit dem Befehl
avr-objcopy -O ihex ravenusbstick.elf ravenusbstick.hex
Die .elf Datei in eine .hex Datei konvertiert werden. Diese Datei dient nachher zum flashen des ROM Speichers. Weiterhin ermöglicht der Befehl
avr-objcopy -O ihex -I elf32-avr -j .eeprom ravenusbstick.elf ravenusbstick.eeprom
Die Daten für den EEPROM in die Datei ravenusbstick.eeprom zu speichern.
===== Automatisieren aller Vorgänge mit make =====
Alle zuvor besprochenen Schritte können natürlich gleich im Makefile automatisiert werden. Da dieses für die Kompilierung sowieso verwendet wird genügt es dieses mit den vorher gezeigten Befehlen zu ergänzen. Zum Beispiel das folgende ''Makfile'' für den ''ravenusbstick'':
all:
${MAKE} TARGET=avr-ravenusb MIB_INIT=mib-init-ravenusb.c NOAVRSIZE=1 -f Makefile.ravenusbstick ravenusbstick.elf
avr-objcopy -O ihex -R .signature -R .fuse -R .eeprom ravenusbstick.elf ravenusbstick.hex
avr-objcopy -O ihex -I elf32-avr -j .eeprom ravenusbstick.elf ravenusbstick.eeprom
avr-size -C --mcu=at90usb1287 ravenusbstick.elf
clean:
${MAKE} -f Makefile.ravenusbstick clean
rm -rf obj_avr-ravenusb
rm symbols.c symbols.h ravenusbstick.elf ravenusbstick.hex ravenusbstick.eeprom
upload_flash:
avrdude -c jtagmkII -P usb -p usb1287 -Uflash:w:ravenusbstick.hex
upload_eeprom:
avrdude -c jtagmkII -P usb -p usb1287 -Ueeprom:w:ravenusbstick.eeprom
Innerhalb des Abschnits ''all:'' sind in der zweiten und dritten Zeile die beiden Aufrufe von avr-objcopy, die im vorherigen Abschnitt besprochen wurden. Der eigentlich Upload, besprochen im ersten Abschnitt dieser Seite, befindet sich in den Unterpunkten ''upload_flash:'' und ''upload_eeprom:'', somit kann der EEPROM und das ROM einzeln beschrieben werden. Der eigentlich Aufruf geschieht dann mit ''make [Makefile Abschnitt]'' also zum z.B. flashen des ROM mit ''make upload_flash''.
===== Tutorial =====
http://www.ladyada.net/learn/avr/avrdude.html