複製鏈接
請複製以下鏈接發送給好友

HEX文件

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

HEX文件記錄格式

HEX文件

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

HEX文件ll 是數據長度域

它代表記錄當中數據字節(dd)的數量。

HEX文件aaaa 是地址域

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

HEX文件tt 是代表HEX記錄類型的域

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

HEX文件dd 是數據域

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

HEX文件cc 是校驗和域

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

HEX文件數據記錄

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

HEX文件擴展線性地址記錄

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

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

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文件讀取來的隨後的記錄。段地址保持有效,直到它被另外一個擴展地址記錄所改變。
通過把記錄當中的地址域與被移位的來自擴展段地址記錄的地址數據相加獲得數據記錄的絕對存儲器地址。
以下的例子演示了這個過程

HEX文件2

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

HEX文件3

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

HEX文件HEX文件和BIN文件格式區別

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

HEX文件1 -

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

HEX文件2 -

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

HEX文件3 -

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

HEX文件記錄的基本格式

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

HEX文件記錄類型

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

HEX文件數據記錄的具體格式

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

HEX文件看個例子

: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

HEX文件4 -

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