AVR: Fuses lesbar, aber nicht schreibbar

Gast #3451169
Lesenswert?

Hallo!

Ich habe folgendes Problem mit einem ATMega2560: Nach dem Programmieren 
waren die Fuses kaputt. Also habe ich versucht, den Controller 
wiederzubeleben, indem ich ein 500kHz-Rechteck-Signal (habe ich auch mit 
anderen Frequenzen probiert) an XTAL1 angeschlossen habe. Im Prinzip 
funktioniert das auch- ich kann den Controller wieder programmieren, das 
Programm läuft (mit der entsprechenden Frequenz des Funktionsgenerators) 
und ich kann die Fuses lesen- nur die Fuses wieder neu beschreiben, das 
geht nicht mehr. Die Ausgabe von avrdude sieht dann so aus:



avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 
0.05s

avrdude: Device signature = 0x1e9801
avrdude: reading input file "0xFF"
avrdude: writing efuse (1 bytes):

Writing |  ***failed;
################################################## | 100% 0.00s

avrdude: 1 bytes of efuse written
avrdude: verifying efuse memory against 0xFF:
avrdude: load data efuse data from input file 0xFF:
avrdude: input file 0xFF contains 1 bytes
avrdude: reading on-chip efuse data:

Reading | ################################################## | 100% 
0.00s

avrdude: verifying ...
avrdude: 1 bytes of efuse verified
avrdude: reading input file "0xD9"
avrdude: writing hfuse (1 bytes):

Writing |  ***failed;
################################################## | 100% 0.00s

avrdude: 1 bytes of hfuse written
avrdude: verifying hfuse memory against 0xD9:
avrdude: load data hfuse data from input file 0xD9:
avrdude: input file 0xD9 contains 1 bytes
avrdude: reading on-chip hfuse data:

Reading | ################################################## | 100% 
0.00s

avrdude: verifying ...
avrdude: verification error, first mismatch at byte 0x0000
         0xd9 != 0x99
avrdude: verification error; content mismatch

avrdude done.  Thank you.




Hat jemand eine Idee, warum das nicht geht?
Gast #3451377
Lesenswert?

Der Programmierer ist ein mySmartUSB v2.11

Hier noch einmal die komplette Konsolenausgabe:



Launching /usr/bin/avrdude -pm2560 -cavr911 -P/dev/ttyUSB0 -u 
-Uflash:w:test2.hex:a -Ulfuse:w:0xe2:m -Uhfuse:w:0xd9:m -Uefuse:w:0xff:m
Output:

Connecting to programmer: .
Found programmer: Id = "AVR ISP"; type = S
    Software Version = 2.5; Hardware Version = 2.0
Programmer supports auto addr increment.
Programmer supports buffered memory access with buffersize=8 bytes.

Programmer supports the following devices:
  [...]

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 
0.05s

avrdude: Device signature = 0x1e9801
avrdude: NOTE: FLASH memory has been specified, an erase cycle will be 
performed
         To disable this feature, specify the -D option.
avrdude: erasing chip
avrdude: reading input file "test2.hex"
avrdude: input file test2.hex auto detected as Intel Hex
avrdude: writing flash (394 bytes):

Writing | ################################################## | 100% 
1.38s

avrdude: 394 bytes of flash written
avrdude: verifying flash memory against test2.hex:
avrdude: load data flash data from input file test2.hex:
avrdude: input file test2.hex auto detected as Intel Hex
avrdude: input file test2.hex contains 394 bytes
avrdude: reading on-chip flash data:

Reading | ################################################## | 100% 
0.40s

avrdude: verifying ...
avrdude: 394 bytes of flash verified
avrdude: reading input file "0xe2"
avrdude: writing lfuse (1 bytes):

Writing |  ***failed;
################################################## | 100% 0.00s

avrdude: 1 bytes of lfuse written
avrdude: verifying lfuse memory against 0xe2:
avrdude: load data lfuse data from input file 0xe2:
avrdude: input file 0xe2 contains 1 bytes
avrdude: reading on-chip lfuse data:

Reading | ################################################## | 100% 
0.00s

avrdude: verifying ...
avrdude: verification error, first mismatch at byte 0x0000
         0xe2 != 0xee
avrdude: verification error; content mismatch

avrdude done.  Thank you.
Gast #3451504
Lesenswert?

Hallo!

Nein, die Lockbits habe ich überprüft- sind nicht gesetzt. Ein Chip 
erase war zwar möglch, hat aber leider nichts gebracht.
Die Drosselung der Geschwindigkeit über -B100 hatte auch keine 
Auswirkung.

