Das INTEL Hex-Format dient zum Übertragen von binären Daten z.B. über eine serielle Schnittstelle. Die Daten werden dabei ASCII-codiert, so dass die Übertragung nur aus druckbaren Zeichen besteht. Die Daten werden in Blocks aufgeteilt und übertragen. Ein Block im INTEL Hex-Format hat folgenden Aufbau:
Jeder Kasten in der Grafik steht für ein Byte. Vor der ersten Startmarkierung dürfen beliebig viele Füllzeichen stehen. Zwischen der Prüfsumme und der nächsten Startmarkierung können ebenfalls beliebig viele Füllzeichen stehen; in der Regel sind dies CR und LF.
"n" bedeutet, dass dieses Byte eine ASCII-codierte Hex-Ziffer enthält, also eines der Zeichen 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F.
Die einzelnen Teile des Records haben folgenden Bedeutung:
- Datenlänge
- Gibt die Anzahl der Datenbytes an.
- Adresse
- Adresse (16 Bit), an die die Daten dieses Records geschrieben werden sollen. Ist dem Datensatz ein erweiterter Address-Record (vgl. unten) vorausgegangen, ist diese Adresse auf die durch den erweiterten Address-Record angegebene Basis-Adresse zu addieren.
- Record-Typ
-
00: Der Record enthält Daten. 01: Dies ist der letzte Record der Übertragung. 02: Erweiterter Segment-Address-Record, d.h. das Adressfeld enthält 0 und die Daten geben eine Segment-Adresse an, wie sie z.B. beim 8086 verwendet wird. Die nachfolgenden Daten-Records sind in dieses Segment zu laden. 03: Start-Segment-Address-Record, d.h. das Adressfeld enthält 0 und die Daten geben den Einsprungpunkt für die Programmausführung als CS:IP an. 04: Erweiterter Linear-Address-Record, d.h. das Adressfeld enthält 0 und die Daten geben die oberen 16 Bit einer 32-bit Linear-Adresse an, ab der die folgenden Daten-Records zu laden sind. 05: Start-Linear-Address-Record, d.h. das Adressfeld enthält 0 und die Daten geben den Einsprungpunkt für die Programmausführung als EIP an. - Daten
- Die Datenbytes (immer 2 übertragene Bytes ergeben ein Datenbyte).
- Prüfsumme
- Das 2er-Komplement der Modulo-256-Summe über alle vorangegangenen
Bytes außer der Startmarkierung. Bildet man also die Modulo-256-Summe
über alle Bytes außer der Startmarkierung, muss sich
bei korrekter Übertragung 0 ergeben (Empfangsprüfung).
Anm.: Das 2er-Komplement wird gebildet, indem man alle Bits des Bytes invertiert und dann 1 addiert.
Beispiele für typische Datensätze (die farbliche Unterlegung zeigt, zu welchem Teil des Records die entsprechenden Bytes gehören):
Ein typischer End-Record sieht folgendermaßen aus :