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


在單片機開發中HEX文件和BIN文件是非常常見的燒寫文件格式,以常用開發環境Keil為例,分別創建HEX和BIN文件,比如:

1、創建HEX:在Keil里面可以通過勾選【魔法棒>Output>Creat HEX File】讓工程輸出HEX文件。

2、創建BIN:在Keil中在【魔法棒>User>After Build/Rebuild】標簽下勾選Run #1,同時在其對應的User Command文本框中輸入

 fromelf --bin --output=@L.bin !L 編譯后就會輸出BIN文件。

 

言歸正傳,先簡單描述下HEX(左邊)和BIN(右邊)文件的區別:

1、HEX文件

HEX文件中同時包含的數據和地址信息,所以  在燒寫或下載HEX文件的時候,一般都不需要用戶指定地址。

2、BIN文件

BIN文件只有純粹的數據(代碼)信息,並不包含地址,所以燒寫BIN時就需要指定燒寫地址,一般可以在燒寫工具上修改。

下面看一個Keil下生成的HEX和BIN文件的部分代碼:

HEX文件內容都是ASCII編碼得到的,可以用本本編輯器直接打開,BIN文件不能用編輯器直接查看,可以把它轉換成16進制然后顯示(如在notepad++下裝一個插件就好:插件安裝):

很直觀的可以看到BIN文件只是HEX文件中的數據區域。

HEX格式解讀:

  HEX文件每一行代表一個記錄(RECORD),其基本格式如下

  RECORD MARK  冒號(:)  表示起始標志

  LOAD RECLEN  數據長度  即INFO or DATA 段的數據長度

  OFFSET     地址偏移  指定相對基地址的偏移量

  RECTYP     記錄類型  記錄類型:“00”數據記錄 “01”文件結束記錄 '02'擴展段地址記錄 '03'起始段地址記錄 '04'擴展線性地址記錄 '05'開始線性地址記錄

  INFO or DATA    數據信息  校驗值

 首先要注意的時,1-byte中的byte在HEX文件中因為經過ASCII編碼的所以用兩個字符表示一個16進制即一個字節,,在BIN文件中則是直接用一個字節表示這兩字符,上面的圖很直觀

下面以HEX文件第一行為例,它的含義主要有,02表示數據段“6000”長度為2,0000表示偏移地址,04表示記錄類型為擴展線性地址的記錄,6000表示線性地址的基地址並且表示的時[16-31]區域即高位地址,[0-15]區域即低位默認為0。

最后的9A為校驗值,用0x100減去起始標志(:)后面所有字符累加對256的模值得到的結果作為校驗值:0x100-(0x02+0x00+0x00+0x04+0x60+0x00)%256=9A

 

 其他記錄類型類似,可以參考PDF:HEX文件詳解

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM