什么是INTEL HEX 文件格式
Intel HEX 文件是遵循Intel HEX 文件格式的ASCII文本文件。在Intel HEX 文件的每一行都包含了一个HEX记录。这些记录是由一些代表机器语言代码和常量的16进制数据组成的。Intel HEX 文件常用来传输要存储在ROM或者EPROM中的程序和数据。大部分的EPROM 编程器能使用Intel HEX 文件。
记录格式:
一个英特尔HEX 文件由一些HEX记录组成。每个记录由如下所示的五部分组成:
:llaaaatt[dd……]cc
:冒号代表了每个记录的开始
Ll:表示了本记录内数据位的数量
Aaaa:数据的起始地址
Tt:代表了HEX文件的记录类型
00:数据记录
01: 结束文件记录
02:扩展段地址记录
04:扩展线性地址记录
Dd:表示数据的一位。数据的位数必须和LL区域的数据相吻合。
Cc:是校验和的校验码。是计算了所有前面的数据的和后,除以256后的余数,一般是补码,所以要对和取反再加一。
扩展线性地址记录(HEX386)
扩展线性地址记录又称为32位地址记录或者HEX386记录。 这些记录包含了数据地址的高16位。T
扩展线性地址记录总是有两个数据,格式如下
:02000004FFFFFC
这里:
02
是记录的数据位数
0000
对于扩展线性地址记录,这部分都是零。
04
代表记录类型是扩展线性地址记录。
FFFF
是地址的高16位。
FC
是以下计算结果的和:01h + NOT(02h + 00h + 00h + 04h + FFh + FFh).
当一个扩展线性地址被读取时,在数据域中的扩展线性地址被储存并且运用到后来的记录的读取中。线性地址保持有效直到被另外一个扩展地址所改变。数据的绝对地址由扩展线性地址和偏移地址相加获得。
下面这个例子可以说明这个过程。
数据记录的地址域中的地址 2462
扩展线性地址记录的数据域 FFFF
--------
绝对地址: FFFF2462
扩展段地址记录(HEX86)
扩展段地址记录(也称HEX86)包括数据地址段的4-19位。扩展段地址记录总有两个数据位。一般如下:
:020000021200EA
这里:
02
在本记录中的数据的位数。
0000
对于扩展段地址记录,这部分都是零。
02
是记录类型,也就是扩展段地址记录。
1200
是地址段
EA
是如下计算的结果01h + NOT(02h + 00h + 00h + 02h + 12h + 00h).
当一个扩展段地址被读取时,储存在数据域的扩展段地址被保存,应用到后面的记录,并且保持有效,直到被新的扩展地址所代替。绝对地址的获得是段地址乘以16加上偏移地址。
以下这个例子说明这个过程。
记录地址域获得的地址: 2462
扩展段地址的数据域: 1200
--------
绝对存储地址: 00014462
结束文件记录:
一个英特尔HEX文件必须由一个EOF文件来结束。一个结束文件记录一般这样出现:
:00000001FF
这里:
00
是记录的数据位数.
0000
是数据在存储器中定位的数据的地址.在结束文件中的地址是没有意义和可以忽略的。一个 0000h 的地址是很典型的。
01
是记录类型,结束文件记录
FF
由这样计算得出:01h + NOT(00h + 00h + 00h + 01h).
举例:
Hex
文件的INTEL格式:这是Intel公司提出的按地址排列的数据信息,数据宽度为字节,所有数
据使用16进制数字表示.
这是一个例子:
:10008000AF5F67F0602703E0322CFA92007780C361
:10 0090 00 89001C6B7EA7CA9200FE10D2AA00477D81
:0B00A00080FA92006F3600C3A00076CB
:00000001FF
第一行,":"符号表明记录的开始. 后面的两个字符表明记录的长度,这里是10h. 后面的四个字
符给出调入的地址,这里是0080h. 后面的两个字符表明记录的类型;
0
数据记录 1 记录文件结束 2 扩展段地址记录 3 开始段地址记录 4 扩展线性地址记录 5
开始线性地址记录
后面则是真正的数据记录, 最后两位是校验和检查,它加上前面所有的数据和为0.
最后一行特殊,总是写成这个样子.
扩展Intel HEX的格式(最大1M): 由于普通的Intel的Hex记录文件只能记录64K的地址范围,
所以大于64K的地址数据要靠扩展Intel HEX格式的文件来记录.对于扩展形式Hex文件,在每
一个64K段的开始加上扩展的段地址规定,下面的数据地址均在这个段内,除非出现新的段地址
定义.
一个段地址定义的格式如下:
起始符长度 起始地址 扩展段标示 扩展段序号 无用 累加和
: 02 0000 02 3000 EC
段地址的标识符是第四组数据02,表示扩展地址段的定义,再后面的以为HEX数表示段的数目,
上面的定义为3,表示段地址是3,所以下面的数据地址是3 + XX(XX是64K段内的地址)