原创 HEX格式内容含义

2007-12-13 22:06 6876 7 8 分类: MCU/ 嵌入式

HEX文件格式是我们经常遇到的一种文件格式,因为几乎所有的编程烧录文件都为HEX格式。


首先,HEX文件中是包含了地址信息的。这和BIN文件不同,BIN文件中只包含了数据信息。所以我们在烧写或者下载HEX文件的时候,一般不需要我们指定地址,但是在烧写BIN文件的时候,用户是一定要指定地址信息的。


二、HEX文件都是由记录组成的。它的每一行都是一个记录来的。它是由任意数量的十六进制数组成。每个记录包含五个域,它们以以下格式排列的:


aabbbbcc[dd…]ee


上面每一组不同的字母代表不同的一个域,每个字母代表一个十六进制的数字,每一个域至少由两个十六进制编码数字组成,每两个十六进制编码数字组成一个字节。具体描述如下:


1、  每个HEX记录都由冒号开头;


2、  aa表示这个记录中的数据长度域,它代表记录当中数据字节[dd…]的字节数量。<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />


3、  bbbb是地址域,它代表记录当中数据的起始地址。


4、  cc 是代表HEX记录类型的域,它可能是以下数据当中的一个:
00 –
数据记录
01 –
文件结束记录
02 –
扩展段地址记录
04 –
扩展线性地址记录


5、  dd 是数据域,它代表一个字节的数据,一个记录可以有许多数据字节。记录当中数据字节的数量必须和数据长度域(aa)中指定的数字相符。


6、  ee 是校验和域,它表示这个记录的校验和。校验和的计算是通过将记录当中所有十六进制编码数字对的值相加,以256为模进行以下补足。


比如:前面AduC7026LED实验中的HEX文件内容为:


:<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />020000040008F2                              。。。。。。。。。。。。。。。。。。。  1


:1000000018F09FE518F09FE518F09FE518F09FE5C0  。。。。。。。。。。。。。。。。。。。  2


:1000100018F09FE50000A0E118F09FE518F09FE5BB


:100020004000080074030800700308006C03080017


:100030006803080000000000640308006003080073


:1000400078009FE50110A0E3041480E50110A0E30F


:10005000081480E5F410A0E30C1480E560009FE52F


:10006000DBF021E300D0A0E1040040E2D7F021E37F


:1000700000D0A0E1040040E2D1F021E300D0A0E1F3


:10008000040040E2D2F021E300D0A0E1800040E291


:10009000D3F021E300D0A0E1040040E210F021E31E


:1000A00000D0A0E11C009FE5010010E318E09F05CF


:1000B00018E09F1510FF2FE1FEFFFFEAFEE7C046A4


:1000C0000000FFFF900401003D010800B800080097


:1000D000BD0008000000000000000000000000005B


:1000E00000000000AA2108480160012107480160C2


:1000F0005522074802600748016000210648016058


:10010000F4210648016070471004FFFF1404FFFF4C


:100110001804FFFF0404FFFF0804FFFF0C04FFFFA7


:1001200004E005490A1C0139002AFBD1011C0138F1


:100130000029F6D17047C046E8030000664806C8AB


:100140000B1C134305D000230B70491C9142FBD1BB


:10015000F5E76248C01C0323984306C80B1C1343F1


:1001600006D00378401C0B70491C9142F9D1F1E78D


:1001700000B5FFF7B7FFF0235948016899430160C4


:10018000584A59480168114301600F2457480168D3


:10019000A1430160564C5748016821430160534810


:1001A0000168994301605348016811430160524A54


:1001B0004E48016891430160504A4E48016811431E


:1001C00001604F4A49480168914301604D4A4948DE


:1001D0000168114301604C4A4C4801689143016039


:1001E0004B4A4C480168114301604B4A474801683B


:1001F00091430160494A4748016811430160484AF8


:100200004248016891430160464A424801681143EF


:1002100001604549454801604548FFF781FF454970


:10022000454801604248FFF77BFF3F494248016073


:100230003F48FFF775FF41493F4801603C48FFF7E1


:100240006FFF3F493C4801603948FFF769FF3D496E


:100250003D4801603648FFF763FF3C493A4801607A


:100260003348FFF75DFF3A49374801603048FFF7F0


:1002700057FF2D49374801602D48FFF751FF2D49A1


:10028000354801602A48FFF74BFF27493248016093


:100290002748FFF745FF29492F4801602448FFF709


:1002A0003FFF27492C4801602148FFF739FF2549C6


:1002B0002A4801601E48FFF733FF244927480160A0


:1002C0001B48FFF72DFF2249244801601848FFF71B


:1002D00027FF9EE700BDC046D4000800DC000800F0


:1002E00000F4FFFF0000000220F4FFFF0CF4FFFF0A


:1002F0000000000150F4FFFF000F000000000004A8


:1003000000F000000000000800000F0008F4FFFFEC


:100310000000001040F4FFFF0000F000000000208B


:100320000000000F000000400000020024F4FFFF66


:100330002C0100000000010054F4FFFF0000040045