Hier noch einmal eine Ausgabe mit -vvvv:
1
avrdude -pm2560 -cavr911 -P/dev/ttyUSB0 -u -vvvv -Ulfuse:w:0xe2:m -Uhfuse:w:0xd9:m -Uefuse:w:0xff:m
2

3
avrdude: Version 5.11.1, compiled on Oct 30 2011 at 10:37:28
4
         Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
5
         Copyright (c) 2007-2009 Joerg Wunsch
6

7
         System wide configuration file is "/etc/avrdude.conf"
8
         User configuration file is "/home/marius/.avrduderc"
9
         User configuration file does not exist or is not a regular file, skipping
10

11
         Using Port                    : /dev/ttyUSB0
12
         Using Programmer              : avr911
13
         AVR Part                      : ATMEGA2560
14
         Chip Erase delay              : 9000 us
15
         PAGEL                         : PD7
16
         BS2                           : PA0
17
         RESET disposition             : dedicated
18
         RETRY pulse                   : SCK
19
         serial program mode           : yes
20
         parallel program mode         : yes
21
         Timeout                       : 200
22
         StabDelay                     : 100
23
         CmdexeDelay                   : 25
24
         SyncLoops                     : 32
25
         ByteDelay                     : 0
26
         PollIndex                     : 3
27
         PollValue                     : 0x53
28
         Memory Detail                 :
29

30
                                  Block Poll               Page                       Polled
31
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
32
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
33
           eeprom        65    10     8    0 no       4096    8      0  9000  9000 0x00 0x00
34
                                  Block Poll               Page                       Polled
35
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
36
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
37
           flash         65    10   256    0 yes    262144  256   1024  4500  4500 0x00 0x00
38
                                  Block Poll               Page                       Polled
39
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
40
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
41
           lfuse          0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
42
                                  Block Poll               Page                       Polled
43
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
44
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
45
           hfuse          0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
46
                                  Block Poll               Page                       Polled
47
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
48
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
49
           efuse          0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
50
                                  Block Poll               Page                       Polled
51
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
52
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
53
           lock           0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
54
                                  Block Poll               Page                       Polled
55
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
56
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
57
           calibration    0     0     0    0 no          1    0      0     0     0 0x00 0x00
58
                                  Block Poll               Page                       Polled
59
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
60
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
61
           signature      0     0     0    0 no          3    0      0     0     0 0x00 0x00
62

63
         Programmer Type : butterfly
64
         Description     : Atmel AppNote AVR911 AVROSP
65

66
Connecting to programmer: .avrdude: Send: . [1b] 
67
avrdude: Send: S [53] 
68
avrdude: Recv: A [41] 
69

70
avrdude: Recv: V [56] R [52]   [20] I [49] S [53] P [50] 
71
avrdude: Send: V [56] 
72
avrdude: Recv: 2 [32] 5 [35] 
73
avrdude: Send: v [76] 
74
avrdude: Recv: 2 [32] 
75
avrdude: Recv: 0 [30] 
76
avrdude: Send: p [70] 
77
avrdude: Recv: S [53] 
78
Found programmer: Id = "AVR ISP"; type = S
79
    Software Version = 2.5; Hardware Version = 2.0
80
avrdude: Send: a [61] 
81
avrdude: Recv: Y [59] 
82
Programmer supports auto addr increment.
83
avrdude: Send: b [62] 
84
avrdude: Recv: Y [59] 
85
avrdude: Recv: . [00] 
86
avrdude: Recv: . [08] 
87
Programmer supports buffered memory access with buffersize=8 bytes.
88
avrdude: Send: t [74] 
89

90
Programmer supports the following devices:
91
avrdude: Recv: . [01] 
92
    Device code: 0x01
93
avrdude: Recv: . [02] 
94
    Device code: 0x02
95
[...Liste gelöscht...]
96

97
avrdude: Send: T [54] . [01] 
98
avrdude: Recv: . [0d] 
99
avrdude: devcode selected: 0x01
100
avrdude: Send: P [50] 
101
avrdude: Recv: . [0d] 
102
avrdude: AVR device initialized and ready to accept instructions
103

104
Reading |                                                    | 0% 0.00savrdude: Send: s [73] 
105
avrdude: Recv: . [01] . [98] . [1e] 
106
Reading | ################################################## | 100% 0.05s
107

