Das INTEL Hex-Format

Kurzüberblick

Stand 2017-04-12
Autor: Wolfgang R. Schulz

Das INTEL Hex-Format dient zum Übertragen von binären Daten z.B. über eine serielle Schnitt­stelle. 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:

Grafische Darstellung des Aufbaus des INTEL Hex-Formats

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 Seg­ment 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 Da­ten 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 Über­tra­gung 0 ergeben (Empfangsprüfung).
Anm.: Das 2er-Komplement wird gebildet, indem man alle Bits des Bytes in­ver­tiert und dann 1 addiert.

Beispiele für typische Datensätze (die farbliche Unterlegung zeigt, zu welchem Teil des Records die entsprechenden Bytes gehören):

Grafische Darstellung von Beispielen für typische Datensätze des INTEL Hex-Formats

Ein typischer End-Record sieht folgendermaßen aus :

Grafische Darstellung eines typischen End-Records des INTEL Hex-Formats