Intel HEX


Intel HEX

Das Intel HEX-Format ist ein Datenformat zur Speicherung und Übertragung von binären Daten. Es wird heute hauptsächlich verwendet, um Programmierdaten für Mikrocontroller bzw. Mikroprozessoren, EPROMs und ähnliche Bausteine zu speichern. Es kann aber auch zur Speicherung von Lademodulen verwendet werden. Das HEX-Format ist das älteste Datenformat seiner Art und seit den 1970er Jahren in Gebrauch. Spätere Erweiterungen unterstützen speziell die segmentierte Adressierung der Intel-80x86-Prozessoren.

Ein Intel HEX-File liegt im ASCII-Format vor. Die Bytes der kodierten Binärdaten werden jeweils als Hexadezimalzahl aus zwei ASCII-Zeichen (0...9 und A...F) dargestellt. HEX-Dateien können mit einem Texteditor geöffnet und modifiziert werden. Die HEX-Datei ist etwa doppelt so groß wie die enthaltenen Binärdaten. Die Datensätze sind mit einer Prüfsumme versehen, so dass Übertragungsfehler erkannt werden können.

Inhaltsverzeichnis

Geschichte

Das Intel-Hex Format (Ursprünglich Intellec-Hex) wurde von Intel 1973 für die Intellec Entwicklungssysteme (MDS) entworfen um Programme von Lochstreifen zu laden und starten. Außerdem sollte es die Übermittlung der Daten zur ROM-Produktion vereinfachen. Gleichzeitig wurde es zur Programmierung von (E)PROM mittles lochstreifen- oder lochkartengesteuerter EPROM-Programmiergeräte verwendet. Ab der Einführung von Diskettenlaufwerken mit dem MCS Serie II unter ISIS II (1975) wurden auch Dateien in diesem Format erstellt. Als Dateiendung dient seitdem HEX.

Format

Das hier beschriebene Format entspricht der Hexadecimal Object File Format Specification[1] von Intel.

Aufbau eines Datensatzes

Die Codierung ist (7 Bit) ASCII. Jeder Datensatz wird durch einen Doppelpunkt (":") eingeletet, besteht aus einer geraden Anzahl von Zeichen und wird durch ein Zeilenende abgeschlossen. Der Aufbau des Zeilenendes ist nicht definiert und Medienabhängig. Intel-Tools für Streaming-Medien erzeugen immer ein CR/LF (0D0AHEX).

Jeweils zwei Zeichen repräsentieren ein Datenbyte. Die Notation erfolgt hexadezimal, big-endian mit den Zeichen 0..9 und A..F, d.h. dass das höherwertige Halbbyte zuerst steht. Gleichfalls erfolgen alle Angaben in den Addressfeldern Big-Endian. Kleinbuchstaben (a..f) sind in der Definition nicht erwähnt, werden jedoch von den meisten Implementationen unterstützt.

Intel-Bezeichnung Inhalt Verwendung
RECORD MARK Satzbeginn ":" (Doppelpunkt, ASCII-Kodierung 3AHEX)
RECLEN Datenlänge Länge der Nutzdaten als zwei Hexadezimalziffern
LOAD OFFSET Ladeadresse 16bit-Adresse (Big-Endian)
RECTYP Satztyp Datensatztyp (00..05)
INFO or DATA Daten Nutzdaten (RECLEN x 2 Zeichen)
CHKSUM Prüfsumme Prüfsumme über den Datensatz (ohne Satzbegin)

Datensatztypen

Übersicht

Es gibt sechs Datensatztypen (record types):

Typ Bezeichnung Verwendung
00 Data Record Nutzdaten
01 End of File Record Dateiende ( sowie Startadresse bei 8-Bit Daten)
02 Extended Segment Address Record Segmentadresse für folgende Nutzdaten
03 Start Segment Address Record Segmentierte Startadresse (CS:IP Register)
04 Extended Linear Address Record Höherwertige 16 bit der Adresse für folgende Nutzdaten
05 Start Linear Address Record Lineare Startadresse (EIP-Register)

Die Datensätze können in beliebiger Reihenfolge vorkommen, ein Endesatz (Typ 01) beendet die Verarbeitung.

Data Record (Typ 00)

Der Datensatz enthält die 16bit-Adresse Ladeadresse und die Nutzdaten.

Startcode Anzahl der Bytes Adresse Typ Datenfeld Prüfsumme
Länge 1 Zeichen 2 Ziffern 4 Ziffern 2 Ziffern 2n Ziffern 2 Ziffern
Inhalt : n Adresse 00 Daten Prüfsumme