108
avrdude: Device signature = 0x1e9801
109
avrdude: Send: A [41] . [0f] . [fc] 
110
avrdude: Recv: . [0d] 
111
avrdude: Send: g [67] . [00] . [01] E [45] 
112
avrdude: Recv: . [ff] 
113
avrdude: Send: A [41] . [0f] . [fd] 
114
avrdude: Recv: . [0d] 
115
avrdude: Send: g [67] . [00] . [01] E [45] 
116
avrdude: Recv: . [ff] 
117
avrdude: Send: A [41] . [0f] . [fe] 
118
avrdude: Recv: . [0d] 
119
avrdude: Send: g [67] . [00] . [01] E [45] 
120
avrdude: Recv: . [ff] 
121
avrdude: Send: A [41] . [0f] . [ff] 
122
avrdude: Recv: . [0d] 
123
avrdude: Send: g [67] . [00] . [01] E [45] 
124
avrdude: Recv: . [ff] 
125
avrdude: reading input file "0xe2"
126
avrdude: writing lfuse (1 bytes):
127

128
Writing |                                                    | 0% 0.00s ***failed;  
129
Writing | ################################################## | 100% 0.00s
130

131
avrdude: 1 bytes of lfuse written
132
avrdude: verifying lfuse memory against 0xe2:
133
avrdude: load data lfuse data from input file 0xe2:
134
avrdude: input file 0xe2 contains 1 bytes
135
avrdude: reading on-chip lfuse data:
136

137
Reading |                                                    | 0% 0.00savrdude: Send: F [46] 
138
avrdude: Recv: . [ee] 
139
Reading | ################################################## | 100% 0.00s
140

141
avrdude: verifying ...
142
avrdude: verification error, first mismatch at byte 0x0000
143
         0xe2 != 0xee
144
avrdude: verification error; content mismatch
145
avrdude: Send: L [4c] 
146
avrdude: Recv: . [0d] 
147
avrdude: Send: E [45] 
148
avrdude: Recv: . [0d] 
149

150
avrdude done.  Thank you.
#3451510
Lesenswert?

Das kann auch passieren wenn nicht verwendete Bits, zum setzen mit 0 
angegeben werden, aber natürlich dann beim zurücklesen zu 1 werden.

Also einfach checken und dann diese Bits beim Aufruf von avrdude bereits 
als 1 angegeben.

> 0xd9 != 0x99

Das sieht doch genau danach aus. Die falschen Bits sind wahrscheinlich 
alle ungenutzt.
Moderator Persönliche Seite #3451547
Lesenswert?

Mari schrieb:
> avrdude: writing lfuse (1 bytes):
>
> Writing |                                                    | 0% 0.00s
> ***failed;
> Writing | ################################################## | 100%
> 0.00s
>
> avrdude: 1 bytes of lfuse written
> avrdude: verifying lfuse memory against 0xe2:
> avrdude: load data lfuse data from input file 0xe2:
> avrdude: input file 0xe2 contains 1 bytes
> avrdude: reading on-chip lfuse data:
>
> Reading |                                                    | 0%
> 0.00savrdude: Send: F [46]
> avrdude: Recv: . [ee]

Irgendwie fehlt da ein Kommando, welches tatsächlich versuchen würde,
die Fuse zu schreiben.

Moment mal: avr911 == "butterfly".  Das ist ein bootloader, der kann
keine Fuses verändern!

Wenn du keinen Bootloader benutzt, sondern einen Standalone-Programmer,
dann wäre der passende Typ "avr910".  Beide Protokolle sind zwar sehr
ähnlich (weshalb der Programmer erstmal reagiert), aber eben nicht
identisch.
Gast #3451567
Lesenswert?

Hm, mein Programmer unterstützt avr910 und avr911. Bisher hatte ich 
immer avr910 benutzt, musste jetzt aber auf 911 umsteigen, weil 910 den 
Mega2560 nicht unterstützt...

Was mich jetzt wundert: Die Fuses müssen mindestens 1x gesetzt worden 
sein. Als der Controller nämlich noch neu war (standardmäßig mit 
internem Takt), da hat alles noch funktioniert. Die Probleme haben erst 
angefangen, als ich auf externen Takt umgestellt habe. Und wenn ich die 
Fuses jetzt auslese sehe ich auch, dass externer Takt eingestellt ist...
Moderator Persönliche Seite #3451569
Lesenswert?

Mari schrieb:
> weil 910 den Mega2560 nicht unterstützt

Naja, dem Protokoll ist der Controller ziemlich wurscht.  Kann aber
sein, dass im AVRDUDE niemand die entsprechenden Teile für Adressen
jenseits 128 KiB nachgetragen hat.

Als Würgaround kannst du doch einfach einen anderen Controller angeben
(mit -F die Signaturüberprüfung abschalten) und dann die Fuses ändern.
Gast #3451590
Lesenswert?

Vielen Dank für den Tip! Jetzt geht wieder alles :-)

In der avrdude.conf gibt es unter m2560 folgende Zeile:
1
#    avr910_devcode   = 0x43;

Ich habe den Kommentar entfernt und jetzt kann ich im avr910-Moodus 
wieder alles Programmieren.

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