www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AVR über AVR programmieren


Autor: Michael Leske (nemesisod)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

ich habe eine kurze Frage zum decodieren von Intel-Hex Dateien.

:100030000C9447000C947E0B0C9447000C94AE0B70
:100040000C9447000C9447000C9447000C94470014

Hie mal zwei Zeilen.

Die ersetn beiden (ohne ':') geben an wieviele Datenbytes übertragen 
werden,
die nächsten vier sind die Adresse, dann kommt der Recordtyp (in der 
Regel 00, nur die letzte Zeile ist 01). Dann kommen die Datenbytes, und 
zum schluss die Prüfsumme.

Also, ich habe ein Netzwerk aus einigen AVRs, welche in einem Gehäuse 
verbaut sind. Daher möchte ich nun deinen AVR dazu benutzen um die 
anderen zu Programmieren. Diese MASTER AVR hat auf einer SD-Karte alle 
Sources der anderen AVRs. Nun soll ein neues Programm automatisch auf 
den passenden AVR programmiert werden.

So, mein problem nun ist,
Die Adresse hab ich: 0030 und 0040
Doch die Daten kommen mir einwenig lang vor:
0C9447000C94 7E0B0C 9447000C94 AE0B
und
0C9447000C94 47000C 9447000C94 4700
was (16 Bytes) entspricht.

Weiß einer damit was anzufangen?

Danke für eure Hilfe.
Michael

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Daher möchte ich nun deinen AVR dazu benutzen

Das lässt du mal schön sein ;)

SCNR

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Michael Leske wrote:
> So, mein problem nun ist,
> Die Adresse hab ich: 0030 und 0040
> Doch die Daten kommen mir einwenig lang vor:
> 0C9447000C94 7E0B0C 9447000C94 AE0B
> und
> 0C9447000C94 47000C 9447000C94 4700
> was (16 Bytes) entspricht.
Ich verstehe nicht ganz, was Du uns mitteilen willst. Passt doch ganz 
genau. Jede Zeile enthält 16 Bytes, und dementsprechend geht es in der 
nächsten Zeile mit einer um 16 (10h) höheren Adresse weiter...

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Doch die Daten kommen mir einwenig lang vor:
>0C9447000C94 7E0B0C 9447000C94 AE0B

ASCII to HEX

0C ist ein Byte 0x0C
94 ist ein Byte 0x94

usw.

Autor: Jochen Müller (taschenbuch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry,

aber ganz sooo einfach ist der Aufbau des Intel-Hexfiles nun auch 
nicht...

http://www.keil.com/support/docs/1584.htm

Das hätte der OP durch simple Eingabe von "intel hexfile" bei google
aber auch ganz einfach selbst finden können.
Du weisst was eine Suchmaschine ist, oder?

Jochen Müller

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>aber ganz sooo einfach ist der Aufbau des Intel-Hexfiles nun auch
>nicht...

Stimmt. Da kommen evtl. auch noch andere Records als 0x00.
So richtig lustig wird es wenn die Adressen im HEX File nicht
aufsteigend sortiert sind.

Autor: Rudolph R. (rudolph)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hex2Bin und gut?

>Diese MASTER AVR hat auf einer SD-Karte alle Sources der anderen AVRs.
>Nun soll ein neues Programm automatisch auf den passenden
>AVR programmiert werden.

Wie jetzt, kompilieren auch noch?

Autor: timmi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
so richtig viel sinn macht die frage nicht

Autor: Ulrich P. (uprinz)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Auch ich finde es immer wieder lustig, dass man bei gestellten Fragen 
erst einmal die Frage finden muss...

Also das Intel-HEX Format ist im Internet ausführlichst beschrieben und 
es gibt auch fertige Interpreter dafür, jedefalls habe ich solche in 
Pascal und C gefunden, als ich mich irgendwann 199x damit mal 
beschäftigen musste.
Kann also kein Problem sein.

Einen AVR zu programmieren ist, jedenfalls via SPI, kein Problem, weil 
zum Einen ATMEL dazu einiges veröffentlich hat, es aber auch einige 
freie Seriell/USB Programmer gibt, die das Protokoll über einen AVR 
abhandeln. Hier müsste man also nur die Software nehmen und seinen 
eigenen Bedürfnissen anpassen.

Ich kann nicht genau sagen, ob die PC-Software das iHEX File bereits 
binär kodiert, oder aber der AVR im Programmer. Wenn das letzterer 
macht, oder die Chip-interne Programming Engine, dann hat man eigentlich 
für eine fertige Lösung nur zwei Dinge zu tun:
1) Anpassen der Programmer-Software um nacheinander mehrere AVR zu 
programmieren, also eigentlich nur anlegen der MOSI an die MISO oder PDI 
des richtigen Zielprozessors.
2) Aufpeppen der Programmer Software um ein Dateisystem mit SD-Card.

