Intel Hex格式说明
1.什么是Intel Hex文件
Intel HEX文件時(shí)遵循Intel HEX文件格式的ASCII文本文件。在Intel HEX文件的每一行都包含了 一個(gè)HEX記錄。這些記錄是由一些代表機(jī)器語(yǔ)言代碼和常量的16進(jìn)制數(shù)據(jù)組成的。Intel HEX文件常用來(lái)傳輸要存儲(chǔ)在ROM 或者 EPROM中的程序和數(shù)據(jù)。大部分的EPROM編程器能使用Intel HEX文件。
2.Intel HEX文件組成
Intel HEX由任意數(shù)量的十六進(jìn)制記錄組成。每個(gè)記錄包含5個(gè)域,它們按以下格式排列:
Start Code 每個(gè)Intel HEX記錄都由冒號(hào)開(kāi)頭。
Byte count 是數(shù)據(jù)長(zhǎng)度域,它代表記錄當(dāng)中數(shù)據(jù)字節(jié)的數(shù)量。
Address 是地址域,它代表記錄當(dāng)中數(shù)據(jù)的起始地址。
Record type是代表HEX記錄類型的域,它可能是以下數(shù)據(jù)當(dāng)中的一個(gè):
00-數(shù)據(jù)記錄
01-文件結(jié)束記錄
02-擴(kuò)展段地址記錄
03-開(kāi)始段地址記錄
04-擴(kuò)展線性地址記錄
05-開(kāi)始線性地址記錄
3.內(nèi)容分析
(00)數(shù)據(jù)記錄
Intel HEX文件由若干個(gè)數(shù)據(jù)記錄組成,一個(gè)數(shù)據(jù)記錄以一個(gè)回車和一個(gè)換行結(jié)束<回車為0x0d換行為0x0a>。
比如下面的一條數(shù)據(jù)記錄
:10246200464C5549442050524F46494C4500464C3
10 ???? 是此行記錄數(shù)據(jù)的字節(jié)數(shù)目2462 ?? ?是數(shù)據(jù)在內(nèi)存<將要燒寫的eprom地址>中的起始地址
00 ???? 是記錄類型00(是一個(gè)數(shù)據(jù)記錄)
46到4C? ? 是數(shù)據(jù)
33 ???? 是此行記錄的效驗(yàn)和
(01)文件結(jié)束記錄(EOF)
一個(gè)Intel HEX文件必須有一個(gè)文件結(jié)束記錄,這個(gè)記錄的類型域必須是01,
一個(gè)EOF記錄總是這樣:
:00000001FF
00???? 是記錄中數(shù)據(jù)字節(jié)的數(shù)目0000?? ?這個(gè)地址對(duì)于EOF記錄來(lái)說(shuō)無(wú)任何意義
01???? 記錄類型是01(文件結(jié)束記錄標(biāo)示)
FF???? 是效驗(yàn)和計(jì)算如下
01h + NOT(00h + 00h + 00h + 01h).
(02)擴(kuò)展段地址記錄 (HEX86)
擴(kuò)展段地址記錄也被稱為?HEX86記錄, 包含 4-19位的數(shù)據(jù)地址段,這個(gè)擴(kuò)展段地址記錄總是有兩字節(jié)數(shù)據(jù),如下:
:020000021200EA
02? ? ? ?是記錄中的數(shù)據(jù)字節(jié)數(shù)目0000? ? ? 是地址域(在擴(kuò)展段地址記錄中,這個(gè)域總是0000)
02? ? ? ?是記錄類型02(擴(kuò)展段地址的標(biāo)示)
1200 ?? ? 是該段的地址
EA? ? ? ?是效驗(yàn)和計(jì)算如下:
01h + NOT(02h + 00h + 00h + 02h + 12h + 00h).
當(dāng)擴(kuò)展段地址記錄被讀后,擴(kuò)展段地址將被存儲(chǔ)并應(yīng)用到以后從Intel HEX文件讀出的記錄,這個(gè)段地址一直有效直到讀到下一個(gè)擴(kuò)展段地址記錄
絕對(duì)內(nèi)存地址 = 數(shù)據(jù)記錄中的地址 + 移位后的擴(kuò)展段地址(這個(gè)需要左移8位)
下面舉例說(shuō)明這個(gè)過(guò)程:
從數(shù)據(jù)記錄的地址域得到地址 :? ? ?2 4 6 2
從擴(kuò)展段地址記錄的地址域得到地址: ?1 2 0 0
絕對(duì)內(nèi)存地址: ?????????? ?0 0 0 1 4 4 6 2
(03)開(kāi)始段地址記錄
對(duì)于80x86處理器,他指定CS:IP寄存器的初始內(nèi)容,地址域?yàn)?000,數(shù)據(jù)數(shù)目為04,前2個(gè)位CS值,后面兩個(gè)為IP值。
(04)擴(kuò)展線性地址記錄(HEX386)
擴(kuò)展線性地址記錄也可稱為?32位地址記錄?和?HEX386記錄,這個(gè)紀(jì)錄包含高16(16-31位)位數(shù)據(jù)地址,這種擴(kuò)展的線性記錄總是有兩個(gè)字節(jié)數(shù)據(jù),像下面這樣:
:02000004FFFFFC
02 ???? 是記錄的數(shù)據(jù)字節(jié)數(shù)目
0000 ?? ?是地址域(在擴(kuò)展地址記錄中總是0000)
04 ???? 是記錄類型04(擴(kuò)展地址記錄)
FFFF ?? ?是高16位地址
FC ???? 是記錄效驗(yàn)和,計(jì)算方法如下:
01h + NOT(02h + 00h + 00h + 04h + FFh + FFh)
當(dāng)一個(gè)擴(kuò)展線性地址記錄被讀到后,擴(kuò)展線性地址記錄的數(shù)據(jù)區(qū)域?qū)⒈槐4娌?yīng)用到后面從Intel HEX文件中讀出的記錄,這個(gè)擴(kuò)展線性記錄一直有效,直到讀到下一個(gè)擴(kuò)展線性記錄.
絕對(duì)內(nèi)存地址 = 數(shù)據(jù)記錄中的地址 + 移位后的擴(kuò)展線性地址(這個(gè)需要左移16位)
示例如下:
從數(shù)據(jù)記錄的地址域得到地址:?????? 2462
從擴(kuò)展線性地址記錄的地址域得到地址:? ?FFFF
則絕對(duì)內(nèi)存地址為: ???????????FFFF2462
(05)開(kāi)始線性地址記錄
地址域?yàn)?000,數(shù)據(jù)個(gè)數(shù)為04,4位數(shù)據(jù)描述的是裝載進(jìn)80386或者更高cpu EIP寄存器的32bit值。
完整的hex文件一般有頭行,數(shù)據(jù)行,結(jié)束行。
舉個(gè)例子如下:
:020000042A00D0
:10000000D1DC4B843410D7730D000000FFFFFFFFDD
:10001000FFFFFFFF500000005000002AD8CB000077
:
:
:040000052A000000CD
:00000001FF
第一行(頭行):
1) 02代表數(shù)據(jù)域長(zhǎng)度為0x02,即2A 00兩個(gè)字節(jié)都為數(shù)據(jù)域
2) 0000代表地址,對(duì)于擴(kuò)展線性地址而言,這個(gè)值一直為0000
3) 04代表擴(kuò)展線性地址
4) 2A 00代表基址值為0x2A 00
5) D0代表校驗(yàn)值
當(dāng)擴(kuò)展線性地址被讀取時(shí),擴(kuò)展線性地址值將會(huì)被保存,并且作用于后面從intel hex文件讀取的子記錄,同時(shí)擴(kuò)展線性地址將一直發(fā)揮作用直到下一次擴(kuò)展性線性地址讀取。
第二行(數(shù)據(jù)行):
1) 10代表數(shù)據(jù)域長(zhǎng)度為0x10,即D1 DC 4B 84 34 10 D7 73 0D 00 00 00 FF FF FF FF 16個(gè)字節(jié)都為數(shù)據(jù)域
2)?0000代表地址偏移為0000
3) 00代表數(shù)據(jù)域
4)?D1 DC 4B 84 34 10 D7 73 0D 00 00 00 FF FF FF FF?代表數(shù)據(jù)值
5) 77代表校驗(yàn)值
絕對(duì)地址記錄是擴(kuò)展線性基址加上地址偏移所決定的,這第二行的數(shù)據(jù)絕對(duì)地址計(jì)算如下:
0000 地址偏移
2A00 擴(kuò)展線性地址
-------------------
2A00 0000 絕對(duì)地址
倒數(shù)第二行(最后的數(shù)據(jù)行):
1) 04代表數(shù)據(jù)域長(zhǎng)度為0x04,即2A 00 00 00 4個(gè)字節(jié)都為數(shù)據(jù)域
2) 0000代表地址偏移為0000
3) 05代表開(kāi)始線性地址并且后面才是真正數(shù)據(jù)記錄。而真正的數(shù)據(jù)記錄個(gè)人理解為后面讀取的mbn數(shù)據(jù)。
4) 2A 00 00 00?代表真正數(shù)據(jù)記錄的基址
5) CD代表校驗(yàn)值
最后行(結(jié)束行):
1) 00代表數(shù)據(jù)域長(zhǎng)度為0
2) 0000代表地址將放入到內(nèi)存的位置
3) 01代表文件結(jié)束
4) FF校驗(yàn)值(01h + NOT(00h + 00h + 00h +01h))
總結(jié)
以上是生活随笔為你收集整理的Intel Hex格式说明的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 串行 spi Flash 跨页编程的注意
- 下一篇: 内存管理中的几种地址类型