Hex文件格式解析

Hex文件是可以燒寫到單片機中,被單片機執行的一種文件格式,生成Hex文件的方式由很多種,可以通過不同的編譯器將C程序或者彙編程序編譯生成hex。
  Hex文件如果用特殊的程序來查看(一般記事本就可以實現)。打開後可發現,真個文件以行爲單位,每行以冒號開頭,內容全部爲16進制碼。Hex文件可以按照如下的方式進行拆分來分析其中的內容:
  例如:
  :020000040000FA , 我把它看做 0x02 0x00 0x00 0x04 0x00 0x00 0xFA
  第一個 0x02 爲數據長度。
  緊跟着後面的0x00 0x00 爲地址。
  再後面的0x04爲數據類型,類型共分以下幾類:
  '00' Data Record
  '01' End of File Record
  '02' Extended Segment Address Record
  '03' Start Segment Address Record
  '04' Extended Linear Address Record
  '05' Start Linear Address Record
  然後,接着0x04後面的兩個 0x00 0x00就是數據。最後一個0xFA是校驗碼。
  HEX文件的每一行都是這樣的格式:
  
<0x3a>
[數據長度1Byte]
[數據地址2Byte]
[數據類型1Byte]
[數據nByte]
[校驗1Byte]
<0x0d>
<0x0a>
 在例如:
  :1000000018F09FE518F09FE518F09FE518F09FE5C0
  按照上面的數據行格式分析如下:
  
<0x3a>  
[數據長度1Byte] 10
[數據地址2Byte] 00 00
[數據類型1Byte] 00
[數據nByte] 18F09FE518F09FE518F09FE518F09FE5
[校驗1Byte] C0
<0x0d>  
<0x0a>  
 每行中的數據並不是一定有的,第二個字節數據長度爲0,那麼這行就沒有數據。
  由於每行標識數據地址的只有2Byte,所以最大隻能到64K,爲了可以保存高地址的數據,就有了Extended Linear Address Record。如果這行的數據類型是0x04,那麼,這行的數據就是隨後數據的基地址。例如:
  :020000040004F6
  :1000000018F09FE518F09FE518F09FE518F09FE5C0
  :1000100018F09FE5805F20B9F0FF1FE518F09FE51D
  第一行,是Extended Linear Address Record,裏面的數據,也就是基地址是0x0004,第二行是Data Record,裏面的地址值是0x0000。那麼數據18F09FE518F09FE518F09FE518F09FE5要寫入FLASH中的地址爲 (0x0004 << 16) | 0x0000,也就是寫入FLASH的0x40000這個地址。同樣,第三行的數據的寫入地址爲0x40010。當一個HEX文件的數據超過64k的時候,文件中就會出現多個Extended Linear Address Record。
  End of File Record 行是每一個HEX文件的最後一行。例如:
  :00000001FF
  這樣的一行數據內容是固定的,數據長度爲0,地址爲0。
  校驗值:每一行的最後一個值爲此行數據的校驗和。例如:
  :1000000018F09FE518F09FE518F09FE518F09FE5C0 這行中的 0xC0
  :1000100018F09FE5805F20B9F0FF1FE518F09FE51D 這行中的 0x1D
  校驗和的算法爲:計算從0x3A 以後(不包括0x3A)的所有各字節的和模256的餘。即各字節二進制算術和,不計超過256的溢出值,然後用0x100減去這個算數累加和,得出得值就是此行得校驗和。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章