Forum: Mikrocontroller und Digitale Elektronik kann ATmega8 nicht mit avrdude flashen


von Lars L. (vertigo)


Lesenswert?

Hey,
ich habe letztes Wochenende mit dem Themengebiet der microCo. 
Programmierung angefangen und bin davon recht begeistert. Auch wenn 
meine finanziellen Mitteln gerade schlecht aussehen habe ich mir, wie im 
AVR-Tutorial beschrieben, Bauteile bei Reichelt bestellt und die 
Schaltung mit ein ATMega8 und ein 4Mhz Quarz nachgebaut. Um den microCo, 
zu Programmieren bin ich auf USBProg als ISP gestoßen und gleichmal 
bestellt, soweit sogut.

Gestern auch alles zusammengelötet, Programm mit VMLab kompiliert und 
wollte es per avrdude in Windows draufspielen.
Nun kam schon der erste Fehler in Windows
1
F:\VMLAB\ISP_Programmer>avrdude -pm8 -c avrisp2 -Pusb -U flash:w:test.hex:i -F -D
2
found 5 busses
3
4
avrdude: stk500v2_command(): command failed
5
avrdude: stk500v2_recv_mk2: error in USB receive
6
avrdude: stk500v2_program_enable(): bad STK600 connection status: Unknown (0x64)
7
8
avrdude: initialization failed, rc=-1
9
avrdude: AVR device initialized and ready to accept instructions
10
avrdude: Device signature = 0x000000
11
avrdude: Yikes!  Invalid device signature.
12
avrdude: Expected signature for ATMEGA8 is 1E 93 07
13
14
avrdude done.  Thank you.

Nach einigen recherchieren im Internet und in diesen Forum, hatte ich 
das gefühl das es ein allgemeines Problem von USBprog war. Irgendwie kam 
ich auf die Idee alles unter Debian/Linux zu probiert. Man sehe und 
staune ich kam dadurch schon etwas weiter.
1
......selbe Befehl........
2
3
avrdude: stk500v2_command(): command failed
4
avrdude: initialization failed, rc=-1
5
avrdude: AVR device initialized and ready to accept instructions
6
7
Reading | ################################################## | 100% 0.01s
8
9
avrdude: Device signature = 0x000000
10
avrdude: Yikes!  Invalid device signature.
11
avrdude: Expected signature for ATMEGA8 is 1E 93 07
12
avrdude: NOTE: FLASH memory has been specified, an erase cycle will be performed
13
         To disable this feature, specify the -D option.
14
avrdude: erasing chip
15
avrdude: stk500v2_command(): command failed
16
avrdude: reading input file "test.hex"
17
avrdude: input file test.hex auto detected as Intel Hex
18
avrdude: writing flash (30 bytes):
19
20
Writing | ################################################## | 100% 0.00s
21
22
avrdude: 30 bytes of flash written
23
avrdude: verifying flash memory against test.hex:
24
avrdude: load data flash data from input file test.hex:
25
avrdude: input file test.hex auto detected as Intel Hex
26
avrdude: input file test.hex contains 30 bytes
27
avrdude: reading on-chip flash data:
28
29
Reading | ################################################## | 100% 0.00s
30
31
avrdude: verifying ...
32
avrdude: verification error, first mismatch at byte 0x0008
33
         0x0f != 0x00
34
avrdude: verification error; content mismatch
35
36
avrdude: safemode: Fuses OK
37
38
avrdude done.  Thank you.

soweit sogut, mit viel freude an der Suche nach der Problemlösung habe 
ich aus Spaß den Flash ausgelesen was auch ohne Probleme 
funktionierte... das selbe ging auch wieder zurück. Den Hex-Code aus dem 
mircoCo. kann ich also ohne Probleme Lesen und dann wieder 
zurückschreiben.

Hier mal ein auszug.
1
:200000000000000000000000000000000000000000000000000000000000000000000000E0
2
:200020000000000000000000000000000000000000000000000000000000000000000000C0
3
:200040000000000000000000000000000000000000000000000000000000000000000000A0
4
:20006000000000000000000000000000000000000000000000000000000000000000000080
5
:20008000000000000000000000000000000000000000000000000000000000000000000060
6
:2000A000000000000000000000000000000000000000000000000000000000000000000040
7
:2000C000000000000000000000000000000000000000000000000000000000000000000020
8
:2000E000000000000000000000000000000000000000000000000000000000000000000000
9
:200100000000000000000000000000000000000000000000000000000000000000000000DF
10
:200120000000000000000000000000000000000000000000000000000000000000000000BF
11
...........
12
:201FE0000000000000000000000000000000000000000000000000000000000000000000E1
13
:00000001FF

