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?
> Die Ausgabe von avrdude sieht dann so aus
..und wie sieht der Aufruf dazu aus? Wie sieht die Hardware aus?
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.
> 500kHz-Rechteck-Signal [..] > Launching /usr/bin/avrdude [..] brems den avrdude, Größenordnung -B 100. Wenns dann nicht geht die Ausgabe von (zusätzlich) -vvvv mit zeigen.
Mari schrieb: > nur die Fuses wieder neu beschreiben, das geht nicht mehr. Hat der Controller lockbits gesetzt? Dann musst du erstmal einen chip erase machen, solange der gelockt ist, darf man die Fuses nicht manipulieren.
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. |
:
Bearbeitet durch Moderator
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.
:
Bearbeitet durch User
Hm, verstehe ich nicht ganz... Bei
>0xe2 != 0xee
ist der Unterschied zwischen e2 und ee die Taktquelle (intern/extern).
Das kann doch eigentlich kein ungenutztes Bit sein?
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.
:
Bearbeitet durch Moderator
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...
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.
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.
Mari schrieb: > Ich habe den Kommentar entfernt und jetzt kann ich im avr910-Moodus > wieder alles Programmieren. Wobei das ganze Konzept der "device codes" halt sehr fragwürdig ist. Du hattest doch in der Ausgabe von -vvvv eine Liste der vom Gerät unterstützten Controller und deren devcodes. Sieh zu, dass die zueinander passen.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.