Intel HEX

Az Intel HEX fájlformátum mikrokontrollerek, EPROM-ok vagy egyéb más programozható chipek tartalmának tárolására szolgál. Ez az egyik legrégebbi, erre a célra használható fájlformátum, amelyet már az 1970-es évek óta alkalmaznak.

A fájlformátuma szöveges fájl, amelynek minden sora egy adatsort és a hozzá tartozó címet tartalmazza. Az Intel HEX fájlnak háromféle típusa létezik: 8 bites, 16 bites, és 32 bites, amelyek a bájtsorrendjükben eltérőek.

Adatsor felépítése

Az Intel HEX fájlok minden sora 6 mezőből áll:

1.Start kód1 bájt ASCIIegy karakter, egy ASCII kettőspont ":"
2.Bájtok száma2 hexadecimális számjegybájtok száma (hexadecimális kétjegyű számok) az adatmezőben. Ez általában 16 (0x10) vagy 32 (0x20) bájtnyi adat.
3.Cím4 hexadecimális számjegy16 biten megadja az adatok kezdőcímét a memóriában. A maximális címtartomány 64 kB, ezt úgy lehet túllépni, hogy a magasabb biteket további rekord típusokon keresztül adjuk meg. A cím "big endian" formátumú, a cím végén van az MSB (Most Significant Byte - Legnagyobb értékű bájt).
4.Rekord típusa2 hexadecimális számjegyértéke 00-tól 05-ig adható meg, az adat mező típusát adja meg.
5.Adatn hexadecimális számjegyn/2 bájtból álló adatsor, az adat maga (1 bájt 2 hexadecimális számjeggyel adható meg, pl. 255 = FFh).
6.Ellenőrző összeg2 hexadecimális számjegyaz összes mező 2-es komplemensben vett összegének - kivéve az 1. és 6. - LSB-je. Számítása úgy történik, hogy összeadjuk a hexadecimálisan megadott bájtokat, majd az összegnek vesszük az LSB-jét (Least Significant Byte - Legkisebb értékű bájt), és ezt vagy kivonjuk 0x100-ból vagy invertáljuk (XOR 0xFF-fel) és hozzáadunk 1-et (ez lényegében az LSB 2-es komplemensének előállítása). Ezután a végeredményt AND-eljük 255-tel mivel 0x100-0 és (0x00 XOR 0xFF)+1 is egyenlő 0x100-zal, és ha nem 8 bites változókkal dolgozunk, akkor az overflow-t (túlcsordulást) el kell hagyni. Ha az ellenőrzőösszeg megfelelően van kiszámítva, akkor soronként minden egyes bájtot összeadva (a Bájtok számát, a Cím mindkét bájtját, a Rekord típust, minden Adat bájtot és az Ellenőrző összeget), akkor a végeredmény LSB-jének értéke 0x00 kell, hogy legyen.

Példa

:10010000214601360121470136007EFE09D2190140
:100110002146017EB7C20001FF5F16002148011988
:10012000194E79234623965778239EDA3F01B2CAA7
:100130003F0156702B5E712B722B732146013421C7
:00000001FF

  Start kód
  Bájtok száma
  Cím
  Rekord típus
  Adat
  Ellenőrző összeg

Rekordtípusok

Hatféle rekordtípus lehetséges:

00 adat rekord
Adatot és 16 bites címet tartalmaz.
01 End Of File (fájl vége) rekord
A fájl végét jelölő rekord. Adatot nem tartalmaz. Ennek kell lennie a fájl utolsó sorának, csak egy ilyen engedélyezett fájlonként. Általában ':00000001FF'. Eredetileg az End Of File (fájl vége) rekord tartalmazhatta a program kezdőcímét, pl. a :00AB2F0123 ugrást hajtott végre az AB2F címre. Ez akkor volt használatos, amikor a programokat lyukszalagról olvasták be.
02 Kiterjesztett szegmenscím rekord, szegmens báziscím.
Akkor használatos, amikor a 16 bites címtartomány nem elég, megfelel a 80x86 valós módú címzésnek. A cím a 02-es rekordban megszorzódik 16-tal (4 bites eltolás balra) és hozzáadódik a következő 00-s rekordban megadott címhez. Így a maximális megcímezhető tartomány 1 MB-ra tolódik. Ennek a rekordnak Cím mezője 0000-t kell – hogy tartalmazzon, a Bájtok száma pedig 02-t (mivel a szegmens 16 bites). A szegmenscím legalacsonyabb értékű számjegye mindig 0.
03 Kezdő szegmenscím rekord.
A 80x86 processzoroknál meghatározza a CS:IP regiszterek kezdőtartalmát. A Cím mező 0000, a Bájtok száma 04, az első két bájt a kódszegmens (CS), az utolsó kettő pedig az utasítás mutató (IP) értékét adja meg.
04 Kiterjesztett lineáris cím rekord
Teljes 32 bites címzést tesz lehetővé. A Cím mező 0000, a Bájtok száma 02. A két adatbájt ebben az esetben a 32 bites cím felső 16 bitjét adja meg, az alsó 16 bit pedig a 00 rekord Cím mezőjében található.
05 Lineáris címzés kezdete rekord.
A Cím mező 0000, a Bájtok száma mező 04. A 4 adatbájt tartalmazza a 32 bites címet a 80386 vagy attól újabb processzorok EIP regisztere számára.

Formátumok

A formátumnak több altípusa létezik:

Vigyázat! A fordított bájtsorrendű adat megtévesztő lehet. Könnyen előfordulhat a bájtsorrend helytelen értelmezése az I16HEX és I32HEX altípusok esetén.

Egy hasonló kódolású, de eltérő ASCII formátumú, SREC-nek nevezett formátum pedig a Motorola processzorok esetén használatos.

Külső hivatkozások