HEX檔案

HEX檔案

Intel HEX檔案是由一行行符合Intel HEX檔案格式的文本所構成的ASCII文本檔案。在Intel HEX檔案中,每一行包含一個HEX記錄。這些記錄由對應機器語言碼和/或常量數據的十六進制編碼數字組成。Intel HEX檔案通常用於傳輸將被存於ROM或者EPROM中的程式和數據。大多數EPROM編程器模擬器使用Intel HEX檔案。

基本介紹

  • 中文名:HEX檔案
  • 所屬學科:計算機
記錄格式,域,ll 是數據長度域,aaaa 是地址域,tt 是代表HEX記錄類型的域,dd 是數據域,cc 是校驗和域,數據記錄,擴展線性地址記錄,以下的例子演示了這個過程,1,2,3,HEX檔案和BIN檔案格式區別,1 -,2 -,3 -,記錄的基本格式,記錄類型,數據記錄的具體格式,看個例子,4 -,

記錄格式

Intel HEX由任意數量的十六進制記錄組成。每個記錄包含5個域,它們按以下格式排列:
:llaaaatt[dd...]cc
每一組字母對應一個不同的域,每一個字母對應一個十六進制編碼的數字。每一個域由至少兩個十六進制編碼數字組成,它們構成一個位元組,就像以下描述的那樣:
: 每個Intel HEX記錄都由冒號開頭.

ll 是數據長度域

它代表記錄當中數據位元組(dd)的數量。

aaaa 是地址域

它代表記錄當中數據的起始地址。

tt 是代表HEX記錄類型的域

它可能是以下數據當中的一個:
00 – 數據記錄
01 – 檔案結束記錄
02 – 擴展段地址記錄
04 – 擴展線性地址記錄

dd 是數據域

它代表一個位元組的數據。一個記錄可以有許多數據位元組.記錄當中數據位元組的數量必須和數據長度域(ll)中指定的數字相符。

cc 是校驗和域

它表示這個記錄的校驗和。校驗和的計算是通過將記錄當中所有十六進制編碼數字對的值相加,以256為模進行以下補足。

數據記錄

Intel HEX檔案由任意數量以回車換行符結束的數據記錄組成。數據記錄外觀如下:
:10246200464C5549442050524F46494C4500464C33
其中:
10 是這個記錄當中數據位元組的數量。
2462 是數據將被下載到存儲器當中的地址。
00 是記錄類型(數據記錄)
464C…464C是數據。
33 是這個記錄的校驗和。

擴展線性地址記錄

擴展線性地址記錄也叫作32位地址記錄或HEX386記錄。這些記錄包含數據地址的高16位。擴展線性地址記錄總是有兩個數據位元組,外觀如下:
:02000004FFFFFC
其中:
02 是這個記錄當中數據位元組的數量。
0000 是地址域,對於擴展線性地址記錄,這個域總是0000。
04 是記錄類型 04(擴展線性地址記錄)
FFFF 是地址的高16位。
FC 是這個記錄的校驗和,計算方法如下:
01h + NOT(02h + 00h + 00h + 04h + FFh + FFh).
當一個擴展線性地址記錄被讀取,存儲於數據域的擴展線性地址被保存,它被套用於從Intel HEX檔案讀取來的隨後的記錄。線性地址保持有效,直到它被另外一個擴展地址記錄所改變。
通過把記錄當中的地址域與被移位的來自擴展線性地址記錄的地址數據相加獲得數據記錄的絕對存儲器地址。

以下的例子演示了這個過程

1

來自數據記錄地址域的地址2462
擴展線性地址記錄的數據域 + FFFF
------------
絕對存儲器地址 FFFF2462
擴展段地址記錄(HEX86)
擴展段地址記錄也叫HEX86記錄,它包括4-19位數據地址段。擴展段地址記錄總是有兩個數據位元組,外觀如下:
:020000021200EA
其中:
02 是記錄當中數據位元組的數量。
0000 是地址域.對於擴展段地址記錄,這個域總是0000。
02 是記錄類型 02(擴展段地址記錄)
1200 是地址段。
EA 是這個記錄的校驗和,計算方法如下:
01h + NOT(02h + 00h + 00h + 02h + 12h + 00h).
當一個擴展段地址記錄被讀取,存儲於數據域的擴展段地址被保存,它被套用於從Intel HEX檔案讀取來的隨後的記錄。段地址保持有效,直到它被另外一個擴展地址記錄所改變。
通過把記錄當中的地址域與被移位的來自擴展段地址記錄的地址數據相加獲得數據記錄的絕對存儲器地址。
以下的例子演示了這個過程

2

