Intel HEX文件格式

原创 2004年07月11日 18:37:00

本文由AthlonxpX86(桃源村)翻译<>中的内容为译者加入的内容


问题:

什么是Intel HEX格式?

回答:

Intel HEX文件是记录文本行的ASCII文本文件,下面是Intel HEX文件格式,在Intel HEX文件中,每一行是一个HEX记录由十六进制数组成的机器码或者静态数据,Intel HEX文件经常被用于将程序或数据传输存储到ROM.EPROM,大多数编程器和模拟器使用Intel HEX文件.

记录格式:

一个Intel HEX文件可以包含任意多的十六进制记录,每条记录有五个域,下面是一个记录的格式.

:llaaaatt[dd...]cc

每一组字母是独立的一域,每一个字母是一个十六进制数字,每一域至少由两个十六进制数字组成,下面是字节的描述.

:?冒号是每一条Intel HEX记录的开始

ll?是这条记录的长度域,他表示数据(dd)的字节数目.

aaaa?是地址域,他表示数据的起始地址<如果是数据记录这表示将要烧录的这条记录中的数据在EPROM中的偏移地址,对于不支持扩展段地址和扩展线性地址的如89C51,这就是此条记录的起始地址>
tt?这个域表示这条HEX记录的类型,他有可能是下面这几种类型
00 ----数据记录<要分清楚这几种记录类型,后面会经常出现,不要搞混了>
01 ----文件结束记录
02 ----扩展段地址记录
04 ----扩展线性地址记录

dd?是数据域,表示一个字节的数据,一个记录可能有多个数据字节,字节数目可以查看ll域的说明

cc?是效验和域,表示记录的效验和,计算方法是将本条记录冒号开始的所有对字母<不包括本效验字和冒号>所表示的十六进制数字<一对字母表示一个十六进制数,这样的一个十六进制数为一个字节>都加起来然后模除256得到的余数最后求出余数的补码即是本效验字节cc.
<例如:
:0300000002005E9D
cc=0x01+NOT((0x03+0x00+0x00+0x00+0x02+0x00+0x5E)%0x100)=0x01+0x9C=0x9D
C语言描述:
UCHAR cc;
cc=(UCHAR)~(0x03+0x00+0x00+0x00+0x02+0x00+0x5E);
cc++;
>


数据记录

Intel HEX文件由若干个数据记录组成,一个数据记录以一个回车和一个换行结束<回车为0x0d换行为0x0a>

比如下面的一条数据记录
:10246200464C5549442050524F46494C4500464C33
10是此行记录数据的字节数目
2462是数据在内存<将要烧写的eprom地址>中的起始地址
00是记录类型00(是一个数据记录)
464C到464C是数据
33是此行记录的效验和


扩展线性地址记录(HEX386)
扩展线性地址记录也可以认为是32为地址记录和HEX386记录,这个纪录包含高16(16-31位)位数据地址,这种扩展的线性记录总是有两个字节数据,像下面这样:

:02000004FFFFFC
02是记录的数据字节数目
0000是地址域这在扩展地址记录中总是0000
04是记录类型04(扩展地址记录)
FFFF是高16位地址
FC是记录效验和,计算方法如下:
01h + NOT(02h + 00h + 00h + 04h + FFh + FFh)

当一个扩展线性地址记录被读到后,扩展线性地址记录的数据区域将被保存并应用到后面从Intel HEX文件中读出的记录,这个扩展线性记录一直有效,直到读到下一个扩展线性记录.


绝对内存地址 = 数据记录中的地址? +? 移位后的扩展线性地址

????????????????????? |???????????????????? |

??????? 数据记录中的地址域?? 移位后扩展线性地址记录中的地址域

下面举例说明这个过程

从数据记录的地址域得到地址????? ?????????? 2462
从扩展线性地址记录的地址域得到地址??????????? FFFF
????????????????????????????????????????????? --------
绝对内存地址?????????????????????? ?????? FFFF2462


?

