資源描述:
《如何讀懂hex文件.doc》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、什么是IntelHEX文件格式IntelHEX文件是遵循IntelHEX文件格式的ASCII文本文件。在IntelHEX文件的每一行都包含了一個(gè)HEX記錄。這些記錄是由一些代表機(jī)器語言代碼和常量的16進(jìn)制數(shù)據(jù)組成的。IntelHEX文件常用來傳輸要存儲(chǔ)在ROM或者EPROM中的程序和數(shù)據(jù)。大部分的EPROM編程器能使用IntelHEX文件。IntelHEX由任意數(shù)量的十六進(jìn)制記錄組成。每個(gè)記錄包含5個(gè)域,它們按以下格式排列:StartCode?每個(gè)IntelHEX記錄都由冒號(hào)開頭Bytecount是數(shù)據(jù)長(zhǎng)度域,它代表記錄當(dāng)中數(shù)據(jù)字節(jié)的數(shù)量Addr
2、ess是地址域,它代表記錄當(dāng)中數(shù)據(jù)的起始地址Recordtype是代表HEX記錄類型的域,它可能是以下數(shù)據(jù)當(dāng)中的一個(gè):00-數(shù)據(jù)記錄01-文件結(jié)束記錄02-擴(kuò)展段地址記錄03-開始段地址記錄04-擴(kuò)展線性地址記錄05-開始線性地址記錄Data是數(shù)據(jù)域,一個(gè)記錄可以有許多數(shù)據(jù)字節(jié).記錄當(dāng)中數(shù)據(jù)字節(jié)的數(shù)量必須和數(shù)據(jù)長(zhǎng)度域中指定的數(shù)字相符Checksum是校驗(yàn)和域,它表示這個(gè)記錄的校驗(yàn)和.校驗(yàn)和的計(jì)算是通過將記錄當(dāng)中所有十六進(jìn)制編碼數(shù)字對(duì)的值相加,以256為模進(jìn)行以下補(bǔ)足。HEX文件以行為單位。每行以字符?‘:’(0x3a)開頭,以回車換行符0x0d,
3、0x0a為結(jié)束。每行開始和結(jié)束之間的所有內(nèi)容,都是以字符形式表現(xiàn)的。例如數(shù)據(jù)如果是?0x1A?,那么轉(zhuǎn)換到HEX格式的行里面就是0x310x41。如果數(shù)據(jù)是16bit的,例如地址,則先顯示高位,后顯示底位。例如?0x1234,轉(zhuǎn)換成HEX格式文件后變成?0x310x320x330x34,顯示出來以后就是1234。將數(shù)據(jù)部分內(nèi)容每2個(gè)字符看做一個(gè)HEX數(shù)據(jù),例如::020000040000FA,?我把它看做?0x020x000x000x040x000x000xFA第一個(gè)?0x02?為數(shù)據(jù)長(zhǎng)度。緊跟著后面的0x000x00?為地址。再后面的0x04為
4、數(shù)據(jù)類型,類型共分一下幾類:'00'DataRecord'01'EndofFileRecord'02'ExtendedSegmentAddressRecord'03'StartSegmentAddressRecord'04'ExtendedLinearAddressRecord'05'StartLinearAddressRecord???????然后,接著0x04后面的兩個(gè)?0x000x00就是數(shù)據(jù)。最后一個(gè)0xFA是校驗(yàn)碼。???????HEX文件的每一行都是這樣的格式:<0x3a>[數(shù)據(jù)長(zhǎng)度1Byte][數(shù)據(jù)地址2Byte][數(shù)據(jù)類型1Byt
5、e][數(shù)據(jù)nByte][校驗(yàn)1Byte]<0x0d><0x0a>?在例如::1000000018F09FE518F09FE518F09FE518F09FE5C0安裝上面的數(shù)據(jù)行格式分析如下:<0x3a>?[數(shù)據(jù)長(zhǎng)度1Byte]10[數(shù)據(jù)地址2Byte]0000[數(shù)據(jù)類型1Byte]00[數(shù)據(jù)nByte]18F09FE518F09FE518F09FE518F09FE5[校驗(yàn)1Byte]C0<0x0d>?<0x0a>??每行中的數(shù)據(jù)并不是一定有的,第二個(gè)直接的數(shù)據(jù)長(zhǎng)度為0,那么這行就沒有數(shù)據(jù)。由于每行標(biāo)識(shí)數(shù)據(jù)地址的只有2Byte,所以最大只能到64K
6、,為了可以保存更大數(shù)據(jù)地址數(shù)據(jù),就有了ExtendedLinearAddressRecord。如果這行的數(shù)據(jù)類型是0x04,那么,這行的數(shù)據(jù)就是隨后數(shù)據(jù)的基地址。例如::020000040004F6:1000000018F09FE518F09FE518F09FE518F09FE5C0:1000100018F09FE5805F20B9F0FF1FE518F09FE51D第一行,是ExtendedLinearAddressRecord,里面的基地址是0x0004,第二行是DataRecord,里面的地址值是0x0000。那么數(shù)據(jù)18F09FE518F
7、09FE518F09FE518F09FE5要寫入FLASH中的地址為(0x0004<<16)0x0000,也就是寫入FLASH的0x40000這個(gè)地址。同樣,第三行的數(shù)據(jù)的寫入地址為0x40010。當(dāng)一個(gè)HEX文件的數(shù)據(jù)超過64k的時(shí)候,文件中就會(huì)出現(xiàn)多個(gè)ExtendedLinearAddressRecord。EndofFileRecord?行是每一個(gè)HEX文件的最后一行。例如::00000001FF這樣的一行數(shù)據(jù)內(nèi)容是固定的,數(shù)據(jù)長(zhǎng)度為0,地址為0。?校驗(yàn)值:每一行的最后一個(gè)值為此行數(shù)據(jù)的校驗(yàn)和。例如::1000000018F09FE518F0
8、9FE518F09FE518F09FE5C0?這行中的?0xC0:1000100018F09FE5805F20B9F0FF1FE518F