Hex文件格式说明文档
hex文件 规则
hex文件规则Hex文件是一种常用的文件格式,用于存储二进制数据。
它的名称来源于十六进制(hexadecimal)数字系统,该系统使用0-9和A-F表示数字0-15。
Hex文件规则指的是Hex文件的特定格式和约定。
本文将详细介绍Hex文件规则及其用途。
Hex文件的主要用途是将二进制数据以可读的方式存储,并在各种应用中进行传输和使用。
Hex文件通常由一系列记录(record)组成,每个记录包含特定的数据和控制信息。
Hex文件规则定义了记录的格式和含义,以确保数据的准确传输和解析。
Hex文件的起始记录(start record)是文件的第一条记录,用于指示程序的起始地址。
起始记录包含一个标识符,用于区分不同记录类型,以及起始地址的高位和低位的十六进制表示。
这个起始地址标志着程序的入口点,从这里开始执行。
接下来的记录是数据记录(data record),用于存储程序的机器指令和数据。
数据记录包含一个标识符、地址和数据。
地址指示了数据在内存中的位置,而数据则是以十六进制表示的二进制值。
数据记录可以包含任意数量的数据,但是总字节数不能超过记录长度限制。
在Hex文件中,还有特殊的记录类型,用于标识文件的结尾和校验和。
结束记录(end record)标志着文件的结束,它只包含一个标识符。
校验和记录(checksum record)用于验证文件的完整性,它包含一个标识符和校验和值。
文件的每个字节都参与了校验和的计算,以确保数据的准确性。
Hex文件的规则还包括记录长度的限制,校验和的计算方法等。
记录长度通常是16或32字节,校验和是所有字节的累加和的补码。
这些规则的遵守保证了Hex文件的正确解析和传输。
在实际应用中,Hex文件常用于嵌入式系统的固件升级和烧写。
通过将二进制固件转换为Hex文件,可以方便地传输和更新嵌入式设备的固件。
Hex文件还被用于各种工具和调试器中,以便于程序的调试和分析。
总结一下,Hex文件是一种常用的二进制数据存储和传输格式。
如何读懂hex文件
如何读懂hex⽂件什么是Intel HEX ⽂件格式Intel HEX ⽂件是遵循Intel HEX ⽂件格式的ASCII ⽂本⽂件。
在Intel HEX ⽂件的每⼀⾏都包含了⼀个HEX 记录。
这些记录是由⼀些代表机器语⾔代码和常量的16进制数据组成的。
Intel HEX ⽂件常⽤来传输要存储在ROM 或者EPROM 中的程序和数据。
⼤部分的E PROM 编程器能使⽤Intel HEX ⽂件。
Intel HEX由任意数量的⼗六进制记录组成。
每个记录包含5个域,它们按以下格式排列:Start Code每个Intel HEX 记录都由冒号开头Byte count是数据长度域,它代表记录当中数据字节的数量Address是地址域,它代表记录当中数据的起始地址Record type是代表HEX记录类型的域,它可能是以下数据当中的⼀个:00-数据记录01-⽂件结束记录02-扩展段地址记录03-开始段地址记录04-扩展线性地址记录05-开始线性地址记录Data是数据域,⼀个记录可以有许多数据字节.记录当中数据字节的数量必须和数据长度域中指定的数字相符Checksum是校验和域,它表⽰这个记录的校验和.校验和的计算是通过将记录当中所有⼗六进制编码数字对的值相加,以256为模进⾏以下补⾜。
HEX⽂件以⾏为单位。
每⾏以字符‘:’ (0x3a)开头,以回车换⾏符0x0d, 0x0a为结束。
每⾏开始和结束之间的所有内容,都是以字符形式表现的。
例如数据如果是 0x1A ,那么转换到HEX格式的⾏⾥⾯就是0x31 0x41。
如果数据是16bit的,例如地址,则先显⽰⾼位,后显⽰底位。
例如 0x1234,转换成HEX格式⽂件后变成 0x31 0x32 0x33 0x34,显⽰出来以后就是1234。
将数据部分内容每2个字符看做⼀个HEX数据,例如::020*********FA , 我把它看做 0x02 0x00 0x00 0x04 0x00 0x00 0xFA第⼀个 0x02 为数据长度。
hex格式解析
hex格式解析在计算机科学中,hex格式是一种用来表示二进制数据的常见格式。
hex格式使用十六进制(base-16)来表示数字,其中每个数字由0-9、以及字母A-F组成。
在编程中,hex格式通常用于将二进制数据转换为易于阅读和传输的格式。
解析hex格式是指将hex格式的数据转换回二进制形式。
这在许多计算机应用中非常有用,例如数据传输、存储和错误校验。
下面是一种简单的方法来解析hex格式:1. 首先,将hex格式的数据分割成两位一组。
每个两位组合表示一个字节(byte)的值。
例如,hex格式数据"48656C6C6F"可以分割为["48", "65", "6C","6C", "6F"]。
2. 接下来,将每个两位组合转换为对应的十六进制数值。
这可以通过查找每个字符对应的十六进制数值来完成。
例如,"48"转换为十进制数值为72。
3. 最后,将每个转换后的十六进制数值合并在一起,得到解析后的二进制数据。
对于上述的例子,解析后的数据为[72, 101, 108, 108, 111],也就是ASCII码对应的字符"Hello"。
请注意,解析hex格式时需要考虑字节顺序(big-endian或little-endian)。
字节顺序表示二进制数据中字节的存储顺序。
例如,在big-endian字节顺序下,数值0x12345678将被解析为[18, 52, 86, 120],而在little-endian字节顺序下,将被解析为[120, 86, 52, 18]。
总之,解析hex格式是一种将十六进制数据转换回二进制形式的过程。
通过将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).========================总结形如:BBAAAA TTHHHH...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本文来自CSDN博客,转载请标明出处:/yyt7529/archive/2009/06/06/4245479.aspxIntel HEX介绍记录格式Intel HEX由任意数量的十六进制记录组成。
基础知识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标识段出现之前,下⾯的数据都是这个基地址。
hex 格式解析
hex 格式解析HEX格式是一种常用的二进制文件格式,主要用于存储程序和数据。
它是一种文本文件,由一行行符合HEX文件格式的文本组成。
在这些文本中,每一行包含一个HEX记录。
这些记录由对应机器语言码和/或常量数据的十六进制编码字节组成。
HEX文件通常用于传输将被存储在ROM或EPROM中的程序和数据。
大多数EPROM编程器或仿真器使用HEX文件。
HEX文件格式主要有两种:Intel HEX和Motorola SREC(也称为Mot)。
Intel HEX文件由一行行符合Intel HEX文件格式的文本组成。
在Intel HEX文件中,每一行包含一个HEX记录。
这些记录由对应机器语言码和/或常量数据的十六进制编码字节组成。
Motorola SREC文件则是另一种HEX格式,它按照不同的编码方式组织数据。
要解析HEX文件,可以将其拆分成以下几个部分:1. 文件头:文件头包含文件类型、版本和起始地址等信息。
文件头通常位于文件的开头,用于指示文件的类型和结构。
2. 数据记录:数据记录是HEX文件中的基本单元,包含机器语言码和/或常量数据的十六进制编码字节。
每一行都是一个数据记录,它们按照顺序排列在文件中。
3. 数据记录之间的分隔符:HEX文件中的数据记录之间使用分隔符进行分隔。
常见的分隔符有:空格、制表符(TAB)、换行符(CR)等。
4. 文件尾:文件尾是HEX文件的最后一个部分,它表示文件的结束。
文件尾通常包含一个表示文件结束的特定字符或字节序列。
在解析HEX文件时,需要关注以下几个方面:1. 确定文件类型和格式:根据文件头信息,判断文件的类型和格式。
2. 提取数据记录:从文件中提取数据记录,解析记录中的机器语言码和常量数据。
3. 处理记录之间的分隔符:去除记录之间的分隔符,以便将数据记录合并为一个连续的数据流。
4. 检查文件尾:确认文件是否完整,以及文件尾是否正确。
5. 分析数据:根据解析出的数据记录,分析文件中的程序和数据。
解读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文件解析
HEX文件解析HEX文件解析HEX格式文件以行为单位,每行由“:”(0x3a)开始,以回车键结束(0x0d,0x0a)。
行内的数据都是由两个字符表示一个16进制字节,比如”01”就表示数0x01;”0a”,就表示0x0a。
对于16位的地址,则高位在前低位在后,比如地址0x010a,在HEX格式文件中就表示为字符串”010a”。
Example.hex行号原始码1 : 10 0000 00 020003787FE4F6D8FD75812B02004A02 D62 :10001000008FE493A3F8E493A34003F68001F208713 :10002000DFF48029E493A3F85407240CC8C333C4354 :10003000540F4420C8834004F456800146F6DFE4A05 :10004000800B01020408102040809000C2E47E01716 :100050009360BCA3FF543F30E509541FFEE493A3137 :1000600060010ECF54C025E060A840B8E493A3FAF78 :10007000E493A3F8E493A3C8C582C8CAC583CAF0B19 :10008000A3C8C582C8CAC583CADFE9DEE780BEE43216 :0700F0001F70F31E80F022D717 :00000001FF面对这一大串的十六进制码,有没有头昏眼花的感觉呢?别急别急,经过本文的介绍,你一定会爱上这个会让你头昏眼花的机器码的!首先我们先介绍HEX文件的编码格式,举范例程序中第一行说明:: 10 000000 020003787FE4F6D8FD75812B02004A02 D61 2 3 4 5 6为了方便解说,笔者将原始码以空格区分成六个部分,在实际转换的原始内容应该没有空格也没有行号的。
hex文件说明
hex文件说明在项目学习的时候,烧录生成的工程文件.hex给stm32单片机,需要分析hex文件的内容,并对其中某些数据进行修改。
通过学习,了解了hex的格式内容。
并记录之在工程项目中是把程序下载到flash 的 0x0800 0000开头的位置这里是生成的.hex文件中的数据。
例如第一行数据:020*********F2,其实质表达的是十六进制的数据0x02 0x00 0x00 0x04 0x08 0x00 0xf21.第一个字节 0x02表示本行数据的长度;2.第二、三字节 0x00 0x00表示本行数据的起始地址;3.第四字节0x04表示数据类型,数据类型有: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:开始线性地址记录4.然后是数据,0x08 0x005.最后一个字节 0xf2为校验和。
•校验和的算法为:计算0xf2前所有16进制码的累加和(不计进位),检验和 = 0x100 - 累加和'04' '05',都是用来提供地址信息的。
每次碰到这2个记录的时候,都可以根据记录计算出一个“基”地址。
对于后面的数据记录,计算地址的时候,都是以这些“基”地址为基础的。
HEX格式文档详解
Hex文件是可以烧录到MCU中,被MCU执行的一种文件格式。
如果用记事本打开可发现,整个文件以行为单位,每行以冒号开头,内容全部为16进制码(以ASCII码形式显示)。
Hex文件可以按照如下的方式进行拆分来分析其中的内容:例如::020*********f8, 可以看做是0x02 0x00 0x00 0x04 0x02 0x02 0xf8,其前四个字节和最后一个字节有特殊含义。
中间为数据第一个0x02表示该行数据中有两个数据第二个,第三个0x00 0x00表示本行数据的起始地址位第四个字节有0x00 0x01 0x02 0x03 0x04 0x05,分别有以下含义'00'Data Rrecord:用来记录数据,HEX文件的大部分记录都是数据记录'01'文件结束记录:用来标识文件结束,放在文件的最后,标识HEX文件的结尾'02'扩展段地址记录:用来标识扩展段地址的记录'03'开始段地址记录:开始段地址记录'04'扩展线性地址记录:用来标识扩展线性地址的记录'05'开始线性地址记录:开始线性地址记录校验值:每一行的最后一个值为此行数据的校验和。
例如::1000000018F09FE518F09FE518F09FE518F09FE5C0 这行中的 0xC0:1000100018F09FE5805F20B9F0FF1FE518F09FE51D 这行中的 0x1D校验和的算法为:计算从0x3A 以后(不包括0x3A)的所有各字节的和模256的余。
即各字节二进制算术和,不计超过256的溢出值,然后用0x100减去这个算数累加和,得出得值就是此行得校验和。
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文件解析2012-07-18 18:17:58HEX文件解析HEX格式文件以行为单位,每行由“:”(0x3a)开始,以回车键结束(0x0d,0x0a)。
行内的数据都是由两个字符表示一个16进制字节,比如”01”就表示数0x01;”0a”,就表示0x0a。
对于16位的地址,则高位在前低位在后,比如地址0x010a,在HEX格式文件中就表示为字符串”010a”。
<0x3a>[数据长度1Byte][数据地址2Byte][数据类型1Byte][数据nByte][校验1Byte]<0x0d><0x0a>Example.hex行号原始码1 : 10 0000 00 020003787FE4F6D8FD75812B02004A02 D62 :10001000008FE493A3F8E493A34003F68001F208713 :10002000DFF48029E493A3F85407240CC8C333C4354 :10003000540F4420C8834004F456800146F6DFE4A05 :10004000800B01020408102040809000C2E47E01716 :100050009360BCA3FF543F30E509541FFEE493A3137 :1000600060010ECF54C025E060A840B8E493A3FAF78 :10007000E493A3F8E493A3C8C582C8CAC583CAF0B19 :10008000A3C8C582C8CAC583CADFE9DEE780BEE43216 :0700F0001F70F31E80F022D717 :00000001FF面对这一大串的十六进制码,有没有头昏眼花的感觉呢?别急别急,经过本文的介绍,你一定会爱上这个会让你头昏眼花的机器码的!首先我们先介绍HEX文件的编码格式,举范例程序中第一行说明:: 10000000020003787FE4F6D8FD75812B02004A02D612 3 4 5 6为了方便解说,笔者将原始码以空格区分成六个部分,在实际转换的原始内容应该没有空格也没有行号的。
《hex文件(是文本文件)和bin文件(是二进制文件)的区别》
************************************************************************************ hex文件:是ASCII码的文本文件,由“:”开头的一行行的记录组成,每个记录的格式如下:***********************************************************************************:ll aaaa tt[dd...]cc记录格式中每个字符表示一个16进制数(4bit),前4个字节和最后一个字节是附加信息,[dd...]是数据(代码)格式含义解释如下:<:> --- hex记录开始符号<ll> --- dd的长度<aaaa> --- dd的地址<tt> --- hex记录的类型,含义如下:00 = data record (数据记录)01 = end-of-file record (文件结束记录)02 = extended segment address record (8086段地址记录,即4~19的高16位地址)04 = extended linear address record(80386线性地址记录,分成高16位和低16位分别表示,如下面的截图)<dd...> --- 数据cc --- 记录校验和************************************************************************************ bin文件:是二进制文件,只包含数据。
***********************************************************************************hex文件和bin文件的区别一个数据比如0x12h,在hex文件中,由两个字节的ASCII码组成:0x31、0x32表示.在bin文件中,直接是0x12.hex文件第二条记录的数据如黄色区域粉红框中的“04”,表示是记录是按照80386模式(32位地址)的记录;绿色框中的是高16位地址;蓝色框中的是低16位地址,当低16位地址超过0x0000FFFF时,会变为下图:bin文件用hex查看器打开,只包含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 是记录当中数据字节的数量。
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文件格式详解
学习的路上,越努力越渺小。
——单片机初学者在学习单片机的路上,我用过KEIL、CodeWarrior、CCS等编译器,但最近因一个小项目,采用的PIC18F25K80芯片,使用MPLAB的PICC18编译器,在烧写代码的时候,突然意识到自己一直在使用.Hex文件,但从未对该文件去研究、理解过,从而有此下文:Hex文件通常由编译器在项目编译链接后生成,用于传输被存储于ROM或者EEPROM 的程序或数据,可在项目工程目录下查找到。
用记事本或者Notepad++打开hex文件,hex 文件由一行行“:数字”组成,每行以冒号开头,内容全部为16进制数字。
Hex文件每行都是一个十六进制的记录,该记录由5各部分组成:数据长度(1个字节)、数据起始地址(2个字节,高位在前,低位在后)、记录类型(1个字节)、数据(n个字节)、校验码(1个字节)。
打开Hex文件,如下::020*********F2:101800002039002055190008A1270008A327000847:1018100000000000000000000000000000000000C8…:10C000001A67296887689968A768B20529A401009A:10C01000204214021440420A0313DA0342140313A9:08C020000B03420A0327DB03B6:04000005080018BD1A:00000001FF以:101800002039002055190008A1270008A327000847为例:“0x100x180x000x000x200x030x900x020x550x190x000x080xA10x270x000x080xA3 0x270x000x080x47”“:”表示记录开始;“回车换行”表示记录结束;“0x10”表示数据长度是16,即本条记录数据是16个字节;“0x180x00”表示数据起始地址,即本条记录的数据起始地址为0x1800;“0x00”表示数据类型,数据类型有:0x00、0x01、0x02、0x03、0x04、0x05。
单片机烧录文件HEX文件格式说明
HEX文件格式说明在我讲解《微型计算机控制技术》的时候,一个学生问我关于HEX的内容解释时,我的解释不够清晰,感觉不太,我下课后立刻上网查找收集资料,并且整理如下,同时发给学生一份。
整理如下:概念描述HEX文件格式是一种能够烧写到单片机中,被单片机执行的文件格式。
可以使用不同的编辑器将C 或汇编源文件编译成HEX文件,如IAR,KEIL等。
Hex文件是遵循Hex文件格式的ASCII文本文件。
在Hex文件的每一行中都包含了一个hex记录。
这些记录是由一些代表机器语言代码和常量的16进制数据组成。
Hex文件常用来传输要存储在ROM、EPROM或者Flash中的程序和数据。
大部分的EPROM编程器都能使用Hex文件。
格式介绍Hex由任意数量的十六进制记录组成。
每个记录包含6个域,它们按下列格式排列。
| MARK | RECLEN | OFFSET | RECTYP | DA TA | CHKSUM |,实际表示如下例1::04010C00303230005D用以下表1解释上述格式:1Byte(8 bit)用表 1 HEX格式组成| MARK |——(1Byte)Start Code(冒号):每个HEX记录都由冒号开头;| RECLEN |——(1Byte)Byte count(本行数据长度):是数据长度域,它代表记录中数据的字节量,如例1中的04表示本条记录中有4个字节的数据;| OFFSET |——(2 Byte)Address(本行数据的起始地址):是地址域,它代表记录当中数据的起始地址;如例1中的010C表示本条记录中第一个数据30的地址为010C。
| RECTYP |-----> (1 Byte)Record type(数据类型):是代表HEX记录类型的域,它可能是以下数据当中的一个:例子中的00表示该行为数据记录。
表 2 数据类型对照表| DATA |——(n Byte)Data(数据):是数据域,一个记录可以有许多数据字节.记录当中数据字节的数量必须和数据长度域中指定的数字相符;最多0xFF个。
HEX文件格式分析
HEX文件格式分析一个HEX文件通常由多个记录(record)组成,每个记录有不同的用途和格式。
下面是HEX文件的格式详解:1. 记录类型(Record Type):每个记录都有一个记录类型字段,用来指定该记录的类型。
常见的记录类型有:a. 数据记录(Data record):用来存储机器指令的二进制数据。
b. 扩展线性地址记录(Extended Linear Address record):用来指定下一条数据记录加载的地址。
c. 起始线性地址记录(Start Linear Address record):用来指定程序的起始地址。
2. 记录长度(Record Length):记录长度字段指定了该记录的数据字段的长度(以字节为单位)。
3. 起始地址(Start Address):起始地址字段指定了该记录对应的数据在内存中的起始地址。
4. 数据字段(Data Field):数据字段包含了该记录对应的机器指令的二进制数据。
每个数据字段的长度由记录长度字段指定。
5. 校验和(Checksum):校验和字段用来验证该记录的数据的完整性。
它是将记录类型、记录长度、起始地址和数据字段中的数据累加,并对256取模后的结果的补码。
```:LLAAAARRDDDDDDDD...DDCC```其中,符号“:”表示记录起始标志;LL表示记录长度;AAAA表示起始地址;RR表示记录类型;DD表示数据字段;CC表示校验和。
1.解析HEX文件:读取HEX文件的每个记录,根据记录类型字段和数据字段进行解析。
2.加载机器指令:将HEX文件中的机器指令加载到指定的内存地址中。
3.执行程序:将内存中的指令送入处理器执行。
HEX文件格式可以方便地将机器语言程序存储在文本文件中,以便于传输和共享。
它在嵌入式系统开发和固件升级等领域得到广泛应用。
通过对HEX文件进行解析和加载,我们可以将机器语言程序加载到目标设备上,并实现特定的功能。
总结:HEX文件格式是一种用于存储机器语言程序的文件格式,它由记录类型、记录长度、起始地址、数据字段和校验和等字段组成。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Hex File ReferenceThe postlocator is responsible for generating the hex file needed for the ROM flow. It can also be used by emulator and simulator for testing purposes. Due to the data structure of Intel hex files, it is not possible to handle virtual and physical addresses as data structures within the same file nor virtual addresses for multiple levels. Therefore, SLE 79 specific information is provided within comment lines. Such information are comments to be is played in the ROM generator GUI, date and time of creation, segment descriptors, virtual addresses and so on.Note: The Intel hex file is an ASCII text file with lines of text that follow the Intel hex file format. Each data line in an Intel hex file contains one hex record. These records are made up of hexadecimal numbers that represent machine language code and/or constant data. Intel hex files are often used to transfer program and data to be stored in ROM or NVM.1.1 Hex File StructureThe SLE 70 hex file is divided into three parts which have to occur in the described order:• Comment part containing the following information:–As first line “; TYPE=SLE70_MASK_IHEX” as identifier for the SLE 70 hex file format.– Five sections in arbitrary order- COMMENT (optional)- INFO- MEMORY_ADDRESSES- CONFIG- DESCRIPTOR– The keywords inside these sections may contain- Letters “a –z” and ”A –Z” (not case sensitive)- Digits “0 –9” but not as first character- “-” or “_” but not as the first character-Leading and trailing spaces are ignored• Data part which data lines (records) start always with a colon “:”. The only comments allowed in this part are the definitions of the virtual addresses “V_ADDR = 0x...”. These comments are allowed at the beginning of a line and define the virtual address for the following data lines until another definition of the virtual address. The virtual address must contain the level information in the upper byte. The offsetin an extended linear address record affects both the physical and the virtual address. Gaps in the data record section also affect the virtual address.• Optional comment part which is situated after the “end-record” line.General Rules• The indicator for a comment line is t he semicolon “;”.• The indicator for a data line is the colon “:”.• Every character to the right of the equal sign will be assigned to the value of the keyword, except leading and trailing spaces. Quoting of strings containing spaces is not required.• E mpty lines may occur anywhere in the file.1.1.1Body of a SLE 70 HEX FileThe basic structure of a SLE 70 hex file is given below. Optional parts are shown in green.Please note that only within the green marked parts user comments are allowed and may be freely edited. All other parts (red, blue and magenta) must not be changed by the user.Please keep also in mind that within the INFO_SECTION some tool components may appear more than once and in different versions. That is not a fault (is a feature?) because large projects developed over a long time may include modules formerly developed with older tool component versions.1.1.2 Syntax of INFO_SECTION1.1.3 Syntax of MEMORY_ADDRESSES_SECTION1.1.4 Syntax of CONFIG_SECTION1.1.5 Syntax of FILL_MEMORY_SECTION1.1.6 Syntax of SYMBOL_SECTION1.1.7 Syntax of DESCRIPTOR_SECTION1.2 Record FormatAn Intel HEX file is composed of any number of HEX records. Each record is made up of five fields that are arranged in the following format:Each group of letters corresponds to a different field, and each letter represents a single hexadecimal digit. Each field is composed of at least two hexadecimal digits, which make up a byte, as described below:1.2.1 Data RecordThe Intel HEX file is made up of any number of data records that are terminated with a carriage return and a linefeed. Data records appear as follows:1.2.2 End-of-File RecordAn Intel HEX file must end with an end-of-file (EOF) record. This record must have the value 01 in the record type field. Any HEX records following this record will be ignored. An EOF record always appears as follows:1.2.3 Extended Linear Address RecordThe Intel HEX contains extended linear address records when the H386 directive is used. This record is used to specify the two most significant bytes (bits 16 - 31) of the absolute address. This address offset is used for all following data records. Extended linear address records appear as follows:1.3 ExampleHex文件是可以烧录到MCU中,被MCU执行的一种文件格式。