hex文件结构

2024-04-07 01:32
文章标签 结构 hex

本文主要是介绍hex文件结构,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

HEX 文件以行为单位。每行以字符 ‘:’ (0x3a) 开头,以回车换行符 0x0d, 0x0a 为结束。每行开始和结束之间的所有内容,都是以字符形式表现的。例如数据如果是 0x1A ,那么转换到 HEX 格式的行里面就是 0x31 0x41 。如果数据是 16bit 的,例如地址,则先显示高位,后显示底位。例如 0x1234 ,转换成 HEX 格式文件后变成 0x31 0x32 0x33 0x34 ,显示出来以后就是 1234 。将数据部分内容每 2 个字符看做 一个字节得 HEX 数据,例如:

:020000040000FA , 我把它看做 0x02 0x00 0x00 0x04 0x00 0x00 0xFA

第一个 0x02 为数据长度。

紧跟着后面的 0x00 0x00 为地址。

再后面的 0x04 为数据类型,类型共分以下几类:

'00' Data Record

'01' End of File Record

'02' Extended Segment Address Record

'03' Start Segment Address Record

'04' Extended Linear Address Record

'05' Start Linear Address Record

       然后,接着 0x04 后面的两个 0x00 0x00 就是数据。最后一个 0xFA 是校验码。

       HEX 文件的每一行都是这样的格式:

<0x3a>

[ 数据长度 1Byte]

[ 数据地址 2Byte]

[ 数据类型 1Byte]

[ 数据 nByte]

[ 校验 1Byte]

<0x0d>

<0x0a>

 

在例如:

:1000000018F09FE518F09FE518F09FE518F09FE5C0

按照上面的数据行格式分析如下 :

<0x3a>

 

[ 数据长度 1Byte]

10

[ 数据地址 2Byte]

00 00

[ 数据类型 1Byte]

00

[ 数据 nByte]

18F 09FE518F09FE518F09FE518F09FE5

[ 校验 1Byte]

C0

<0x0d>

 

<0x0a>

 

 

每行中的数据并不是一定有的,第二个字节数据长度为 0 ,那么这行就没有数据。

由于每行标识数据地址的只有 2Byte ,所以最大只能到 64K ,为了可以保存高 地址的数据,就有了 Extended Linear Address Record 。如果这行的数据类型是 0x04 ,那么,这行的数据就是随后数据的基地址。例如:

:020000040004F6

:1000000018F09FE518F09FE518F09FE518F09FE5C0

:1000100018F09FE5805F20B9F0FF1FE518F09FE51D

第一行,是 Extended Linear Address Record ,里面的数据,也就是基地址是 0x0004 ,第二行是 Data Record ,里面的地址值是 0x0000 。那么数据 18F 09FE518F09FE518F09FE518F09FE5 要写入 FLASH 中的地址为 (0x0004 << 16) | 0x0000 ,也就是写入 FLASH 的 0x40000 这个地址。同样,第三行的数据的写入地址为 0x40010 。当一个 HEX 文件的数据超过 64k 的时候,文件中就会出现多个 Extended Linear Address Record 。

End of File Record 行是每一个 HEX 文件的最后一行。例如:

:00000001FF

这样的一行数据内容是固定的,数据长度为 0 ,地址为 0 。

 

校验值:每一行的最后一个值为此行数据的校验和。例如:

:1000000018F09FE518F09FE518F09FE518F09FE5C0 这行中的 0xC0

:1000100018F09FE5805F20B9F0FF1FE518F09FE51D 这行中的 0x1D

 

校验和的算法为:计算从 0x3A 以后(不包括 0x3A )的 所有各字节的和模256 的余。即各字节二进制算术和,不计超过256 的溢出值 ,然后用 0x100 减去这个算数累加和,得出得值就是此行得校验和。

--------------------------------------------------------------------