:10034000000008000000100044F4FFFF000020003F


:100350000000400028F4FFFF58F4FFFF48F4FFFFBF


:10036000FEFFFFEAFEFFFFEAFEFFFFEAFEFFFFEAF5


:08037000FEFFFFEAFEFFFFEAB9


:00000001FF


它的第二行为::1000000018F09FE518F09FE518F09FE518F09FE5C0容易知道:


它的ee为:C0,计算过程如下:


C0=0x01+ not(0x10+0x00+0x00+0x00+0x18+0xF0+…+0xE5)


文件结束(EOF)记录
Intel HEX
文件必须以文件结束(EOF)记录结束.这个记录的记录类型域的值必须是01.EOF记录外观总是如下:
:00000001FF
其中:
00
是记录当中数据字节的数量。
0000
是数据被下载到存储器当中的地址.在文件结束记录当中地址是没有意义被忽略的。0000h是典型的地址。
01
是记录类型 01(文件结束记录)
FF
是这个记录的校验和,计算方法如下:
01h + NOT(00h + 00h + 00h + 01h).


扩展线性地址记录(HEX386)
扩展线性地址记录也叫作32位地址记录或HEX386记录.这些记录包含数据地址的高16.扩展线性地址记录总是有两个数据字节,外观如下:
:02000004FFFFFC
其中:
02
是这个记录当中数据字节的数量.
0000
是地址域,对于扩展线性地址记录,这个域总是0000.
04
是记录类型 04(扩展线性地址记录)
FFFF
是地址的高16.
FC
是这个记录的校验和,计算方法如下:
01h + NOT(02h + 00h + 00h + 04h + FFh + FFh).
当一个扩展线性地址记录被读取,存储于数据域的扩展线性地址被保存,它被应用于从Intel HEX文件读取来的随后的记录.线性地址保持有效,直到它被另外一个扩展地址记录所改变.
通过把记录当中的地址域与被移位的来自扩展线性地址记录的地址数据相加获得数据记录的绝对存储器地址.
以下的例子演示了这个过程..
来自数据记录地址域的地址                              2462
扩展线性地址记录的数据域                      + FFFF
                                  ------------
绝对存储器地址                               FFFF2462

扩展段地址记录(HEX86)
扩展段地址记录也叫HEX86记录,它包括4-19位数据地址段.扩展段地址记录总是有两个数据字节,外观如下:
:020000021200EA
其中:
02
是记录当中数据字节的数量.
0000
是地址域.对于扩展段地址记录,这个域总是0000.
02
是记录类型 02(扩展段地址记录)
1200
是地址段.
EA
是这个记录的校验和,计算方法如下:
01h + NOT(02h + 00h + 00h + 02h + 12h + 00h).
当一个扩展段地址记录被读取,存储于数据域的扩展段地址被保存,它被应用于从Intel HEX文件读取来的随后的记录.段地址保持有效,直到它被另外一个扩展地址记录所改变.
通过把记录当中的地址域与被移位的来自扩展段地址记录的地址数据相加获得数据记录的绝对存储器地址.
以下的例子演示了这个过程..
来自数据记录地址域的地址                             2462
扩展段地址记录数据域                      +  1200
                                 ---------
绝对存储器地址                    00014462




文章评论1条评论)

登录后参与讨论

用户130985 2008-1-10 14:34

是对.HEX文件的详细的讲解!

值得一看,谢谢了!

相关推荐阅读
daiqiumiao_806246054 2011-01-06 13:57
linux下yum代理设置
    我们在安装好linux后,经常会使用yum来更新系统,但是系统默认的代理是国外的,国内一般的网络不能访问,这里讲解具体做法,把代理换成国内的。attachment download      ...
daiqiumiao_806246054 2010-12-30 09:48
【转】ORACLE 10g下载地址
Oracle Database 10g Release 2 (10.2.0.1.0) Enterprise/Standard Edition for Microsoft Windows (32-bit...
daiqiumiao_806246054 2010-11-29 11:06
找工作的进来看
如下是我所有的开放性问题回答,希望对大家有帮助!1.      When choosing your first job/employer, what will you consider and wh...
daiqiumiao_806246054 2010-11-29 09:47
中长期规划---螺旋式上升方式修改完善职业之路
一、中长期职业发展的自我准备1、心态上随时做好准备 机会是给有准备的人的------“有准备”是你在做准备的过程中让“别人”认为你“有准备”!别人是包括你现在的老板和别的老板,以及你身边的人!他们对你...
daiqiumiao_806246054 2010-03-17 21:26
移动
分集方式传输损耗和距离关系光纤网络G网...
daiqiumiao_806246054 2010-03-17 09:40
GSM
特点  使用直观  GSM系统有几项重要特点:防盗拷能力佳、网络容量大、手机号码资源丰富、通话清晰、稳定性强不易受干扰、信息灵敏、通话死角少、手机耗电量低。  技术特点  1.频谱效率。由于采用了高效...
我要评论
1
7
关闭 站长推荐上一条 /2 下一条