Forum: Mikrocontroller und Digitale Elektronik Bootloader + avrdude: kleinere Probleme


von Hermann-Josef M. (hermann-josef)


Lesenswert?

Hallo Leute,

bin gerade dabei, entsprechend dem Artikel 
http://www.mikrocontroller.net/articles/AVR_Bootloader_in_C_-_eine_einfache_Anleitung 
mit einem bootloader herum zu experimentieren. Allerdings ist die 
verwendete Platform eine leicht andere:
- ATmega32 auf Pollin AVR-NET-IO
- Linux (SuSE 11.2)
- mit avrdude 5.5 (bzw. 5.10)
- und minicom 2.3

Merkwürdigerweise flasht avrdude immer mehr Bytes als es aufgrude der 
Ausgabe von avrsize
1
   text    data     bss     dec     hex filename
2
   1724     214      69    2007     7d7 bootload1.elf
bzw. der Größe von bootload1.hex (ca. 130 Zeilen, Startadresse 0x7000) 
zu erwarten ist.
1
avrdude -p m32 -c usbasp -P usp -e -y -U flash:w:bootload1.hex                                                                                      
2
3
avrdude: AVR device initialized and ready to accept instructions
4
5
Reading | ################################################## | 100% 0.00s
6
7
avrdude: Device signature = 0x1e9502
8
avrdude: erasing chip               
9
avrdude: erase-rewrite cycle count is now 39
10
avrdude: reading input file "bootload1.hex" 
11
avrdude: input file bootload1.hex auto detected as Intel Hex
12
avrdude: writing flash (30610 bytes):                       
13
14
Writing | ################################################## | 100% 14.89s
15
16
17
18
avrdude: 30610 bytes of flash written
19
avrdude: verifying flash memory against bootload1.hex:
20
avrdude: load data flash data from input file bootload1.hex:
21
avrdude: input file bootload1.hex auto detected as Intel Hex
22
avrdude: input file bootload1.hex contains 30610 bytes      
23
24
...
25
26
avrdude: verifying ...
27
avrdude: 30610 bytes of flash verified
28
29
avrdude: safemode: Fuses OK
30
31
avrdude done.  Thank you.

Die zweite Merkwürdigkeit ist die, dass es mir nicht gelingt, das 
User-Programm zu flashen, danach ist der Bootloader weg...
1
avrdude -p m32 -c usbasp -P usp -y -U flash:w:user1.hex
Die '-e'-Option (= erase flash) wurde weggelassen und eigentlich sollte 
sich da immer noch der bootloader melden...

In einem frühen Entwicklungsstadium des Bootloaders (siehe o.g. Artikel) 
kann der Bootloader noch nicht flashen, das Userprogramm muss also 
händisch in den AVR übertragen werden.

Das gelingt dann nur so, wie hier 
Beitrag "Re: AVR-GCC - Bootloader & Nutzprogramm in einem. Wie?" vorgeschlagen - 
aneinanderhängen und erste Endemarkierung entfernen.

Abgesehen von diesen beiden Stolpersteinen funktioniert der bootloader 
am Ende wie im Artikel beschrieben, ich kann dann also ein Hex-File via 
minicom in den AVR übertragen.

Noch einige Infos:
- lfuse reads as EF
- hfuse reads as 80
- Linkeroption für bootload1.elf: -Ttext=0x7000
- avr-gcc -v -> gcc version 4.1.2 20070115 (OK, nicht so frisch ;))

Bei den avrfreaks wurde ein solches Verhalten bei früheren Versionen von 
avrdude bei bestimmten Programmieradaptern diskutiert, ist mir aber 
nicht klar, ob es ein spezifisches oder allgemeines Problem des avrdude 
ist.

Vielleicht kennt jemand das Problem und kann mir sagen, wo ich etwas 
falsch gemacht habe?

Danke schon mal
Hermann-Josef

von g457 (Gast)


Lesenswert?

Zumindest da kann ich meinen Senf dazugeben:

> Die '-e'-Option (= erase flash) wurde weggelassen und eigentlich sollte
> sich da immer noch der bootloader melden...

Kuckst Du manpage:
1
          -D      Disable auto erase for flash.  When the -U option with
2
                   flash memory is specified, avrdude will perform a chip
3
                   erase before starting any of the programming operations,
4
                   since it generally is a mistake to program the flash with‐
5
                   out performing an erase first. [..]

HTH

von Atmel (Gast)


Lesenswert?

Warum nicht einfach die "lock" fuses setzen, die Verhindern doch das 
überschreiben des Bootloaders (ausser bei -e Option).

von Hermann-Josef M. (hermann-josef)


Lesenswert?

Hallo g457,

Danke, das habe ich in der Tat übersehen, vermutlich hat es der avrdude 
sogar ausgegeben... ;(

So geht es dann:
1
avrdude -p m32 -c usbasp -P usp -y -D -U flash:w:user1.hex

Danke nochmals
Hermann-Josef

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.