Intel HEX文件是用来保存单片机或其他处理器的目标程序代码的文件,它保存物理程序存储器中的目标代码的映像,以便编程器和仿真器调用.绝大多数编程器都支持Intel HEX格式。
  下面是一个Intel HEX文件用记事本打开后看到的内容:
  :020000040000FA
  :1000000018F09FE518F09FE518F09FE518F09FE5C0
  :1000100018F09FE5805F20B9F0FF1FE518F09FE51D
  :10002000C000000040000000440000004800000044
  :100030004C00000000000000000000005000000024
  ......
  :103020005C300000A8E60040000000005C300000BA
  :1030300000000140000000004830000000000000D7
  :103040001400004094E6000032FFF0FFE8030000A7
  :0C30500064000000FFFFFFFF0100000013
  :00000001FF
  Intel HEX文件是文本行的ASCII文本文件,文件内容全部由可打印的ASCII字符组成,可以用记事本打开.
  Intel HEX由一条或多条记录组成,每行一个记录,每条记录都以冒号":"开始,以回车(0DH)和换行(0AH)结束.
  除":"外,每条记录有五个域,每一域由2N(N>=1)个HEX字符组成,格式如下
  :[AA][BBBB][CC][DD....DD][EE]
  其中:
    [AA]   :表示该记录的实际数据的长度;
    [BBBB]  :表示该记录所包含的数据在实际的存储区中的起始地址;
    [CC]   :为该记录的类型;
    [DD....DD]:为该记录的实际数据,由2N(N>=1)个HEX字符组成,该域的长度应当与[LL]域所指出长度一致.
    [EE]   :为该记录的数据校验和.
  例如对上面例子中的第一行:
    :020000040000FA
  用"["和"]"分开后如下:     :[02][0000][04][0000][FA]
    [02] :该记录的实际数据的长度[AA]为2个字节(4个HEX字符);
    [0000]:该记录所包含的数据在实际的存储区中的起始地址[BBBB]为0000H;
    [04] :该记录的类型[CC]为04——扩展线性地址;
    [0000]:该记录的实际数据[DD....DD];
    [FA] :该记录的数据校验和[EE];
  对上面例子中的倒数第三行
    :1030300000000140000000004830000000000000D7
  用"["和"]"分开后如下:
    :[10][3030][00][00000140000000004830000000000000][D7]
    [10] :该记录的实际数据的长度[AA]为16D(10H)个字节(20H个HEX字符);
    [3030]:该记录所包含的数据在实际的存储区中的起始地址[BBBB]为3030H;
    [00] :该记录的类型[CC]为00——数据(实际要烧写到存储器中的数据);
    [0000]:该记录的实际数据[DD....DD];
    [FA] :该记录的数据校验和[EE];
常见的记录类型[CC]如下:
  00 :数据记录.表示该记录所包含的数据为实际要烧写到存储器中的数据。
  01 :文件结束记录.表示该记录为本文件的最后一个记录。
  02 :扩展段地址记录.表示该记录所包含的数据为段地址。
  04 :扩展线性地址记录。表示该记录所包含的数据为线性地址。
校验和的计算规则:
  以字节(2个HEX字符)为单位,除“:”以外,当前行所有数据的和为00H.注意对和只取低8位.
  例如对上面例子中的第一行:
    :020000040000FA
    02 00 00 04 00 00 FA
    02H+00H+00H+00H+04H+00H+00H+00H+FAH=100H
  对上面例子中的倒数第三行
    :1030300000000140000000004830000000000000D7
    10 30 30 00 00 00 01 40 00 00 00 00 48 30 00 00 00 00 00 00 D7
    10H+30H+00H+00H+00H+30H+01H+40H+00H+00H+00H+00H+48H+30H+00H+00H+00H+00H+00H+00H+D7H=200H
扩展线性地址:
  当一个扩展线性地址记录被读到后,扩展线性地址将被保存并应用到后面从Intel HEX文件中读出的记录,这个扩展线性一直有效,直到读到下一个扩展线性地址记录.
  绝对地址与扩展线性地址的关系如下:
  绝对地址=数据记录中的地址[BBBB]+移位后的扩展线性地址
扩展段地址记录
  当一个扩展段地址记录被读到后,扩展段地址将被保存并应用到后面从Intel HEX文件中读出的记录,这个扩展段地址一直有效,直到读到下一个扩展段地址记录.
  绝对地址与扩展段地址的关系如下:
  绝对地址=数据记录中的地址[BBBB]+移位后的扩展段地址。

这篇关于hex文件结构的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/881331

相关文章

usaco 1.3 Mixing Milk (结构体排序 qsort) and hdu 2020(sort)

