Forum: Mikrocontroller und Digitale Elektronik AVRDude in CMake


von D a v i d K. (oekel) Benutzerseite


Angehängte Dateien:

Lesenswert?

Hi,

ich wechsel gerade meine komplette Ungebung von Windows zu Ubuntu.

- Bauen klappt
- flashen (hex) klappt
- flashen (eep) klappt scheinbar nicht:
    jedenfalls kommen die Daten obgleich einer ok Meldung im Terminal 
nicht auf dem Chip an (die eep auf nen Usb-Stick und mit dem alten 
Windows geflasht brigt erfolg.

Also wo liegt der Fehler?
1
avrdude -pm88 -cstk500 -P/dev/ttyUSB0 -b115200 -Ueeprom:w:HelloC_AVR.eep

an /dev/ttyUSB0 hängt ein
"mySmartUSB light"
Firmware-Version: 1.16.1932
Firmware-Typ: STK500 kompatibel
[Stromversorgung beim Brennen aktiv: ja (unter Windows); 5V]
Controller: ATmega88

Grüße David

PS-Terminal-Response:
1
Writing | ################################################## | 100% 0.05s
2
3
avrdude: 6 bytes of eeprom written
4
...HelloC_AVR.eep contains 6 bytes
5
avrdude: reading on-chip eeprom data:
6
7
Reading | ################################################## | 100% 0.05s
8
9
avrdude: verifying ...
10
avrdude: 6 bytes of eeprom verified
11
12
avrdude: safemode: Fuses OK (E:F9, H:DF, L:E2)
13
avrdude done.  Thank you.

: Bearbeitet durch User
von D a v i d K. (oekel) Benutzerseite


Lesenswert?

Kann mir keiner helfen, damit ich die Windows-Kisten endlich in die 
ewigen Jagdgründe schicken kann?
Ich meine das eep Unix-->Windows-->flashen kann ja nicht so kompliziert 
sein, wenn der Rest geht ;(

von AbcAbc (Gast)


Lesenswert?

Du hast dabei einige Fragen nicht beantwortet:
1. Klappt es nur aus CMake nicht oder auch aus dem normalen Terminal 
nicht
2. Wie hast du verifiziert, dass es nicht klappt?

von D a v i d K. (oekel) Benutzerseite


Lesenswert?

AbcAbc schrieb:
> Du hast dabei einige Fragen nicht beantwortet:
> 1. Klappt es nur aus CMake nicht oder auch aus dem normalen Terminal
> nicht
> 2. Wie hast du verifiziert, dass es nicht klappt?

Der Befehl zum flashen des eep unterscheidet sich ja nur an einer Stelle 
von jenem, der das Hex verarbeitet.

Ich kann es sehen, denn ich habe eine Display angeschlossen,  dass einen 
Eeprom Wert anzeigt.
Normal steht dort 1600 und derzeit ein sehr hoher Wert. Wenn ich raten 
müsste max_int32 oder Zufallswerte.

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


Lesenswert?

Das klingt aber alles danach, als würde deine EEPROM-Ladedatei falsch 
erzeugt. AVRDUDE bestätigt dir ja, dass sie korrekt geladen und zurück 
gelesen worden ist.

CMake ist nun auch nicht unbedingt das, was jeder so aus dem Effeff 
beherrscht. Vielleicht stellst du ja mal ein komplettes (Mini-)Projekt 
zusammen, damit man das mal vollständig nachvollziehen kann.

von Harry L. (mysth)


Lesenswert?

Probier mal:
1
avrdude -pm88 -cstk500v2 -P/dev/ttyUSB0 -b115200 -Ueeprom:w:HelloC_AVR.eep

von D a v i d K. (oekel) Benutzerseite


Lesenswert?

Jörg W. schrieb:
> Das klingt aber alles danach, als würde deine EEPROM-Ladedatei falsch
> erzeugt. AVRDUDE bestätigt dir ja, dass sie korrekt geladen und zurück
> gelesen worden ist.
Wie gesagt kann ich diese "EEPROM-Ladedatei" auf einen USB-Stick packen, 
auf den alten Windows-PC kopieren und dort mit dem gleichen Programmer 
auf den gleichen Chip spielen und es funktioniert ;)

> CMake ist nun auch nicht unbedingt das, was jeder so aus dem Effeff
> beherrscht. Vielleicht stellst du ja mal ein komplettes (Mini-)Projekt
> zusammen, damit man das mal vollständig nachvollziehen kann.

Vielleicht sollte ich mir einen der 30 JTAG-ICE-Dongle mal zu Gemüte 
ziehen und dann Step-By-Step schauen, was dort im eeprom während der 
Laufzeit liegt.

Grüße David

von Einer K. (Gast)


Lesenswert?

D a v i d K. schrieb:
> Wie gesagt kann ich diese "EEPROM-Ladedatei" auf einen USB-Stick packen,
> auf den alten Windows-PC kopieren und dort mit dem gleichen Programmer
> auf den gleichen Chip spielen und es funktioniert ;)