Aber... Warum macht man das nicht über einen simplen Bootloader, der das 
Protokoll versteht, das einem am meisten liegt und das man selber auch 
gut versteht?
Der Vorteil wäre, dass man alle AVRs parallel programmieren könnte, weil 
ich ja einem AVR Daten zum programmieren schicken kann, wärend der 
andere gerade mit dem flashen von bereits erhaltenen Daten beschäftigt 
ist.

Manche Leute machen es sich aber auch kompliziert...

Gruß, Ulrich

Autor: Bingo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich brauche avr-objcopy zum einer intel-hex und einer bin file zum 
machen.
Im binfile is die selber data als im hex , nur im binary format.

Siehe hier
http://hubbard.engr.scu.edu/embedded/avr/avrgcc_in...

http://ccrma.stanford.edu/planetccrma/man/man1/avr...

mfg
Bingo / Dänemark

Autor: Michael Leske (nemesisod)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mein Problem besteht darin, das die Adressierung in der Hex nicht mit 
der Adressierung im AVR übereinstimmt.

z.B. die ersten 6 zeilen:

:100000000C942A000C9447000C9447000C94470071
:100010000C9447000C9447000C9447000C94470044
:100020000C9447000C9447000C9447000C94470034
:100030000C9447000C947E0B0C9447000C94AE0B70
:100040000C9447000C9447000C9447000C94470014
:100050000C94470011241FBECFE5D8E0DEBFCDBF12
                 ^Hier ist im ATMega 32 die Adresse 0x002A,
davor stehen die Sprungadressen für die Interrupts.
In der Hex-file ist es aber die Adresse 0x0054

Wie kann ich nun aus der Hex-Datei die richtige Adresse
im AVR ermitteln?

Oder ist das einfach die Adresse 0x0054 / 2 = 0x002A ???

Ich hoffe die Frage ist nun klar geworden.

Gruß
Michael

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>der ist das einfach die Adresse 0x0054 / 2 = 0x002A ???

Der Flash im Atmel ist WORD-Orientiert.

>Adresse 0x002A
im Atmel ist im hexfile: 0x0054 (byte)

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Michael Leske wrote:
> Mein Problem besteht darin, das die Adressierung in der Hex nicht mit
> der Adressierung im AVR übereinstimmt.
>
> z.B. die ersten 6 zeilen:
>
> :100000000C942A000C9447000C9447000C94470071
> :100010000C9447000C9447000C9447000C94470044
> :100020000C9447000C9447000C9447000C94470034
> :100030000C9447000C947E0B0C9447000C94AE0B70
> :100040000C9447000C9447000C9447000C94470014
> :100050000C94470011241FBECFE5D8E0DEBFCDBF12
>                  ^Hier ist im ATMega 32 die Adresse 0x002A,
> davor stehen die Sprungadressen für die Interrupts.
> In der Hex-file ist es aber die Adresse 0x0054

Du weisst hoffentlich, dass bei den AVR das Flash wortweise
addresiert wird. Wenn du also die Adresse einer Instruktion
aus dem Assemblerprogramm kennst, dann ist das die
Adresse eines Wortes. Die Byteadresse ist dann einfach das
doppelte. (1 Wort = 2 Byte)

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich muss Ulrich P. zustimmen: Es ist wirklich verblüffend, wie jemand 
eine Frage so stellen kann, dass es einen ganzen Tag dauert, bis endlich 
herauskommt, wo tatsächlich das Problem liegt...

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.