Was mir an dieser Datei auffällt sind die führenden Bits die auf "2" 
stehen den mein kompilierter Code hat nur eine "1"
Mein Hex-Code.
1
:020000020000FC
2
:1000000000000000000000000FEF07BB00E001BB94
3
:0E0010000FEF02BB00B3819B01E208BBFBCFE8
4
:00000001FF


Wenn irgendjemand einen Hinweis hätte wo ich noch ansetzen könnte um das 
Problem zu beheben wäre ich dankbar. Ich bin momentan mit meinen Latein 
am Ende.

VG Lars

von Helfer (Gast)


Lesenswert?

> zu Programmieren bin ich auf USBProg als ISP gestoßen und gleichmal
> bestellt, soweit sogut.
>
> Gestern auch alles zusammengelötet, Programm mit VMLab kompiliert und

Da hapert es an der Kommunikation zwischen PC (AVRDUDE) und ISP-Adapter 
(USBProg).

Wenn du den USBProg selbst zusammen gelötet hast, dann solltest du den 
Aufbau peinlich genau kontrollieren.

Jeden Schreibversuch zum Atmega8 würde ich unterlassen, insbesondere in 
Kombination mit der -F Option! So lange der ISP-Adapter nicht fehlerfrei 
läuft, besteht eine grosse Gefahr, dass du den Atmega8 schrottest.

von Lars L. (vertigo)


Lesenswert?

Danke für die Antwort,
beim USBProg, waren nur der USB-Stecker, 3 kleine Leisten und der 
Wannenstecker aufzulöten. Habe alle Kontakte überprüft kein Pin 
beeinflußt den anderen und alle haben Kontakt zur Platine. Habe auch die 
SMD Widerstände geprüft und so wie es aussieht ist keiner zerschoßen. 
Für andere Prüfungen fehlt mich schlicht weg die Geräte.
Beim USBprog funktionieren auch alle zwei LEDs genauso wie im Handbuch 
beschrieben, ich kann den USBProg auch mit anderer Firmenware bestücken.
Hatte gestern ein wenig damit zu kämpfen die Firmenware von "USBProgOCD" 
zu "AvrISPmk2 Clone" wechseln zulassen.
Was mich einfach wundert warum ich den Hex-Code aus dem mega8 auf mein 
PC übertragen kann und wieder zurück und das ohne ein Meckern.

PS.:
Kann jetzt AVRdude auf mein Windows Rechner benutzten der Ärger lag an 
avrdude V5.10 mit der V5.5 kann ich jetzt die Hex Dateien aus dem mega8 
herauslesen.
Ich kann selbse die FuseBits auslesen nur schreiben kann ich keine. Hat 
es irgendwie damit zutun?

VG Lars

von Lars L. (vertigo)


Lesenswert?

Abend,
als kleines Gimmick kann man am USBprog einstellen das er das 
TargetBoard mit Stromversorgen soll. Also lötkolben angeschmießen und 
direkt vom ISP ohne zwischenbauteile die Kabel an die Pins gelötet. 
Siehe da das flashen funktioniert einwandfrei :-)
Habe den anderen mircoCo probiert und er wird auch ohne weiteres meckern 
erkannt und kann nach belieben beschrieben werden. Das bedeutet jetzt 
ich muss mir meine Schaltung neu zusammenlöten oder schauen wo ich ein 
Fehler gemacht habe.

Mir sind jetzt zwei Sachen aufgefallen, zum einen hat avrdude nicht 
gemeckert als ich den microCo heraugenommen habe. Was mich schon 
ziemlich gewundert hat. Den ich konnte immernoch Dateien aus den microCo 
herausschreiben. Das bringt mich ja schon fast auf ein Henne-Ei Problem 
zurück, nur in meinen Fall war das Ei da, ohne eine Henne.
Zum zweiten sind die herausgeschriebenen Hex-Dateien teilweise immernoch 
mit anderen Werten beschrieben. Was mich nun zu der Frage bringt wandelt 
der microCo die Hex-Dateien nochmals um?
Achja AVRStudio4 will mein USBprog immernoch nicht haben, ist aber nicht 
so schlimm wenigstens weiß ich jetzt das ich auf den richtigen Weg bin 
:-)

Gruß Lars

von Helfer (Gast)


Lesenswert?

> Mir sind jetzt zwei Sachen aufgefallen, zum einen hat avrdude nicht
> gemeckert als ich den microCo heraugenommen habe.

Naja, im Log für den Fall "microCo drin, aber Probleme mit 
USBprog/AVRDUDE" oben sind ja schon ein paar Probleme sichtbar. Und der 
Inhalt der Hexdatei ist komplett 0.

Möglicherweise ist das nicht gezeigten Log für "microCo draus, aber 
keine Probleme mit USBprog/AVRDUDE" ähnlich.

