Inhaltsverzeichnis

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