來自數據記錄地址域的地址 2462
擴展段地址記錄數據域 + 1200
---------
絕對存儲器地址00014462
檔案結束(EOF)記錄
Intel HEX檔案必須以檔案結束(EOF)記錄結束.這個記錄的記錄類型域的值必須是01.EOF記錄外觀總是如下:
:00000001FF
其中:
00 是記錄當中數據位元組的數量.
0000 是數據被下載到存儲器當中的地址.在檔案結束記錄當中地址是沒有意義被忽略的.0000h是典型的地址.
01 是記錄類型 01(檔案結束記錄)
FF 是這個記錄的校驗和,計算方法如下:
01h + NOT(00h + 00h + 00h + 01h).

3

Intel HEX檔案例子:
下面是一個完整的Intel HEX檔案的例子:
:10001C00AD071FED600BE4FEEEC3947850F20E803A
:01002C00F7DC
:01002D0022B0
:100003007CFE8C807FFA12001C7801AF04EF08801D
:090013000123D8FDFCF58080EB0F
:0300000002002ECD
:0C002E00787FE4F6D8FD7581070200031E
:00000001FF
(PS:這是51單片機LED流水燈程式”的hex檔案)

HEX檔案和BIN檔案格式區別

HEX檔案和BIN檔案是我們經常碰到的兩種檔案格式。下面簡單介紹一下這兩種檔案格式的區別:

1 -

HEX檔案是包括地址信息的,而BIN檔案格式只包括了數據本身
在燒寫或下載HEX檔案的時候,一般都不需要用戶指定地址,因為HEX檔案內部的信息已經包括了地址。而燒寫BIN 檔案的時候,用戶是一定需要指定地址信息的。

2 -

BIN檔案格式 對二進制檔案而言,其實沒有”格式”。
檔案只是包括了純粹的二進制數據

3 -

HEX檔案格式 HEX檔案都是由記錄(RECORD)組成的。
在HEX檔案裡面,每一行代表一個記錄。

記錄的基本格式

+---------------------------------------------------------------+ | RECORD | RECLEN | LOAD | RECTYPE | INFO or DATA | CHKSUM | | MARK ':' | | OFFSET | | | | +---------------------------------------------------------------+ | 1-byte | 1-byte | 2-byte | 1-byte | n-byte | 1-byte | +---------------------------------------------------------------+

記錄類型

'00' Data Rrecord:用來記錄數據,HEX檔案的大部分記錄都是數據記錄 '01' End of File Record: 用來標識檔案結束,放在檔案的最後,標識HEX檔案的結尾 '04' Extended Linear Address Record: 用來標識擴展線性地址的記錄 '02' Extended Segment Address Record: 用來標識擴展段地址的記錄 在上面的後2種記錄,都是用來提供地址信息的。每次碰到這2個記錄的時候,都可以根據記錄計算出一個“基”地址。 對於後面的數據記錄,計算地址的時候,都是以這些“基”地址為基礎的。

數據記錄的具體格式

+---------------------------------------------------------------+ | RECORD | RECLEN | LOAD | RECTYPE | INFO or DATA | CHKSUM | | MARK ':' | | OFFSET | '00' | | | +---------------------------------------------------------------+ | 1-byte | 1-byte | 2-byte | 1-byte | n-byte | 1-byte | +---------------------------------------------------------------+

看個例子

:020000040000FA :10000400FF00A0E314209FE5001092E5011092E5A3 :00000001FF
對上面的HEX檔案進行分析:
第1條記錄的長度為02,LOAD OFFSET為0000,RECTYPE為04,說明該記錄為擴展段地址記錄。數據為0000,校驗和為 FA。從這個記錄的長度和數據,我們可以計算出一個基地址,這個地址為0X0000。後面的數據記錄都以這個地址為基地址。
第2條記錄的長度為10(16),LOAD OFFSET為0004,RECTYPE為00,說明該記錄為數據記錄。 數據為FF00A0E314209FE5001092E5011092E5,共16個BYTE。這個記錄的校驗和為A3。此時的基地址為0X0000,加上OFFSET, 這個記錄里的16BYTE的數據的起始地址就是0x0000 + 0x0004 = 0x0004.
第3條記錄的長度為00,LOAD OFFSET為0000,TYPE = 01,校驗和為FF。說明這個是一個END OF FILE RECORD,標識檔案的結尾。
在上面這個例子裡,實際的數據只有16個BYTE:FF00A0E314209FE5001092E5011092E5,其起始地址為0x4

4 -

HEX檔案和BIN檔案大小有區別
HEX檔案是用ASCII來表示二進制的數值。例如一般8-BIT的二進制數值0x3F,用ASCII來表示就需要分別表示字元'3' 和字元'F',每個字元需要一個BYTE,所以HEX檔案需要> 2倍的空間。 對一個BIN檔案而言,你查看檔案的大小就可以知道檔案包括的數據的實際大小。而對HEX檔案而言,你看到的檔案 大小並不是實際的數據的大小。一是因為HEX檔案是用ASCII來表示數據,二是因為HEX檔案本身還包括別的附加信息。

相關詞條

熱門詞條

聯絡我們