Intel HEX(ihex)是一種廣泛用于微控制器和嵌入式系統(tǒng)編程的文件格式,主要用于存儲(chǔ)可執(zhí)行機(jī)器代碼或程序數(shù)據(jù)。這種格式簡單、易讀,通常由十六進(jìn)制編碼表示二進(jìn)制數(shù)據(jù)。以下是對(duì) Intel HEX 文件格式的詳細(xì)介紹。
1. 基本結(jié)構(gòu)
Intel HEX 文件由多行記錄組成,每行記錄稱為“記錄行”,以 ASCII 字符表示,每一行都遵循以下格式:
:LLAAAATT[DATA]CC
:冒號(hào) (0x3A): 每行記錄的開頭,表示該行為一條有效的記錄。
LL (2 字節(jié)): 數(shù)據(jù)字節(jié)數(shù)(一個(gè)記錄行中有效數(shù)據(jù)的字節(jié)數(shù),范圍 0~255)。
AAAA (4 字節(jié)): 數(shù)據(jù)的起始地址,表示當(dāng)前記錄中數(shù)據(jù)存儲(chǔ)在目標(biāo)內(nèi)存的地址偏移量。
TT (2 字節(jié)): 記錄類型,表示記錄的用途(見記錄類型說明)。
[DATA] (2×LL 字節(jié)): 數(shù)據(jù)內(nèi)容,十六進(jìn)制編碼。
CC (2 字節(jié)): 校驗(yàn)和,確保數(shù)據(jù)傳輸?shù)耐暾浴?/p>
2. 記錄類型
TT 字段表示記錄的類型,常見的類型如下:
值 (TT) 名稱 說明
00 數(shù)據(jù)記錄 (Data Record) 包含實(shí)際的數(shù)據(jù),用于加載到內(nèi)存中的目標(biāo)地址。
01 文件結(jié)束記錄 (EOF) 指示文件結(jié)束,沒有數(shù)據(jù),僅用于標(biāo)記結(jié)束。
02 擴(kuò)展段地址記錄 提供 16 位段基址,允許表示超過 64KB 的地址空間。
04 擴(kuò)展線性地址記錄 提供 32 位地址的高 16 位,適用于 32 位地址空間。
05 起始線性地址記錄 指示代碼執(zhí)行的起始地址,通常用于指定啟動(dòng)向量地址。
3. 詳細(xì)字段解釋
-
數(shù)據(jù)字節(jié)數(shù)(LL)
表示當(dāng)前記錄中 [DATA] 的長度,單位為字節(jié),如果沒有數(shù)據(jù),則 LL 為 00。
-
地址字段(AAAA)
用于指定數(shù)據(jù)的存儲(chǔ)地址,對(duì)于擴(kuò)展段地址記錄和擴(kuò)展線性地址記錄,這一字段通常為 0000,地址信息通過擴(kuò)展記錄提供。
校驗(yàn)和(CC)
校驗(yàn)和通過以下公式計(jì)算:
1. 計(jì)算從 LL 到 [DATA] 字段所有字節(jié)的和;
2. 取此和的最低字節(jié)(低 8 位);
3. 用 0x100 減去上述結(jié)果的低字節(jié),即:
校驗(yàn)和=0x100?((LL+AAAA+TT+DATA 字節(jié)總和) & 0xff)
接收方會(huì)驗(yàn)證校驗(yàn)和是否正確,確保數(shù)據(jù)未損壞。
4. 舉例說明
以下是一個(gè)典型的 Intel HEX 文件示例:
:10000000214601360121470136007EFE09D2190140
:00000001FF
解析第一行:
:10010000214601360121470136007EFE09D2190140
:(冒號(hào)): 開頭符號(hào)。
10: 數(shù)據(jù)字節(jié)數(shù)(16 字節(jié))。
0000: 起始地址 0x0000。
00: 記錄類型(數(shù)據(jù)記錄)。
214601360121470136007EFE09D21901: 數(shù)據(jù)內(nèi)容,共16個(gè)字節(jié)數(shù)據(jù)(從左到右默認(rèn)是MSB)。
40: 校驗(yàn)和。
解析最后一行:
:00000001FF
:(冒號(hào)): 開頭符號(hào)。
00: 數(shù)據(jù)字節(jié)數(shù)(0字節(jié))。
0000: 起始地址 0x0000。
01: 文件結(jié)束記錄 (EOF) 指示文件結(jié)束。
FF: 校驗(yàn)和。