Forum: Mikrocontroller und Digitale Elektronik ATMega644p: Fuses Rätsel.


von Frank G. (dg1sbg)


Lesenswert?

Hallo zusammen,

nachdem man mir empfohlen hat, anstatt des ATmega32 den 644p 
einzusetznen (wegen Speicherbedarf meiner Anwendung), habe ich versucht, 
den 644p zu programmieren.

Das Programm läuft zwar, aber extrem (!) langsam. Ich habe dann die 
Fuses angeschaut:
1
avrdude: AVR device initialized and ready to accept instructions
2
3
Reading | ################################################## | 100% 0.01s
4
5
avrdude: Device signature = 0x1e960a
6
avrdude: safemode: lfuse reads as 62
7
avrdude: safemode: hfuse reads as 99
8
avrdude: safemode: efuse reads as FF

Mit dem Fuse Calculator aus http://www.engbedded.com/cgi-bin/fcx.cgi 
ergibt das, dass die interne 8-fache Taktteilung aktiv ist.

Dieses rausgenommen, ergibt die Werte Low Fuse = 0x64, High Fuse = 0x99, 
Ext. Fuse = 0xFF. Mit dem STK500v2 und AVRDUDE 5.6 habe ich nun bei zwei 
644p Chips die folgenden Ergebnisse bzw Fehler:
1
$ make writefuses
2
avrdude -F -p atmega644p -P /dev/cu.PL2303-00101324  -c stk500v2  -v   -U hfuse:w:0x99:m \
3
  -U lfuse:w:0x64:m -U efuse:w:0xfc:m && \
4
  avrdude -F -p atmega644p -P /dev/cu.PL2303-00101324  -c stk500v2  -v   -U hfuse:r:hfuse.txt \
5
  -U lfuse:r:lfuse.txt  && \
6
  echo "High Fuse Bits: \c" && od -d hfuse.txt | head -n 1 | sed -e 's/0000000 *//' | xargs -i perl -e 'tr= unpack("B32", pack("N",{})); tr =~ s/.*([01]{4})([01]{4}) /; print "tr\n";' && echo "Low Fuse Bits: \c" && od -d lfuse.txt | head -n 1 | sed -e 's/0000000 *//' | xargs -i perl -e 'tr= unpack("B32", pack("N",{})); tr =~ s/.*([01]{4})([01]{4}) /; print "tr\n";'
7
8
avrdude: Version 5.6, compiled on Apr 15 2009 at 17:54:59
9
         Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
10
11
         System wide configuration file is "/usr/local/CrossPack-AVR-20090415/etc/avrdude.conf"
12
         User configuration file is "/Users/frgo/.avrduderc"
13
         User configuration file does not exist or is not a regular file, skipping
14
15
         Using Port                    : /dev/cu.PL2303-00101324
16
         Using Programmer              : stk500v2
17
         AVR Part                      : ATMEGA644P
18
         Chip Erase delay              : 9000 us
19
         PAGEL                         : PD7
20
         BS2                           : PA0
21
         RESET disposition             : dedicated
22
         RETRY pulse                   : SCK
23
         serial program mode           : yes
24
         parallel program mode         : yes
25
         Timeout                       : 200
26
         StabDelay                     : 100
27
         CmdexeDelay                   : 25
28
         SyncLoops                     : 32
29
         ByteDelay                     : 0
30
         PollIndex                     : 3
31
         PollValue                     : 0x53
32
         Memory Detail                 :
33
34
                                  Block Poll               Page                       Polled
35
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
36
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
37
           eeprom        65    10   128    0 no       2048    8      0  9000  9000 0xff 0xff
38
           flash         33     6   256    0 yes     65536  256    256  4500  4500 0xff 0xff
39
           lock           0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
40
           lfuse          0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
41
           hfuse          0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
42
           efuse          0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
43
           signature      0     0     0    0 no          3    0      0     0     0 0x00 0x00
44
           calibration    0     0     0    0 no          1    0      0     0     0 0x00 0x00
45
46
         Programmer Type : STK500V2
