Forum: Mikrocontroller und Digitale Elektronik Bootloader erzeugen u uploaden


von Wally W. (wally234)


Angehängte Dateien:

Lesenswert?

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

von Wally W. (wally234)


Lesenswert?

1
avr-objdump -h -S -j .text -j .data ./bootloader.elf > ./bootloader.lst
2
3
4
./bootloader.elf:     file format elf32-avr
5
6
Sections:
7
Idx Name          Size      VMA       LMA       File off  Algn
8
  0 .data         0000007e  00800100  000002d4  00000368  2**0
9
                  CONTENTS, ALLOC, LOAD, DATA
10
  1 .text         000002d4  00000000  00000000  00000094  2**1
11
                  CONTENTS, ALLOC, LOAD, READONLY, CODE

Ich glaube dieser code steht an der falschen Adresse.
Müsste nicht "text/VMA" anstatt 00000000  00007800 stehen ?
Wie macht man das richtig ?

von Wally W. (wally234)


Lesenswert?

das "lock" schüztz wohl den Bootloaderbereich vor beschreiben (?)
1
-U lock:w:0x3F:m            ...     -U lock:w:0x0F:m
2
328p_unlock_bits=0x3F               328p_lock_bits=0x0F

und beim linken, kann man die Startadresse für .text section festlegen 
(?)
1
 avr-gcc -mmcu=atmega328p -Wl,-Ttext=0x7800 ./obj/main_bl.o ./obj/uart.o -o ./bootloader.elf
2
3
avr-objdump -h -S -j .text -j .data -j .bss ./bootloader.elf > ./bootloader.lst
4
5
6
./bootloader.elf:     file format elf32-avr
7
8
Sections:
9
Idx Name          Size      VMA       LMA       File off  Algn
10
  0 .data         0000007e  00800100  00007ad4  00000368  2**0
11
                  CONTENTS, ALLOC, LOAD, DATA
12
  1 .text         000002d4  00007800  00007800  00000094  2**1
13
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
14
  2 .bss          00000045  0080017e  0080017e  000003e6  2**0
15
                  ALLOC

da hfuse=0xDA ist, ist auch BOOTRST gesetzt, da gerade dec218, bit0 = 0

ist das soweit OK ?

von Wally W. (wally234)


Angehängte Dateien:

Lesenswert?

sieht gut aus soweit

von Georg G. (df2au)


Lesenswert?

Wally W. schrieb:
> schon einige mcu kaputt gemacht habe

Per ISP lässt sich der Chip nicht permanent in den Himmel schicken.

von Wally W. (wally234)


Lesenswert?

OK, das wäre schön.

Habe versucht eine eizelne fuse zu schreiben, dananch ging nichts mehr.
Sogar signature ist jetzt falsch.Der chip liegt hier noch,
was kann ich machen ?

von Georg G. (df2au)


Lesenswert?

"avr fuse doctor" bei Google eingeben. Oder hier im Forum danach suchen. 
Du bist nicht der erste und einzige mit dem Problem.

von Wally W. (wally234)


Lesenswert?

das ist eine Hardwarelösung ?
Also keine schnelle Sache für diese Wochende,
richtig ?
Und einen shop in EU kann ich auch nicht finden, wenigsten für die 
Platine.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.