|
Edit v1.002 from 2007-12-16 to 2010-09-25 by HSc
Intel-Hex-Datenübertragungsformat
Beschreibung des Formats,
in welchem binären Programmcode von einem Intel-System auf eine anderes
übertragen werden.
Ein Einsatz ist zum Beispiel die Übertragung des binären
Programmcodes von einer Windows Arbeitsstation auf einen Mikrocontroller,
wie den 8051er.
|
Intel-Hex-Format
-
mit dem Format in der Variante
A und
B an sich,
sowie einem Beispiel und
-
die Übertragung zum
Zielsystem mit der Ermittlung der genutzten
Variante.
|
|
Format
Behandelt wird hier das Format der Datei,
welche vom Entwicklersystem, z. B. Computer,
zum Zielsystem, z. B. Ein-Chip-Mikrorechner,
übertragen und von diesem im Speicher abgelegt werden kann.
Der Inhalt ist ein ASCII−Text und
die Endung der Datei lautet i.d.R. *.HEX!
Wie sieht also das Format aus?
Jede Zeile enthält folgende
Daten im hexadezimalen Format:
- Anzahl der Programmbytes in dieser Zeile;
- Adresse ab der die Daten im Speicher abgelegt werden sollen;
-
Ein Doppelpunkt als Trennzeichen zwischen Adresse und den Datenbytes;
-
die Daten selbst,
wobei es pro Zeile maximal 16 Bytes sind und
-
als Letztes die Prüfsumme der Datenbytes,
gebildet durch das Aufaddieren der Bytes.
Die Datei ist Zuende und damit die Übertragung,
wenn eine leere Zeile oder keine weitere Zeile kommt!
Zwischen allen hexadezimalen Zahlen ist als
Trennzeichen
- das Leerzeichen bzw.
- nach der Adresse der Doppelpunkt
vorgesehen.
Beispiel: BSP_A.HEX
10 4100:75 70 10 75 71 11 75 72 12 75 73 13 75 71 50 75 058B
10 4110:71 52 75 60 00 75 61 01 75 62 02 75 63 03 85 71 0519
08 4120:60 75 61 71 85 71 62 22 0321
05 4200:74 15 F5 70 22 0210
In der Letzten und damit 4. Zeile steht zum Beispiel:
-
05H
= Es folgen 05 Hexa Datenbytes in dieser Zeile nach der Adresse;
-
4200H
= ist die Speicheradresse des 1. Bytes 74H,
4201H für das 2. Byte 15H, usw.;
-
: als Trennzeichen;
-
74H 15H F5H 70H 22H
= das sind die angekündigten 5 Datenbytes;
-
0210H
= Die Prüfsumme der 5 Datenbytes,
gebildet durch eine Addition der 5 hexadezimalen Zahlen:
74H
+15H
+F5H
+70H
+22H
------
10H = 16D
20H = 32D
=============
210H = 336D
Tabelle 1: Der Aufbau des Formates
Position in Bytes |
Länge in Bytes |
Bedeutung |
1. |
1 |
Ein Doppelpunkt ":" als Kennzeichen für den Beginn
einer Zeile.
|
2. |
1 |
Anzahl der Datenbytes in diesem Block.
Die Anzahl kann von 00H bis 10H reichen;
|
3. |
1 |
High−Teil der Startadresse dieses Datenblocks.
|
4. |
1 |
Low−Teil der Startadresse dieses Datenblocks.
|
5. |
1 |
Typ des Datenblocks.
Davon gibt es zwei verschiedenen.
- Typ=00H bedeutet es ist ein Datenblock;
- Typ=01H bedeutet es ist ein Endeblock;
|
6. |
x |
x Bytes Daten.
|
6+x+1. |
2 |
Die Prüfsumme;
|
6+x+3. |
2 |
Das Kennzeichen für das Zeilenende,
bestehend aus den zwei Bytes für
das Carrige Return (CR=13H) und
das Line Feed (LF=10H).
Dies wird unter Windows bei drücken der Taste
Enter in der Textverarbeitung eingefügt und
bewirkt den Zeilenumbruch.
|
Das Format dieser Variante ist,
gegenüber der Variante A, kompakter und
damit mehr maschinenfreundlicher.
Beispiel: BSB_B.HEX
:020000040000FA
:1000000083161E308500831205140920051009206F
:10001000042846308E0046308C0046308D008C0B14
:100020000F2846308C008D0B0F2846308D008E0B2C
:040030000F2808008D
:02400E00F13F80
:00000001FF
Nehmen wir die vorletzte Datenübertragung vor.
- Nach dem Doppelpunkt steht eine 02H für 2 Datenbytes.
- Diese sollen ab Adresse 400EH im Hauptspeicher stehen.
-
Der Typ des Datenblocks lautet 00H und damit ist er ein reiner Datenblock.
- Die Datenbytes lauten 0F1H und 3FH.
-
Und als letztes die Prüfsumme 02H+40H+0EH+00H+0F1H+3FH=80H
die über alle Bytes in diesen Datenblock berechnet wird.
Zielsystem
Im Zielsystem wird,
während oder nach dem Empfang der Datei,
ein Ladeprogramm,
wie im Film "Matrix",
aufgerufen,
welches die Datei liest und
damit weiß wie viele Bytes ( NN)
ab der Zeilenadresse ( AAAA) abgelegt werden sollen.
An Hand der Berechung der Summe der Bytes ( BB) und
dem Vergleich mit der Prüfsumme ( CCCC)
kann es sich von der Richtigkeit überzeugen.
Abbruch und Ausgabe einer Fehlermeldung erfolgt wenn
Durch das Ermitteln der Prüfsumme nach beiden Vorgehensweisen und
dem Vergleich mit der Prüfsumme,
kann der Loader ermitteln,
ob es sich um die Variante A oder B handelt.
Der Test kann, zur Sicherheit, an mehreren Datenzeilen durchgeführt
werden.
|
Nach Oben
|