avrdude zeigt fuses an, die nicht existieren (dürften) & programmiert falsch

OP #4548194
Lesenswert?

Hallo auch.
Die Suche liefert mir Anwendungsprobleme, wohin Ich glaube, einen echten 
avrdude-Fehler unter Ubuntu zu haben.

Bei meinem Atmega8 (auf dem Gehäuse steht "Atmega8-16PU") liest mir das 
Programm nach jedem Schreibvorgang die Fuses brav wie folgt aus:
avrdude: safemode: Fuses OK (H:FF, E:C1, L:E1)

Daraus ergeben sich eine Reihe von Problemen:
Die Seite "http://www.engbedded.com/fusecalc"; sagt, dass der Atmega8 
keine extended Fuses hat.
Wenn Ich die extended fuses mittels -U efuse:w: beschreiben will, meldet 
mir das Programm ebenfalls, dass keine efuses vorhanden sind.

Wenn Ich nun aber die low und high fuses programmieren möchte, passiert 
sowas hier:

"
root@imperator-PC:~# avrdude -c usbasp -p m8 -U hfuse:w:0xff:m

avrdude: warning: cannot set sck period. please check for usbasp 
firmware update.
avrdude: AVR device initialized and ready to accept instructions

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

avrdude: Device signature = 0x1e9307
avrdude: reading input file "0xff"
avrdude: writing hfuse (1 bytes):

Writing | ################################################## | 100% 
0.00s

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

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

avrdude: verifying ...
avrdude: 1 bytes of hfuse verified

avrdude: safemode: hfuse changed! Was ff, and is now df
Would you like this fuse to be changed back? [y/n] y
avrdude: safemode: and is now rescued
avrdude: safemode: Fuses OK (H:FF, E:FF, L:FF)

avrdude done.  Thank you.
"


Oder, wenn Ich nun mit -v den Auslesebefehl gebe, erscheint diese 
widersprüchliche Ausgabe:

avrdude: Device signature = 0x1e9307
avrdude: safemode: lfuse reads as E1
avrdude: safemode: hfuse reads as C1

avrdude: safemode: lfuse reads as E1
avrdude: safemode: hfuse reads as C1
avrdude: safemode: Fuses OK (H:FF, E:C1, L:E1)


Ihr seht, dass hier irgendetwas überhaupt nicht stimmen kann. 
Irgendetwas am auslesen ist völlig falsch, er zeigt mir hier die H als 
FF an und die E als C1...

edit:
Ich habs jetzt nochmal binär ausgelesen und in hex umgerechnet:
Der Verdacht liegt, wie ihr oben sehen könnt, nahe, dass er low korrekt 
ausliest, dann high ausliest und es als das extended fuse interpretiert.
Gast #4548631
Lesenswert?

Hallo Philipp,

ein paar Fragen von mir:
1. Hast du am µC genügend Abblockkondensatoren?
2. Benutzt du die aktuelle Version des avrdude?
3. Hast du beim USBASP den Jumper J3 gesetzt?
4. Sind die ISP-Pins frei oder sind Komponenten angeschlossen?
5. Versorgst du die Zielschaltung mit dem USBASP?
Gast #4548658
Lesenswert?

Fuses die nicht existieren können mit avrdude geschrieben werden, 
behalten diesen Wert aber nicht. Sie kommen als 0 zurück. Setze sie 
vorher auf 0 in der Maske und du hast dieses Problem nicht mehr.
#4548929
Lesenswert?

Hi,
nimm mal eine aktuelle Version des AVRDUDE, dann tritt das Problem des 
vertauschten E und H fuses nicht mehr auf. Das ist aber nur in der 
Anzeige, also kein echtes Problem (wenn man es weiß)

Ansonsten hat leeer das eigentliche "Problem" schon beschrieben.

Kurz: Alles im  grünen Bereich.

Gruß
Andreas
#4549055
Lesenswert?

Stefan U. schrieb:
> Das könnte ein Bug in der Firmware des USBASP sein.

Nein.

Der usbasp behandelt alle Fuses gleich. Genauso wie er alle Adressen im 
Flash gleich behandelt. Die verschiedenen Fuses sind am Ende auch nur 
verschiedene Adressen in einem eigenen Adreßraum.

@TE: ich empfehle dir, das Manual von avrdude zu lesen. Insbesondere den 
Teil über den Safemode und warum man den abschalten muß(!) wenn man die 
Fuses verändern will.
OP #4549522
Lesenswert?

Ist die Version aus den Paketquellen nicht die aktuellste?
Soweit Ich weiß, hat avrdude gar keine eigene Homepage.

Nichtsdestotrotz: Er vertauscht mir ja nicht nur E und H, sondern zeigt 
E an, obwohls nicht existiert, setzt die fuses aber dennoch richtig?

@Axel: Wenn Ichs richtig verstehe, scheint es ja trotz aktiviertem 
Safemode funktioniert zu haben :{
Moderator Persönliche Seite #4549535
Lesenswert?

Axel S. schrieb:
> Insbesondere den Teil über den Safemode und warum man den abschalten
> muß(!) wenn man die Fuses verändern will.

Nö, wenn man sie vorsätzlich ändert, wird das automatisch einbezogen.

Der safemode soll ja nur gegen unfreiwillige Änderungen schützen.

@TE: was passiert denn, wenn du den safemode abschaltest (-u), ist denn
die eigentliche Programmierung in Ordnung?  Kann gut sein, dass safemode
irgendwie verbuggt ist, wenn ein Controller keine efuse hat, das würde
ich mal nicht ausschließen wollen.
OP #4549614
Lesenswert?

Andreas hat ja oben einen alten Fall verlinkt, bei dem das Problem 
ebenfalls schon auftrat.

Ich habe Version 6.0.1 aus den Paketquellen.
Weiß nicht, ob es vielleicht mit 6.3 schon behoben ist.

Ich habe aber auch keine Ahnung, wie man diese installieren könnte :0
http://download.savannah.gnu.org/releases/avrdude/
Scheint mehr für Windows gedacht zu sein, glaube Ich.
OP #4549626
Lesenswert?

Mag er nicht :/

/bin/bash ./ylwrap config_gram.y y.tab.c config_gram.c y.tab.h `echo 
config_gram.c | sed -e s/cc$/hh/ -e s/cpp$/hpp/ -e s/cxx$/hxx/ -e 
s/c++$/h++/ -e s/c$/h/` y.output config_gram.output -- yacc -d
./ylwrap: Zeile 111: yacc: Befehl nicht gefunden
make: *** [config_gram.c] Fehler 1
Moderator Persönliche Seite #4549661
Lesenswert?

Ja, einen yacc oder bison (und einen flex) musst du vorher installieren.
Die werden zum Parsen der Konfigurationsdatei benötigt.

Leider gibt's keine vernünftigen autoconf-Makros dafür, die dann auch
sagen, dass da was fehlt.  Die, die es gibt, können nur erkennen, ob
es yacc oder bison und flex oder lex sind und dann entsprechend
reagieren.

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