www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Mehrere Fusebytes mit avrdude programmieren


Autor: user (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi, wie kann man denn mehrere Fusebytes mit avrdude schreiben? Beim 
Mega8 hab ich das schon rausgefunden. Man muss die hfuse vor der lfuse 
schreiben.

Aber wie ist das beim Mega128? Ich hab schon verschiedene Kombinationen 
probiert, aber ich bekomme immer eine Meldung

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

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

avrdude: verifying ...
avrdude: verification error, first mismatch at byte 0x0000
         0xff != 0xe1
avrdude: verification error; content mismatch

avrdude: safemode: lfuse changed! Was ff, and is now e1
Would you like this fuse to be changed back? [y/n] y
avrdude: safemode: and is now rescued
avrdude: safemode: Fuses OK

Wie funktioniert das?

Autor: Florian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Du hast beim Mega128 3 Fusebytes. Wie Du die genau schreiben musst kann 
ich Dir leider nicht sagen. Ich nutze immer AVR Studio.
Ich hoffe der Hinweis mit den 3 Fuses hilft Dir ein bisschen weiter.

Ev. mal die Bytes im AVR Studio zusammenklickern. Im unteren Fenster 
werden die Bytes dann in Hex angezeigt. Es gibt auch einen 
Offline-Modus.

Eine Registrierung ist beim Runterladen vom AVR Studio überingens nicht 
nötig. Du kannst irgendwas angeben. Es wird keine E-mail mit Link 
versendet. Sobald man alles eingeben hat kommt man zur Download Seite.

Gruß
Florian

Autor: user (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich weiß, dass es drei Fusebytes sind. Darum geht es ja. Es geht darum, 
in welcher Reihenfolge ich die angeben muss. Das AVR Studio hilft mir da 
leider nicht

Autor: C-Tutor (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schreib alle drei auf einmal, avrdude unterstützt mehrere -U switches in 
der Kommandozeile.

Autor: Joachim K. (minifloat)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Laut 
bash$ man avrdude
lautet die Syntax
-U memtype:op:filename[:format]

So verifiziert zum Beispiel folgende Angabe
-U efuse:v:0xFF:m
die extended fuse, ob dort 0xFF drinnen steht.
mfg mf

Autor: user (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das ist mir schon alles klar. Es geht um die Reihenfolge. Nur mal ein 
Beispiel:

Das funktioniert
avrdude -pm32 -cavrisp2 -Pusb -U hfuse:w:0xc1:m -U lfuse:w:0xff:m

Das funktioniert nicht
avrdude -pm32 -cavrisp2 -Pusb -U lfuse:w:0xff:m -U hfuse:w:0xc1:m

Bei letzterer Zeile bekomme ich eine Fehlermeldung in der Art, wie ich 
sie oben gepostet habe.

Bei Mega128 hab ich halt drei Fusebytes, aber egal, in welcher 
Reihenfolge ich die angebe, es kommt immer wieder zu so einer 
Fehlermeldung.

Autor: user (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ach ja, das passiert nur bei AVR, bei denen die Fusebytes im 
Originalzustand sind. Wenn ich den Befehl zwei mal hintereinander 
ausführe geht es beim zweiten mal fehlerfrei durch

Autor: user (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hier mal ein komplettes Beispiel. Ein fabrikneuer ATmega32, lfuse vor 
hfuse

$ avrdude -pm32 -cavrisp2 -Pusb -e -U lfuse:w:0xff:m -U hfuse:w:0xc1:m 

avrdude: AVR device initialized and ready to accept instructions

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

avrdude: Device signature = 0x1e9502
avrdude: erasing chip
avrdude: reading input file "0xff"
avrdude: writing lfuse (1 bytes):

Writing | ################################################## | 100% 0.01s

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

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

avrdude: verifying ...
avrdude: 1 bytes of lfuse verified
avrdude: reading input file "0xc1"
avrdude: writing hfuse (1 bytes):

Writing |                                                    | 0% 0.00s ***failed;  
Writing | ################################################## | 100% 0.02s

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

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

avrdude: verifying ...
avrdude: verification error, first mismatch at byte 0x0000
         0xc1 != 0x99
avrdude: verification error; content mismatch

avrdude: safemode: hfuse changed! Was c1, and is now 99
Would you like this fuse to be changed back? [y/n] y
avrdude: safemode: and is now rescued
avrdude: safemode: Fuses OK

avrdude done.  Thank you.


das gleiche, wenn ich lfuse und hfuse vertausche

$ avrdude -pm32 -cavrisp2 -Pusb -e -U hfuse:w:0xc1:m -U lfuse:w:0xff:m

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.01s

avrdude: Device signature = 0x1e9502
avrdude: erasing chip
avrdude: reading input file "0xc1"
avrdude: writing hfuse (1 bytes):

Writing | ################################################## | 100% 0.01s

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

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

avrdude: verifying ...
avrdude: 1 bytes of hfuse verified
avrdude: reading input file "0xff"
avrdude: writing lfuse (1 bytes):

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

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

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

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

avrdude: safemode: Fuses OK

avrdude done.  Thank you.

Autor: user (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Keiner eine Idee? Könnte es ein Timing Problem sein? Ich habe im 
Datenblatt gestöbert, aber nichts konkretes gefunden. Lediglich das 
sowohl bei paralleler Programmierung als auch bei JTAG gewartet wird, 
bis die Programmierung fertig ist.

Wie ist das bei serieller Programmierung (ISP)? Wartet avrdude, bis der 
Vorgang fertig ist?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.