深究 INTEL HEX 檔案格式

2021-06-07 21:02:35 字數 2616 閱讀 6379

什麼是intel hex 檔案格式

intel hex 檔案是遵循intel hex 檔案格式的ascii文字檔案。在intel hex 檔案的每一行都包含了乙個hex記錄。這些記錄是由一些代表機器語言**和常量的16進製制資料組成的。intel hex 檔案常用來傳輸要儲存在rom或者eprom中的程式和資料。大部分的eprom 程式設計器能使用intel hex 檔案。

記錄格式:

乙個英特爾hex 檔案由一些hex記錄組成。每個記錄由如下所示的五部分組成:

:llaaaatt[dd……]cc

:冒號代表了每個記錄的開始

ll:表示了本記錄內資料位的數量

aaaa:資料的起始位址

tt:代表了hex檔案的記錄型別

00:資料記錄

01: 結束檔案記錄

02:擴充套件段位址記錄

04:擴充套件線性位址記錄

dd:表示資料的一位。資料的位數必須和ll區域的資料相吻合。

cc:是校驗和的校驗碼。是計算了所有前面的資料的和後,除以256後的餘數,一般是補碼,所以要對和取反再加一。

擴充套件線性位址記錄(hex386)

擴充套件線性位址記錄又稱為32位位址記錄或者hex386記錄。 這些記錄包含了資料位址的高16位。t

擴充套件線性位址記錄總是有兩個資料,格式如下

:02000004fffffc

這裡:02 

是記錄的資料位數

0000 

對於擴充套件線性位址記錄,這部分都是零。

04 代表記錄型別是擴充套件線性位址記錄。

ffff 

是位址的高16位。

fc 是以下計算結果的和:01h + not(02h + 00h + 00h + 04h + ffh + ffh).

當乙個擴充套件線性位址被讀取時,在資料域中的擴充套件線性位址被儲存並且運用到後來的記錄的讀取中。線性位址保持有效直到被另外乙個擴充套件位址所改變。資料的絕對位址由擴充套件線性位址和偏移位址相加獲得。

下面這個例子可以說明這個過程。

資料記錄的位址域中的位址2462

擴充套件線性位址記錄的資料域ffff

--------

擴充套件段位址記錄(hex86)

擴充套件段位址記錄(也稱hex86)包括資料位址段的4-19位。擴充套件段位址記錄總有兩個資料位。一般如下:

:020000021200ea

這裡:02 

在本記錄中的資料的位數。

0000

對於擴充套件段位址記錄,這部分都是零。 02

是記錄型別,也就是擴充套件段位址記錄。

1200 

是位址段

ea 是如下計算的結果01h + not(02h + 00h + 00h + 02h + 12h + 00h).

當乙個擴充套件段位址被讀取時,儲存在資料域的擴充套件段位址被儲存,應用到後面的記錄,並且保持有效,直到被新的擴充套件位址所代替。絕對位址的獲得是段位址乘以16加上偏移位址。

以下這個例子說明這個過程。

擴充套件段位址的資料域:1200

--------

結束檔案記錄:

乙個英特爾hex檔案必須由乙個eof檔案來結束。乙個結束檔案記錄一般這樣出現:

:00000001ff

這裡: 00

是記錄的資料位數.

0000 

是資料在儲存器中定位的資料的位址.在結束檔案中的位址是沒有意義和可以忽略的。乙個 0000h 的位址是很典型的。 01

是記錄型別,結束檔案記錄

ff 由這樣計算得出:01h + not(00h + 00h + 00h + 01h).

舉例:hex檔案的intel格式:這是intel公司提出的按位址排列的資料資訊,資料寬度為位元組,所有數

據使用16進製制數字表示.

這是乙個例子:

:10008000af5f67f0602703e0322cfa92007780c361

:10 0090 00 89001c6b7ea7ca9200fe10d2aa00477d81

:0b00a00080fa92006f3600c3a00076cb

:00000001ff

第一行,":"符號表明記錄的開始. 後面的兩個字元表明記錄的長度,這裡是10h. 後面的四個字

符給出調入的位址,這裡是0080h. 後面的兩個字元表明記錄的型別; 0 

資料記錄 1 記錄檔案結束 2 擴充套件段位址記錄 3 開始段位址記錄 4 擴充套件線性位址記錄 5

開始線性位址記錄

後面則是真正的資料記錄, 最後兩位是校驗和檢查,它加上前面所有的資料和為0.

最後一行特殊,總是寫成這個樣子.

擴充套件intel hex的格式(最大1m): 由於普通的intel的hex記錄檔案只能記錄64k的位址範圍,

所以大於64k的位址資料要靠擴充套件intel hex格式的檔案來記錄.對於擴充套件形式hex檔案,在每

乙個64k段的開始加上擴充套件的段位址規定,下面的資料位址均在這個段內,除非出現新的段位址

定義.乙個段位址定義的格式如下:

起始符長度 起始位址 擴充套件段標示 擴充套件段序號 無用 累加和

: 02 0000 02 3000 ec

段位址的識別符號是第四組資料02,表示擴充套件位址段的定義,再後面的以為hex數表示段的數目,

上面的定義為3,表示段位址是3,所以下面的資料位址是3 + xx(xx是64k段內的位址)

Intel HEX 檔案格式

hex檔案作為微控制器常用的燒錄檔案形式,有必要進行進一步了解,特別是製作相應的bootloader時需要對其進行處理。intel hex 檔案是遵循 intel hex 檔案格式的 ascii 文字檔案。在 intel hex 檔案的每一行都包含了乙個 hex 記錄。這些記錄是由一些代表機器語言 ...

intel hex檔案格式整理

源於前幾天想擴充套件51微控制器的外部rom,網上能搜尋到的擴充套件方式都是將ea引腳接地,讓mcu上電後從外部rom開始執行。但檢視晶元手冊,明明說ea為高時,程式從片內rom執行,當執行到0x1000時 標準51微控制器 會跳轉到片外rom執行。按網上的做法,為了擴充套件個片外rom,片內的基本...

Oracle 控制檔案格式ctl檔案格式

options skip 1,errors 10 load data characterset zhs16gbk infile into table table name truncate fields terminated by optionally enclosed by trailing nu...