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