Forum: Compiler & IDEs avrdude brennt Booloader nicht.


von dude (Gast)


Lesenswert?

Hallo,

habe Probleme beim Brennen des Bootloaders mit dem avrdude Version 5.10. 
Der MCU ist ein ATXMega256a3b.

Der Bootloader wird mit -Wl,-section-start=.text=0x40000 gelinkt daher 
ist der Offset im HEX File 0x40000 was beim Brennen zu einen "out of 
range" Fehler führt.

Habe den Offset mit "srec_cat.exe bootloader.hex -intel -offset -0x40000 
-o boot.hex -intel --address-length=2 --line-length=44" aus dem HEX File 
entfernt. Avrdude beklagt sich jetzt nicht mehr, die Bootloader Sektion 
bleibt aber nach dem Programmieren leer.

Wie kann ich den Bootloader mit dem avrdude Brennen?

Gruss

von Krapao (Gast)


Lesenswert?

http://savannah.nongnu.org/bugs/?28744

Du könntest aus dem Hexfile (mit Offset) ein raw binary File machen und 
das raw binary File brennen.

von Peter D. (peda)


Lesenswert?

dude schrieb:
> Habe den Offset mit "srec_cat.exe bootloader.hex -intel -offset -0x40000
> -o boot.hex -intel --address-length=2 --line-length=44" aus dem HEX File
> entfernt. Avrdude beklagt sich jetzt nicht mehr, die Bootloader Sektion
> bleibt aber nach dem Programmieren leer.

Du hast die Startadresse entfernt, also kann es nicht am Bootvektor 
stehen.
Das Programm wird an 0x0000 stehen.

Ein manipuliertes Hex-File wird niemals laufen!
Stimmt die Adresse nicht, mußt Du das dem Linker sagen!


Peter

von dude (Gast)


Lesenswert?

Ich bin der Meinung, dass avrdude die Firmware automatisch in das 
Segment des Bootloaders schreibt (an die Adresse 0x4000), wenn die 
Option -U flash:w:x.hex:i angegeben wird. Da sich dieser aber beklage, 
dass die Adresse 0x4000 ausserhalb des Speichers liegt, habe ich den 
Offset entfernt. Nach dem Programmieren würde ja alles wieder passen. 
Leider funktioniert dies aber nicht. Was mache ich falsch, wie kann man 
eine Firmware die bei Adresse 0x4000 beginnt programmieren?

von dude (Gast)


Lesenswert?

> Du könntest aus dem Hexfile (mit Offset) ein raw binary File
> machen und das raw binary File brennen.

Werde ich als nächstes Probieren, danke.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Hast du denn mal -U boot:w:x.hex:i probiert?  Vermutlich (siehe
Bugreport) wird das nur mit einem raw binary gehen, aber es sollte
zumindest ein Weg sein.

von Krapao (Gast)


Lesenswert?

Yes und das mit dem raw binary ist im Prinzip bei den avr-freaks 
beschrieben: 
http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&p=785790 
(vedderb  Jan 16, 2011 - 05:38 PM )

von dude (Gast)


Lesenswert?

Ich meinte -U boot:w:x.hex:i, habe die falsche Zeile kopiert.

von Krapao (Gast)


Lesenswert?

Diese Option würde ich so nicht verwenden, weil sie bei der :format 
Angabe beim -U wieder auf das "verXmaledeite" Intel-Hex Format setzt 
(:i).

1. Wie im OP mit Offset linken damit die Adressen innerhalb des 
Programmcodes stimmen. Das erzeugt eine Datei Elfdatei oder Objdatei und 
anschliessend daraus eine x.hex

2. Aus dem Intel-Hex Format x.hex in das raw-Binärformat x.bin umwandeln 
("objcopy can be used to generate a raw binary file by  using  an 
output target  of  binary (e.g., use -O binary).")

3. Das raw-Binärfile mit -U boot:w:x.bin brennen.

Schritt 1. müsste sich auch so modifizieren lassen, dass beim Umwandeln 
der statt der Hexdatei direkt die raw-Binärdatei erzeugt wird

von dude (Gast)


Lesenswert?

Habe folgendes gemacht:

1. Binary File erzeugt
avr-objcopy -O binary -R .eeprom -R .fuse -R .lock -R .signature -R 
.fw_valid_byte bootloader.elf bootloader.bin

2. Bootloader geschrieben (Meldung vom avrdude siehe unten)
avrdude.exe -c jtag2 -p x256a3b -P usb -U boot:w:bootloader.bin

Leider bleibt die Bootloader Sektion leer (LOCK Bits sind keine 
gesetzt).

Muss an diesem Punkt Schluss machen, gruss



Ausgabe avrdude:
F:\avrdude>avrdude.exe -c jtag2 -p x256a3b -P usb -U 
boot:w:bootloader.bin

avrdude.exe: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 
0.37s

avrdude.exe: Device signature = 0x1e9843
avrdude.exe: reading input file "bootloader.bin"
avrdude.exe: input file bootloader.bin auto detected as raw binary
avrdude.exe: writing boot (3339 bytes):

Writing | ################################################## | 100% 
0.73s

avrdude.exe: 3339 bytes of boot written
avrdude.exe: verifying boot memory against bootloader.bin:
avrdude.exe: load data boot data from input file bootloader.bin:
avrdude.exe: input file bootloader.bin auto detected as raw binary
avrdude.exe: input file bootloader.bin contains 3339 bytes
avrdude.exe: reading on-chip boot data:

Reading | ################################################## | 100% 
0.72s

avrdude.exe: verifying ...
avrdude.exe: verification error, first mismatch at byte 0x0000
             0xf3 != 0xff
avrdude.exe: verification error; content mismatch

avrdude.exe done.  Thank you.

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.