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
)
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
Board | Mikrocontroller | avrdude-Parameter |
---|---|---|
Atmel Raven USB-Stick | AT90USB1287 | usb1287 |
Atmel Raven | ATmega1284P | m1284p |
AN Solutions | ATmega1281 | m1281 |
Programmieradapter | avrdude-Parameter |
---|---|
Atmel JTAG ICE mkII | jtagmkII |
Atmel AVR JTAGICE3 in JTAG mode | jtag3 |
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
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.
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.
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
.