HEX檔案和BIN檔案是我們經常碰到的2種檔案格式。下面簡單介紹一下這2種檔案格式的區別:
Intel HEX檔案是由一行行符合Intel HEX檔案格式的文本所構成的ASCII文字檔。在Intel HEX檔案中,每一行包含一個HEX記錄。
這些記錄由對應機器語言碼和/或常量資料的十六進位編碼數字組成。Intel HEX檔案通常用於傳輸將被存於ROM或者EPROM中的程式
和資料。大多數EPROM編程器或模擬器使用Intel HEX檔案。
1 - HEX檔案是包括地址資訊的,而BIN檔案格式只包括了資料本身
在燒寫或下載HEX檔案的時候,一般都不需要使用者指定地址,因為HEX檔案內部的資訊已經包括了地址。而燒寫BIN
檔案的時候,使用者是一定需要指定地址資訊的。
3 - BIN檔案格式
對二進位檔案而言,其實沒有”格式”。檔案只是包括了純粹的位元據。
4 - 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檔案本身還包括別的附加資訊。
另外HEX對於那些中間空白地區會忽略除非填充資料;但是BIN就會全部填充。
比如你的單片機空間128kB,你在定義一個常量位元組資料放到最後,那麼BIN實際大小就必須128kB那麼大了;而Hex中間沒有定義資料的地方就是空的,不會生產記錄。