Hallo,
ich versuche auf Basis des Artikels hier auf uC.net
http://www.mikrocontroller.net/articles/AVR_Bootloader_in_C_-_eine_einfache_Anleitung
Leider ist dort alles für AtmelStudio ausgelegt. Ich möchte es mit
avr-gcc and friends und avrdude unter linux command line auch
hinkriegen.
Da ich schon einige mcu kaputt gemacht habe, möchte ich hier erstmal
nachfragen, ob soweit alles richtig ist und noch eine Frage anfügen.
Die Dateie sind aus dem oben erwähnten Artikel.
Ich möchte es mit einem Arduino Duemilanove ATmega328P versuchen.
Programmer ist ein AVR ISP MKII
1 | ./obj
|
2 | ./src/main_bl.c
|
3 | uart.c
|
4 | uart.h
|
Folgende Kommandos sind möglicherweise korret:
add clock info in main_bl.c
"#define F_CPU 16000000UL"
1 | avr-gcc -mmcu=atmega328p -Os -g -c ./src/uart.c -o ./obj/uart.o
|
2 | avr-gcc -mmcu=atmega328p -Os -g -c ./src/main_bl.c -o ./obj/main_bl.o
|
3 | avr-gcc -mmcu=atmega328p ./obj/main_bl.o ./obj/uart.o -o ./bootloader.elf
|
4 | avr-objcopy -j .text -j .data -O ihex ./bootloader.elf ./bootloader.hex
|
upload bootloader:
1 | avrdude -cstk500v2 -pm328p -Pusb -e -U lock:w:0x3F:m -U efuse:w:0x05:m -U hfuse:w:0xda:m -U lfuse:w:0xFF:m -U flash:w:./bootloader.hex -U lock:w:0x0F:m
|
Hier weiss ich nicht was es mit den beiden "lock" write Optionen auf
sich hat und ich weiss nicht woher avrdude die Information bekommt wo
der Bootsektor beginnt. Liest er das aus den fuses oder muss ich das im
Kommando angeben: so wie in AVRStudio mit -Text=0x1800
hier beim ATmega328p sollte es (0x3C00w * 2 =) 0x7800 lauten, denke ich
mal (?)
Fuses habe ich nicht geändert
avrdude -cstk500v2 -pm328p -Pusb -v -U signature:r:
avrdude: safemode: Fuses OK (E:05, H:DA, L:FF)
Boot Flash section size=1024words, Boot start address=$3C00 [BOOTSZ=01]
Ist die Erzeugung der hex-Datei richtig ?
Wie soll ich die Bootsektorstartadresse angeben ?
Wie sollte der upload Befehl für avrdude aussehen ?
vielen Dank und Gruß
wally