Intel HEX

A Wikipédiából, a szabad enciklopédiából

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[szerkesztés]

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

1. Start kód 1 bájt ASCII egy karakter, egy ASCII kettőspont ":"
2. Bájtok száma hexadecimális számjegy bá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ím 4 hexadecimális számjegy 16 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ípusa 2 hexadecimális számjegy értéke 00-tól 05-ig adható meg, az adat mező típusát adja meg.
5. Adat n hexadecimális számjegy n/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ő összeg 2 hexadecimális számjegy az ö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[szerkesztés]

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

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

Rekordtípusok[szerkesztés]

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[szerkesztés]

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

  • I8HEX vagy INTEL 8, 8 bites formátum.
  • I16HEX vagy INTEL 16, 16 bites formátum. Engedélyezi a 02-es rekordok használatát. Az Adat mező bájtsorrendje fordított lehet.
  • I32HEX vagy INTEL 32, 32 bites formátum. Engedélyezi a 03, 04, és 05-ös rekordok használatát. Az Adat mező bájtsorrendje fordított lehet.

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[szerkesztés]