到了这题学会了结构体排序 于是回去修改了 1.2 milking cows 的算法~ 结构体排序核心: 1.结构体定义 struct Milk{int price;int milks;}milk[5000]; 2.自定义的比较函数,若返回值为正,qsort 函数判定a>b ;为负,a<b;为0,a==b; int milkcmp(const void *va,c

MCU7.keil中build产生的hex文件解读

1.hex文件大致解读 闲来无事,查看了MCU6.用keil新建项目的hex文件 用FlexHex打开 给我的第一印象是:经过软件的解释之后,发现这些数据排列地十分整齐 :02000F0080FE71:03000000020003F8:0C000300787FE4F6D8FD75810702000F3D:00000001FF 把解释后的数据当作十六进制来观察 1.每一行数据

自定义类型:结构体(续)

目录 一. 结构体的内存对齐 1.1 为什么存在内存对齐? 1.2 修改默认对齐数 二. 结构体传参 三. 结构体实现位段 一. 结构体的内存对齐 在前面的文章里我们已经讲过一部分的内存对齐的知识,并举出了两个例子,我们再举出两个例子继续说明: struct S3{double a;int b;char c;};int mian(){printf("%zd\n",s

OpenCV结构分析与形状描述符(11)椭圆拟合函数fitEllipse()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C++11 算法描述 围绕一组2D点拟合一个椭圆。 该函数计算出一个椭圆,该椭圆在最小二乘意义上最好地拟合一组2D点。它返回一个内切椭圆的旋转矩形。使用了由[90]描述的第一个算法。开发者应该注意,由于数据点靠近包含的 Mat 元素的边界,返回的椭圆/旋转矩形数据

C语言程序设计(选择结构程序设计)

一、关系运算符和关系表达式 1.1关系运算符及其优先次序 ①<(小于) ②<=(小于或等于) ③>(大于) ④>=(大于或等于 ) ⑤==(等于) ⑥!=(不等于) 说明: 前4个优先级相同,后2个优先级相同,关系运算符的优先级低于算术运算符,关系运算符的优先级高于赋值运算符 1.2关系表达式 用关系运算符将两个表达式(可以是算术表达式或关系表达式,逻辑表达式,赋值表达式,字符

Science|癌症中三级淋巴结构的免疫调节作用与治疗潜力|顶刊精析·24-09-08

小罗碎碎念 Science文献精析 今天精析的这一篇综述,于2022-01-07发表于Science,主要讨论了癌症中的三级淋巴结构(Tertiary Lymphoid Structures, TLS)及其在肿瘤免疫反应中的作用。 作者类型作者姓名单位名称(中文)通讯作者介绍第一作者Ton N. Schumacher荷兰癌症研究所通讯作者之一通讯作者Daniela S. Thomm

oracle11.2g递归查询(树形结构查询)

转自: 一 二 简单语法介绍 一、树型表结构:节点ID 上级ID 节点名称二、公式: select 节点ID,节点名称,levelfrom 表connect by prior 节点ID=上级节点IDstart with 上级节点ID=节点值 oracle官网解说 开发人员:SQL 递归: 在 Oracle Database 11g 第 2 版中查询层次结构数据的快速

Tomcat下载压缩包解压后应有如下文件结构

1、bin:存放启动和关闭Tomcat的命令的路径。 2、conf:存放Tomcat的配置,所有的Tomcat的配置都在该路径下设置。 3、lib:存放Tomcat服务器的核心类库(JAR文件),如果需要扩展Tomcat功能,也可将第三方类库复制到该路径下。 4、logs:这是一个空路径,该路径用于保存Tomcat每次运行后产生的日志。 5、temp:保存Web应用运行过程中生成的临时文件

C和指针:结构体(struct)和联合(union)

结构体和联合 结构体 结构体包含一些数据成员,每个成员可能具有不同的类型。 数组的元素长度相同,可以通过下标访问(转换为指针)。但是结构体的成员可能长度不同,所以不能用下标来访问它们。成员有自己的名字,可以通过名字访问成员。 结构声明 在声明结构时,必须列出它包含的所有成员。 struct tag {member-list} variable-list ; 定义一个结构体变量x(包含

Java Web应用程序的推荐目录结构

以前没有用过maven管理过项目的依赖,最后使用上了maven,发现通过不能方式建立出来的web应用程序目录结构基本都不一样,既然每次都要到网上搜索如何建立maven管理的Web应用程序,不如自己找百度谷歌一下。 找了半天 ,感觉比较好的maven管理的web应用程序目录结构是这个: ├── pom.xml└── src├── main│ ├── java│ │ └── myg