Kann attiny2313 nicht flashen, invalid format

Gast #5433325
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
1
Michaels-MacBook-Air:DMX Multiplexer64 Michael$ avrdude -c avrispv2 -P usb -p t2313 -U flash:w:Firmware.hex
2

3
avrdude: AVR device initialized and ready to accept instructions
4

5
Reading | ################################################## | 100% 0.00s
6

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

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

18
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
Angehängte Dateien:
(Firma: matzetronics)
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.
Gast
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
Gast
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.
Angehängte Dateien:
Gast
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.
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
Angehängte Dateien:
Gast
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?
Angehängte Dateien:
Gast
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.
Gast
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.
Gast
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
1
avrdude: AVR device initialized and ready to accept instructions
2

3
Reading | ################################################## | 100% 0.00s
4

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

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

15
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?

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 8 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.