n: Anzahl der Bytes im Datenfeld
Adresse: 16bit-Adresse für die Speicherung des Datensatzes
Daten: Datenfeld, n Bytes

End of File Record (Typ 01)

Der Datensatz markiert das Dateiende. In der ursprünglichen (8 Bit) Definition wird, für ladbare Formate, im Adressfeld die Startadresse des Progeramms (PC) angegeben. In den 16/32 Bit Formaten muss diese 0000 sein.

Startcode Anzahl der Bytes Adresse Typ Prüfsumme
Länge 1 Zeichen 2 Ziffern 4 Ziffern 2 Ziffern 2 Ziffern
Inhalt : 00 0000 01 FF

Extended Segment Address Record (Typ 02)

Der Datensatz enthält die Basisadresse des Speichersegmentes. Er wird verwendet, wenn der Umfang eines 16bit-Adressraumes (also 64kByte) nicht ausreicht. Die im Datensatz enthaltene Adresse wird mit 16 multipliziert und bei den folgenden data records (Typ 00) zu der dort enthaltenen 16bit-Adresse addiert. Bit 3..0 (niederwertigste Stelle) müssen immer Null sein. Das Adressfeld des Datensatzes vom Typ 02 ist immer 0000, die Länge ist ist 02.

Startcode Anzahl der Bytes Adresse Typ Datenfeld Prüfsumme
Länge 1 Zeichen 2 Ziffern 4 Ziffern 2 Ziffern 4 Ziffern 2 Ziffern
Inhalt : 02 0000 02 Segment Prüfsumme

Start Segment Address Record (Typ 03)

Der Datensatz spezifiziert bei Lademodulen die Startadresse. Für x86 Prozessoren ist dies der CS:IP Inhalt. Der Datensatz kann an beliebiger Position auftauchen. Die Startadresse wird berechnet als Segment * 16 + Offset. Das Adressfeld ist immer 0000, die Länge ist 04.

Startcode Anzahl der Bytes Adresse Typ Datenfeld Prüfsumme
Länge 1 Zeichen 2 Ziffern 4 Ziffern 2 Ziffern 4 Ziffern 4 Ziffern 2 Ziffern
Inhalt : 04 0000 03 Segment Offset Prüfsumme

Extended Linear Address Record (Typ 04)

Zur Unterstützung eines 32 Bit Addressraums enthält das Datenfeld höherwertigen 16 Bit (ULBA Upper Linear Base Address) einer 32-Bit-Adresse (LBA Linear Base Address). Die niederwertigen 16 Bit werden als 0000 angenommen. Die Adressermittlung der folgenden Typ 00 Datensätze erfolgt als LBA+DRLO+DRI Modulo 2^32 (DRLO - DATA Record Load Address, DRI - Data Record Index). Das Adressfeld ist immer 0000, die Länge ist 02.

Startcode Anzahl der Bytes Adresse Typ Datenfeld Prüfsumme
Länge 1 Zeichen 2 Ziffern 4 Ziffern 2 Ziffern 4 Ziffern 2 Ziffern
Inhalt : 02 0000 04 Adresse (high word) Prüfsumme

Start Linear Address Record (Typ 05)

Der Datensatz spezifiziert bei Lademodulen die Startadresse. Bei x86 Prozessoren ist dies der Inhalt des EIP-Registers. Das Adressfeld ist immer 0000, die Länge ist 04

Start code Anzahl der Bytes Adresse Typ Datenfeld Prüfsumme
Länge 1 Zeichen 2 Ziffern 4 Ziffern 2 Ziffern 8 Ziffern 2 Ziffern
Inhalt : 04 0000 05 EIP Prüfsumme

Berechnung der Prüfsumme

Die Prüfsumme wird aus dem gesamten Datensatz ausschließlich des Startcodes und der Prüfsumme selbst berechnet. Der Datensatz wird byteweise summiert, von der Summe wird das niederwertige Byte genommen und davon wiederum das Zweierkomplement gebildet.

Das Zweierkomplement wird gebildet, indem man die Bits des niederwertigen Bytes invertiert und dann 1 addiert. Dies kann man z.B. durch die Exklusiv-Oder-Verknüpfung mit FFHEX und Addition von 01HEX erreichen. So bleibt 00HEX unverändert, aus 01HEX wird FFHEX u.s.w.

Das Zweierkomplement drückt im Binärsystem eine negative Zahl aus. Da die Prüfsumme damit die negative Summe der restlichen Bytes darstellt, gestaltet sich die Überprüfung eines Datensatzes auf Fehler sehr einfach. Man summiert einfach die einzelnen Bytes eines Datensatzes inklusive der Prüfsumme und erhält als niederwertiges Byte 00HEX, falls der Datensatz korrekt ist.

