.hex文件和.bin文件區別

HEX文件和BIN文件是我們經常碰到的2種文件格式。因爲自己也是新手,所以一直對這兩個文件懵懵懂懂,不甚瞭解,最近在做STM32單片機的IAP更新,其中要考慮HEX文件和BIN文件,所以需要學習下這兩種文件。下面是最近的我的瞭解,如有不對地方還請指正。

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

2. HEX文件格式
    HEX文件都是由記錄(RECORD)組成的。在HEX文件裏面,每一行代表一個記錄。以下爲記錄(Record)的具體格式:

 Record structure

  A record (line of text) consists of six fields (parts) that appear in order from left to right:

  1. Start code, one character, an ASCII colon ':'.
  2. Byte count, two hex digits, indicating the number of bytes (hex digit pairs) in the data field. The maximum byte count is 255 (0xFF). 16 (0x10) and 32 (0x20) are commonly used byte counts.
  3. Address, four hex digits, representing the 16-bit beginning memory address offset of the data. The physical address of the data is computed by adding this offset to a previously established base address, thus allowing memory addressing beyond the 64 kilobyte limit of 16-bit addresses. The base address, which defaults to zero, can be changed by various types of records. Base addresses and address offsets are always expressed as big endian values.
  4. Record type (see record types below), two hex digits, 00 to 05, defining the meaning of the data field.
  5. Data, a sequence of n bytes of data, represented by 2n hex digits. Some records omit this field (n equals zero). The meaning and interpretation of data bytes depends on the application.
  6. Checksum, two hex digits, a computed value that can be used to verify the record has no errors.



     看個例子:
     :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。

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

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章