Intel HEX文件格式
HEX文件格式
Intel HEX文件是记录文本行的ASCII文本文件,在Intel HEX文件中,每一行是一个HEX记录,由十六进制数组成的机器码或者数据常量。
Intel HEX文件经常被用于将程序或数据传输存储到ROM、EPROM,大多数编程器和模拟器使用Int el HEX文件。
很多编译器的支持生成HEX格式的烧录文件,尤其是Keil c。
但是编程器能够下载的往往是BIN格式,因此HEX转BIN是每个编程器都必须支持的功能。
HEX格式文件以行为单位,每行由“:”(0x3a)开始,以回车键结束(0x0d, 0x0a)。
行内的数据都是由两个字符表示一个16进制字节,比如”01”就表示数0 x01;”0a”,就表示0x0a。
对于16位的地址,则高位在前低位在后,比如地址0x010a,在HEX格式文件中就表示为字符串”010a”。
下面为HEX文件中的一行::10000000FF0462FF051EFF0A93FF0572FF0A93FFBC“:”表示一行的开始。
“:”后的第1,2个字符“10”表示本行包含的数据的长度,这里就是0x10即16个。
第3,4,5,6个字符“0000”表示数据存储的起始地址,这里表示从0x0000地址开始存储16个数据,其中高位地址在前,低位地址在后。
第7,8个字符“00”表示数据的类型。
该类型总共有以下几种:00 ----数据记录01 ----文件结束记录02 ----扩展段地址记录04 ----扩展线性地址记录这里就是0x00即为普通数据记录。
自后的32个字符就是本行包含的数据,每两个字符表示一个字节数据,总共有16个字节数据跟行首的记录的长度相一致。
最后两个字符表示校验码。
每个HEX格式的最后一行都是固定为::00000001FF以上的信息其实就足够进行HEX转BIN格式的程序的编写。
首先我们只处理数据类型为0x00及0x01的情况。
0x02表示对应的存储地址超过了64K,由于我的编程器只针对64K以下的单片机,因此在次不处理,0x04也是如此。
基础知识hex文件格式详解
基础知识hex文件格式详解hex文件格式总结•什么是hex文件?•文件格式•指令类型(Record type)•校验和o:04 02B0 00 92020008 AEo:04 0000 05 08000135 B9o:00 0000 01 FF•hex转bin文件什么是hex文件?hex是用于文件格式是intel规定的标准,总体来说,hex是文本文件,经常在微控制器的固件开发中看到hex的身影,例如基于STM32F103硬件,使用MDK开发的话,该软件就可以生成hex文件;如下图所示;这是一个简单的STM32标准外设库工程,代码里什么都没做,具体如下;#include 'stm32f10x.h'#include <stdio.h>/*** @brief Main program.* @param None* @retval None*/int main(void){/* Add your application code here*//* Infinite loop */while (1){}}最终,我们打开生成的hex文件,可以看到,这的确是一个文本文件,所以,直接将hex文件烧入MCU的Flash还是不行的,除非烧录软件可以把hex文件转成bin文件,然后再进行烧录;:020*********F2:10000000000400204901000899010008950100083A:10001000970100089101000881020008000000001B:100020000000000000000000000000009D0100082A:1000300093010008000000009B010008290200084D:100040006301000863010008630100086301000800:1000500063010008630100086301000863010008F0:1000600063010008630100086301000863010008E0:1000700063010008630100086301000863010008D0:10008000630100086301000863010008000000002C:1000900000000000000000000000000063010008F4:1000A00063010008630100086301000863010008A0:1000B0006301000863010008630100086301000890:1000C0006301000863010008630100086301000880:1000D0006301000863010008630100086301000870 :1000E0006301000863010008630100086301000860 :1000F0006301000863010008000000000000000028 :100100000000000000000000630100086301000817 :10011000630100086301000863010008630100082F :10012000630100086301000863010008630100081F :1001300063010008DFF80CD000F018F80048004711 :10014000A102000800040020064880470648004736 :10015000FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE777:10016000FEE7FEE72D02000835010008064C074DAA :1001700006E0E06840F0010394E807009847103477 :10018000AC42F6D3FFF7DAFFA4020008B40200087D :10019000FEE77047FEE7FEE77047704770470000D4 :1001A0000CB500211F4801910091026842F4803291 :1001B00002604FF4A063026802F400320092019AD8 :1001C000521C0192009A12B9019A9A42F3D1026824 :1001D000920324D50121009141684160416841604A :1001E00041684160416821F47C114160416841F4FB :1001F00098114160016841F08071016001688901D6 :10020000FCD5416821F003014160416841F00201E1 :1002100041604168C1F381010229FAD10CBD00910E :100220000CBD00000010024070470000104810B5DF :10023000016841F00101016041680E4A11404160CE :1002400001680D4A11400160016821F480210160BC :10025000416821F4FE0141604FF41F0181600021DB :10026000C162FFF79DFF05494FF00060086010BDB7 :10027000001002400000FFF8FFFFF6FE08ED00E06E :10028000FEE702E008C8121F08C1002AFAD1704731 :100290007047002001E001C1121F002AFBD1704706 :1002A000FEE70000B4020008000000200004000087:0402B00092020008AE:0400000508000135B9:00000001FF文件格式通过上面的文件,我们不难发现,hex文件每行都由:作为起始码,这是显而易见的,而后面这些乱七八糟的数据又代表什么呢?先看下面这张图;hexformat这个和一般的通讯协议类似,一帧数据往往包括起始码,数据长度,数据类型,数据,校验码等等,所以hex文件也不例外,这里它包含几个特点,下面参考了wiki;•起始码:每行数据作为一帧,并由:作为起始码;•字节长度:两个十六进制数字(一对十六进制数字),指示数据字段中的字节数(十六进制数字对)。
单片机烧录用的hex文件,文件格式解析(转载)
单⽚机烧录⽤的hex⽂件,⽂件格式解析(转载)含有单⽚机的电⼦产品在量产的时候会⽤到.hex⽂件或者.bin。
hex是⼗六进制的,包含地址信息和数据信息,⽽bin⽂件是⼆进制的,只有数据⽽不包含地址。
任何⽂件都有⼀定的格式规范,hex⽂件同样具有完整的格式规范。
今天和⼤家分享⼀下,hex是如何解析的。
⼀、hex⽂件解析hex⽂件可以通过UltraEdit、Notepad++、记事本等⼯具打开,⽤Notepad++打开之后会看到如下数据内容。
使⽤Notepad++打开后会不同含义的数据其颜⾊不同。
每⾏数据都会有⼀个冒号开始,后⾯的数据由:数据长度、地址、标识符、有效数据、校验数据等构成。
以上图的第⼀⾏为例,进⾏解析:第1个字节10,表⽰该⾏具有0x10个数据,即16个字节的数据;第2、3个字节C000,表⽰该⾏的起始地址为0xC000;第4个字节00,表⽰该⾏记录的是数据;第5-20个字节,表⽰的是有效数据;第21个字节73,表⽰前⾯数据的校验数据,校验⽅法:0x100-前⾯字节累加和;其中,第4个字节具有5种类型:00-05,含义如下:字段含义00表⽰后⾯记录的是数据01表⽰⽂件结束02表⽰扩展段地址03表⽰开始段地址04表⽰扩展线性地址05表⽰开始线性地址单⽚机的hex⽂件以00居多,都⽤来表⽰数据。
hex⽂件的结束部分如下图所⽰。
最后⼀⾏的01表⽰⽂件结束了,最后的FF表⽰校验数据,由0x100-0x01=0xFF得来。
⼆、扩展地址细⼼的同学可能发现了,上⾯的地址都是两个字节,范围从0x000-0xFFFF,如果地址是0x17FFFF该怎么办呢?这就要⽤到扩展字段了,举例如下:第⼀⾏中,第⼀个字节为0x02,表⽰只有两个字节的数据,⽽扩展段的标识符为0x04表⽰后⾯的数据0x0800为扩展线性地址,基地址的计算⽅法为:(0x0800<<16)=0x08000000,在0x04标识段出现之前,下⾯的数据都是这个基地址。
二进制文件和十六进制文件的区别
二进制文件和十六进制文件的区别Intel HEX文件是由一行行符合Intel HEX文件格式的文本所构成的ASCII文本文件。
在Intel HEX文件中,每一行包含一个HEX记录。
这些记录由对应机器语言码和/或常量数据的十六进制编码数字组成。
Intel HEX文件通常用于传输将被存于ROM或者EPROM中的程序和数据。
大多数EPROM编程器或模拟器使用Intel HEX文件。
记录格式Intel HEX由任意数量的十六进制记录组成。
每个记录包含5个域,它们按以下格式排列::llaaaatt[dd...]cc每一组字母对应一个不同的域,每一个字母对应一个十六进制编码的数字。
每一个域由至少两个十六进制编码数字组成,它们构成一个字节,就像以下描述的那样:: 每个Intel HEX记录都由冒号开头.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记录。
单片机,认识HEX文件
认识HEX文件作者:林申茂看过几篇常用指令的用法后,我们换换口味,介绍一下Intel 原厂所公布的HEX文件标准格式,相信经过本文的介绍,一定可以让您对8051的操作有更进一步的认识。
以下是一个程序经编译器编译后所得到的HEX文件内容:Example.hex行号原始码1 : 10 0000 00 020003787FE4F6D8FD75812B02004A02 D62 :10001000008FE493A3F8E493A34003F68001F208713 :10002000DFF48029E493A3F85407240CC8C333C4354 :10003000540F4420C8834004F456800146F6DFE4A05 :10004000800B01020408102040809000C2E47E01716 :100050009360BCA3FF543F30E509541FFEE493A3137 :1000600060010ECF54C025E060A840B8E493A3FAF78 :10007000E493A3F8E493A3C8C582C8CAC583CAF0B19 :10008000A3C8C582C8CAC583CADFE9DEE780BEE43210 :10009000F52AF52BE52B25E02408F8E6F52808E6F711 :1000A000F529F590E528F5B07F707E171200E6057A12 :1000B0002BE52B7002052AC39410E52A940040D44613 :1000C00080CD20200800010002000400080010007C14 :1000D000200040008001000200040008001000200115 :1000E000004000800000D3EF9400EE94004007EF4216 :0700F0001F70F31E80F022D717 :00000001FF面对这一大串的十六进制码,有没有头昏眼花的感觉呢?别急别急,经过本文的介绍,你一定会爱上这个会让你头昏眼花的机器码的!首先我们先介绍HEX文件的编码格式,举范例程序中第一行说明:: 10000000020003787FE4F6D8FD75812B02004A02D612 3 4 5 6为了方便解说,笔者将原始码以空格区分成六个部分,在实际转换的原始内容应该没有空格也没有行号的。
一种英特尔Hex文件的解析和填充方法
4 Hex 文件解析的实现
图 1 中展示的 Hex 文件内容,PROM 从地址 0x8001000 至 0x803FFFFF,共计 4032Kbytes。 文件以 Record Type 0x04 为起始,以 Record Type 0x01 为结束,中间行穿插着 Record Type 0x04,分别记录了不同的 linear Address,如果上一个 Record 的结束地址与当前 Record 的起始地址不连续,则视 为 Block 中断。
容位于 MCU PROM 中的哪个位置; ● Record 的类型,表示第 5 个域中所含内容的意义,所
含的是一个基地址或数据; ● Record 的校验和,表示这个 Record 中所含数据的校
验和。
● RecordType 0x00,表示域 5 中的内容是数据。 ● RecordType 0x01,表示这是整个 hex 文件中最后一个 record。 ● RecordType 0x02,可同时用于 16 位和 32 位格式的 MCU,表示 16 位地址中的高 12 位,低 4 位是 0。 ● RecordType 0x03,可同时用于 16 位和 32 位格式的 MCU,是专门针对 8086 和 80186 这种架构的 MCU,DATA 中定义的 4 字节数据是 CS 和 IP 寄存器中的值。 ● RecordType 0x04,仅针对 32 位格式的 MCU,表示的 是 32 位地址的高 16 位基地址,低 16 位是 0x0000。 ● RecordType 0x05,这种 record type 仅针对 32 位格式 的 MCU,表示的是这个 hex 文件内容的起始执行地址。 根据 Record Type 对 Hex 文件中的每个 Record 进行相应 意义的解析,从而梳理出 Hex 文件的起始执行地址,每个 Block 的起始地址和长度。
什么是Intel HEX格式
什么是Intel HEX格式?回答:Intel HEX文件是记录文本行的ASCII文本文件,在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.<例如::0300000002005E9Dcc=0x01+NOT((0x03+0x00+0x00+0x00+0x02+0x00+0x5E)%0x100)=0x01+0x9C=0x9DC语言描述:UCHAR cc;cc=(UCHAR)~(0x03+0x00+0x00+0x00+0x02+0x00+0x5E);cc++;>数据记录Intel HEX文件由若干个数据记录组成,一个数据记录以一个回车和一个换行结束<回车为0x0d换行为0x0a>比如下面的一条数据记录:10246200464C5549442050524F46494C4500464C3310 是此行记录数据的字节数目2462 是数据在内存<将要烧写的eprom地址>中的起始地址00 是记录类型00(是一个数据记录)464C 到464C 是数据33 是此行记录的效验和扩展线性地址记录(HEX386)扩展线性地址记录也可称为32位地址记录和HEX386记录,这个纪录包含高16(16-31位)位数据地址,这种扩展的线性记录总是有两个字节数据,像下面这样::02000004FFFFFC02 是记录的数据字节数目0000 是地址域这在扩展地址记录中总是000004 是记录类型04(扩展地址记录)FFFF 是高16位地址FC 是记录效验和,计算方法如下:01h + NOT(02h + 00h + 00h + 04h + FFh + FFh)当一个扩展线性地址记录被读到后,扩展线性地址记录的数据区域将被保存并应用到后面从Intel HEX文件中读出的记录,这个扩展线性记录一直有效,直到读到下一个扩展线性记录.绝对内存地址= 数据记录中的地址+ 移位后的扩展线性地址下面举例说明这个过程从数据记录的地址域得到地址2462从扩展线性地址记录的地址域得到地址FFFF绝对内存地址FFFF2462扩展段地址记录(HEX86)扩展段地址记录也被称为HEX86记录, 包含4-19位的数据地址段,这个扩展段地址记录总是有两字节数据,如下::020*********EA02 是记录中的数据字节数目0000 是地址域,在扩展段地址记录中,这个域总是000002 是记录类型02(扩展段地址的标示)1200 是该段的地址EA 是效验和计算如下:01h + NOT(02h + 00h + 00h + 02h + 12h + 00h).当扩展段地址记录被读后,扩展段地址将被存储并应用到以后从Intel HEX文件读出的记录,这个段地址一直有效直到读到下一个扩展段地址记录绝对内存地址= 数据记录中的地址+ 移位后的扩展段地址数据记录中的地址域移位后扩展段地址记录中的地址域下面举例说明这个过程从数据记录的地址域得到地址 2 4 6 2从扩展段地址记录的地址域得到地址 1 2 0 0绝对内存地址0 0 0 1 4 4 6 2文件结束记录(EOF)一个Intel HEX文件必须有一个文件结束记录,这个记录的类型域必须是01,一个EOF记录总是这样::00000001FF00是记录中数据字节的数目0000这个地址对于EOF记录来说无任何意义01记录类型是01(文件结束记录标示)FF是效验和计算如下01h + NOT(00h + 00h + 00h + 01h).========================总结形如:BBAAAATTHHHH...HHHHCCBB: ByteAAAA:数据记录的开始地址,高位在前,地位在后因为这个格式只支持8bits,地址被倍乘所以,为了得到实际的PIC的地址,需要将地址除以2TT: Type00 数据记录01 记录结束04 扩展地址记录(表示32位地址的前缀,当然这种只能在INHX32) HHHH:一个字(Word)的数据记录,高Byte在前,低Byte在后TT之后,总共有BB/2 个字的数据CC: 一个Byte的CheckSum因为PIC16F873A只有4K的程序空间所以,不会有TT=04的Linear Address Record。
S19与HEX文件格式解析
S19格式与HEX格式详解2019.03 S19 与 HEX文件中的所有字节都是可打印的 ASCII 字符,可用任何文本编辑器打开查看S19S-record格式文件是Freescale CodeWarrior编译器生成的后缀名为.S19的程序文件,是一段直接烧写进MCU的ASCII码,英文全称问Motorola format for EEPROM programming。
S19 格式是每一行为一个记录,每个记录由 6 个部分组成,除起始代码外,均用十六进制数大端格式表示:1.起始代码:一个大写字母“S”,表示一个新记录的开始。
2.记录类型:1 个十六进制位,取值 0~9,定义记录块的类型,详见下文。
3.字节数:2 个十六进制位,表示地址、数据、校验和的总字节数。
4.地址:4, 6 或 8 个十六进制位,具体的长度由记录类型决定,表示本条记录在内存中的起始地址。
5.实际数据:2n 个十六进制字符,n 为前面指定的字节数的值减去地址和校验和的长度。
6.校验和:2 个十六进制字符,为字节数、地址和实际数据的所有字节(两个十六进制位)的和对 0xFF 取模,再求反码得到。
一个完整的MOTOROLA S-Record格式数据包含如下区域:<type> <length> <address> <data> <checksum>各字段的意思分别如下:<type>:标示记录的类型,该字段占据1-byte。
它可以有如下数值:“S0”, “S1”, “S2”, “S3”, “S5”, “S7”, “S8” , “S9”“S0” -- 记录描述信息“S1”, “S2”, “S3” -- 记录存储的数据。
这三者的区别在于地址(address)的长度不同,S1为2-byte,S2为3-byte,以及S3为4-byte。
“S5” -- 包含了“S1”, “S2”, “S3”的信息。
Intel HEX文件格式
记录格式
00-数据记录
04-扩展线性地址记录(HEX386)
02-扩展段地址记录(HEX86)
01-文件结束ቤተ መጻሕፍቲ ባይዱEOF)记录
色值HEX码及与RGB色的对照
展开 Intel HEX介绍 记录格式
00-数据记录
04-扩展线性地址记录(HEX386)
02-扩展段地址记录(HEX86)
01-文件结束(EOF)记录
色值HEX码及与RGB色的对照
展开 编辑本段Intel HEX介绍
记录格式
Intel HEX由任意数量的十六进制记录组成。每个记录包含5个域,它们按以下格式排列: :llaaaatt[dd...]cc 每一组字母对应一个不同的域,每一个字母对应一个十六进制编码的数字。每一个域由至少两个十六进制编码数字组成,它们构成一个字节,就像以下描述的那样: : 每个Intel HEX记录都由冒号开头. ll 是数据长度域,它代表记录当中数据字节(dd...)的数量. aaaa 是地址域,它代表记录当中数据的起始地址. tt 是代表HEX记录类型的域,它可能是以下数据当中的一个: 00 – 数据记录 01 – 文件结束记录 02 – 扩展段地址记录 04 – 扩展线性地址记录 dd 是数据域,它代表一个字节的数据.一个记录可以有许多数据字节.记录当中数据字节的数量必须和数据长度域(ll)中指定的数字相符. cc 是校验和域,它表示这个记录的校验和.校验和的计算是通过将记录当中所有十六进制编码数字对的值相加,以256为模进行以下补足.
Hex 全称 (Intel HEX)文件是由一行行符合Intel HEX文件格式的文本所构成的ASCII文本文件。在Intel HEX文件中,每一行包含一个HEX记录。这些记录由对应机器语言码和/或常量数据的十六进制编码数字组成。Intel HEX文件通常用于传输将被存于ROM或者EPROM中的程序和数据。大多数EPROM编程器或模拟器使用Intel HEX文件。
hex、bin、elf、axf文件区别
hex,bin,axf,elf的区别一、HEX 和 BINHex文件,这里指的是Intel标准的十六进制文件,也就是机器代码的十六进制形式,并且是用一定文件格式的ASCII码来表示.具体格式介绍如下: Intel hex 文件格式Intel hex 文件常用来保存单片机或其他处理器的目标程序代码。
它保存物理程序存储区中的目标代码映象。
一般的编程器都支持这种格式。
Intel hex 文件全部由可打印的ASCII字符组成,如下例所示::2000000012014c75a800e4f508f509780a7a78e4f608dafcd283fcfded240af9a 7050dbd81:2000200000010ced2488ec34ff50edc283e4fcfded240af9e76d7013ed33e43c7 00d0dbd2a:2000400000010ced2488ec34ff50e50509e50970020508e50924a8e50834fd50a ee4f50874Intel hex 由一条或多条记录组成,每条记录都由一个冒号“:”打头,其格式如下::CCAAAARR...ZZ其中:CC本条记录中的数据字节数AAAA本条记录中的数据在存储区中的起始地址RR记录类型:00 数据记录 (data record)01 结束记录 (end record)02 段记录 (paragraph record)03 转移地址记录 (transfer address record)...数据域ZZ数据域校验和Intel hex文件记录中的数字都是16进制格式,两个16进制数字代表一个字节。
CC域是数据域中的实际字节数,地址、记录类型和校验和域没有计算在内。
校验和是取记录中从数据字节计数域(CC)到数据域(...)最后一个字节的所有字节总和的2的补码。
Bin文件是最纯粹的二进制机器代码,没有格式,或者说是"顺序格式"按assembly code顺序翻译成binary machine code.Bin是直接的内存映象的表示。
Intel的hex格式含义
Intel的hex格式含义Intel HEX file(文件名.hex)是具有约定格式的ASCII文本文件。
文件中每一行包含一个HEX 记录(record)。
记录由十六进制数组成,这些数字代表机器指令码或常量。
Intel HEX files 用来向ROM中传递代码和数据,即它和Bin文件类似,指导下载程序或仿真器将指令码和数据下载到ROM存储器特定的位置上。
Intel HEX file可以包含任意多行记录(record),每个record主要由5个部分(域)组成,每部分至少包含两个十六进制字符,即一个字节(8位),其具体形式为“:llaaaatt[dd...]cc ”其中:“:”表示record的开始“ll”表示record中数据位(dd)的长度(几个字节)“aaaa”表示record中的数据存储起始地址“tt”表示record类型,可以为00(数据record),01(文件结束record),02(扩展段地址record),04(扩展线性地址record)“dd”表示record数据的一位,一个record可能包含多个数据字节,数据字节的数量必须与ll中指定的相一致“cc”表示record的校验域,下面给出一个实例:10008000AF5F67F0602703E0322CFA92007780C361:1000900089001C6B7EA7CA9200FE10D2AA00477D81: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段内的地址)目标文件.HEX的各部分具体含义.HEX是Intel的目标文件格式。
Intel HEX文件
+---------------------------------------------------------------+ | RECORD | RECLEN | LOAD | RECTYPE | INFO or DATA | CHKSUM | | MARK ':' | | OFFSET | '00' | | | +---------------------------------------------------------------+ | 1-byte | 1-byte | 2-byte | 1-byte | n-byte | 1-byte | +---------------------------------------------------------------+
2 -
BIN文件格式 对二进制文件而言,其实没有”格式”。 文件只是包括了纯粹的二进制数据。
3 -
HEX文件格式 HEX文件都是由记录(RECORD)组成的。 在HEX文件里面,每一行代表一个记录。
记录的基本格式为:
+---------------------------------------------------------------+ | RECORD | RECLEN | LOAD | RECTYPE | INFO or DATA | CHKSUM | | MARK ':' | | OFFSET | | | | +---------------------------------------------------------------+ | 1-byte | 1-byte | 2-byte | 1-byte | n-byte | 1-byte | +---------------------------------------------------------------+
Intel HEX 格式
HEX文件格式详解Hex文件是可以烧录到MCU中,被MCU执行的一种文件格式。
如果用记事本打开可发现,整个文件以行为单位,每行以冒号开头,内容全部为16进制码(以ASCII码形式显示)。
Hex文件可以按照如下的方式进行拆分来分析其中的内容:例如“:1000080080318B1E0828092820280B1D0C280D2854”可以被看作“0x10 0x00 0x08 0x00 0x80 0x31 0x8B 0x1E 0x08 0x28 0x09 0x28 0x20 0x28 0x0B 0x1D 0x0C 0x28 0x0D 0x28 0x54” 第一个字节0x10表示本行数据的长度;第二、三字节0x00 0x08表示本行数据的起始地址;第四字节0x00表示数据类型,数据类型有:0x00、0x01、0x02、0x03、0x04、0x05。
'00' Data Rrecord:用来记录数据,HEX文件的大部分记录都是数据记录'01' End of File Record: 用来标识文件结束,放在文件的最后,标识HEX文件的结尾'02' Extended Segment Address Record: 用来标识扩展段地址的记录'03' Start Segment Address Record:开始段地址记录'04' Extended Linear Address Record: 用来标识扩展线性地址的记录'05' Start Linear Address Record:开始线性地址记录然后是数据,最后一个字节0x54为校验和。
校验和的算法为:计算0x54前所有16进制码的累加和(不计进位),检验和= 0x100 - 累加和在上面的后2种记录,都是用来提供地址信息的。
每次碰到这2个记录的时候,都可以根据记录计算出一个“基”地址。
小技巧之实现IAR下S19、Bin、Hex文件格式转换
小技巧之实现IAR下S19、Bin、Hex文件格式转换今天有点小激动,搞了大半年的课题终于有点成果了,眼泪哗哗的,太不容易了,哈哈。
所以趁着心情大好手感大好的时候,抓紧更更博客了。
另外从零入手系列好久没更新了,也有博友问我啥时候更新,哎,大家的热情我还是很感激的,最近一直在搞FPGA 这块,Kinetis 那部分放下一段时间了,不过用不了多长时间就会继续更新了。
其实FPGA 搞了一段时间发现还是搞ARM 更顺手些,习惯了C 的顺序编程,FPGA 的并行编程一时之间还真转不过这个弯来,哈哈~本篇内容自己早就想好了,只不过不是被事耽搁就是手感不好就没有写出来,今天就拿出来说说吧,不然再过段时间就被我尘封在大脑皮层的深处了,呵呵。
其实内容很简单,无非就是对IAR 环境的设置(咳咳,可以说一点技术含量都没有),不过本篇博客核心思想是开阔一下大家的思路原来这样就可以。
另外本篇最后给出了用CW 自带的格式转换工具的用法链接,那部分是从飞思卡尔技术社区的安版主写的,有兴趣的可以去看看。
下面进入正题吧:首先说说这三个文件格式的来头。
bin 文件是我们最常见的二进制文件,它是纯数据文件,也即是所见即所得,所以如果我们想看看需要下载到单片机flash 的数据的大小,最简单的方法就是查看我们编译连接后生成的bin 文件大小;hex 文件则是Intel 很早就推出的一种文件格式(Intel 还是一如既往的很牛逼啊有木有),它除了有效数据信息之外还包含了一些多余信息(包括地址信息,校验码之类的等等信息),所以hex 文件是很大的,而最终下到单片机的flash 里的仍是其中的有效数据段,而其他的信息段则是作为flash 编程软件的辅助信息的(包括地址信息)。
因此我们常见的问题就来了,如果烧写或者下载Bin文件时,软件会弹出首地址框输入相应地址信息,而在烧写Hex 文件的时候则。
十六进制文件格式
HEX格式内容含义HEX文件格式是我们经常遇到的一种文件格式,因为几乎所有的编程烧录文件都为HEX格式。
首先,HEX文件中是包含了地址信息的。
这和BIN文件不同,BIN文件中只包含了数据信息。
所以我们在烧写或者下载HEX文件的时候,一般不需要我们指定地址,但是在烧写BIN 文件的时候,用户是一定要指定地址信息的。
二、HEX文件都是由记录组成的。
它的每一行都是一个记录来的。
它是由任意数量的十六进制数组成。
每个记录包含五个域,它们以以下格式排列的::aabbbbcc[dd…]ee上面每一组不同的字母代表不同的一个域,每个字母代表一个十六进制的数字,每一个域至少由两个十六进制编码数字组成,每两个十六进制编码数字组成一个字节。
具体描述如下:1、每个HEX记录都由冒号开头;2、aa表示这个记录中的数据长度域,它代表记录当中数据字节[dd…]的字节数量。
3、bbbb是地址域,它代表记录当中数据的起始地址。
4、cc 是代表HEX记录类型的域,它可能是以下数据当中的一个:00 –数据记录01 –文件结束记录02 –扩展段地址记录04 –扩展线性地址记录5、dd 是数据域,它代表一个字节的数据,一个记录可以有许多数据字节。
记录当中数据字节的数量必须和数据长度域(aa)中指定的数字相符。
6、ee 是校验和域,它表示这个记录的校验和。
校验和的计算是通过将记录当中所有十六进制编码数字对的值相加,以256为模进行以下补足。
比如:前面AduC7026的LED实验中的HEX文件内容为::020*********F2 。
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 是记录当中数据字节的数量。
Keil生成的Hex文件详解
Keil HEX文件是由一行行符合Intel HEX文件格式的文本所构成的ASCII文本文件。
在Intel HEX文件中,每一行包含一个HEX记录。
这些记录由对应机器语言码和/或常量数据的十六进制编码数字组成。
Intel HEX文件通常用于传输将被存于ROM或者EPROM中的程序和数据。
大多数EPROM编程器或模拟器使用Intel HEX文件。
记录格式Intel HEX由任意数量的十六进制记录组成。
每个记录包含5个域,它们按以下格式排列::llaaaatt[dd...]cc每一组字母对应一个不同的域,每一个字母对应一个十六进制编码的数字。
每一个域由至少两个十六进制编码数字组成,它们构成一个字节,就像以下描述的那样:: 每个Intel HEX记录都由冒号开头.ll 是数据长度域,它代表记录当中数据字节(dd)的数量.aaaa 是地址域,它代表记录当中数据的起始地址.tt 是代表HEX记录类型的域,它可能是以下数据当中的一个:00 –数据记录01 –文件结束记录02 –扩展段地址记录04 –扩展线性地址记录dd 是数据域,它代表一个字节的数据.一个记录可以有许多数据字节.记录当中数据字节的数量必须和数据长度域(ll)中指定的数字相符.cc 是校验和域,它表示这个记录的校验和.校验和的计算是通过将记录当中所有十六进制编码数字对的值相加,以256为模进行以下补足.数据记录Intel HEX文件由任意数量以回车换行符结束的数据记录组成.数据记录外观如下::10 2462 00 464C5549442050524F46494C4500464C 33其中: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位数据地址段.扩展段地址记录总是有两个数据字节,外观如下::020*********EA其中: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).:02 0000 04 0800 F2:10 0000 00 7806002051040008690200086B020008 0D注意:地址是大开端,0800+0000 = 0x0800000078060020是MSP初始值,其实为0x20000678,是小开端。
Intel hex 文件格式
Intel hex文件格式
Intel hex文件常用来保存单片机或其他处理器的目标程序代码。
它保存物理程序存储区中的目标代码映象。
一般的编程器都支持这种格式。
Intel hex文件全部由可显示和打印的ASCII字符组成,如下例所示:
:1003FA0014300316E52264057005D206C20522E50B
:0F040A002264037005C206D20522C206C2052273
:00000001FF
Intel hex由一条或多条记录组成,每条记录都由一个冒号“:”打头,其格式如下:
:NNAAAARRDD…DDCC
:+数据字节计数域+地址域+记录类型域+数据域+校验域其中:NN为本条记录中的数据(DD…DD)字节数(十六进制,最大为FFH)
AAAA为本条记录中的数据在存储区中的起始地址(四位十六进制数,高字节在前)
RR为记录类型(一字节):
00数据记录(data record)
01结束记录(end record)
02段记录(paragraph record)
03转移地址记录(transfer address record)
DD…DD为数据域(共有NN字节)
CC为校验和(一字节)
Intel hex文件记录中的数字都是16进制格式,两个16进制数字代表一个字节。
校验和CC是取记录中从数据字节计数域(NN)到数据域(DD…DD)最后一个字节的所有字节总和的最低字节,再取反加1。
hex是什么文件格式?.hex文件如何打开?
hex是什么⽂件格式?.hex⽂件如何打开?
有时候⽤记事本打开⽂件时会出现⼀些全是数字加字母的代码,其实这个就是hex⽂件,Intel HEX⽂件是记录⽂本⾏的ASCII ⽂本⽂件,在Intel HEX⽂件中,每⼀⾏包含⼀个HEX记录。
hex是什么⽂件?
hex的全称是Intel HEX,此类⽂件通常⽤于传输将被存于ROM或者EPROM中的程序和数据。
是由⼀⾏⾏符合Intel HEX⽂件格式的⽂本所构成的ASCII⽂本⽂件。
⼤多数EPROM编程器或模拟器使⽤Intel HEX⽂件。
HEX⽂件记录由对应机器语⾔码和/或常量数据的⼗六进制编码数字组成。
hex⽂件如何打开?
因⼤多数EPROM编程器或模拟器使⽤Intel HEX⽂件。
HEX⽂件记录由对应机器语⾔码和/或常量数据的⼗六进制编码数字组成。
所以在⽇常使⽤中,⽤IDA可以反编译⼀些单⽚机的程序,或者使⽤UltraEdit可以看⼆进制码。
写了这么多,希望读者对HEX⽂件有⼀个系统的认识。
解读hex文件
PIC HEX文件格式分析- 适用MPLAB8位機2011-03-25 11:26:40 阅读39 评论0 字号:大中小订阅本文引自:/212583/95624概要.HEX文件是MPLAB生成的一种可执行文件的格式,它本身是由ASCII字符组成的,但其包含16进制的可执行代码的信息,也就是说,这类文件描述在程序存储器的哪个单元放入什么指令。
.HEX文件的种类MPLAB可以生成3种不同格式的可执行文件。
其中两种是.HEX文件,它们分别称为INHX8M格式(Intel Hex Format)和INHX32格式(Intel Hex 32 Format);另外一种称为INHX8S格式(Intel Split Hex Format),这种格式会同时生成.HXL和.HXH文件,两个文件分别存放指令数据的低字节和高字节。
这里只讨论两种.HEX文件。
MPLAB内嵌的连接器MPLINK在默认情况下生成INHX32 格式的.HEX文件,也可以使用/aINHX8M选项指定生成INHX8M格式的.HEX文件。
我们的烧写器应该能支持这两种格式的.HEX文件。
INHX32格式的.HEX文件一个INHX32格式的.HEX文件是由若干个形式相同的行构成的。
行的种类对于最多只有8K字程序空间的PIC16F87X单片机而言,相应的.HEX文件只有3种不同的行:线性地址定位行,代码数据行,结尾标志行。
一个.HEX文件的第1行是一个线性地址定位行,后面接着是若干个代码数据行,最后一行是结尾标志行。
线性地址定位行仅仅对超过32K字代码的程序有用。
实际上,INHX32格式与INHX8M格式的不同之处就在于它能表示超过32K字代码的程序。
线性地址定位行中指定指令存放地址的高16位,而低16位由代码数据行中的“AAAA”部分指定。
“AAAA”表示指令存放地址的2倍,所以最多能表示32K字的指令,而PIC16F87X单片机最多只有8K字程序空间,故不需要用到指令地址的高16位,因此.HEX文件的线性地址定位行指定的指令地址的高16位总为“0000”。
hex文件详细介绍(Hexfiledetails)
hex文件详细介绍(Hex file details)Intel HEX file is an ASCII text file with lines of text in the HEX file format Intel. In the Intel HEX file, each line contains a HEX record. These records consist of sixteen hexadecimal encoding number corresponding to the machine language code and / or data. Intel HEX files are often used to transfer will be stored in a ROM or EPROM program and data. Most EPROM programmers or emulators using Intel HEX file.[editor this paragraph] record formatIntel HEX is composed of an arbitrary number of sixteen hexadecimal records. Each record contains 5 domains, are arranged in the following format:]cc: llaaaatt[dd...Each group of letters corresponds to a different domain, each letter corresponds to a sixteen hexadecimal encoding digital. Each domain consists of at least two encoding sixteen hexadecimal digits, they constitute a byte, as described below:Intel HEX: each record consists of a colon at the beginning.Ll is the length of the data domain, it represents a record of the number of data bytes (DD).AAAA is the address field, it represents the starting address of the data record.TT represents the HEX record type domain, it may be one of thefollowing data:00 - data recordThe 01 - end of file record02 - extended segment address record04 - extended linear address recordDD is the data domain, it represents a byte of data. A record may have many data bytes. Record the number of data bytes must be the length of the data domain (LL) in the specified number.CC is the checksum field, it represents the checksum of the record. The checksum is calculated by the recording of all sixteen hexadecimal encoding of the digital values, modulo 256 following up.[editor this paragraph] data recordIntel HEX file is composed of an arbitrary number to enter newline end data records. The appearance of data records are as follows:: 10246200464C5549442050524F46494C4500464C33Among them:10 is the number of data bytes in the record.The 2462 is that the data will be downloaded to the memory address.00 is the record type (data record)464C... 464C is the data.33 is the checksum of the record.[editor this paragraph] extended linear address record (HEX386)The extended linear address record is called 32 bit address records and HEX386 records. These records contain the address of data 16. The extended linear address record always has two data bytes, the appearance is as follows:: 02000004FFFFFCAmong them:02 is the number of data bytes in the record.0000 is the address field, for the extended linear address record, this field is always 0000.04 is the record type 04 (extended linear address record)FFFF is the address of the high 16 bits.FC is the checksum of the record and calculation methods areas follows:01h + NOT (02h + 00h + 00h + 04H + FFh + FFh).When an extended linear address record is read, the extended linear address stored in the data field is preserved,It is used to record from the subsequent Intel HEX file to read. The linear address remains effective until it is another extended address record change.Through the address field in the record and from the extended linear address record address data adding shifted data record absolute memory address.The following example illustrates this processFrom the data recording address domain address 2462Data domain + FFFF extended linear address record-Absolute memory address FFFF2462The extended segment address record (HEX86)The extended segment address record also called HEX86 records, which includes the 4-19 bit data address. The extended segment address record always has two data bytes, the appearance is as follows:: 020*********EAAmong them:02 is the number of data bytes in the record.0000 is the address field. For the extended segment address record, this field is always 0000.02 is the record type 02 (extended segment address record)The 1200 section is.EA is the checksum of the record and calculation methods are as follows:01h + NOT (02h + 00h + 00h + 02h + 12h + 00h).When an extended segment address record is read and stored in the data field of the extended segment address is saved, it is applied to the recording from a subsequent read HEX file to Intel. The segment address remains effective until it is another extended address record change.Through the address field in the record to be displaced from the extended segment address record sum address data to obtain data record absolute memory address.The following example illustrates this processFrom the data recording address domain address 2462Extended segment address record data field 1200-Absolute memory address 00014462End of file (EOF) recordsIntel HEX file to the end of file (EOF). The end of record to record the type of domain value must be 01.EOF record appearance always as follows:: 00000001FFAmong them:00 is the number of data bytes in the record.The 0000 is the data is downloaded to the memory address. At the end of the file record address is meaningless are ignored by the.0000h is typical of the address.01 is the record type 01 (end of file records)FF is the checksum of the record and calculation methods are as follows:01h + NOT (00h + 00h + 00h + 01h).Intel HEX file example:The following is a complete Intel HEX file example:: 10001300AC12AD13AE10AF1112002F8E0E8F0F2244: 10000300E50B250DF509E50A350CF5081200132259: 03000000020023D8: 0C002300787FE4F6D8FD7581130200031D: 10002F00EFF88DF0A4FFEDC5F0CEA42EFEEC88F016: 04003F00A42EFE22CB: 00000001FF[editor this paragraph of]HEX file and BIN file format differenceHEX file and BIN file is two file formats we often encounter.The following is a brief look at the difference between these two file formats:1HEX file includes address information, and the BIN file format includes only the data itselfWhen writing or download the HEX file, generally do not need to specify the address of the user, because the HEX file insideinformation is included. When writing BIN files, the user must need to specify the address information.2BIN file format of the binary file, no "format".The file includes only pure binary data.3HEX HEX file is a record (RECORD).In the HEX file, each line represents a record.The basic format for recording:+---------------------------------------------------------------+ | RECORD RECLEN LOAD RECTYPE | | | | INFO or DATA CHKSUM MARK | | | ':' | | OFFSET | | | |+---------------------------------------------------------------+ | | 1-byte 1-byte 2-byte 1-byte n-byte | | | | 1-byte |+---------------------------------------------------------------+Record types include:'00'Data Rrecord: used to record data, most recorded HEX files are'01' End of File Record: data are used to mark the end of file, placed at the end of the file, the end labeling HEX file record'02'Extended Segment Address Record: identifies the extended segment address'04' Extended Linear Address Record: identifies the extended linear address above after 2 records are used to provide the address information. Every time I metthese 2 records, can be calculated a "base" address on record. For the record, the address calculation time, is the "base" based.The specific format of data records:+---------------------------------------------------------------+ | RECORD RECLEN LOAD RECTYPE | | | | INFO or DATA CHKSUM | | | MARK ':' OFFSET'00'| | | | | |+---------------------------------------------------------------+ | | 1-byte 1-byte 2-byte 1-byte n-byte | | | | 1-byte |+---------------------------------------------------------------+See example:020*********FA: 10000400FF00A0E314209FE5001092E5011092E5A3: 00000001FFOn the top of the HEX file analysis:First record length is 02 LOAD, OFFSET 0000, RECTYPE is 04, the record for the extended segment address record. The data is 0000, the checksum for the FA. From the length of the record and data, we can calculate a base address, this address is 0X0000.Behind the data record to the address for the base address.Second the length of the record was 10 (16), LOAD OFFSET 0004, RECTYPE is 00, the record for a data record. The data forFF00A0E314209FE5001092E5011092E5, a total of 16 BYTE. The checksum of the record is A3. At the base of the site for the 0X0000, plus OFFSET, the record of the 16BYTE in the starting address of the data is 0x0000 + 0x0004 = 0x0004.Third record length is 00 LOAD, OFFSET 0000, TYPE = 01, the checksum for the FF. This is a END OF FILE RECORD, at the end of identification document.In this case, the actual data is only 16BYTE:FF00A0E314209FE5001092E5011092E5, the starting address is 0x44HEX file and BIN file size differenceHEX file is a binary value ASCII. For example, general 8-BIT binary value 0x3F, ASCII said to represent thecharacters'3'and'F' characters, each character requires a BYTE, so HEX files need to be > 2 times the space. For a BIN file, you see the size of the file can know the actual file size including data. The HEX data file, you see the size of the file is not the actual size. One is because the HEX file is used ASCII data to show that, two is because the HEX file itself also includes additional information.。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
其中:
02 是这个记录当中数据字节的数量.
0000 是地址域,对于扩展线性地址记录,这个域总是0000.
04 是记录类型 04(扩展线性地址记录)
FFFF 是地址的高16位.
FC 是这个记录的校验和,计算方法如下:
01h + NOT(02h + 00h + 00h + 04h + FFh + FFh).
Intel HEX文件例子:
下面是一个完整的Intel HEX文件的例子:
:10001300AC12AD13AE10AF1112002F8E0E8F0F2244
:10000300E50B250DF509E50A350CF5081200132259
:03000000020023D8
:0C002300787FE4F6D8FD7581130200031D
低位.
tt 是代表HEX记录类型的域,它可能是以下数据当中的一个:
00 – 数据记录
01 – 文件结束记录
02 – 扩展段地址记录
04 – 扩展线性地址记录
dd 是数据域,它代表一个字节的数据.一个记录可以有许多数据字节.记录当中数据字节的数量必须和数据长度域(ll)中指定的数字相符.
绝对存储器地址 00014462
校验和的算法:计算从0x3A 以后(不包括0x3A)的所有各字节的和是取记录中从数据字节计数域(ll)到数据域(...)最后一个字节的所有字节总和的2的补码。
文件结束(EOF)记录
Intel HEX文件必须以文件结束(EOF)记录结束.这个记录的记录类型域的值必须是01.EOF记录外观总是如下:
:00000001FF
其中:
00 是记录当中数据字节的数量.
0000 是数据被下载到存储器当中的地址.在文件结束记录当中地址是没有意义被忽略的.0000h是典型的地址.
01 是记录类型 01(文件结束记录)
FF 是这个记录的校验和,计算方法如下:
01h + NOT(00h + 00h + 00h + 01h).
扩展段地址记录(HEX86)
扩展段地址记录也叫HEX86记录,它包括4-19位数据地址段.扩展段地址记录总是有两个数据字节,外观如下:
:020000021200EA
其中:
02 是记录当中数据字节的数量.
0000 是地址域.对于扩展段地址记录,这个域总是0000.
02 是记录类型 02(扩展段地址记录)
Intel HEX文件是由一行行符合Intel HEX文件格式的文本所构成的ASCII文本文件。在Intel
HEX文件中,每一行包含一个HEX记录。这些记录由对应机器语言码和/或常量数据的十六进制编码数字组成。Intel
HEX文件通常用于传输将被存于ROM或者EPROM中的程序和数据。大多数EPROM编程器或模拟器使用Intel HEX文件。
来自数据记录地址域的地址 2462
扩展线性地址记录的数据域 + FFFF
------------
绝对存储器地址 FFFF2462
换行<0x0a>
例如::1000000018F09FE518F09FE518F09FE518F09FE5C0按照上面的数据行格式分析如下:
<0x3a>
[数据长度1Byte]10
[数据地址2Byte]00 00
[数据类型1Byte]00
[数据nByte]18F09FE518F09FE518F09FE518F09FE5
[校验1Byte]C0
<0x0d>
<0x0a>
每一组字母对应一个不同的域,每一个字母对应一个十六进制编码的数字。每行中的数据并不是一定有的,第二个字节数据长度为0,那么这行就没有数据。每一个域由至少两个十六进制编码数字组成,它们构成一个字节,就像以下描述的那样:
其中:
10 是这个记录当中数据字节的数量.
2462 是数据将被下载到存储器当中的地址.
00 是记录类型(数据记录)
464C…464C是数据.
33 是这个记录的校验和.
扩展线性地址记录(HEX386)
扩展线性地址记录也叫作32位地址记录或HEX386记录.这些记录包含数据地址的高16位.扩展线性地址记录总是有两个数据字节,外观如下:
当一个扩展线性地址记录被读取,存储于数据域的扩展线性地址被保存,它被应用于从Intel
HEX文件读取来的随后的记录.线性地址保持有效,直到它被另外一个扩展地址记录所改变.
通过把记录当中的地址域与被移位的来自扩展线性地址记录的地址数据相加获得数据记录的绝对存储器地址.
以下的例子演示了这个过程..
: 每个Intel HEX记录都由冒号(0x3a)开头。
回车换行符0x0d, 0x0a 每行Intel HEX记录为结束。每行开始和结束之间的所有内容,都是以字符形式表现的。
ll 是数据长度域,它代表记录当中数据字节(dd)的数量.
aaaa 是地址域,它代表记录当中数据的起始地址,地址都是先显示高位,后显示
通过把记录当中的地址域与被移位的来自扩展段地址记录的地址数据相加获得数据记录的绝对存储器地址.
以下的例子演示了这个过程..
来自数据记录地址域的地址 2462
扩展段地址记录数据域 + 1200
---------
:10002F00EFF88DF0A4FFEDC5F0CEA42EFEEC88F016
:04003F00A42EFE22CB
:00000001FF
:llaaaatt[dd...]cc 如下图所示:
:<0x3a>
ll[数据长度1Byte]
aaaa[数据地址2Byte]
tt[数据类型1Byte]
[dd...][数据nByte]
cc[校验1Byte]
回车<0x0d>
cc 是校验和域,它表示这个记录的校验和.校验和的计算是通过将记录当中所有十六进制编码数字对的值相加,以256为模进行以下补足.
数据记录
Intel HEX文件由任意数量以回车换行符结束的数据记录组成.数据记录外观如下:
:10246200464C5549442050524F46494C4500录的校验和,计算方法如下:
01h + NOT(02h + 00h + 00h + 02h + 12h + 00h).
当一个扩展段地址记录被读取,存储于数据域的扩展段地址被保存,它被应用于从Intel
HEX文件读取来的随后的记录.段地址保持有效,直到它被另外一个扩展地址记录所改变.