von Lars L. (vertigo)


Lesenswert?

Hallo,
also in der Log für  "microCo draus, aber keine Probleme mit 
USBprog/AVRDUDE" ging avrdude problemlos durch und hat beim "verifying", 
ein okay Status zurückgegeben. Aber wie gesagt das war halt nur wenn ich 
die vorher aus dem flash geschriebene Datei wieder eingelesen habe. 
Meine Theorie geht langsam dahin das der mega8 zuwenig Strom bekommen 
hat. Mein Netzteil gibt nur 1A aus und musste in Ermangelung eines 10k 
Widerstandes ein 30k einbauen.
Habe auch noch einmal im Datenblatt nachgeschaut und da steht das mein 
ATmega8-16PU eine Betriebsspannung von 4.5V - 5.5V braucht.
Werde also bei der neuen Schaltung besser darauf achten was ich Messe. 
Wenigstens kann jetzt das Abendteuer ATmega8 weiter gehen :-)

gruß Lars

von Helfer (Gast)


Lesenswert?

> Mein Netzteil gibt nur 1A aus und musste in Ermangelung eines 10k
> Widerstandes ein 30k einbauen.

Beides sollte kein Problem sein.

Der Atmega8 Aufbau nur für ISP ggf. inkl. ISP-Adapter ohne 
Zusatzschaltung am AVR dürfte max. 1/10 A aufnehmen. Wenn mehr gemessen 
wird, Schaltung nachkontrollieren bzw. fühlen, was heiss wird (5V * 1A = 
5W).

Der (RESET?)-Widerstand darf höhere Ohmzahlen haben. Die 10K sind nur 
ein gängiger Wert. Nur weniger als 4K7 sollte es nach Atmel-Empfehlung 
nicht sein, weil es manche ISP-Adapter dann nicht schaffen, RESET auf 
low zu ziehen. 30K ist OK.

Wenn du mehrere 30K Widerstände hast, kannst du auch drei parallel 
schalten, um auf 10K zu kommen, falls dich der 30K Wert nervös macht.

von Peter D. (peda)


Lesenswert?

Lars L. schrieb:
> Mir sind jetzt zwei Sachen aufgefallen, zum einen hat avrdude nicht
> gemeckert als ich den microCo heraugenommen habe.

Das ist korrekt.

Das ISP-Protokoll hat keine Fehlererkennung.
Die einzige Möglichkeit, zu erkennen, ob ein Target angeschlossen ist, 
ist die Signatur zu lesen und zu vergleichen.

Löschen und Programmieren macht der Programmer auf gut Glück. Er kriegt 
vom Target keine Quittung.
Erst das Verify sagt Dir, ob was ausgeführt wurde.


Peter

von Lars L. (vertigo)


Lesenswert?

Abend,
also nach weiteren umlötaktionen (ich muss das wirklich nochmal richtig 
Üben :D ) funktioniert jetzt auch meine erste Schaltung. Der erste Test 
mit einer LED hat auch super funktioniert.

-> microCo geflasht: LED leuchtet
-> microCo gelöscht: LED aus
:D

Jetzt muss ich mal schauen wie ich weiter mache. Danke nochmals für eure 
Hilfe ^^

Gruß Lars

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Peter Dannegger schrieb:
> Das ISP-Protokoll hat keine Fehlererkennung.
> Die einzige Möglichkeit, zu erkennen, ob ein Target angeschlossen ist,
> ist die Signatur zu lesen und zu vergleichen.

Das stimmt nicht.  Das ISP-Protokoll besitzt zumindest am Anfang
der Programmier-Sitzung eine Rückmeldung.

> avrdude: initialization failed, rc=-1

Genau das ist der erkannte Fehler.  Wenn man den natürlich mit der
Option -F übergeht, braucht man sich nicht wundern, dass hernach nur
noch Unsinn rauskommt.

Meine Vermutung ist, dass der ISP-Takt am Programmer zu hoch
eingestellt ist.  Mal mit der Option -B10 probieren.  Und schmeiß
das -F da raus, das -D gleich noch mit.  Beide Optionen sollte man
nur benutzen, wenn man genau weiß, was man tut.

von Lars L. (vertigo)


Lesenswert?

@Jörg
Danke nochmals, aber wie schon gesagt Problem ist gelöst lag 
höchstwahrscheinlich an meiner Schaltung die ich mir zusammen gelötet 
habe.
Mit dem zuhohen Takt hatte ich auch schonmal vermutet und schon gestern 
immerwieder probiert hatte aber auch nichts geholfen.
Ich hatte das Forum und die Tutorials hier bis zum erbrechen schon 
gelesen, bis ich mich dazu entschieden habe, in die Sache hier Geld zu 
investieren ^^

gruß Lars

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.