探秘可靠的INTEL HEX 文件格式协议

Posted smartvxworks

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了探秘可靠的INTEL HEX 文件格式协议相关的知识,希望对你有一定的参考价值。

什么是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段内的地址)

以上是关于探秘可靠的INTEL HEX 文件格式协议的主要内容,如果未能解决你的问题,请参考以下文章

Intel HEX文件解析

HEX文件格式

HEX文件和BIN文件格式区别

hex文件转bin格式

hex和bin文件格式的区别

硬件基础之HEX文件格式