Intel HEX文件是由一行行符合Intel HEX文件格式的文本所構(gòu)成的ASCII文本文件。在Intel HEX文件中,每一行包含一個HEX記錄。這些記錄由對應(yīng)機器語言碼和/或常量數(shù)據(jù)的十六進制編碼數(shù)字組成。Intel HEX文件通常用于傳輸將被存于ROM或者EPROM中的程序和數(shù)據(jù)。大多數(shù)EPROM編程器或模擬器使用Intel HEX文件。
#HEX記錄格式
Intel HEX由任意數(shù)量的十六進制記錄組成。每個記錄包含5個域, 它們按以下格式排列[:LLAAAATT[DD…]CC]。每一組字母對應(yīng)一個不同的域, 每一個字母對應(yīng)一個十六進制編碼的數(shù)字。每一個域由至少兩個十六進制編碼數(shù)字組成, 它們構(gòu)成一個字節(jié)。
詳細解釋如下:
:每個Intel HEX記錄都由冒號開頭。
LL是數(shù)據(jù)長度域,它代表記錄當中數(shù)據(jù)字節(jié)(dd)的數(shù)量。
AAAA是地址域,它代表記錄當中數(shù)據(jù)的起始地址。
TT是代表HEX記錄類型的域,它可能是以下數(shù)據(jù)當中的一個:
00– 數(shù)據(jù)記錄
01– 文件結(jié)束記錄
02– 擴展段地址記錄
04– 擴展線性地址記錄
DD是數(shù)據(jù)域,它代表一個字節(jié)的數(shù)據(jù)。一個記錄可以有許多數(shù)據(jù)字節(jié),記錄當中數(shù)據(jù)字節(jié)的數(shù)量必須和數(shù)據(jù)長度域LL中指定的數(shù)字相符。
CC是校驗和域,它表示這個記錄的校驗和。校驗和的計算是通過將記錄當中所有十六進制編碼數(shù)字對的值相加,以256為模進行以下補足。也就是說LLAAAATT[DD…]CC一共的校驗和永遠為0。
#數(shù)據(jù)記錄格式
Intel HEX文件由任意數(shù)量以回車換行符結(jié)束的數(shù)據(jù)記錄組成.
數(shù)據(jù)記錄外觀如下:
[:10246200464C5549442050524F46494C4500464C33]
其中:
10是這個記錄當中數(shù)據(jù)字節(jié)的數(shù)量。
2462是數(shù)據(jù)將被下載到存儲器當中的地址。
00是記錄類型(數(shù)據(jù)記錄)。
464C…464C是數(shù)據(jù)。
33是這個記錄的校驗和的補足碼。
#擴展線性地址記錄(HEX386)格式
擴展線性地址記錄也叫作32位地址記錄或HEX386記錄。這些記錄包含數(shù)據(jù)地址的高16位。擴展線性地址記錄總是有兩個數(shù)據(jù)字節(jié)。
外觀如下:
[:02000004FFFFFC]
其中:
02是這個記錄當中數(shù)據(jù)字節(jié)的數(shù)量。
0000是地址域,對于擴展線性地址記錄,這個域總是0000。
04是記錄類型 04(擴展線性地址記錄)。
FFFF是地址的高16位。
FC是這個記錄的校驗和的補足碼。
當一個擴展線性地址記錄被讀取,存儲于數(shù)據(jù)域的擴展線性地址被保存,它被應(yīng)用于從Intel HEX文件讀取來的隨后的記錄。線性地址保持有效,直到它被另外一個擴展地址記錄所改變。
通過把記錄當中的地址域與被移位(16位)的來自擴展線性地址記錄的地址數(shù)據(jù)相加獲得數(shù)據(jù)記錄的絕對存儲器地址。以下的例子演示了這個過程:
來自數(shù)據(jù)記錄地址域的地址 2462 擴展線性地址記錄的數(shù)據(jù)域*10000H + FFFF0000 --------------------- 絕對存儲器地址 FFFF2462
#擴展段地址記錄(HEX86)
擴展段地址記錄也叫HEX86記錄,它包括4-19位數(shù)據(jù)地址段。擴展段地址記錄總是有兩個數(shù)據(jù)字節(jié)。
外觀如下:
[:020000021200EA]
其中:
02是記錄當中數(shù)據(jù)字節(jié)的數(shù)量。
0000是地址域,對于擴展段地址記錄,這個域總是0000。
02是記錄類型02(擴展段地址記錄)。
1200是地址段。
EA是這個記錄的校驗和的補足碼。
當一個擴展段地址記錄被讀取,存儲于數(shù)據(jù)域的擴展段地址被保存,它被應(yīng)用于從Intel HEX文件讀取來的隨后的記錄。段地址保持有效,直到它被另外一個擴展地址記錄所改變。
通過把記錄當中的地址域與被移位(4位)的來自擴展段地址記錄的地址數(shù)據(jù)相加獲得數(shù)據(jù)記錄的絕對存儲器地址。以下的例子演示了這個過程:來自數(shù)據(jù)記錄地址域的地址 2462
擴展段地址記錄數(shù)據(jù)域*10H + 12000 ----------------- 絕對存儲器地址 00014462
#文件結(jié)束(EOF)記錄。
Intel HEX文件必須以文件結(jié)束(EOF)記錄結(jié)束。這個記錄的記錄類型域的值必須是01。EOF記錄外觀總是如下
[:00000001FF]
其中:
00是記錄當中數(shù)據(jù)字節(jié)的數(shù)量。
0000是數(shù)據(jù)被下載到存儲器當中的地址。在文件結(jié)束記錄當中地址是沒有意義被忽略的。0000H是典型的地址。
01是記錄類型01(文件結(jié)束記錄)。
FF是這個記錄的校驗和的補足碼。
#Intel HEX文件例子
下面是一個完整的Intel HEX文件的例子:
:10001300AC12AD13AE10AF1112002F8E0E8F0F2244 :10000300E50B250DF509E50A350CF5081200132259 :03000000020023D8 :0C002300787FE4F6D8FD7581130200031D :10002F00EFF88DF0A4FFEDC5F0CEA42EFEEC88F016 :04003F00A42EFE22CB :00000001FF
看了這個例子,我自己也打開了之前寫的51單片機的hex文件:
:2000000002000E75210675225B75230200267B007C00900090758140758901758CF1758A45 :2000200028D28C75A882758CF1758A280BBBFA157B00EC75F00A8485F020F5210CBC64027A :200040007C00120051C0E0C0D0120051D0D0D0E032E52193F580D2A2C2A27580FED2A3C29C :20006000A3120087E52093F580D2A2C2A27580FDD2A3C2A3120087227D327E287FF81151AA :1A008000DFFEDEF8DDF4227E047FF8DFFEDEFA223F065B4F666D7D077F6FBC :00000001FF
#英文原文
QUESTION:WhatistheIntelHEXfileformat? ANSWER: 8.1TheIntelHEXfileisanASCIItextfilewithlinesoftextthatfollowtheIntelHEXfileformat.EachlineinanIntelHEXfilecontainsoneHEXrecord.Theserecordsaremadeupofhexadecimalnumbersthatrepresentmachinelanguagecodeand/orconstantdata.IntelHEXfilesareoftenusedtotransfertheprogramanddatathatwouldbestoredinaROMorEPROM.MostEPROMprogrammersoremulatorscanuseIntelHEXfiles. 8.2RecordFormat. AnIntelHEXfileiscomposedofanynumberofHEXrecords.Eachrecordismadeupoffivefieldsthatarearrangedinthefollowingformat: :LLAAAATT[DD…]CC Eachgroupofletterscorrespondstoadifferentfield,andeachletterrepresentsasinglehexadecimaldigit.Eachfieldiscomposedofatleasttwohexadecimaldigits-whichmakeupabyte-asdescribedbelow: 8.2.1:isthecolonthatstartseveryIntelHEXrecord. 8.2.2LListherecord-lengthfieldthatrepresentsthenumberofdatabytes(dd)intherecord. 8.2.3AAAAistheaddressfieldthatrepresentsthestartingaddressforsubsequentdataintherecord. 8.2.4TTisthefieldthatrepresentstheHEXrecordtype,whichmaybeoneofthefollowing: 8.2.4.100-datarecord 8.2.4.201-end-of-filerecord 8.2.4.302-extendedsegmentaddressrecord 8.2.4.404-extendedlinearaddressrecord 8.2.5DDisadatafieldthatrepresentsonebyteofdata.Arecordmayhavemultipledatabytes.Thenumberofdatabytesintherecordmustmatchthenumberspecifiedbythellfield. 8.2.6CCisthechecksumfieldthatrepresentsthechecksumoftherecord.Thechecksumiscalculatedbysummingthevaluesofallhexadecimaldigitpairsintherecordmodulo256andtakingthetwo'scomplement. 8.3DataRecords. TheIntelHEXfileismadeupofanynumberofdatarecordsthatareterminatedwithacarriagereturnandalinefeed.Datarecordsappearasfollows: :10246200464C5549442050524F46494C4500464C33 where: 8.3.110isthenumberofdatabytesintherecord. 8.3.22462istheaddresswherethedataaretobelocatedinmemory. 8.3.300istherecordtype00(adatarecord). 8.3.4464C...464Cisthedata. 8.3.533isthechecksumoftherecord. 8.4ExtendedLinearAddressRecords(HEX386). Extendedlinearaddressrecordsarealsoknownas32-bitaddressrecordsandHEX386records.Theserecordscontaintheupper16bits(bits16-31)ofthedataaddress.Theextendedlinearaddressrecordalwayshastwodatabytesandappearsasfollows: :02000004FFFFFC where: 8.4.102isthenumberofdatabytesintherecord. 8.4.20000istheaddressfield.Fortheextendedlinearaddressrecord,thisfieldisalways0000. 8.4.304istherecordtype04(anextendedlinearaddressrecord). 8.4.4FFFFistheupper16bitsoftheaddress. 8.4.5FCisthechecksumoftherecordandiscalculatedas01h+NOT(02h+00h+00h+04h+FFh+FFh). 8.4.6Whenanextendedlinearaddressrecordisread,theextendedlinearaddressstoredinthedatafieldissavedandisappliedtosubsequentrecordsreadfromtheIntelHEXfile.Thelinearaddressremainseffectiveuntilchangedbyanotherextendedaddressrecord. 8.4.7Theabsolute-memoryaddressofadatarecordisobtainedbyaddingtheaddressfieldintherecordtotheshiftedaddressdatafromtheextendedlinearaddressrecord.Thefollowingexampleillustratesthisprocess.. Addressfromthedatarecord'saddressfield2462 ExtendedlinearaddressrecorddatafieldFFFF ----------- Absolute-memoryaddressFFFF2462 8.5ExtendedSegmentAddressRecords(HEX86). Extendedsegmentaddressrecords-alsoknownasHEX86records-containbits4-19 ofthedataaddresssegment.Theextendedsegmentaddressrecordalwayshastwo databytesandappearsasfollows: :020000021200EA where: 8.5.102isthenumberofdatabytesintherecord. 8.5.20000istheaddressfield.Fortheextendedsegmentaddressrecord,thisfieldisalways0000. 8.5.302istherecordtype02(anextendedsegmentaddressrecord). 8.5.41200isthesegmentoftheaddress. 8.5.5EAisthechecksumoftherecordandiscalculatedas01h+NOT(02h+00h+00h+02h+12h+00h). 8.5.6Whenanextendedsegmentaddressrecordisread,theextendedsegmentaddressstoredinthedatafieldissavedandisappliedtosubsequentrecordsreadfromtheIntelHEXfile.Thesegmentaddressremainseffectiveuntilchangedbyanotherextendedaddressrecord. 8.5.7Theabsolute-memoryaddressofadatarecordisobtainedbyaddingtheaddressfieldintherecordtotheshifted-addressdatafromtheextendedsegmentaddressrecord.Thefollowingexampleillustratesthisprocess. Addressfromthedatarecord'saddressfield2462 Extendedsegmentaddressrecorddatafield1200 -------- Absolutememoryaddress00014462 8.6End-of-File(EOF)Records. AnIntelHEXfilemustendwithanend-of-file(EOF)record.Thisrecordmusthavethevalue01intherecordtypefield.AnEOFrecordalwaysappearsasfollows: :00000001FF where: 8.6.100isthenumberofdatabytesintherecord. 8.6.20000istheaddresswherethedataaretobelocatedinmemory.Theaddressinend-of-filerecordsismeaninglessandisignored.Anaddressof0000histypical. 8.6.301istherecordtype01(anend-of-filerecord). 8.6.4FFisthechecksumoftherecordandiscalculatedas01h+NOT(00h+00h+00h+01h). 8.7ExampleIntelHEXFile. FollowingisanexampleofacompleteIntelHEXfile: :10001300AC12AD13AE10AF1112002F8E0E8F0F2244 :10000300E50B250DF509E50A350CF5081200132259 :03000000020023D8 :0C002300787FE4F6D8FD7581130200031D :10002F00EFF88DF0A4FFEDC5F0CEA42EFEEC88F016 :04003F00A42EFE22CB :00000001FF審核編輯:湯梓紅
-
intel
+關(guān)注
關(guān)注
19文章
3482瀏覽量
185918 -
HEX文件
+關(guān)注
關(guān)注
0文章
26瀏覽量
12747 -
文件
+關(guān)注
關(guān)注
1文章
565瀏覽量
24727 -
EPROM
+關(guān)注
關(guān)注
3文章
124瀏覽量
54406 -
HEX
+關(guān)注
關(guān)注
0文章
37瀏覽量
16829
原文標題:Hex文件內(nèi)容詳細解析
文章出處:【微信號:eng2mot,微信公眾號:汽車ECU開發(fā)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論