Varianten

Intel

Im Laufe der Prozessorentwicklung von der 4004 bis heute wurden verschieden Varianten definiert:

Variante Einsatz Erlaubte Satztypen
I08HEX 4/8 Bit CPU (4004..8085) 00 (Data),
01 (End of File)
I16HEX 16 Bit CPU (8086/186/286) 00 (Data),
01 (End of File),
02 (Extended Segment Address),
03 (Start Segment Address)
I32HEX 32 Bit CPU (ab 80386) 00 (Data),
01 (End of File),
02 (Extended Segment Address),
03 (Start Segment Address),
04 (Extended Linear Address),
05 (Start Linear Address)

Andere Hersteller

Das HEX Format wurde als Quasi-Standard vielfältig verwendet. Dabei wurde die Byteorder im Datenfeld teilweise geändert. d.h. die Reihenfolge stimmt nicht mit der Adresslage überein.

Beispiel

:020000021000EC
:10010000214601360121470136007EFE09D2190140
:100110002146017EB7C20001FF5F16002148011988
:10012000194E79234623965778239EDA3F01B2CAA7
:100130003F0156702B5E712B722B732146013421C7
:00000001FF
  • Startcode
  • Byte count
  • Adresse
  • Typ
  • Datenfeld
  • Prüfsumme

Verwandte Dateiformate

Sehr ähnlich ist das Motorola-S-Format (auch kurz S-Record, SREC oder S19). Außerdem existieren für diesen Anwendungsbereich auch weitere Formate, wie der einfache Binärcode oder das Jedec-Format.

Quellen, Weblinks

Einzelnachweise

  1. Hexadecimal Object File Format Specification, Revision A vom 6. Januar 1988

Wikimedia Foundation.

Schlagen Sie auch in anderen Wörterbüchern nach:

  • Intel HEX — is a file format for conveying binary information for applications like programming microcontrollers, EPROMs, and other kinds of chips. It is one of the oldest file formats available for this purpose, having been in use since the 1970s. Fact|date …   Wikipedia

  • Intel Hex — формат текстового файла, содержащего символы в кодировке шестнадцатеричной системе счисления. Содержание 1 Формат записи 1.1 Пример файла 2 Запись данных …   Википедия

  • Intel HEX — es un formato de archivo para la programación de microcontroladores, EPROMs y otros circuitos integrados. Datando de los años 70[cita requerida], está entre los formatos más viejos con esta finalidad. Consiste en un archivo de texto cuyas… …   Wikipedia Español

  • Intel HEX — Для улучшения этой статьи желательно?: Викифицировать статью. Найти и оформить в виде сносок ссылки на авторитетные источники, подтверждающие написанное …   Википедия

  • HEX (disambiguation) — HEX could refer to:* Helsinki Stock Exchange * Hexham railway station, England; National Rail station code HEX. * High energy X rays * Intel HEX * Hex (Discworld) * Hex (TV series) * Hex (board game) …   Wikipedia

  • Hex — Hex: Hex (hexadeсimal)  обозначение шестнадцатеричной системы счисления. См. также Hex редактор  приложение для редактирования данных, представляющее данные как последовательность байтов в hex коде. Intel HEX  формат файла,… …   Википедия

  • HEX — Das Kurzwort Hex (von griechisch Hexa: sechs) steht für: Zahlen im 16er System, siehe Hexadezimalsystem das Brettspiel Hex (Spiel) eine Kurzbezeichnung für ein einzelnes Spielfeld in einem Sechseckraster eine Rechenmaschine in Terry Pratchetts… …   Deutsch Wikipedia

  • Hex — A hex is a curse or magical spell or a female caster of such. The term is derived from the German word Hexe for a witch. Hex is also the Greek root word denoting six as in hexagon , a six sided geometric figure. Hex may also mean:Media Television …   Wikipedia

  • Hex — Das Kurzwort Hex (von griechisch Hexa: sechs) steht für: Zahlen im 16er System, siehe Hexadezimalsystem das Brettspiel Hex (Spiel) eine Kurzbezeichnung für ein einzelnes Spielfeld in einem Sechseckraster eine Rechenmaschine in Terry Pratchetts… …   Deutsch Wikipedia

  • HEX (Intel) — est un format de fichier pour prendre en charge de l information binaire pour des applications comme programmer des Microcontrôleurs, des EEPROM et d autres composants programmables. C est un des formats les plus anciens pour cette utilisation,… …   Wikipédia en Français