AVR über AVR programmieren

OP #868240
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
#868247
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...
Gast #868322
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.
(Firma: DC3AX) #868648
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
OP #868910
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
#868916
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)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren