Forum: Mikrocontroller und Digitale Elektronik avrdude: Rückgabewert


von Jens (Gast)


Lesenswert?

Hallo zusammen,

kann einem avrdude einen Rückgabewert liefern, ob ein Verify erfolgreich 
war?

Bei nagelneuen Controllern müssen die Fuses meist 3 mal geschrieben 
werden, ich möchte in einer Batchdatei abfragen, ob das Verify 
erfolgreich war.
Dann möchte ich automatisch zum nächsten Schritt gehen (Bootloader 
einspielen). Ansonsten möchte ich ein nochmaliges Schreiben anbieten.

Oder muss ich die Textausgabe von avrdude auswerten?

Gruß
Jens

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


Lesenswert?

Jens schrieb:

> kann einem avrdude einen Rückgabewert liefern, ob ein Verify erfolgreich
> war?

Ja, ein verify-Fehler bringt auf jeden Fall einen Rückgabewert
ungleich 0.

> Bei nagelneuen Controllern müssen die Fuses meist 3 mal geschrieben
> werden

Huch?  Das ist ein Bug.

von Klaus W. (mfgkw)


Lesenswert?

oder fragwürdige Verdrahtung/Timing?

von Peter D. (peda)


Lesenswert?

Jens schrieb:
> Bei nagelneuen Controllern müssen die Fuses meist 3 mal geschrieben
> werden

Dann ist Dein SPI-Takt zu hoch.
Neue AVRs sind auf 1MHz gesetzt, also SPI auf <= 125kHz setzen!


Peter

von Jens (Gast)


Lesenswert?

Hm, bei einem neuen ging es gerade sofort.
Bei meinem vorherigen Tool musste ich es immer 3mal machen.
Vermutlich lag es an dem anderen Tool.
Danke.

von Jens (Gast)


Lesenswert?

Noch eine Frage, wenn ich immer zuerst den Bootloader mit Chiperase 
schreibe

AVRDUDE = avrdude -p c128 -c stk500v2 -P com16 -e -V -U 
flash:w:%bootloader%:a

und danach mein Programm ohne Chiperase

AVRDUDE = avrdude -p c128 -c stk500v2 -P com16 -D -V -U flash:w:%file%:a

dann müsste ich ja auf der sicheren Seite sein.

Was passiert aber, wenn ich wie oben meine Erstprogrammierung gemacht 
habe und später ein neues Programm nicht über den Bootloader, sondern 
über avrdude ohne Chiperase einspiele?
Wieder mit:
AVRDUDE = avrdude -p c128 -c stk500v2 -P com16 -D -V -U flash:w:%file%:a

Dann bleibt zwar der Bootloader erhalten, aber kann es nicht dann zu 
Problemen mit altem Code im Flash kommen?

Lasse ich die Oprtion -D weg, dann ist auch der Bootloader futsch.
Kann man evtl. einen Chiperase mit einem Offset durchführen und denn 
Booloader bereich aussparen?

Gruß
Jens

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


Lesenswert?

Jens schrieb:
> Noch eine Frage, wenn ich immer zuerst den Bootloader mit Chiperase
> schreibe
...
> und danach mein Programm ohne Chiperase
...
> dann müsste ich ja auf der sicheren Seite sein.

Ja.

> Was passiert aber, wenn ich wie oben meine Erstprogrammierung gemacht
> habe und später ein neues Programm nicht über den Bootloader, sondern
> über avrdude ohne Chiperase einspiele?

Ein logisches UND zwischen den alten und den neuen Bits.  Flash
(oder EPROM allgemein) lässt sich immer nur von 1-Bits nach 0-Bits
beschreiben.  Die Rückkehr auf den Wert 1 erfolgt durch Löschen.

> Kann man evtl. einen Chiperase mit einem Offset durchführen und denn
> Booloader bereich aussparen?

Nein, das lässt sich so nicht machen, ein Chip Erase löscht (wie der
Name sagt) halt den gesamten Chip.  Was du bräuchtest, wäre ein Page
Erase.  Diese Funktion existiert zwar intern (und wird beispielsweise
vom Bootloader benutzt), aber Atmel hat es irgendwie vergessen, diese
Fähigkeit auf die ISP- (bzw. JTAG-)Schnittstelle selbst herauszu-
führen, und damit können die Programmierwerkzeuge eine solche Funktion
auch nicht anbieten.

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.