Boot-Loader

Der Flash-Speicher von Atmega8 ist in zwei Bereiche geteilt; der Bootloader-Bereich startet entsprechend dieser Tabelle

Wenn der Prozessor auf Bootloader umgestellt ist (über die FUSE Bits) startet er nach einem Reset bei der oben angegebenen Adresse. Im Linker muß daher eingestellt werden, dass das Programm erst bei dieser Einsprungsadresse beginnt.

Einsprungsadresse hier 0xC00; da der Programmspeicher von Atmega 16bit breit ist, das Intel-Hex-File aber ein 8-Bit Format hat muß die Adresse verdoppelt werden (hier 0x1800); diese Adresse wird im gcc-avr Linker eingestellt (siehe Abbildung)



-Wl,--section-start=.text=1800



für VMLAB:

  1. im Projektfile ein eigenes Makefile angeben
    .GCCMAKE "makefile.mak"

  2. das automatisch erzeugte make-File __auto.mak nach makefile.mak kopieren

  3. im Makefile makefile.mak die folgenden Zeilen suchen und editieren

# Optional linker flags.
#  -Wl,...:   tell GCC to pass this to linker.
#  -Map:      create map file
#  --cref:    add cross reference to  map file
LDFLAGS =  -Wl,--section-start=.text=1800
# Additional libraries
# Minimalistic printf version
#LDFLAGS += -Wl,-u,vfprintf -lprintf_min
# Floating point printf version (requires -lm below)
#LDFLAGS += -Wl,-u,vfprintf -lprintf_flt
# -lm = math library
#LDFLAGS += -lm
LDFLAGS += -lm -Wl,-Map=$(TARGET).map -Wl,--cref

Metaboard und usbasploader

Als Referenzboard wird Metaboard verwendet

http://metalab.at/wiki/Metaboard

Der Bootloader arbeitet ohne USB Controller direkt mit dem AVR

http://www.obdev.at/products/vusb/usbasploader.html



Makefile-Kopf

F_CPU = 16000000 
DEVICE = atmega8 
BOOTLOADER_ADDRESS = 1800 
FUSEOPT = $(FUSEOPT_8) 
LOCKOPT = -U lock:w:0x2f:m 

PROGRAMMER = -c stk500 -P /dev/ttyUSB0 
# PROGRAMMER contains AVRDUDE options to address your programmer 

FUSEOPT_8 = -U hfuse:w:0xc0:m -U lfuse:w:0x9f:m 
FUSEOPT_88 = -U hfuse:w:0xd6:m -U lfuse:w:0xdf:m -U efuse:w:0x00:m 
FUSEOPT_168 = -U hfuse:w:0xd6:m -U lfuse:w:0xdf:m -U efuse:w:0x00:m 
# You may have to change the order of these -U commands. 

Terminal-Software

Der Bootloader ist mit dem USBASP Programmer kompatibel; als Terminal-Software auf dem Ubuntu-Rechner kann AVRDUDE verwendet werden

avrdude -p m8 -c usbasp -t 



AVRUSBBoot - USB bootloader for Atmel AVR controllers



http://www.fischl.de/avrusbboot/

Dieses Projekt verwendet einen ATMEGA8 mit 12MHz!!! und eine eigene Software für den Download auf den Bootloader. Die Pins sind gegenüber Metaboard verändert; im entsprechenden Headerfile kontrollieren!



  1. http://www.fischl.de/avrusbboot/avrusbboot.2006-06-25.tar.gz herunterladen und entpacken

  2. AVR flashen
    avrdude -p m8 -c stk500 -P /dev/ttyUSB0 -U flash:w:main.hex

  3. Software kompilieren; Voraussetzung ist, dass man die USBLIB installiert hat; bei mir Ubuntu 8.10: libusb++ in den Synaptics Paketquellen installieren; anschließend funzt make

  4. Board reset

  5. >sudo avrusbboot test.hex lädt dann den Code ins Flash



STK500 als Board

es genügt, einen Stecker zu löten, der die Zenerdioden und die drei Widerstände enthält, dann kann man mit dem STK500 diese Systeme testen.

Es muß ein Quarz auf das STK500 gesteckt werden; Achtung auf die Jumper-Settings!





Fehlerquellen

  1. Jumper-Settings auf dem STK500 Board: für den Onboard-Quarz muß XTAL gejumpert sein und OSCSEL-Jumper auf Pin 2-3 (links)

  2. AVR-Studio kommt mit den Linker-Settings nicht zurecht; es war mir nicht möglich, den Bootloader-Code in den oberen Flash-Bereich zu verschieben

  3. bei den Projekten sind Makefiles mitgeliefert; ein Einbinden der Projekte in AVRStudio bzw. ECLIPSEAVR war mir nicht möglich