Intel HEX

Technology
12 hours ago
8
4
2
Avatar
Author
Albert Flores

Soubor typu Intel-Hex (tj. MCS-86 Object File Format) je textový soubor definující obsah paměti (např. RAM, ROM, FLASH, EEPROM) pro počítačové systémy. Jeden řádek reprezentuje jeden záznam, na konci řádku je jednobajtový kontrolní součet dovolující ověřit neporušenost dat. Velikost jednoho řádku obvykle nepřesahuje rozumnou míru, tj. např. 80 znaků. Intel HEX je pravděpodobně nejrozšířenějším datovým formátem pro programování jednoduchých vestavěných systémů.

Data v souborech Intel-Hex jsou kódována do ASCII pomocí hexadecimální soustavy, aby byla čitelná v běžném textovém editoru. Alternativními formáty pro definici obsahu paměti jsou například formáty Motorola S-record nebo TI-tagged.

...

Ukázka

Následující obrázek barevně zvýrazňuje jednotlivé části souboru typu intel-hex:

alt=Intel HEX

Data oblasti jsou rozdělena do tří datových záznamů, kterým předchází záznam definující segmentovou adresu 100016. K offsetovým adresám následujících datových záznamů tedy přičítáme 1000016. +more Když uvažujeme adresování paměti po bajtech, pak tato ukázka definuje obsah spojité oblasti 48 bajtů od adresy 1400016 (14000h v notaci assembleru, 0x14000 v notaci C-jazyka).

Struktura záznamu

Intel-Hex je z formálního hlediska textový soubor kódovaný pomocí standardu ASCII. Jak už bylo řečeno, jeden záznam je zde reprezentován jedním řádkem textového souboru.

[0. znak] ... ':'

Pro ostatní viditelné znaky na řádku platí, že dvojice znaků vždy reprezentuje jeden bajt. Tento bajt je zapsaný pomocí dvou ASCII znaků, které mohou nabývat hodnoty '0' - '9' a 'A' - 'F' pro šestnáctkové číslice 0 - 9 a 10 - 15. +more Takže například bajt zapsaný jako "10" má desítkovou hodnotu 16 (tj. 1*16 + 0), bajt zapsaný jako "E1" má desítkovou hodnotu 225 (tj. 14*16 + 1) atp.

[1. až 2. znak] ... N = počet bajtů

N určuje čistou velikost obsahu datové oblasti záznamu v bajtech. Např. +more '10' (tj. 1016) znamená 16 bajtů dat, pro běžný segmentový záznam je zde '02' (2 bajty dat) atd. Protože 1 bajt je v ACII-hex kódování reprezentován dvěma znaky, je tato datová oblast reprezentována v datovém záznamu 2N znaky.

[3. až 6. znak] ... offset adresy

Offset adresy má smysl pro datový záznam, je uveden v 'lidsky čitelném' pořadí nejprve MSB (významnější bajt) pak LSB (méně významný bajt). Pokud je tedy 3. +more až 6. znak např. '1234', znamená to offset 123416 (decimálně 4660). Adresy jsou obvykle bajtové (tj. adresa specifikuje pořadí bajtu v paměti), u systémů nedovolujících bajtovou adresaci může (ale nemusí) být interpretace adresy odlišná (např. může jít o pořadí slova nebo dvojslova).

[7. až 8. znak] ... typ záznamu

* '00' . datový záznam * '01' . +more konec souboru * '02' . segmentový záznam (nejprve MSB) * '03' . startovací záznam (adresa daná jako segment(16 bitů) a offset(16 bitů); nejprve MSB) * '04' . rozšířený adresový záznam (nejprve MSB) * '05' . startovací záznam (32bitová lineární adresa; nejprve MSB).

[9. až 8.+2*N znak] ... datová oblast záznamu

Význam datové oblasti záznamu závisí na typu záznamu. Adresové záznamy mívají pořadí bajtů od nejvýznamnějšího k nejméně významnému, aby byly přímo lidsky čitelné jako hexadecimální číslo. +more Datový záznam má u systémů dovolujících adresaci po bajtech pořadí od nejnižší adresy k nejvyšší, u systémů nedovolujících adresaci po bajtech záleží interpretace na výrobci softwarových nástrojů (většinou je respektována konvence daná výrobcem hardware).

[9.+2*N až 10.+2*N znak] ... kontrolní součet řádku

Součet hodnot hexa bajtů řádku modulo 256 musí dát nulu.

Posledním znakem řádku je odřádkování, které v textovém souboru normálně neuvidíme. Toto odřádkování může být realizováno znakem LF (tj. +more 0x0A), sekvencí znaků CR+LF (tj. 0x0D, 0x0A), případně znakem CR (0x0D), podle toho zda nástroje generující HEX soubor upřednostňují zvyklosti operačního systému Unix, MS-DOS/MS-Windows, případně MacOS.

Datová oblast datového záznamu (typ 00)

[9. až 8.+2*N znak] ... data pro zápis od dané adresy paměti.

V jednom záznamu bývá obvykle obsažena pouze část adresy (tzv. offset). +more Data jsou obvykle ukládána do paměti cílového systému po bajtech v pořadí od nejnižší adresy do nejvyšší. U systémů neumožňujících adresování paměti po bajtech je třeba zjistit jakým způsobem je Intel HEX interpretován.

Datová oblast segmentového záznamu (typ 02)

[9. až 12. znak] ... nová segmentová adresa platná pro další záznamy.

Na začátku je segmentová adresa rovna 0.

Segmentová adresa se uvádí v 'lidsky čitelném' pořadí nejprve MSB, poté LSB. Např. záznam

:020000021000EC

definuje segmentovou adresu 100016 (v desítkové soustavě 4096).

Fyzická adresa = 16*(segmentová adresa) + offset

Datová oblast rozšířeného adresového záznamu (typ 04)

[9. až 12. znak] ... obsahuje vyšších 16 bitů adresy

Fyzická adresa = 65536*(vyšších 16 bitů adresy) + offset

* je otázka, zda je možné v jednom souboru kombinovat záznamy typu 02 a záznamy typu 04, a pokud ano zda a jak se kombinuje segment s rozšířenou lineární adresou.

Zakončení (typ 01)

:00000001FF

Starší software údajně může používat pro zakončení prázdný datový záznam:

:0000000000

Odkazy

Související články

Hexadecimální výpis * Vestavěný systém

Externí odkazy

[url=https://web. archive. +moreorg/web/20160817003552/http://www. microsym. com/content/index. php. pid=4&id=25]Intel Hexadecimal Object File Format Specification 1988 (PDF)[/url] * [url=http://www. piclist. com/techref/fileext/hex/intel. htm]Format description at PIC List[/url] * [url=http://www. lucidtechnologies. info/intel. htm]Format description[/url] * [url=http://sf. net/projects/srecord]SRecord[/url], multi-platform GPL'ed tool for manipulating EPROM load files. * [url=http://www. nlsw. nl/software/]Binex[/url], a converter between Intel HEX and binary.

Kategorie:Souborové formáty

5 min read
Share this post:
Like it 8

Leave a Comment

Please, enter your name.
Please, provide a valid email address.
Please, enter your comment.
Enjoy this post? Join Cesko.wiki
Don’t forget to share it
Top