Meine Glaskugel sagt:
Du hast die falsche Datei am Haken!

Das gezeigte avrdude  Kommando ist eindeutig glücklich mit dem, was es 
getan hat.

Von daher gibt es nur 2 Möglichkeiten:
1. avrdude lügt dich an
2. du verwechselst die *.eep Dateien

Ein paar -v  zeigen dir deutlicher, was avrdude tut.

von fop (Gast)


Lesenswert?

Einfach mal in den blauen Dunst :
Hast Du verschiedene .eep Dateien, die sich nur durch Groß- und 
Kleinschreibeung des Dateinamens unterscheiden ? Das wäre so ein kleiner 
aber manchmal gewaltiger Unterschied zwischen Windows und Linux.

von Yalu X. (yalu) (Moderator)


Lesenswert?

Ändert sich etwas, wenn du den absoluten Pfad der eep-Datei, also bspw.

1
avrdude -pm88 -cstk500 -P/dev/ttyUSB0 -b115200 -Ueeprom:w:/home/user/HelloC_AVR.eep

angibst? Damit wird sicher gestellt, dass von evtl. mehreren Dateien
gleichen Namens die richtige genommen wird.

Wenn das nicht hilft, dann lies doch mal die EEPROM-Daten mittels

1
avrdude -pm88 -cstk500 -P/dev/ttyUSB0 -b115200 -Ueeprom:w:eeprom-inhalt.eep:i

aus einem fehlgeflashten AVR aus (einmal von Windows und einmal von
Linux aus) und vergleiche die Daten untereinander und mit dem Original.
Schau dir die ausgelesene Datei auch manuell an: Stehen darin evtl. nur
0x00s oder 0xFFs?

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


Lesenswert?

D a v i d K. schrieb:
> Vielleicht sollte ich mir einen der 30 JTAG-ICE-Dongle mal zu Gemüte
> ziehen und dann Step-By-Step schauen, was dort im eeprom während der
> Laufzeit liegt.

Falls du die Clones des uralten JTAGICE (manchmal auch als mkI 
bezeichnet) meinst: da hast du mit dem ATmega88 keine Chance. Der 
ATmega88 hat einfach mal kein JTAG.

Den EEPROM kannst du aber auch mit AVRDUDE problemlos rücklesen, nachdem 
das Programm eine Weile gelaufen ist:
1
avrdude -pm88 -cstk500 -P/dev/ttyUSB0 -b115200 -Ueeprom:r:readback.eep:i

von D a v i d K. (oekel) Benutzerseite


Angehängte Dateien:

Lesenswert?

Jetzt noch mal eine ausführliche Testbeschreibung:
1
avrdude -pm644p -cstk500 -P/dev/ttyUSB0 -b115200 -Uflash:w:Test.hex
2
avrdude -pm644p -cstk500 -P/dev/ttyUSB0 -b115200 -Ueeprom:w:Test.eep

Inhalt der Test.eep
1
:0F00000060BAFFFF140415040206008403F40124
2
:00000001FF

Führt zu einem Zustand auf dem Chip, der ähnlich/gleich aussieht, als 
hätte ich die eep vergessen.

Dann flashe ich nur das *.eep unter Windows (siehe Bild: was ist das 
eingentlich für eine Codierung und diese evtl Schlüssel des ganzen?)
Und ich erhalte die erwarteten Werte in den Variablen.

nun wiederhole ich nur:
1
avrdude -pm644p -cstk500 -P/dev/ttyUSB0 -b115200 -Ueeprom:w:Test.eep

