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.