扩展段地址记录 (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文件必须有一个文件结束记录,这个记录的类型域必须是01,一个EOF记录总是这样:
:00000001FF
00是记录中数据字节的数目
0000这个地址对于EOF记录来说无任何意义
01记录类型是01(文件结束记录标示)
FF是效验和计算如下
01h + NOT(00h + 00h + 00h + 01h).

?

Intel HEX文件解析

最近有一个需求就是为Arduino开发板做一个基于蓝牙的无线烧录程序。目前的Arduino程序都是通过USB线连接到电脑的主机上,实际的传输过程是基于USB协议的,这个过程还是比较麻烦的。因为每次的编...
  • u011000290
  • u011000290
  • 2016年04月05日 17:22
  • 3328

intel hex文件格式整理

源于前几天想扩展51单片机的外部ROM,网上能搜索到的扩展方式都是将EA引脚接地,让MCU上电后从外部ROM开始执行。但查看芯片手册,明明说EA为高时,程序从片内ROM执行,当执行到0x1000时(标...
  • lixiangminghate
  • lixiangminghate
  • 2014年12月07日 13:24
  • 826

intel hex文件格式

什么是 Intel HEX 文件格式 Intel HEX 文件是遵循 Intel HEX 文件格式的 ASCII 文本文件。在 Intel HEX 文件的每一行都包含了一个 HEX 记录。这些记录是由...
  • dashixiong97
  • dashixiong97
  • 2016年03月18日 11:39
  • 72

Intel HEX文件格式

最近在使用keil编译TI的一款M3芯片,keil编译出来的Hex文件符合Intel HEX格式。在此总结一下Intel HEX文件格式。Intel HEX文件格式的文本由ASCII文本文件构成。每一...
  • pengfei240
  • pengfei240
  • 2016年11月06日 20:39
  • 199

Intel HEX文件格式说明

Intel HEX文件是记录文本行的ASCII文本文件,在Intel HEX文件中,每一行是 一个HEX记录,由十六进制数组成的机器码或者数据常量。Intel HEX文件经常被用于将程序或数据传输存...
  • booksyhay
  • booksyhay
  • 2014年07月09日 14:11
  • 1089

HEX文件格式详解

Hex文件是可以烧录到MCU中,被MCU执行的一种文件格式。如果用记事本打开可发现,整个文件以行为单位,每行以冒号开头,内容全部为16进制码(以ASCII码形式显示)。Hex文件可以按照如下的方式进行...
  • GSH_Hello_World
  • GSH_Hello_World
  • 2016年09月06日 17:14
  • 1258

HEX文件格式解析

来自:http://blog.csdn.net/GZFStudy/archive/2008/09/03/2873814.aspx Intel HEX 文件是由一行行符合Intel HEX 文件格式...
  • a1037488611
  • a1037488611
  • 2015年01月31日 12:11
  • 2899

HEX文件格式详解

转载地址:http://www.forwhat.cn/post-240.html Hex文件是可以烧录到MCU中,被MCU执行的一种文件格式。如果用记事本打开可发现,整个文件以行为单位,每行...
  • u012587637
  • u012587637
  • 2017年02月10日 10:50
  • 683

浅析STM32的hex文件

前段时间需要用到BIN文件 随便把HEX文件也了解了一下 参考查阅了一些网上资料,如有雷同除了巧合还有借鉴参考。。。 正题:HEX文件格式如下 [数据长度1Byte][数据地址2Byte][数据类型1...
  • lincheng15
  • lincheng15
  • 2016年06月29日 11:34
  • 1655

.hex 文件详解 stm32

我们先来详细分析“方法一”的操作: 1.我们设置编译 程序的编译器(如图),这个设置意思是把程序下载到flash 的 0x0800 0000开头的位置,然后编译程序 2.编译完程序后,在工程...
  • yx_l128125
  • yx_l128125
  • 2013年10月30日 11:59
  • 11731
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Intel HEX文件格式
举报原因:
原因补充:

(最多只允许输入30个字)