Hallo,
aktuell habe ich einige Probleme, die Fuses auf einem ATmega168 und
ATmega328 zu flashen. Leider habe ich mir jetzt schon ein paar verfused
und ich kann mir überhaupt nicht erklären, was ich falsch mache.
Die Fuses habe ich zunächst mit dem burn-o-mat berechnet, dann
irgendwann auch mit dem Engbedded AVR Fuse calculator.
Als ISP Controller habe ich zunächst einen avrispmkii clone genutzt,
dann auch einen usbasp, bei beiden erscheint das gleiche Problem
(verification error nach dem setzen der fuses (auslesen funktioniert
zunächst problemlos), es wird immer der efuse falsch gesetzt)...
Ich benutze Ubuntu 14.04.
Im Anhang einfach mal meine komplette Konsolenausgabe.
Benutze ich die avrdude Komandos falsch? Zwischendurch habe ich zum
testen einfach mal immer -n mit angegeben, damit nicht noch ein AVR
verfused wird. Dabei kam dann auch der verification Fehler, dann habe
ich aber gedacht, dass das daran liegt, dass eben mit dem -n Operator
nichts geflasht wird, hab den dann weggelassen und den nächsten AVR
verfused.
Vielleicht kann mir ja jemand helfen.
Danke und Grüße
Jan
Dir ist schon klar, dass du den Reset Pin mit deinen Einstellungen
abgeschaltet hast?
Und warum nimmst du die Warnung nicht ernst, dass avrdude mit der
Firmware deines Programmers Probleme hat und den Takt nicht einstellen
kann?
Ne, das war mir nicht klar und auch nicht beabsichtigt. Hab' die Fuses
so mit dem burn-o-mat bestimmt, offensichtlich ist dabei etwas schief
gelaufen. Ich habe aber auch seltsames Verhalten der Software beobachtet
(teilweise keine Reaktion bei Druck auf „Apply“ Button), habe das aber
zu dem Zeitpunkt nicht so ernst genommen (da die Software früher immer
super funktioniert hat).
Na ja, dann versuche ich mal, mir einen HV Programmer zu basteln...
Danke auf jeden Fall!
Ich habe das Ganze jetzt noch einmal ausprobiert. Ich wollte jetzt
einfach mal zum Test die Standard Fuses für den ATmega168 flashen (die
ich mir vom engbedded fuse calculator geholt habe). Das wäre dann ja:
Hi,
Da efuse beim Mega168 nur die ersten drei Bits belegt hat, führt F9 eben
nur zum gesetzten ersten Bit.
Was versuchst Du mit F9 auf dem efuse zu bewirken?
Gruß
Andreas
Hi Andreas,
das wusste ich nicht, ergibt aber Sinn. Ich habe mich jetzt mal einfach
auf den Fuse calculator (http://www.engbedded.com/fusecalc/) verlassen.
Wenn man da den ATmega168 auswählt und unten auf default geht, wird als
avrdude arguments angezeigt
Hi,
das einzige, was Du falsch machst, ist das zurückgelesene richtig zu
interpretieren.
Das Bit 3-7 nicht definiert sind, ist auch nicht definiert, was
zurückgelesen wird.
Also: Alles ist gut. ;-)
Gruß
Andreas
Es kann gut sein, dass ich da irgendwas falsch interpretiere, aber wie
kann eine Falschinterpretation zu sowas führen? Entschuldige, ich
verstehe gerade überhaupt nicht, was genau das Problem ist... Hier lese
ich die Fuses eines neuen ATmegas168 zurück (Fuses OK (H:01, E:DF,
L:62)). Danach flashe ich zum Testen die Fuses genau so zurück (sudo
avrdude -c avrispmkii -P usb -p m168 -B 100 -U lfuse:w:0x62:m -U
hfuse:w:0x01:m -U efuse:w:0xdf:m), Ergebnis ist ein verification Error
und diese Fuses: (H:07, E:01, L:62)........
Was genau fehlinterpretiere ich da? :/
Hi,
Du schreibst efuse auf DF, das heißt 1101 1111.
Da nur die ersten 3 Bits relevant sind, mußt Du also wieder auslesen:
efuse = xxxx x111.
D.h. jede beliebige Zahl, die so aussieht ist ein korrekt
zurückgelesenes Ergebnis, in diesem Fall also 07. Die führenden Bits
werden hier als 0 zurückgelesen. Das könnte aber auch anders sein, da
wie schon erwähnt, die Bits 3-7 nicht definiert sind.
Gruß
Andreas
Hi Andreas,
alles klar, danke, das verstehe ich soweit. Aber Deine Aussage bezieht
sich ja nur auf die efuse. Nochmal kurz mein Vorgehen:
1) Ich habe ausgelesen:
Fuses Werkszustand: (H:01, E:DF, L:62)
2) Ich habe zum Test geschrieben:
sudo avrdude -c avrispmkii -P usb -p m168 -B 100 -U lfuse:w:0x62:m -U
hfuse:w:0x01:m -U efuse:w:0xdf:m
3) Ergebnis: (H:07, E:01, L:62) (zumindest laut der avrdude Ausgabe),
also verfused (Fuses lassen sich jetzt wieder nich auslesen), weil jetzt
wieder PC6 als IO konfiguriert ist... Das sieht so aus, als ob hfuse und
efuse vertauscht sind?!
Aber warum?
Grüße
Jan
Hi,
das ist ein vermutlich der gleiche Bug in Deiner avrdude Version
(<6.1.2) wie hier:
Beitrag "avrdude Anzeige der fuses"
Lade Dir mal die aktuelle Version herunter.
Gruß
Andreas
Jan B. schrieb:> Ich habe mich jetzt mal einfach auf den Fuse calculator> (http://www.engbedded.com/fusecalc/) verlassen.
Manchmal kann es sinnvoll sein, sich lieber aufs Datenblatt zu
verlassen … So schwierig sind die paar Bits ja nun auch nicht zu
verstehen, und die Erfahrung zeigt, dass sich diejenigen, die sich
die Fuse-Werte selbst aus dem Datenblatt zusammentragen, in aller
Regel viel weniger dabei vertun als die, die sich auf ein Tool dabei
verlassen.
Axel Schwenke schrieb:> Du mußt den Safemode abschalten, wenn du Fuses ändern willst.
Nö. Der notiert sich intern, welche Änderungen vorsätzlich an den
Fuses vorgenommen werden sollen. Nur, wenn beim Programmende die
zurückgelesenen Fuses nicht mit seiner (aktualisierten) Idee
übereinstimmen, warnt er.
Ist eigentlich ein Fietscher, das aus Zeiten der altertümlichen und
nicht immer sehr zuverlässigen Primitivprogrammiergeräte stammt; vor
allem die an einer seriellen Schnittstelle vor sich hin klappernden
Bit-Banger waren manchmal recht fragil und neigten dazu, mal ein Bit
falsch auszugeben. Blöd halt, wenn es gerade eins war, welches bei
Wirksamwerden dann die Taktquelle auf eine nicht vorhandene gedreht
hat.
Der ganze Safemode funktioniert sowieso nur deshalb, weil die
Änderungen an den Fuses erst nach dem Verlassen des ISP-Modus
wirksam werden. Daher kann man innerhalb einer Sitzung die neuen
Fuse-Werte schon lesen, arbeitet aber noch mit den bisherigen
Einstellungen.
Hallo,
also, ich hatte tatsächlich noch avrdude 6.0.2 installiert. Nach dem
Update funktioniert alles und ich konnte die Fuses problemlos schreiben.
Die Bugbeschreibung sagt ja, dass nur bei der Ausgabe E und H vertauscht
sind, aber anscheinend ist das auch beim Flashen so.
Bei dem Datenblatt stimme ich Dir zu, ich habe mich allerdings bei den
fuses jetzt darauf verlassen, dass die hier im Wiki verlinkten Seiten
halbwegs seriös sind und wenn man sich über so ein Tool 3 Minuten Arbeit
spart, nehme ich die mit ;)
Danke auf jeden Fall und Grüße
Jan
Jan B. schrieb:> Die Bugbeschreibung sagt ja, dass nur bei der Ausgabe E und H vertauscht> sind, aber anscheinend ist das auch beim Flashen so.>
Nein, das ist wirklich nur die Anzeige in der letzten Zeile. Schau Dir
mal Dein log genauer an:
Erst schreibt er lfuse mit x062 und liest sie korrekt zurück.
Dann schreibt er hlfuse mit x001 und liest sie auch korrekt zurück.
Erst beim efuse kommen die nicht ausgeblendeten Bits zum tragen.
Es wäre also alles ok gewesen.
Gruß
Andreas