[转]HEX文件格式解析
1.前言
本文主要讲述keil MDK 下STM32编译生成的的HEX镜像文件格式。并说明镜像load地址是如何添加进HEX文件的。
2.keil MDK如何在HEX文件中添加load addr
通过在keil mdk中进行如下的设置,则会将0x8019000的load addr加入到HEX文件中

图 镜像配置
3.HEX文件格式
| 冒号 | 本行数据长度 | 本行数据起始地址 | 数据类型 | 数据 | 校验码 |
| 1 byte | 2 bytes | 1 byte | n byte | 1 byte |
表 HEX文件格式
- 以行为单位,每行以冒号开头,内容全部为16进制码(以ASCII码形式显示)
- 在HEX文件里面,每一行代表一个记录。记录的基本格式为如上表所示
(1)第一个字节 表示本行数据的长度;
(2)第二、三字节表示本行数据的起始地址;
(3)第四字节表示数据类型,数据类型有: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)之后是数据
(5)最后一个字节 为校验和。
注:校验和的算法为:计算校验和前所有16进制码的累加和(不计进位),检验和 = 0x100 - 累加和
3.HEX实例
笔者说编译出的HEX文件内容如下:
:020000040801F1
:10900000E84D002039930108F5B30108F7B30108D2
:10901000F9B30108FBB30108FDB30108000000002B
:109020000000000000000000000000004D92010858
:10903000FFB3010800000000D59201082593010844 .... :00000001FF
- 第一条语句:02 0000 04 0800 F2
| 冒号 | 本行数据长度 | 本行数据起始地址(偏移地址) | 数据类型 | 数据 | 校验码 |
| 1 byte | 2 bytes | 1 byte | n byte | 1 byte | |
| : | 02 | 0000 | 04 | 0801 |
F1 |
在上面的数据类型后2种记录(04,05)都是用来提供地址信息的。每次碰到这2个记录的时候,都可以根据记录计算出一个“基”地址。对于后面的数据记录,计算地址的时候,都是以这些“基”地址为基础的。
以我们的语句为例:第1条记录的长度为02,LOAD OFFSET为0000,RECTYPE为04,说明该记录为扩展段地址记录。数据为0801,校验和为F1。
从这个记录的长度和数据,我们可以计算出一个基地址,这个地址为(0x0801 << 16) = 0x0801 0000 ,后面的数据记录都以这个地址为基地址。
- 第二条语句 :10900000E84D002039930108F5B30108F7B30108D2
| 冒号 | 本行数据长度 | 本行数据起始地址(偏移地址) | 数据类型 | 数据 | 校验码 |
| 1 byte | 2 bytes | 1 byte | n byte | 1 byte | |
| : | 10 | 9000 | 00 | E84D002039930108F5B30108F7B30108 | D2 |
第2条记录的长度为10(0x10=16字节),LOAD OFFSET为0000,RECTYPE为00('00' Data Rrecord:用来记录数据,HEX文件的大部分记录都是数据记录),数据为E84D002039930108F5B30108F7B30108 校验码为D2;
此时基地址为:0x0801 0000 加上偏移地址:0x9000 这条记录的16个字节的数据的起始地址为:0x0801 0000+ 0x9000 =0x0801 9000
- 第四条语句:00000001FF” (每一个.hex文件的最后一行都是固定为这个内容)
| 冒号 | 本行数据长度 | 本行数据起始地址(偏移地址) | 数据类型 | 数据 | 校验码 |
| 1 byte | 2 bytes | 1 byte | n byte | 1 byte | |
| : | 00 | 0000 | 01 | FF |
(每一个.hex文件的最后一行都是固定为这个内容)
记录的长度为00,LOAD OFFSET为0000,RECTYPE为01 (01' End of File Record:用来标识文件结束,放在文件的最后,标识HEX文件的结尾)
4.参考文献
[1] http://blog.csdn.net/yx_l128125/article/details/13624947
[转]HEX文件格式解析的更多相关文章
- hex文件格式
hex文件格式是可以烧写到单片机中,被单片机执行的一种文件格式,生成Hex文件的方式有很多种,可以通过不同的编译器将C程序或者汇编程序编译生成hex. Hex文件格式解析 Hex文件如果用特殊的程 ...
- ArcGIS三大文件格式解析
原文:ArcGIS三大文件格式解析 Shape数据 Shapefile是ArcView GIS 3.x的原生数据格式,属于简单要素类,用点.线.多边形存储要素的形状,却不能存储拓扑关系,具有简单.快速 ...
- Android init.rc文件格式解析
/***************************************************************************** * Android init.rc文件格式 ...
- mp4文件格式解析(转载)
mp4文件格式解析 原作:http://blog.sina.com.cn/s/blog_48f93b530100jz4b.html 目前MP4的概念被炒得很火,也很乱.最开始MP4指的是音频(MP3的 ...
- C++PE文件格式解析类(轻松制作自己的PE文件解析器)
PE是Portable Executable File Format(可移植的运行体)简写,它是眼下Windows平台上的主流可运行文件格式. PE文件里包括的内容非常多,详细我就不在这解释了,有兴趣 ...
- Intel HEX文件解析
近期有一个需求就是为Arduino开发板做一个基于蓝牙的无线烧录程序.眼下的Arduino程序都是通过USB线连接到电脑的主机上,实际的传输过程是基于USB协议的,这个过程还是比較麻烦的.由于每次的编 ...
- HEX文件格式学习笔记
这也是一篇学习摘抄:原文地址:http://blog.csdn.net/syrchina/article/details/7004998 为了编写一个可以按照自己的要求进行ISP的程序, ...
- 解析prototxt文件的python库 prototxt-parser(使用parsy自定义文件格式解析)
解析prototxt文件的python库 prototxt-parser https://github.com/yogin16/prototxt_parser https://test.pypi.or ...
- mp4文件格式解析(转)
mp4文件格式解析 MP4文件格式带数据详解 MP4文件格式的解析,以及MP4文件的分割算法
随机推荐
- 洛谷 P4475 巧克力王国 解题报告
P4475 巧克力王国 题目描述 巧克力王国里的巧克力都是由牛奶和可可做成的.但是并不是每一块巧克力都受王国人民的欢迎,因为大家都不喜欢过于甜的巧克力. 对于每一块巧克力,我们设 \(x\) 和 \( ...
- 前端学习 -- Html&Css -- 框架集
框架集和内联框架的作用类似,都是用于在一个页面中引入其他的外部的页面,框架集可以同时引入多个页面,而内联框架只能引入一个,在h5标准中,推荐使用框架集,而不使用内联框架. 使用frameset来创建一 ...
- 在Android中通过Intent使用Bundle传递对象
IntentBundle传递对象SerializableParcelable Android开发中有时需要在应用中或进程间传递对象,下面详细介绍Intent使用Bundle传递对象的方法.被传递的对象 ...
- js的append拼接html丢失css样式解决
htmlApp += "<li id='leftli"+lunci+"'>"; htmlApp += "<span id='left ...
- Python基础学习(五)
一.使用模块 已经了解了什么是模块,模块就是一个个文件的体,我们可以做不同的文件中引入各个模块文件,当然如果模块有冲突,还可以给模块文件的上层建立一个目录简称包,包名只能唯一,不能重名. 另外,一旦建 ...
- DTLS协议中client/server的认证过程和密钥协商过程
我的总结:DTLS的握手就是协商出一个对称加密的秘钥(每个客户端的秘钥都会不一样),之后的通信就要这个秘钥进行加密通信.协商的过程要么使用非对称加密算法进行签名校验身份,要么通过客户端和服务器各自存对 ...
- CodeForces834D DP + 线段树
http://codeforces.com/problemset/problem/834/D 将一个长度为n的序列分为k段 使得总价值最大一段区间的价值表示为区间内不同数字的个数 n<=3500 ...
- 2018acm-icpc西安邀请赛后记
第一次参加icpc的邀请赛,有一点小激动,深知大一弱队实力弱,赛前给队友的目标就是拿块铜,不打铁. 热身赛因为没有用过pc^2,codeblocks又用不习惯的原因,开始调工程调了很久,差一点拿到A题 ...
- Scala进阶之路-Scala中的枚举用法案例展示
Scala进阶之路-Scala中的枚举用法案例展示 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. Scala中的枚举值和Java中的枚举值有点差别,不过使用起来也都差大同小异,我这 ...
- JDBC中的那些设计模式
一.单例模式获取数据库连接 1.关于单例模式的定义 保证一个类仅有一个实例,并提供访问它的全局访问点.Java里面实现的单例是一个虚拟机的范围.因为装载类的功能时虚拟机,所以一个虚拟机在听过自己的Cl ...