Forum: Mikrocontroller und Digitale Elektronik Welchem Intel-HEX-File typen gehorchen die Atmel HEX-files?


von Karl (Gast)


Lesenswert?

Hallo Zusammen,

ist das Controllerabhängig, zB Atmega2560 im vgl. zum Atmega128?

Besten Dank
Karl

von Karl (Gast)


Lesenswert?

Falsch vermulierte Frage und darum keine Hilfe?

Also nochmal, ich kompiliere mit AVR-Studio und mir fehlen 
Informationen, ob ein Hexfile vom atmega128 identisch aufgebaut ist wie 
einer vom atmega2560. Ich habe gelesen, dass es eine 64kbyte Grenze für 
den Adressraum gibt? Wie kann man diese Grenze für den atmega2560 
umgehen, der ja ein flasch größer 64kbyte hat?
Vielen dank im voraus...
Karl

von Peter II (Gast)


Lesenswert?

Karl schrieb:
> Also nochmal, ich kompiliere mit AVR-Studio und mir fehlen
> Informationen, ob ein Hexfile vom atmega128 identisch aufgebaut ist

warum must du es dafür wissen? Das Studio erzeugt doch die Datei. Mir 
war es bis jetzt ziemlihc egal wie die Datei aufgebaut ist, denn ich 
hatte mit der Datei überhaupt nichts zu tun.

von Peter R. (pnu)


Lesenswert?

Das ist nicht kontrollerabhängig sondern softwareabhängig.

Das hexfile(ASCII-Folge zusammen mit Prüfsumme u.A.) wird gelesen und 
von der Software aufgedröselt in die Signale: Speicheradresse, 
8-bit-data ... eventuell als lobyte  und hibyte von 16- oder 
32-bit-words. Dazu werden die entsprechenden Steuersignale fürs 
Programmieren erzeugt, je nachdem, ob das target ein Kontroller, ein 
Eprom oder Anderes ist.

Welche Variante von hex-file akzeptiert wird, ist alleinige Sache der 
Software.

Die muss sowohl auf das target passen (ob Kontroller, EPROM, EEPROM, 
Programmieralgorithmus ) als auch auf die angebotenen .hex-files.

von Stefan E. (sternst)


Lesenswert?

Karl schrieb:
> Also nochmal, ich kompiliere mit AVR-Studio und mir fehlen
> Informationen, ob ein Hexfile vom atmega128 identisch aufgebaut ist wie
> einer vom atmega2560.

Ja.

Karl schrieb:
> Ich habe gelesen, dass es eine 64kbyte Grenze für
> den Adressraum gibt?

Nein.

Siehe in den Intel-HEX Spezifikationen den Type 4 Record.

von Peter R. (pnu)


Lesenswert?

Für intel-.hex-files gibt es eine allgemeine Norm, leichte Unterschiede 
könnten darin bestehen, dass die Compiler/Assembler-Software, die das 
.hex- file erzeugt, längere oder kürzere Zeilen zulässt.

von Heinz (Gast)


Lesenswert?

Nein, Du kannst nicht ein Hex-File, das für den ATMega128 kompiliert 
ist, in den ATMega2560 programmieren oder umgekehrt.
An dem Format des HEX-Files liegt das nicht , sondern daran, das die 
Registerdefinitionen nicht identisch sind (unter Vorbehalt).

von Karl (Gast)


Lesenswert?

Also vielleicht hätte ich noch erwähnen müssen, dass ich einen 
Bootloader programmieren will, der mit den HEX Files von AVRStudio 
gefüttert wird. Also nur für den AVR Compiler erstmal... Gibt es da 
keine Unterschiede bei der Adressierung? Wundert mich eigentlich, da ich 
da was von einer 64kbyte grenze gelesen hab?
DAnke nochmal

von Stefan E. (sternst)


Lesenswert?

Karl schrieb:
> Also vielleicht hätte ich noch erwähnen müssen, dass ich einen
> Bootloader programmieren will, der mit den HEX Files von AVRStudio
> gefüttert wird. Also nur für den AVR Compiler erstmal... Gibt es da
> keine Unterschiede bei der Adressierung? Wundert mich eigentlich, da ich
> da was von einer 64kbyte grenze gelesen hab?

Also nochmal: schau in die Spezifikationen für das Intel-HEX-Format. Wie 
kannst du ein Programm schreiben, das dieses Format interpretieren soll, 
ohne dort reinzuschauen? Und bezüglich deiner "64k-Grenze" schaust du 
dir speziell den Typ 4 Record an.

von Daniel V. (danvet)


Lesenswert?

