纬图虚拟仪器论坛

 找回密码
 立即注册
搜索
查看: 5942|回复: 7

hex文件格式详解

[复制链接]
发表于 2012-8-21 14:46:01 | 显示全部楼层 |阅读模式
什么是IntelHEX文件格式?
Intel HEX文件是由一行行符合Intel HEX文件格式的文本所构成的ASCII文本文件。在Intel HEX文件中,每一行包含一个HEX记录。这些记录由对应机器语言码和/或常量数据的十六进制编码数字组成。IntelHEX文件通常用于传输将被存于ROM或者EPROM中的程序和数据。大多数EPROM编程器或模拟器使用IntelHEX文件。
记录格式
Intel HEX由任意数量的十六进制记录组成。每个记录包含5个域,它们按以下格式排列:
:llaaaatt[dd...]cc
每一组字母对应一个不同的域,每一个字母对应一个十六进制编码的数字。每一个域由至少两个十六进制编码数字组成,它们构成一个字节,就像以下描述的那样:
:
每个IntelHEX记录都由冒号开头.
ll
是数据长度域,它代表记录当中数据字节(dd)的数量.
aaaa
是地址域,它代表记录当中数据的起始地址.
tt
是代表HEX记录类型的域,它可能是以下数据当中的一个:
00 –
数据记录
01 –
文件结束记录
02 –
扩展段地址记录
04 –
扩展线性地址记录
dd
是数据域,它代表一个字节的数据.一个记录可以有许多数据字节.记录当中数据字节的数量必须和数据长度域(ll)中指定的数字相符.
cc
是校验和域,它表示这个记录的校验和.校验和的计算是通过将记录当中所有十六进制编码数字对的值相加,256为模进行以下补足.
数据记录
Intel HEX
文件由任意数量以回车换行符结束的数据记录组成.数据记录外观如下:
:10246200464C5549442050524F46494C4500464C33
其中:
10
是这个记录当中数据字节的数量.
2462
是数据将被下载到存储器当中的地址.
00
是记录类型(数据记录)
464C…464C
是数据.
33
是这个记录的校验和.

扩展线性地址记录(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
文件结束(EOF)记录
Intel HEX
文件必须以文件结束(EOF)记录结束.这个记录的记录类型域的值必须是01.EOF记录外观总是如下:
:00000001FF
其中:
00
是记录当中数据字节的数量.
0000
是数据被下载到存储器当中的地址.在文件结束记录当中地址是没有意义被忽略的.0000h是典型的地址.
01
是记录类型01(文件结束记录)
FF
是这个记录的校验和,计算方法如下:
01h + NOT(00h + 00h + 00h + 01h).
Intel HEX
文件例子:
下面是一个完整的IntelHEX文件的例子:
:10001300AC12AD13AE10AF1112002F8E0E8F0F2244
:10000300E50B250DF509E50A350CF5081200132259
:03000000020023D8
:0C002300787FE4F6D8FD7581130200031D
:10002F00EFF88DF0A4FFEDC5F0CEA42EFEEC88F016
:04003F00A42EFE22CB
:00000001FF

回复

使用道具 举报

发表于 2012-8-21 16:00:27 | 显示全部楼层
学习了      
回复 支持 反对

使用道具 举报

发表于 2012-10-12 10:52:08 | 显示全部楼层
好资料!谢谢分享!!
回复 支持 反对

使用道具 举报

发表于 2012-10-12 15:42:07 | 显示全部楼层
将的很详细,非常好,支持!
回复 支持 反对

使用道具 举报

发表于 2012-10-13 22:03:26 | 显示全部楼层
学习了,楼主辛苦
回复 支持 反对

使用道具 举报

发表于 2012-10-14 09:10:23 | 显示全部楼层
还真么考虑过HEX文件是什么.....
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-10-14 09:16:53 | 显示全部楼层
zhulongfei 发表于 2012-10-14 09:10
还真么考虑过HEX文件是什么.....

等你做程序在线升级的时候就用得到了
回复 支持 反对

使用道具 举报

发表于 2012-10-17 15:17:01 | 显示全部楼层
我发誓要好好学习了。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|纬图虚拟仪器

GMT+8, 2024-12-26 01:06 , Processed in 0.133968 second(s), 14 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表