前段時間需要用到BIN文件 隨便把HEX文件也了解了一下 參考查閱了一些網上資料,如有雷同除了巧合還有借鑒參考。。。
正題:HEX文件格式如下
<0x3a>[數據長度1Byte][數據地址2Byte][數據類型1Byte][數據nByte][校驗1Byte]<0x0d><0x0a>
分析下面具體例子
:020000040800F2
: 這個就是<0x3a>,也就是冒號
02 這個就是說明這行數據區(qū)的數據內容長度,也就是數據內容為兩個字節(jié)在后面的<0800>那里
0000 這個是數據要送往的地址 要看具體數據類型
04 解釋整行數據的數據類型,主要有這幾種
'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 程序起始地址也就是程序入口地址(main)
0800 這個就是基地址(0x0800<<16)
F2 是數據校驗和
<0x0d><0x0a>是換行符號
接下來分析這行數據
:1000000078050020450100084D0100084F01000857
10 就是數據區(qū)的數據長度 一共16個數據 78 05 00 20 45 01 00 08 4D 01 00 08 4F 01 00 08
0000 數據地址
00 數據類型說明
57 數據校驗和
也就是說這行的意思就是說明數據區(qū)<78050020450100084D0100084F010008>應該被寫到(0x0800<<16+0x0000)這個地址
再例如這行
:1000100051010008530100085501000800000000CC
這行數據行上面這行類似,意思是數據區(qū)<51010008530100085501000800000000>應該被寫到(0x0800<<16+0x0010)這個地址
注意:因為STM32的數據存放是以小端格式放的所以10 00 應該被看成0x0010
在文件的末尾有這樣的兩行
:0400000508000131BD
:00000001FF
根據上面的方式分析
:0400000508000131BD 這個是解釋程序的入口地址在0x08000131 這里不懂為何又不以小端格式寫了,雖然這行數據不是傳給MCU的
:00000001FF這個就是文件結束的標志了
HEX和BIN文件的區(qū)別也就是地址上的,BIN文件不帶地址信息例如從上面的hex文件生成的BIN文件