und es BLEIBT "gut". Was mich vermuten lässt, dass er die Werte an 
irgend eine falsche Stelle im Rom schreibt.

Wiederhole ich nur:
1
avrdude -pm644p -cstk500 -P/dev/ttyUSB0 -b115200 -Uflash:w:Test.hex

Ist wieder alles "schlecht", was aber auch logisch klingt, wenn man die 
folgenden Zeilen aus der Console ließt "avrdude: NOTE: "flash" memory 
has been specified, an erase cycle will be performed"

Soweit so schlecht. Fallen euch noch parameter und/oder Randbedingungen 
ein, die avrdude braucht, um gleichwertig mit dem WindowsTool das eep zu 
flashen?

Grüße David

von Einer K. (Gast)


Lesenswert?

D a v i d K. schrieb:
> Ist wieder alles "schlecht", was aber auch logisch klingt, wenn man die
> folgenden Zeilen aus der Console ließt "avrdude: NOTE: "flash" memory
> has been specified, an erase cycle will be performed"

Die EESAVE Fuse schon gefunden?

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


Lesenswert?

D a v i d K. schrieb:
> Führt zu einem Zustand auf dem Chip, der ähnlich/gleich aussieht, als
> hätte ich die eep vergessen.

Einzige Erklärung dafür: dein Programmer ist kaputt und funktioniert 
trotz gegenteiliger Behauptung nicht korrekt. Aus irgendeinem Grund 
funktioniert er unter Windows, möglicherweise benutzt dein myAVR Prog 
Tool dort eine alte AVRDUDE-Version, die irgendwas anders macht, worauf 
der Programmer anders reagiert – was auch immer. Wir werden es dir 
leider nicht sagen können, denn „nach oben“ hin verhält er sich ja 
korrekt.  *)

Nimm dir einen ATmega8 oder ATmega168 oder sowas, bau dir ein USBasp 
damit auf, nimm den komischen smartUSB-Dongle, um die USBasp-Firmware da 
drauf zu dengeln, und danach legst du das Smartdingens in die Ecke.

*) Eine Vermutung hätte ich: sie haben möglicherweise nur das früher von 
AVRDUDE benutzte SPIMULTI-Kommando für den EEPROM implementiert, aber 
nicht die normalen Schreibkommandos.  Seit Version 6.2 benutzt AVRDUDE 
jedoch die (empfohlenen!) expliziten Kommandos.

von Einer K. (Gast)


Lesenswert?

Vielleicht möchte ja nur die EESAVE Fuse gesetzt werden, damit die 
Irrungen ein Ende haben?!

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


Lesenswert?

Arduino Fanboy D. schrieb:
> Vielleicht möchte ja nur die EESAVE Fuse gesetzt werden, damit die
> Irrungen ein Ende haben?!

Was genau soll das mit der Unfähigkeit seines Programmers helfen, den 
EEPROM initial überhaupt mal zu beschreiben?

von fop (Gast)


Lesenswert?

Beitrag "mySmartUSB light schreibt und liest EEPROM falsch"

http://avr.2057.n7.nabble.com/strange-problem-with-avrdude-and-quot-mySmartUSB-light-quot-programmer-td19594.html

Also vermutlich bekanntes Problem - aber unbekannte Lösung. Das STK500V2 
Protokoll wird wohl fehlerhaft umgesetzt. Die dazugehörige Windows 
Software macht es genauso falsch, so dass das Ergebnis wieder stimmt.

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


Lesenswert?

fop schrieb:
> Also vermutlich bekanntes Problem - aber unbekannte Lösung.

Naja, wenn der Hersteller des Tools das nicht reparieren will, dann 
Lösung wie oben angedeutet: das Tool nur noch dazu benutzen, das 
Henne-und-Ei-Problem für einen DIY-Programmer zu lösen.

von D a v i d K. (oekel) Benutzerseite


Lesenswert?

fop schrieb:
> Beitrag "mySmartUSB light schreibt und liest EEPROM falsch"
>
> 
http://avr.2057.n7.nabble.com/strange-problem-with-avrdude-and-quot-mySmartUSB-light-quot-programmer-td19594.html

Schöne Sch***
Also für mich ein Grund das Teil in den Müll zu werfen und eine richtig 
böse Mail an die zu verfassen.

Ich danke für eure Mithilfe!

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.