47
         Description     : Atmel STK500 Version 2.x firmware
48
         Programmer Model: STK500
49
         Hardware Version: 2
50
         Firmware Version Master : 2.10
51
         Topcard         : Unknown
52
         Vtarget         : 5.2 V
53
         SCK period      : 10.9 us
54
         Varef           : 5.0 V
55
         Oscillator      : 3.686 MHz
56
57
avrdude: AVR device initialized and ready to accept instructions
58
59
Reading | ################################################## | 100% 0.01s
60
61
avrdude: Device signature = 0x1e960a
62
avrdude: safemode: lfuse reads as 62
63
avrdude: safemode: hfuse reads as 99
64
avrdude: safemode: efuse reads as FF
65
avrdude: reading input file "0x99"
66
avrdude: writing hfuse (1 bytes):
67
68
Writing | ################################################## | 100% 0.00s
69
70
avrdude: 1 bytes of hfuse written
71
avrdude: verifying hfuse memory against 0x99:
72
avrdude: load data hfuse data from input file 0x99:
73
avrdude: input file 0x99 contains 1 bytes
74
avrdude: reading on-chip hfuse data:
75
76
Reading | ################################################## | 100% 0.00s
77
78
avrdude: verifying ...
79
avrdude: 1 bytes of hfuse verified
80
avrdude: reading input file "0x64"
81
avrdude: writing lfuse (1 bytes):
82
83
Writing | ################################################## | 100% 0.02s
84
85
avrdude: 1 bytes of lfuse written
86
avrdude: verifying lfuse memory against 0x64:
87
avrdude: load data lfuse data from input file 0x64:
88
avrdude: input file 0x64 contains 1 bytes
89
avrdude: reading on-chip lfuse data:
90
91
Reading | ################################################## | 100% 0.00s
92
93
avrdude: verifying ...
94
avrdude: 1 bytes of lfuse verified
95
avrdude: reading input file "0xfc"
96
avrdude: writing efuse (1 bytes):
97
98
Writing | ################################################## | 100% 0.01s
99
100
avrdude: 1 bytes of efuse written
101
avrdude: verifying efuse memory against 0xfc:
102
avrdude: load data efuse data from input file 0xfc:
103
avrdude: input file 0xfc contains 1 bytes
104
avrdude: reading on-chip efuse data:
105
106
Reading | ################################################## | 100% 0.00s
107
108
avrdude: verifying ...
109
avrdude: 1 bytes of efuse verified
110
111
avrdude: safemode: lfuse reads as 64
112
avrdude: safemode: hfuse reads as 99
113
avrdude: safemode: efuse reads as FC
114
avrdude: safemode: Fuses OK
115
116
avrdude done.  Thank you.
117
118
119
avrdude: Version 5.6, compiled on Apr 15 2009 at 17:54:59
120
         Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
121
122
         System wide configuration file is "/usr/local/CrossPack-AVR-20090415/etc/avrdude.conf"
123
         User configuration file is "/Users/frgo/.avrduderc"
124
         User configuration file does not exist or is not a regular file, skipping
125
126
         Using Port                    : /dev/cu.PL2303-00101324
127
         Using Programmer              : stk500v2
128
         AVR Part                      : ATMEGA644P
129
         Chip Erase delay              : 9000 us
130
         PAGEL                         : PD7
131
         BS2                           : PA0
132
         RESET disposition             : dedicated
133
         RETRY pulse                   : SCK
134
         serial program mode           : yes
135
         parallel program mode         : yes
136
         Timeout                       : 200
137
         StabDelay                     : 100
138
         CmdexeDelay                   : 25
139
         SyncLoops                     : 32
140
         ByteDelay                     : 0
141
         PollIndex                     : 3
142
         PollValue                     : 0x53
143
         Memory Detail                 :
144
145
                                  Block Poll               Page                       Polled
146
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
147
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
148
           eeprom        65    10   128    0 no       2048    8      0  9000  9000 0xff 0xff
149
           flash         33     6   256    0 yes     65536  256    256  4500  4500 0xff 0xff
