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
Rekordtípusok Hatféle rekordtípus lehetséges: 00adat rekord Adatot és 16 bites címet tartalmaz.01End 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.02Kiterjesztett 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.03Kezdő 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.04Kiterjesztett 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ó.05Lineá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: 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 Intel Hexadecimal Object File Format Specification 1988 (PDF) Format description at PIC List Format description SRecord, multi-platform GPL eszköz EPROM fájlok szerkesztésére. Binex, Intel HEX ↔ bináris konverter.
Kategória:Fájlformátumok Kategória:Beágyazott rendszerek