mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Kann attiny2313 nicht flashen, invalid format


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Michael (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo.

Ich bin Neuling in Sachen Mikrocontroller und versuche mich daher 
erstmal an einem bestehendem Projekt. Da der Ehrgeiz größer ist wenn man 
anschließen auch was damit anfangen kann hab ich keine Demo Datei mit 
blinkenden LED genommen, sondern ein zur Verfügung stehendes Projekt.
Erschwerend kommt hinzu, das ich unter Mac OS X arbeite und somit im 
Terminal arbeiten muss. (Ich kann also kein WinAVR verwenden, das wohl 
urspünglich für das Projekt genutzt wurde)

Mein Problem ist das ich den Attiny2313 nicht flashen kann. Nutze einen 
avrisp mkii und die Kommunikation scheint zu funktionieren. Zumindest 
antwortet der Mikrocontroller mit Device Signature etc.

Ich hatte erst versucht auf einem Steckbrett die Fuses zu schreiben, da 
die aber für eine externen Quarz vorgesehen sind, war der 
Mikrocontroller dann nicht mehr zu erreichen. Ich hab's dann mit einem 
neuen in der finalen Schaltung versucht die einen Quarz enthält. Auch 
der ist nach schreiben der Fuses aber nicht mehr erreichbar.


Meine Schlussfolgerung ist, dass man immer zuerst die Firmware schreiben 
muss, und anschließen die Fuses, insbesondere wenn man mit dem nackten 
Controller auf dem Steckbrett arbeitet. Ist das korrekt?



Ich habe dann, wieder mit einem neuen Mikrocontroller, versucht erst die 
Firmware.hex auf den Chip zu brenne, leider funktionier aber auch das 
nicht. Ich bekomme folgende Antwort
Michaels-MacBook-Air:DMX Multiplexer64 Michael$ avrdude -c avrispv2 -P usb -p t2313 -U flash:w:Firmware.hex

avrdude: AVR device initialized and ready to accept instructions

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

avrdude: Device signature = 0x1e910a
avrdude: NOTE: "flash" memory has been specified, an erase cycle will be performed
         To disable this feature, specify the -D option.
avrdude: erasing chip
avrdude: reading input file "Firmware.hex"
avrdude: input file Firmware.hex auto detected as invalid format
avrdude: invalid input file format: -1
avrdude: read from file 'Firmware.hex' failed

avrdude: safemode: Fuses OK (H:FF, E:DF, L:64)

avrdude done.  Thank you.


Google hat mich bisher nicht weiter gebracht. Es gibt diese 
Fehlermeldung häufig ergänzt durch "no such file or directory", womit 
der Fehler klar ist. Das ist hier aber nicht der Fall.


Was muss ich also machen um die *.hex auf den Controller zu bekommen, 
und die Fuses richtig zu setzen, damit der Mikrocontroller läuft?

Wäre über Hilfe sehr dankbar.

vg Michael

Autor: Matthias S. (Firma: matzetronics) (mschoeldgen)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Michael schrieb:
> avrdude: input file Firmware.hex auto detected as invalid format

Und da muss man avrdude recht geben. Die Datei, die du als 
'Firmware.hex' gepostet hast, ist ungültig und entspricht nicht dem 
Format, das als 'Intel HEX' bekannt ist. Da stimmt also was in der 
Entstehungsgeschichte dieser Datei nicht.

Michael schrieb:
> Meine Schlussfolgerung ist, dass man immer zuerst die Firmware schreiben
> muss, und anschließen die Fuses, insbesondere wenn man mit dem nackten
> Controller auf dem Steckbrett arbeitet. Ist das korrekt?

Als Anfänger kann ich dir nur raten, zuerst einmal die Finger von den 
Fuses zu lassen. Alle AVR Controller werden so ausgeliefert, das sie mit 
dem internen RC Oszillator starten und meistens mit 1MHz Takt. Erst, 
wenn du das Problem mit der Firmware gelöst hast, kannst du dich später 
mal an den Fuses versuchen. Das Risiko, dich auszusperren, ist im Moment 
noch zu hoch.

: Bearbeitet durch User
Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Matthias S. schrieb:
> Und da muss man avrdude recht geben. Die Datei, die du als
> 'Firmware.hex' gepostet hast, ist ungültig und entspricht nicht dem
> Format, das als 'Intel HEX' bekannt ist.

Woran hast du das erkannt? Der Ersteller des Projekts muss die aber ja 
auch irgendwie auf dem Controller bekommen haben.
Ich hätte den Code auch noch als *asm da. Was wären denn die korrekten 
Befehle um den als intel hex zu kompilieren? Geht das mit dem avr gcc? 
Das ist ebenfalls bei Crosspack mit drin was ja für Mac OS X den avrdude 
liefert.



Ist es denn grundsätzlich so das man erst die *.hex flashed und dann die 
Fuses brennt? Mich wundert das ich den Controller auch in der fertigen 
Schaltung nicht ansprechen kann, obwohl dort ja ein Quarz vorhanden ist.

vg

Autor: HildeK (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Das Format von Intel HEX ist z.B. hier beschrieben: 
https://de.wikipedia.org/wiki/Intel_HEX
Es beginnt auf jeden Fall mit einem Doppelpunkt. Dann kommen 4 Byte 
Header, die Daten und dann 1 Byte Checksumme. Ganz am Ende dann EOF, 
auch mit Checksumme. Die jeweilige Länge einer Datensatzzeile ist im 
ersten Byte untergebracht, das könnte 0x01 ... 0xFF sein. Im angehängten 
Beispiel ist es bis auf die letzte Datenzeile 0x10 für 16 Datenbytes.

Michael schrieb:
> Mich wundert das ich den Controller auch in der fertigen
> Schaltung nicht ansprechen kann,

In deinem Post oben hat er aber die Device Signature sowie das Löschen 
nicht bemängelt, also kannst du ihn ansprechen.

Autor: Karl M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich nutze noch eine erweiterte Parameterübergabe, hier meine Ergänzung:
"-B 5 -U flash:w:<datei>.hex:a"

Zum einen läuft ein neuer attiny mit 1MHz RC Oszillator, Parameter -B 
und zum Anderen kann das Programm avrdude das Dateiformat, bei -U 
flash:w:<datei>.hex:a, selbst ermitteln.

Autor: Peter D. (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Michael schrieb:
> Der Ersteller des Projekts muss die aber ja
> auch irgendwie auf dem Controller bekommen haben.

Dann poste mal nen Link darauf.
Das ist jedenfalls kein mir bekanntes Format (Hex, Bin, Elf, Srec).

Was für ein Fusetool ist das?

Autor: Karl B. (gustav)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hi,
die "Fuses" sollten in etwa so aussehen wie im Bild.
Bei AVRdude gibt es einen Link dazu.
https://www.mikrocontroller.net/articles/AVR_Fuses
https://www.mikrocontroller.net/articles/AVR_Fuses#AVRDUDE
https://sourceforge.net/projects/winavr/


Die Tool-Options bieten eine Auswahl aus 3 Formaten.

Das Ursprungsformat bekomme ich nicht disassembliert.
Man könnte nämlich dann leicht in ein anderes Format konvertieren und 
damit flashen.

Entschuldigung an @HildeK, unten ist's das "Beispiel.hex" 
disassembliert.
(Nach Datenschutzneuregelung Einverständnis vorausgesetzt.)


ciao
gustav

: Bearbeitet durch User
Autor: Der Dude aka. White Russian (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Dieter W. (dds5)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Das Format der Datei ist straight-hex, keine Ahnung wer so was 
produziert.
Ich hab es mal in Intel-Hex umformatiert, kann aber high und low Byte 
vertauscht sein.

Autor: Der Dude aka. White Russian (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Michael schrieb:
> Was wären denn die korrekten
> Befehle um den als intel hex zu kompilieren? Geht das mit dem avr gcc?
> Das ist ebenfalls bei Crosspack mit drin was ja für Mac OS X den avrdude
> liefert.

Hier mal ein makefile, was für mich gut funktioniert - vorsicht, 
Fuse-Einstellungen sind definitiv falsch/passen nicht zu deinem Projekt

Verwendest du eine IDE?

Autor: Peter D. (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Michael schrieb:
> Ich hätte den Code auch noch als *asm da. Was wären denn die korrekten
> Befehle um den als intel hex zu kompilieren? Geht das mit dem avr gcc?

Nö.
Der GCC benutzt GAS und der ist nicht mit dem Atmel Assembler 
kompatibel.

Autor: R. M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Format der "Firmware.hex", aus dem Eröffnungspost, kann der AVRDUDE 
eigentlich lesen, vielleicht wurde es sogar damit geschrieben (ein 
programmierter Käfer ausgelesen).
Der Suffix dafür ist "h" wie "Hex", nicht "i" wie "Intel-Hex".
also Programmaufruf mit -U flash:w:Firmware.hex:h

Anscheinend hat der AVRDUDE hin und wieder Probleme, das Format der 
Datei an der Endung oder am Dateiinhalt korrekt zu erkennen.
Beitrag "Re: AVR8 Burn-O-Mat läuft nicht mit Java 9"
Dann ist es sicherer, ihn auf das Dateiformat explizit hinzuweisen.

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
HildeK schrieb:
> Michael schrieb:
>> Mich wundert das ich den Controller auch in der fertigen
>> Schaltung nicht ansprechen kann,
>
> In deinem Post oben hat er aber die Device Signature sowie das Löschen
> nicht bemängelt, also kannst du ihn ansprechen.

Das war ja bevor ich versucht hatte die Fuses zu schreiben. Hab mich 
vielleicht unglücklich ausgedrückt.

Peter D. schrieb:
> Dann poste mal nen Link darauf.
> Das ist jedenfalls kein mir bekanntes Format (Hex, Bin, Elf, Srec).
>
> Was für ein Fusetool ist das?

Hier der Link

http://www.digital-enlightenment.de/mux.htm

Eigentlich wollte hatte ich versucht das mit dem Terminal zu machen. 
Habe dann auch noch das Tool AVRFuses probiert. DAs ändert aber nichts.

R. M. schrieb:
> Anscheinend hat der AVRDUDE hin und wieder Probleme, das Format der
> Datei an der Endung oder am Dateiinhalt korrekt zu erkennen.

Ok. Dann probier ich das mal als erstes. Wenn das auch nicht 
funktioniert geh ich nochmal an die Vorschläge von Dieter Werner und Der 
Dude aka. White Russian ran. Da hätte ich jetzt sonst Befürchtungen das 
mit den Fuses wieder was nicht hin haut.

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
R. M. schrieb:
> Der Suffix dafür ist "h" wie "Hex", nicht "i" wie "Intel-Hex".
> also Programmaufruf mit -U flash:w:Firmware.hex:h

So, das hat leider auch nicht funktioniert.
Dann bekomme ich die Ausgabe
avrdude: AVR device initialized and ready to accept instructions

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

avrdude: Device signature = 0x1e910a
avrdude: NOTE: "flash" memory has been specified, an erase cycle will be performed
         To disable this feature, specify the -D option.
avrdude: erasing chip
avrdude: reading input file "Firmware.hex"
avrdude: fileio: invalid operation=0
avrdude: read from file 'Firmware.hex' failed

avrdude: safemode: Fuses OK (H:FF, E:DF, L:64)

avrdude done.  Thank you.


Wenn keiner weitere Ideen hat würde ich mich mal an den Vorschlag von 
Dieter Werner (@dds5) machen.
Was meinst du denn mit

Dieter W. schrieb:
> kann aber high und low Byte
> vertauscht sein.

Was meinst die I/O Bytes? Oder worauf beziehst du das?

Wie hast du das *.hex-file denn umgewandelt?

Autor: wendelsberg (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Michael schrieb:
> So, das hat leider auch nicht funktioniert.

Logisch, Du willst ja auch sicher die atmel2313.HEX flashen und nicht 
die Firmware.hex.

wendelsberg

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.