150
           lock           0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
151
           lfuse          0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
152
           hfuse          0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
153
           efuse          0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
154
           signature      0     0     0    0 no          3    0      0     0     0 0x00 0x00
155
           calibration    0     0     0    0 no          1    0      0     0     0 0x00 0x00
156
157
         Programmer Type : STK500V2
158
         Description     : Atmel STK500 Version 2.x firmware
159
         Programmer Model: STK500
160
         Hardware Version: 2
161
         Firmware Version Master : 2.10
162
         Topcard         : Unknown
163
         Vtarget         : 5.2 V
164
         SCK period      : 10.9 us
165
         Varef           : 5.0 V
166
         Oscillator      : 3.686 MHz
167
168
avrdude: stk500v2_command(): command failed
169
avrdude: stk500v2_recv(): checksum error
170
avrdude: stk500v2_program_enable(): bad STK600 connection status: Unknown (0x64)
171
avrdude: initialization failed, rc=-1
172
avrdude: AVR device initialized and ready to accept instructions
173
avrdude: Device signature = 0x000000
174
avrdude: Yikes!  Invalid device signature.
175
avrdude: Expected signature for ATMEGA644P is 1E 96 0A
176
177
avrdude done.  Thank you.
178
179
make: *** [writefuses] Error 1

Was mach ich bloß falsch ??? Danke für jeden Hinweis ... !

73 Frank DG1SBG

von Hubert G. (hubertg)


Lesenswert?

Du hast nicht den ClockDiv herausgenommen sondern auf 
Ext.Lowfrequ.crystal gestellt.

von Frank G. (dg1sbg)


Lesenswert?

Hubert G. schrieb:
> Du hast nicht den ClockDiv herausgenommen sondern auf
> Ext.Lowfrequ.crystal gestellt.

Ja, aber dss sollte nicht dazu führen, dass ich den ATmega644p nach dem 
Schreiben der Fuses nicht mehr ansprechen kann ...

Gruß,
  Frank

von Hubert G. (hubertg)


Lesenswert?

Wenn du keinen Quarz dran hast, kannst du ihn nicht mehr ansprechen.

von Frank G. (dg1sbg)


Lesenswert?

Hubert G. schrieb:
> Wenn du keinen Quarz dran hast, kannst du ihn nicht mehr ansprechen.

;-)

Quarz dran !  (Mini-Mega-Board aus Elektor)

Gruß,
  Frank

von Hubert G. (hubertg)


Lesenswert?

Aber sicher kein Low Frequenz Quarz.

von Frank G. (dg1sbg)


Lesenswert?

Hm. Guter Punkt - was ist denn ein Low Freq. Quarz bzw. bis zu welcher 
Freq. ? Ich habe einen 8 MHz Quarz dran.

Oder, mal anders gefragt: Was muss ich tun, um den externen Quarz zu 
aktivieren - ich habe keine Fuses Kombination gefunden, die den enabled 
- nur die "Low Freq." Variante ... ???

Danke!!!!

Und: Irgendeine Chance, den "verhunzten" ATmega644p wiederzubeleben ?

Gruß,
  Frank

von Hubert G. (hubertg)


Lesenswert?

Ein Ext.Low Frequenz Crystal ist ein Uhrenquarz, 32kHz
Einstellen musst du Ext.Crystal Osz. 8MHz
Einen Takt mit etwa 32kHz an XTAL1 und die Frequenz des Programmer auf 
das niedrigste einstellen, unter 1kHz da der Taktteiler auch noch aktiv 
ist. Dann kannst du die Fuses umstellen.

von vaaaaa (Gast)


Lesenswert?

eventuell kann das helfen !?!?
http://www.larsen-b.com/Article/260.html

von Frank G. (dg1sbg)


Lesenswert?

Heureka!

Danke! Das hat geholfen ... Kaum macht man's richtig, schon 
funktioniert's. ;-)

Und jetzt zurück in den Emacs zum Programmieren ...

Grüsse

   Frank

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.