Karl schrieb:
> Also vielleicht hätte ich noch erwähnen müssen, dass ich einen
> Bootloader programmieren will, der mit den HEX Files von AVRStudio
> gefüttert wird. Also nur für den AVR Compiler erstmal... Gibt es da
> keine Unterschiede bei der Adressierung? Wundert mich eigentlich, da ich
> da was von einer 64kbyte grenze gelesen hab?
> DAnke nochmal

gugst du:
http://de.wikipedia.org/wiki/Intel_HEX

von Thomas E. (thomase)


Lesenswert?

Stefan Ernst schrieb:
> Und bezüglich deiner "64k-Grenze" schaust du
> dir speziell den Typ 4 Record an.

Nein, den guckst du dir nicht an, sondern Typ2:

Extended Segment Address Record
siehe: http://de.wikipedia.org/wiki/Intel_HEX

Karl schrieb:
> Ich habe gelesen, dass es eine 64kbyte Grenze für den Adressraum gibt?

Das hast du richtig gelesen.

unter 64k wird "normal" mit 16 Bit adressiert. Über 64K muss noch die 
Segmentadresse gesetzt werden. Das macht der "Extended Segment Address 
Record"

So sieht ein "normales" Hexfile aus:

:10FC00000C943E7E0C94507E0C94507E0C94507E4E
:10FC10000C94507E0C94507E0C94507E0C94507E2C
:10FC20000C94507E0C94507E0C94507E0C94507E1C

Hier werden Daten ab "FC00" geschrieben.

Bei "Extended..." wird vor so einen Block die Segmentadresse gestellt:

:020000023000CC
:10F800000D9472FC0D9493FC0D9493FC0D9493FC59
:10F810000D9493FC0D9493FC0D9493FC0D9493FC28
:10F820000D9493FC0D9493FC0D9493FC0D9493FC18

:020000  02   3000 CC
Das zweite "02" ist die Kennung "Extended.."
"3000" ist die Segmentadresse.

Die Daten gehören demzufolge nach 0x3F800. "F800" steht in der zweiten 
Zeile: (Segmentadresse << 4) + Offset

Stammt alles vom 8086-Prozessor. Bei 1 MByte ist bei dem allerdings 
schon wieder Schluß. Die alten "DOSser" kennen das noch. Darüber hinaus 
gibt es dann die anderen Modi zu Adressierung. Ist aber beim AVR (noch) 
kein Thema.


mfg.

von mourad e. (mourad_e)


Lesenswert?

Hi.. ich weiss das Thema ist schon alt hier.
aber ich halte trotzdem das Thema noch Offen .

habe eine Frage ! mit allen Typen der Intel-Hex Protokolle habe ich 
verstanden.

Bloß der Type 04.

kann mir jemand hilfen es zu verstehen.

Es handelt sich um ein ARM-32 Bit.
also die Adressierung sollte im Prinzip 32 bit sein.
bei jeder Hex File sieht am Anfang so aus !

:020000040000FA
:10000000000200106D01000071010000730100008A
:100010007501000077010000790100000000000078
:100020000000000000000000000000007B01000054

danach habe ich in die Konfig vom  (µVision Keil) die startadresse wo 
das Programme geschrieben wird geändert vom 0x000 auf 0x1000.

dann sieht das Hex File so aus :


:020000040000FA
:0402FC00FFFFFFFF02
:020000040000FA
:1010000068020010691100006D1100006F110000EE
:101010007111000073110000751100000000000044
:101020000000000000000000000000007711000038


danke euch im Vorraus

von Karl H. (kbuchegg)


Lesenswert?

mourad e. schrieb:
> Hi.. ich weiss das Thema ist schon alt hier.
> aber ich halte trotzdem das Thema noch Offen .
>
> habe eine Frage !

Was genau ist die Frage?


> danach habe ich in die Konfig vom  (µVision Keil) die startadresse wo
> das Programme geschrieben wird geändert vom 0x000 auf 0x1000.

mit dieser Änderung wird mehr verknüpft sein, als nur das Ändern der 
Startadresse. Zb ändern sich alle Sprungadressen, Daten werden an andere 
Stellen im Speicher verschoben, wodurch dann auch Ladebefehle andere 
Adressen verwenden usw. usw.

> :020000040000FA
> :0402FC00FFFFFFFF02
> :020000040000FA
> :1010000068020010691100006D1100006F110000EE

Offenbar hat sich dieses Hex-File daher in der Lage verschoben. Dieser 
Datensatz wird im Speicher ab Adresse 0x00001000 abgelegt. Genauso, wie 
du es angefordert hast.

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.