Intel Hex-Format

Da praktisch alle Mikrocontroller-Toolketten den Code in der endgültigen Form im Intel-Hex-Format ausgeben können, möchte ich hier kurz auf das Dateiformat eingehen:

Für das Intel-Hex-Format gibt es 2 Versionen: eine 20 Bit-Version (1 MB Adreßraum) und eine 32 Bit-Version (4 GB Adreßraum). Die Datei ist in mehrere Records, welche jeweils einer Zeile entsprechen, aufgeteilt. Allgemein sieht jeder Record folgendermaßen aus:

 

:

length

offset

type

content

checksum

Bytes

1

1

2

1

n

1

Bedeutung der Felder

:    Header

length    Länge der Information in Bytes im Content-Feld

offset    Start-Offset (Absolutadresse), von dem aus Datenblöcke geladen werden. Entspricht den Bits A0-A15 der Absolutadresse.

type    Typ des Records. Folgende Typen existieren:

00    Daten-Record

01    Dateiende-Record (letztes Record)

02    Segment-Adressrecord (20 Bit Version)

03    Programm-Startadresse (20 Bit Version)

04    Linear-Adressrecord (32 Bit Version)

05    Programm-Startadresse (32 Bit Version)

content    Information, abhängig vom Record-Typ:

00    Daten (Länge der Daten steht im length-Feld)

01    0 Bytes (Keine Information im Feld content)

02    2 Bytes Segmentadresse = Bits A19-A4 der Absolutadresse

03    4 Bytes Absolutadresse: Programm-Startadresse

04    2 Bytes Segmentadresse = Bits A31-A16 der Absolutadresse

05    4 Bytes Absolutadresse: Programm-Startadresse

checksum    Prüfsumme: Aus der Summe der vorangegangenen Bytes (von length bis Content) modulo 256 wird das 2er Komplement gebildet.

    Die Adresse eines Datenbytes setzt sich folgendermaßen zusammen:

32-Bit    Segmentadresse <16 + Offset + Index

20-Bit    Segmentadresse <4 + Offset + Index

wobei Index der laufende Index der Datenbytes ist (Erstes Byte: Index=0). Da bei Mikrocontrollern nach Reset die Programm-Startadresse immer 0 ist, sind die Programm-Startadreß-Records nur von geringer Bedeutung.