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