ConTiki Raven

Aus Verteilte Systeme - Wiki
Wechseln zu: Navigation, Suche

Projektbeschreibung

Installation

  • Contiki 2.5 herunterladen und entpacken
  • AVR Toolchain installieren (avr-libc, binutils-avr, gcc-avr, gdb-avr, avrdude)

Übertragen von Software

Wenn man das Makefile Modell von Contiki verwendet, gibt es spezielle Targets mit denen man das kompilierte Programm auf den Raven übertragen kann.

In der Makefile des Projekts kann man angeben welcher Programmer verwendet wird. Da in diesem Projekt der AVR Dragon zum Einsatz kommt, lautet die entsprechende Zeile in der Makefile

AVRDUDE_PROGRAMMER := -c dragon_jtag

Flash und EEPROM werden in zwei Aufrufen getrennt übertragen. Mit Projektname.u überträgt man in den Flashspeicher. Mit Projektname.eu überträgt man in das EEPROM.

$ make helloworld.u
$ make helloworld.eu

Man kann die Programmierung auch manuell mit avrdude anstoßen. Dazu muss man zunächst die erzeugte .elf-Datei nach Flash und EEPROM aufteilen. Mit folgendem Shellskript "split.sh" lässt sich das erledigen:

#!/bin/sh
avr-objcopy -R .eeprom -R .fuse -R .signature -O ihex $1.elf $1.flash

avr-objcopy -j .eeprom --set-section-flags=.eeprom="alloc,load" --change-section-lma .eeprom=0 -O ihex $1.elf $1.eeprom

echo "fuse settings:"
avr-objdump -d -S -j .fuse $1.elf

Am Beispiel von ravenusbstick.elf:

 $ ./split.sh ravenusbstick

Erzeugt folgende Ausgabe ...

fuse settings:

ravenusbstick.elf:     file format elf32-avr


Disassembly of section .fuse:

00820000 <__fuse>:
  820000:	de 99 ff                                            ...

... und die Dateien ravenusbstick.eep (EEPROM) und ravenusbstick.hex (Flash)

Die drei Bytes 0xde, 0x99 und 0xff entsprechen von links nach rechts den low, high und extended Fuses. Diese werden über avrdude wie folgt gesetzt:

 sudo avrdude -c dragon_jtag -P usb -p usb1287 -Ulfuse:w:0xDE:m -Uhfuse:w:0x99:m -Uefuse:w:0xFF:m

EEPROM und Flash werden mit folgendem Befehl auf den RZ Raven USB Stick geschrieben:

 sudo avrdude -c dragon_jtag -P usb -p usb1287 -Ueeprom:w:ravenusbstick.eeprom -Uflash:w:ravenusbstick.flash


Um die Arbeitsabläufe zu vereinfachen kann man folgendes Script verwenden um Software auf den ATmega 1284p zu übertragen:

#!/bin/sh

FUSES=`avr-objdump -d -j .fuse $1.elf | grep -A 1 '<__fuse>' | tail -n 1 | cut -f 2`
LFUSE=`echo $FUSES | cut -d ' ' -f 1`
HFUSE=`echo $FUSES | cut -d ' ' -f 2`
EFUSE=`echo $FUSES | cut -d ' ' -f 3`

echo "Low fuse: $LFUSE"
echo "High fuse: $HFUSE"
echo "Ext. fuse: $EFUSE"

avrdude -c dragon_jtag -p m1284p -P usb -U flash:w:$1.flash -U eeprom:w:$1.eeprom -Uefuse:w:0x$EFUSE:m -Uhfuse:w:0x$HFUSE:m -Ulfuse:w:0x$LFUSE:m

Fallstricke

Temperatursensor

Der Temperatursensor ist am ATmega 3290 des RZ Raven angeschlossen. Er hängt am gleichen Port wie der JTAG Anschluss. Daher wird man bei aktiviertem JTAG generell keine sinnvollen Temperaturwerte auslesen können. Als Workaround kann man den Raven kurz in SLEEP oder DOZE Zustand versetzen und wieder aufwecken. Danach ist die JTAG Funktion deaktiviert und ein Auslesen der Temperatur möglich.

Laut Dokumentation sollte sich die JTAG Funktion auch über den Menüpunkt DEBUG ausschalten lassen. Im Test hat dies allerdings nicht funktioniert, der Wert für DEBUG schaltet sich nach verlassen des Menüs selbstständig von OFF auf ON.

Lautsprecher

Das bei Contiki 2.5 mitgelieferte Programm für das Display (ATmega 3290) kann verschiedene Melodien auf dem Lautsprecher ausgeben, bzw. Signaltöne ausgeben. Dies geschieht u.a. als Signal für empfangene PING Pakete, beim Einschalten des Raven, sowie vor und nach der Programmierung mittels JTAG Interface. Auf Dauer kann dies ziemlich lästig sein, daher wurde der Code zur Ansteuerung des Lautsprechers manuell auskommentiert. Zwei Aufrufe der Funktion beep() sowie ein Aufruf der Funktion play_ringtone() wurden in $CONTIKI/platform/avr-ravenlcd/uart.c auskommentiert, um die Störgeräusche zu deaktivieren. Alternativ könnte man auch den Code in beep.c im gleichen Verzeichnis ersetzen.