ATmega324a lässt sich nicht mehr programmieren nach Fuse setzen

OP #5380949
Lesenswert?

Hallo,

ich wollte das Programmieren mit Mikrocontrollern mal etwas besser 
verstehen und jetzt antwortet mein ATmega324a nicht mehr :(

Anfangs ging noch alles, ich konnte mit Atmel Studio 7 programmieren, 
dann wollte ich eine FUSE-Einstellung ändern. Ich habe "Int. 128kHz RC 
Osc." eingestellt. Direkt danach bekam ich die Fehlermeldung:

Failed to enter programming mode. ispEnterProgMode: Error status 
received: Got 0xc0, expected 0x00 (Command has failed to execute on the 
tool)

Unable to enter programming mode. Verify device selection, interface 
settings, target power, security bit, and connections to the target 
device.

Mit AVRdude habe ich auch schon rumprobiert, allerdings bekomme ich da 
auch keine Verbindung:

         Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
         Copyright (c) 2007-2014 Joerg Wunsch

         System wide configuration file is 
"C:\avrdude-6.3-mingw32\avrdude.conf"

         Using Port                    : COM3
         Using Programmer              : STK500
         AVR Part                      : ATmega324P
         Chip Erase delay              : 55000 us
         PAGEL                         : PD7
         BS2                           : PA0
         RESET disposition             : dedicated
         RETRY pulse                   : SCK
         serial program mode           : yes
         parallel program mode         : yes
         Timeout                       : 200
         StabDelay                     : 100
         CmdexeDelay                   : 25
         SyncLoops                     : 32
         ByteDelay                     : 0
         PollIndex                     : 3
         PollValue                     : 0x53
         Memory Detail                 :

                                  Block Poll               Page 
Polled
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages 
MinW  MaxW   ReadBack
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ 
----- ----- ---------
           eeprom        65    10   128    0 no       1024    4      0 
9000  9000 0xff 0xff
           flash         33     6   256    0 yes     32768  128    256 
4500  4500 0xff 0xff
           lock           0     0     0    0 no          1    0      0 
9000  9000 0x00 0x00
           lfuse          0     0     0    0 no          1    0      0 
9000  9000 0x00 0x00
           hfuse          0     0     0    0 no          1    0      0 
9000  9000 0x00 0x00
           efuse          0     0     0    0 no          1    0      0 
9000  9000 0x00 0x00
           signature      0     0     0    0 no          3    0      0 
0     0 0x00 0x00
           calibration    0     0     0    0 no          1    0      0 
0     0 0x00 0x00

         Programmer Type : STK500V2
         Description     : Atmel STK500
         Programmer Model: STK500
         Hardware Version: 10
         Firmware Version Master : 2.10
avrdude: stk500v2_command(): command failed
avrdude: stk500v2_getparm(): failed to get parameter 0x9a
         Topcard         : Unknown
         Vtarget         : 5.0 V
avrdude: stk500v2_command(): command failed
avrdude: stk500v2_getparm(): failed to get parameter 0x95
avrdude: stk500v2_command(): command failed
avrdude: stk500v2_getparm(): failed to get parameter 0x96
avrdude: stk500v2_command(): command failed
avrdude: stk500v2_getparm(): failed to get parameter 0x97
         SCK period      : 17.4 us
         Varef           : 14.8 V
         Oscillator      : 52.663 kHz

avrdude: stk500v2_command(): command failed
avrdude: initialization failed, rc=-1
         Double check connections and try again, or use -F to override
         this check.

Mit der -B, -b und -i Option habe ich auch schon rumprobiert... ohne 
Erfolg...

Ich denke auch nicht, dass er kaputt ist, denn der alte Code, den ich 
vorher drauf geflasht hab, läuft noch. Ich Pin wechselt noch den 
Zustand, nur eben deutlich langsamer...

Die ganzen anderen Threads und Webseiten, die ich gefunden habe, die ein 
ähnliches Problem beschreiben, kommen entweder zu keiner Lösung oder 
behandeln dann doch ein anderes Problem...

Jetzt meine Frage:
Weiß jemand, wie ich das wieder hin bekomme?

Danke schonmal,
Tobias
Gast #5380972
Lesenswert?

> ich hab im Atmel Studio die niedrigst mögliche Frequenz eingestellt,

Tja, noch niedriger...
Falls nämlich die CKDIV8-Fuse programmiert sein sollte, muss man unter 4 
kHz = 128 kHz /8 /4 kommen.
OP #5380998
Lesenswert?

Ja, ich bin mir schon ziemlich sicher, dass ich "Int. 128kHz RC Osc.; 
Start-up time: 6 CK + 64 ms INTRCOSC_128KHZ_6CK_64MS" eingestellt habe.

Einen externen Takt kann ich im Moment nicht anlegen, weil ich gerade 
nichts da hab. Aber wie gesagt, ein Pin macht ja was...

Ich kann ja mal schreiben, was meiner Meinung nach relevant sein könnte:

Also das, was gerade darauf läuft, sendet auf UART einen Buchstaben.
F_CPU steht auf 3120000UL
Baudrate steht auf 100UL

Ein Bit dauer ca. 2,19s.

Hilft das irgendwie weiter?
Gast #5381014
Lesenswert?

Ändern der Fuses geht leider auch nicht und erase all auch nicht...

Ich werde mir mal ein andere Interface besorgen und es damit 
probieren... und die Verkabelung werde ich auch mal checken.
Wäre zwar komisch, wenn da zufällig beim setzen der Fuse was kaputt 
gegangen ist, aber manchmal gibt's ja auch komische Zufälle...
OP #5381212
Lesenswert?

Marc V. schrieb:
> Man soll nicht mit Fuses rumspielen, ohne genau zu wissen was man
> tut...

Danke für den Hinweis, hilft mir jetzt aber nicht weiter...
Kannst du mir sagen, was genau das Problem ist? Er macht ja scheinbar 
was, nur halt sehr langsam...


STK500-Besitzer schrieb:
> Damit wirst du nichts, wenn du den Controller entfusen willst. Dazu
> brauchst du einen Programmer, der HV-Parallel-Programming beherrscht.

Da bekomme ich hoffentlich demnächst einen (Atmel ICE)...

Aber sind die fuses wirklich so falsch gesetzt? Da er noch etwas macht, 
dachte ich eigentlich, dass man ihn schon noch retten kann.
Ich hab eigentlich gehofft, irgendjemand sagt mir einfach eine Option, 
die ich umstellen muss und ...Zack... gehts wieder...

Mal noch kurz was zu meinen Erfahrungen:
Ich mach das alles nur hobbymäßig. Ich nutze das alles nicht 
professionell und hab auch keine High-Tech-Geräte zur Verfügung. Mir 
geht eigentlich nur ums lernen, basteln und Erfahrung sammeln.
(Firma: Vescomp) #5381228
Lesenswert?

Tobias E. schrieb:
> Aber sind die fuses wirklich so falsch gesetzt?

 Ja, das sind sie.

> Da er noch etwas macht,
> dachte ich eigentlich, dass man ihn schon noch retten kann.
> Kannst du mir sagen, was genau das Problem ist? Er macht ja scheinbar
> was, nur halt sehr langsam...

 Er macht schon was er soll, nur halt 500 Mal langsamer.


> Ich hab eigentlich gehofft, irgendjemand sagt mir einfach eine Option,
> die ich umstellen muss und ...Zack... gehts wieder...

 Wie willst du das machen wenn dein m324 nicht mehr über ISP
 ansprechbar ist, selbst mit (angeblichen) 1,2KHz ?


> Einen externen Takt kann ich im Moment nicht anlegen, weil ich gerade
> nichts da hab. Aber wie gesagt, ein Pin macht ja was...

 Leider geht es ohne externen Takt oder HV nicht...
Gast #5381267
Lesenswert?

Leider steht in der Bedienungsanleitung nicht drin, welche 
Taktfrequenzen der Programmieradapter unterstützt.

Interessant finde ich, dass in der Anleitung von einem anderen Diamex 
Programmer hingegen eine Tabelle mit den unterstützten Taktraten drin 
ist.

Ich habe auch noch einen Programmer von einer anderem Marke in der 
Bastelkiste, der in genau der gleichen Situation nicht mehr 
funktionierte. Aber der Hersteller stellte wenige Wochen nach meiner 
Reklamation ein entsprechendes Firmware-Upgrade bereit.

Vielleicht ist Diamex ebenso hilfsbereit.
Gast #5381310
Lesenswert?

go ARM schrieb im Beitrag #5381293:
> Mal wieder so ne alte Kamelle verfused. Schmeiss Weg die Sch... und nimm
> was richtiges. Die Dinger sind überholt. Verschwenden keine Zeit mehr
> ...

Wenn du dich dann um die damit verbundenen Probleme kümmerst!
Gast #5381339
Lesenswert?

Also so wie ich das bisher verstanden hab, würde er bei richtig verfused 
gar nichts mehr machen. Das ist ja nicht der Fall. Er läuft nur sehr 
langsam...

Ich hab gerade so die Hoffnung, das mein Programmieradapter einfach nur 
sagt, er kann 1,2 kHz, kann es aber tatsächlich gar nicht. Wenn ich 
jetzt einen anderen nehme, der wirklich 1,2 kHz kann, dann geht's 
vielleicht. Das würde ja dann auch zu der Berechnung von S Landolt 
passen.

Das er läuft, gibt mir die Hoffnung, das ich es noch mit einem anderen 
Programmieradapter hinkriegen kann...
Gast #5381472
Lesenswert?

> Mir geht eigentlich nur ums lernen, basteln und Erfahrung sammeln.

Nur zu!
Ein paar Kabel, ein Taster mit RC-Glied, und damit das Fuse-Low-Byte auf 
den Werkswert von 0x62 zurücksetzen; die Anleitung steht im Datenblatt 
unter 'Serial downloading' und 'Serial Programming Instruction set'. 
Verlangt ein oder zwei Stunden Zeit, ein hohes Maß an Disziplin und eine 
recht hohe Frustrationsschwelle, ist aber machbar.
OP #5382611
Lesenswert?

S. Landolt schrieb:
>> Mir geht eigentlich nur ums lernen, basteln und Erfahrung
> sammeln.
>
> Nur zu!
> Ein paar Kabel, ein Taster mit RC-Glied, und damit das Fuse-Low-Byte auf
> den Werkswert von 0x62 zurücksetzen; die Anleitung steht im Datenblatt
> unter 'Serial downloading' und 'Serial Programming Instruction set'.
> Verlangt ein oder zwei Stunden Zeit, ein hohes Maß an Disziplin und eine
> recht hohe Frustrationsschwelle, ist aber machbar.

Danke, danke, danke
Ich fühle mich grade wie der krasseste Hacker der Welt :D

Es geht wieder.

Mein Vorgehen:
Ich habe mir ein Analog Discovery2 besorgt (Logic-Analyzer, mit dem man 
auch SPI-Daten senden kann) und damit dann mit 200 Hz Daten gesendet:
1
function initialize(){
2
    Start();
3
    Write(8, 0xAC, 0x53, 0x00, 0x00);  // Programming Mode
4
    Write(8, 0x30, 0x00, 0x00);        // Device ID
5
    var id1 = Read(8, 1);
6
    Write(8, 0x30, 0x00, 0x01);
7
    var id2 = Read(8, 1);
8
    Write(8, 0x30, 0x00, 0x02);
9
    var id3 = Read(8, 1);
10

11
    Write(8, 0x50, 0x00, 0x00);        // Fuse lesen
12
    var fuse_alt = Read(8, 1);
13
    
14
    Write(8,0xAC, 0xA0, 0x00, 0x62);   // Fuse setzen
15

16
    Write(8, 0x50, 0x00, 0x00);        // Fuse lesen
17
    var fuse_neu = Read(8, 1);
18

19
    Stop();
20
    
21
    return "Device ID:" + id1 + " " + id2 + " " + id3 + ", Fuse: " + fuse_alt + "/" + fuse_neu;
22
}
23
function loop(){
24
    // Process called for specified number of times and rate.
25
    // Like to collect, decode and store sensor data.
26
    // Use only static data trasnfer calls!
27
    return true;
28
}
29
function finish(){
30
   // Process called at the end.
31
   // Like to suspend the device.
32
   return "done";
33
}

Und jetzt kann Atmel-Studio auch wieder flashen.

Danke nochmal für eure Hilfe.

Achja, noch eine Erkenntnis, die ich gewonnen habe, die vielleicht noch 
für jemanden anderes interessant sein könnte:

Entweder ist die Option -B in AVRdude nicht das, was ich denke, oder 
mein Programmer macht komische Sachen. Ich habe einige -B-Optionen 
eingestellt und dann die SPI-Clock gemessen. Die Zeiten sind jeweils 
eine High- und eine Low-Phase. Das, was nach meinem Verständnis eine 
Periode sein sollte...
Hier die Ergebnisse:
1
SCK Period [µs] (-B-Option)  Gemessene Periode [µs]    Gemessene Frequenz [kHz]
2
10                           1,98                      505
3
20                           3,99                      251
4
50                           10,32                     96,9
5
100                          19,71                     50,7
6
150                          38,34                     26,1
7
200                          38,22                     26,2
8
300                          94,64                     10,6
9
400                          94,64                     10,6
10
500                          94,64                     10,6
11
600                          160,1                     6,24

Und höher geht es dann auch nicht.
Also ist die höchste Frequenz, die dieses Interface kann, wohl 6,24kHz, 
was in meinem Fall wohl zu hoch war.
Gast #5382616
Lesenswert?

> Ich habe mir ein Analog Discovery2 besorgt (Logic-Analyzer, mit dem man
> auch SPI-Daten senden kann) und damit dann mit 200 Hz Daten gesendet

Wow! Dafür wäre ich zu faul gewesen.

> Entweder ist die Option -B in AVRdude nicht das, was ich denke,
> oder mein Programmer macht komische Sachen.

Manche Programmer unterstützen die Option komplett, manche nur teilweise 
und manche gar nicht.
Gast #5382624
Lesenswert?

an Tobias E.:

Wäre nicht so schlimm gewesen, wie ich es in Erinnerung hatte; damals 
war es ein kleines Programm, hier geht es ja nur um das Fuse-Low-Byte, 
also 2 Sequenzen, d.h. 64 Bits von Hand eingeben, das ist durchaus noch 
akzeptabel. Und ja, ich hatte es noch gestern abend ausprobiert.
Gast #5382640
Lesenswert?

Stefan U. schrieb:

> Manche Programmer unterstützen die Option komplett, manche nur teilweise
> und manche gar nicht.

Garnicht ist mir noch nicht untergekommen. Was mir allerdings vielfach 
untergekommen ist: Es funktioniert nur mit einem teils sehr deutlichen 
Versatz gegenüber dem STK500-Original. Da der übermittelte Wert des 
Protokolls ein Reziprokwert der Frequenz/Bitrate ist, kann man den 
Versatz aber auch nicht einmal in einer einfachen, DAU-tauglichen 
Beschreibung ausdrücken.

Dazu kommen dann einige Beschränkungen nach oben und/oder unten bei 
bestimmten Programmern. Oft ist schon sehr einfach zu klären, wo diese 
herrühren: eindeutig völlig unfähige Programmierer, denen offensichtlich 
nicht mal des primitive Konzept des Reziproks klar war, denen aber wohl 
die Takt-Abweichungen zum Original irgendwie auf die Stulle geschmiert 
wurde. Die haben dann ganz offensichtlich exakt genau das getan, was man 
in dieser Fakten-Konstellation von Leuten dieser Kompetenzklasse 
erwarten muss...

Man kann dann sehr schön sehen, welche Rate sie als "Normwert" 
angenommen haben und wie sie darauf basierend die Grenzen festgelegt 
haben. Sehr lustig, das, wenn's nicht so traurig wäre...
Gast #5382662
Lesenswert?

>> Manche Programmer unterstützen die Option komplett, manche nur teilweise
>> und manche gar nicht.

> Garnicht ist mir noch nicht untergekommen.

Ich kann zwei Beispiele nennen:
Der ICprog-AVR 2.0 und meine chinesischen USBASP clones. Beide Typen 
knobeln die Übertragungsrate automatisch aus. Manuelle Vorgaben 
ignorieren sie.

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