Forum: Mikrocontroller und Digitale Elektronik avrdude zeigt fuses an, die nicht existieren (dürften) & programmiert falsch


von Philipp S. (philippsta)


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.

: Bearbeitet durch User
von tommy_v (Gast)


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?

von leeer (Gast)


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.

von Stefan F. (Gast)


Lesenswert?

Das könnte ein Bug in der Firmware des USBASP sein.

von Andreas B. (bitverdreher)


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

: Bearbeitet durch User
von Erwin (Gast)


Lesenswert?

Habe gerade diese Zeile entdeckt(ganz oben):

Philipp S. schrieb:
> please check for usbasp
> firmware update.

Hast du das schon gemacht?

von Andreas B. (bitverdreher)


Lesenswert?


von Axel S. (a-za-z0-9)


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.

von Philipp S. (philippsta)


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 :{

: Bearbeitet durch User
von Jörg W. (dl8dtl) (Moderator) Benutzerseite


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.

von Philipp S. (philippsta)


Lesenswert?

Ja, mit deaktiviertem savemode programmiert er schon ordnungsgemäß und 
zeigt nach der Programmierung die fuses nicht an, wie es sein soll.

: Bearbeitet durch User
von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Dann wird wohl der safemode buggy sein.  Kannst gern einen Bugreport
dafür abfassen.

von Philipp S. (philippsta)


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.

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


Lesenswert?

Philipp S. schrieb:
> Scheint mehr für Windows gedacht zu sein, glaube Ich.

Nicht im geringsten.

Auspacken, ./configure, make all install.

von Philipp S. (philippsta)


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

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


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.

: Bearbeitet durch Moderator
von Philipp S. (philippsta)


Lesenswert?

Never change a running system.

Installation haut hin, unterstützt aber kein usb. "Compile again with 
usblib installed" oder sowas.

Entfernen mittels apt-get remove geht auch nicht mehr, da entfernt er 
nur den aus den offiziellen Paketquellen.

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


Lesenswert?

Philipp S. schrieb:
> Compile again with usblib installed

libusb-dev (sowohl 1.0 als auch 0.1)
gleich auch noch libhidapi-dev installieren

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.