hex文件格式

Hex文件是可以燒寫到單片機中,被單片機執行的一種文件格式,生成Hex文件的方式由很多種,可以通過不同的編譯器將C程序或者彙編程序編譯生成hex。 
  Hex文件如果用特殊的程序來查看(一般記事本就可以實現)。打開後可發現,整個文件以行爲單位,每行以冒號開頭,內容全部爲16進制碼(以ASCII碼形式顯示)。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減去這個算數累加和,得出得值就是此行得校驗和。

轉自:http://blog.163.com/wl5201314_%40126/blog/static/74488545201110412335919/   在此感謝!!!

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