AVR Dragon kann fuses nicht schreiben

OP #4335378
Lesenswert?

Hallo zusammen

Ich habe einen AVR Dragon, mit dem ich die Fuses eines Attiny48 
schreiben möchte. Per Kommandozeile kann ich die Fuses auslesen, wenn 
ich jedoch sie schreiben möchte kommen diese Meldungen:
1
>avrdude -p attiny48 -P usb -c dragon_isp -U hfuse:w:testfile.fuse -B
2
 10 -v -v
3

4
avrdude: Device signature = 0x1e9209
5
avrdude: safemode: lfuse reads as 6E
6
avrdude: safemode: hfuse reads as DF
7
avrdude: safemode: efuse reads as 1
8
avrdude: reading input file "testfile.fuse"
9
avrdude: input file testfile.fuse auto detected as Intel Hex
10
avrdude: ERROR: address 0x0003 out of range at line 1 of testfile.fuse
11
avrdude: write to file 'testfile.fuse' failed
12

13
avrdude: safemode: lfuse reads as 6E
14
avrdude: safemode: hfuse reads as DF
15
avrdude: safemode: efuse reads as 1
16
avrdude: safemode: Fuses OK
17
avrdude: stk500v2_jtagmkII_close()
18
avrdude: jtagmkII_close()
19
avrdude: jtagmkII_close(): Sending sign-off command: 0x80 (1 bytes msg)
20

21
avrdude done.  Thank you.

Das Fuses-File habe ich mit CodeBlocks generiert.
Programmieren konnte ich schon mit einem anderen AVR-Tool. Möchte jetzt 
wegen dem Debuggen jedoch auf den Dragon ändern.

Suche eine Lösung wie ich die Fuses programmieren kann und dann das 
ganze Programm draufladen.

MfG
Gast #4335384
Lesenswert?

TM F. schrieb:
>
1
> avrdude: input file testfile.fuse auto detected as Intel Hex
2
> avrdude: ERROR: address 0x0003 out of range at line 1 of testfile.fuse
3
> avrdude: write to file 'testfile.fuse' failed
4
>

Hat also nichts mit der 'testfile.fuse' zu tun. Deshalb fehlt sie auch 
im Anhang. Außerdem weißt du welche Fuses du wie setzten möchtest. Gut, 
daß ich den Dragon nicht kenne.
#4335581
Lesenswert?

TM F. schrieb:
>avrdude -p attiny48 -P usb -c dragon_isp -U hfuse:w:testfile.fuse ...
> ...
> avrdude: reading input file "testfile.fuse"
> avrdude: input file testfile.fuse auto detected as Intel Hex
> avrdude: ERROR: address 0x0003 out of range at line 1 of testfile.fuse

Jede Fuse ist genau 1 Byte. Das Hexfile darf also auch nur genau 1 Byte 
enthalten. Deins enthält anscheinend 3.

Es ist allgemein unüblich, Werte für die Fuses in ein Hexfile zu 
schreiben. Eher gibt man sie direkt an:

1
avrdude ... -U hfuse:w:0xAB:m -U efuse:w:0xFF:m

siehe dazu das AVRdude Manual zur Bedeutung des :m Modifiers.

Eine andere nette Variante besteht darin, die Fuses in den Quellcode zu 
schreiben und sie zum Programmieren mit dem AVRFuseExtractor 
(https://github.com/ithron/AVRFuseExtractor) zu extrahieren:

1
~ .../AVR/Belichter $ls *.c *.h main.*
2
hal.h   main.c       main.eep   main.hex  main.map
3
main.c  main.disasm  main.elf*  main.lst  main.o
4

5
~ .../AVR/Belichter $tail -18 hal.h | head -6
6
FUSES =
7
{
8
    .low      = (FUSE_CKSEL1 & FUSE_SUT1),
9
    .high     = (FUSE_SPIEN & FUSE_BODLEVEL1 & FUSE_BODLEVEL0),
10
    .extended = EFUSE_DEFAULT
11
};
12

13
~ .../AVR/Belichter $extractfuses.sh avrdude main.elf 
14
-U lfuse:w:0xdd:m -U hfuse:w:0xd9:m -U efuse:w:0xff:m

Ach ja. Mit dem AVR Dragon hat das natürlich nichts zu tun.
Moderator Persönliche Seite #4335591
Lesenswert?

Axel S. schrieb:
> AVRFuseExtractor

Braucht man nicht (mehr).  Man kann ja direkt aus dem ELF-File
programmieren:
1
… -U hfuse:w:foo.elf -U lfuse:w:foo.elf -U flash:w:foo.elf

Allerdings ist es fraglich, ob man sie nun wirklich unbedingt bei
jedem Programmiervorgang schreiben muss.  Sind schließlich auch nur
Flash-Zellen, die beim Löschen und Wiederbeschreiben altern.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren