Forum: Mikrocontroller und Digitale Elektronik Mehrere Fusebytes mit avrdude programmieren


von user (Gast)


Lesenswert?

Hi, wie kann man denn mehrere Fusebytes mit avrdude schreiben? Beim 
Mega8 hab ich das schon rausgefunden. Man muss die hfuse vor der lfuse 
schreiben.

Aber wie ist das beim Mega128? Ich hab schon verschiedene Kombinationen 
probiert, aber ich bekomme immer eine Meldung

1
avrdude: 1 bytes of lfuse written
2
avrdude: verifying lfuse memory against 0xFF:
3
avrdude: load data lfuse data from input file 0xFF:
4
avrdude: input file 0xFF contains 1 bytes
5
avrdude: reading on-chip lfuse data:
6
7
Reading | ################################################## | 100% 0.00s
8
9
avrdude: verifying ...
10
avrdude: verification error, first mismatch at byte 0x0000
11
         0xff != 0xe1
12
avrdude: verification error; content mismatch
13
14
avrdude: safemode: lfuse changed! Was ff, and is now e1
15
Would you like this fuse to be changed back? [y/n] y
16
avrdude: safemode: and is now rescued
17
avrdude: safemode: Fuses OK

Wie funktioniert das?

von Florian (Gast)


Lesenswert?

Hallo,

Du hast beim Mega128 3 Fusebytes. Wie Du die genau schreiben musst kann 
ich Dir leider nicht sagen. Ich nutze immer AVR Studio.
Ich hoffe der Hinweis mit den 3 Fuses hilft Dir ein bisschen weiter.

Ev. mal die Bytes im AVR Studio zusammenklickern. Im unteren Fenster 
werden die Bytes dann in Hex angezeigt. Es gibt auch einen 
Offline-Modus.

Eine Registrierung ist beim Runterladen vom AVR Studio überingens nicht 
nötig. Du kannst irgendwas angeben. Es wird keine E-mail mit Link 
versendet. Sobald man alles eingeben hat kommt man zur Download Seite.

Gruß
Florian

von user (Gast)


Lesenswert?

Ich weiß, dass es drei Fusebytes sind. Darum geht es ja. Es geht darum, 
in welcher Reihenfolge ich die angeben muss. Das AVR Studio hilft mir da 
leider nicht

von C-Tutor (Gast)


Lesenswert?

Schreib alle drei auf einmal, avrdude unterstützt mehrere -U switches in 
der Kommandozeile.

von Achim M. (minifloat)


Lesenswert?

1
Laut 
2
bash$ man avrdude
3
lautet die Syntax
4
-U memtype:op:filename[:format]
5
6
So verifiziert zum Beispiel folgende Angabe
7
-U efuse:v:0xFF:m
8
die extended fuse, ob dort 0xFF drinnen steht.
mfg mf

von user (Gast)


Lesenswert?

Das ist mir schon alles klar. Es geht um die Reihenfolge. Nur mal ein 
Beispiel:

Das funktioniert
1
avrdude -pm32 -cavrisp2 -Pusb -U hfuse:w:0xc1:m -U lfuse:w:0xff:m

Das funktioniert nicht
1
avrdude -pm32 -cavrisp2 -Pusb -U lfuse:w:0xff:m -U hfuse:w:0xc1:m

Bei letzterer Zeile bekomme ich eine Fehlermeldung in der Art, wie ich 
sie oben gepostet habe.

Bei Mega128 hab ich halt drei Fusebytes, aber egal, in welcher 
Reihenfolge ich die angebe, es kommt immer wieder zu so einer 
Fehlermeldung.

von user (Gast)


Lesenswert?

Ach ja, das passiert nur bei AVR, bei denen die Fusebytes im 
Originalzustand sind. Wenn ich den Befehl zwei mal hintereinander 
ausführe geht es beim zweiten mal fehlerfrei durch

von user (Gast)


Lesenswert?

Hier mal ein komplettes Beispiel. Ein fabrikneuer ATmega32, lfuse vor 
hfuse

1
$ avrdude -pm32 -cavrisp2 -Pusb -e -U lfuse:w:0xff:m -U hfuse:w:0xc1:m 
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: reading input file "0xff"
10
avrdude: writing lfuse (1 bytes):
11
12
Writing | ################################################## | 100% 0.01s
13
14
avrdude: 1 bytes of lfuse written
15
avrdude: verifying lfuse memory against 0xff:
16
avrdude: load data lfuse data from input file 0xff:
17
avrdude: input file 0xff contains 1 bytes
18
avrdude: reading on-chip lfuse data:
19
20
Reading | ################################################## | 100% 0.00s
21
22
avrdude: verifying ...
23
avrdude: 1 bytes of lfuse verified
24
avrdude: reading input file "0xc1"
25
avrdude: writing hfuse (1 bytes):
26
27
Writing |                                                    | 0% 0.00s ***failed;  
28
Writing | ################################################## | 100% 0.02s
29
30
avrdude: 1 bytes of hfuse written
31
avrdude: verifying hfuse memory against 0xc1:
32
avrdude: load data hfuse data from input file 0xc1:
33
avrdude: input file 0xc1 contains 1 bytes
34
avrdude: reading on-chip hfuse data:
35
36
Reading | ################################################## | 100% 0.00s
37
38
avrdude: verifying ...
39
avrdude: verification error, first mismatch at byte 0x0000
40
         0xc1 != 0x99
41
avrdude: verification error; content mismatch
42
43
avrdude: safemode: hfuse changed! Was c1, and is now 99
44
Would you like this fuse to be changed back? [y/n] y
45
avrdude: safemode: and is now rescued
46
avrdude: safemode: Fuses OK
47
48
avrdude done.  Thank you.


das gleiche, wenn ich lfuse und hfuse vertausche

1
$ avrdude -pm32 -cavrisp2 -Pusb -e -U hfuse:w:0xc1:m -U lfuse:w:0xff:m
2
3
avrdude: AVR device initialized and ready to accept instructions
4
5
Reading | ################################################## | 100% 0.01s
6
7
avrdude: Device signature = 0x1e9502
8
avrdude: erasing chip
9
avrdude: reading input file "0xc1"
10
avrdude: writing hfuse (1 bytes):
11
12
Writing | ################################################## | 100% 0.01s
13
14
avrdude: 1 bytes of hfuse written
15
avrdude: verifying hfuse memory against 0xc1:
16
avrdude: load data hfuse data from input file 0xc1:
17
avrdude: input file 0xc1 contains 1 bytes
18
avrdude: reading on-chip hfuse data:
19
20
Reading | ################################################## | 100% 0.00s
21
22
avrdude: verifying ...
23
avrdude: 1 bytes of hfuse verified
24
avrdude: reading input file "0xff"
25
avrdude: writing lfuse (1 bytes):
26
27
Writing | ################################################## | 100% 0.00s
28
29
avrdude: 1 bytes of lfuse written
30
avrdude: verifying lfuse memory against 0xff:
31
avrdude: load data lfuse data from input file 0xff:
32
avrdude: input file 0xff contains 1 bytes
33
avrdude: reading on-chip lfuse data:
34
35
Reading | ################################################## | 100% 0.00s
36
37
avrdude: verifying ...
38
avrdude: 1 bytes of lfuse verified
39
40
avrdude: safemode: Fuses OK
41
42
avrdude done.  Thank you.

von user (Gast)


Lesenswert?

Keiner eine Idee? Könnte es ein Timing Problem sein? Ich habe im 
Datenblatt gestöbert, aber nichts konkretes gefunden. Lediglich das 
sowohl bei paralleler Programmierung als auch bei JTAG gewartet wird, 
bis die Programmierung fertig ist.

Wie ist das bei serieller Programmierung (ISP)? Wartet avrdude, bis der 
Vorgang fertig ist?

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.