hex文件解析

hex(hexadecimal),十六进制的英文缩写,*.hex为后缀的文件为称之为hex文件,主要用于保
存单片机固件,可直接下载到单片机中,故又称为可执行文件

1、 hex文件内容

  • 打开任意一个hex文件,内容如下(为了内容展示方便,已删除中奖部分内容):

  • 整个文件以行为单位,每行以冒号开头,内容全部为16进制码(以ASCII码形式显示), 2个ASCII码字符表示1个Hex字节。

2、 hex文件解析

hex文件的内容都是有规律的编码,我们可以对它进行解析,以第一行 :020000040800F2 为例:

1) 每一行都以 :(0x3A)开头

2) 第1个字节0x02 ,表示数据区的字节个数,用ASCII表示就是4个ASCII字符

3) 第2、3字节0x00, 0x00 ,表示偏移地址或无用填0

4) 第4个字节0x04, 表示本行记录的数据类型

  • ‘00’ Data Record :用来记录数据, HEX文件的大部分记录都是数据记录
  • ‘01’ End of File Record :用来标识文件结束,放在文件的最后,标识HEX文件的结尾
  • ‘02’ Extended Segment Address Record :用来标识扩展段地址的记录
  • ‘03’ Start Segment Address Record :段地址 STM32不用
  • ‘04’ Extended Linear Address Record :用来标识扩展线性地址
  • ‘05’ Start Linear Address Record :程序启动运行的地址

5) 第5、6个字节0x08, 0x00即是数据

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

7) 每条数据最后还有<0x0d> (回车键)、 <0x0a>(换行键)

总结:hex文件的数据行可按如下方式解析:

  • 注意:由于每行标识数据地址的只有2Byte,所以最大只能到64K,为了可以保存高地址的数据,就有了Extended Linear Address Record。如果这行的数据类型是0x04,那么,这行的数据就是随后数据的基地址。例如:
:020000040004F6
:1000000018F09FE518F09FE518F09FE518F09FE5C0
:1000100018F09FE5805F20B9F0FF1FE518F09FE51D
  • 第一行,是Extended Linear Address Record,里面的数据,也就是基地址是0x0004,
  • 第二行是Data Record,里面的地址值是0x0000。那么数据18F09FE518F09FE518F09FE518F09FE5要写入FLASH中的地址为 (0x0004 << 16) | 0x0000,也就是写入FLASH的0x40000这个地址。
  • 第三行的数据的写入地址为0x40010。当一个HEX文件的数据超过7k的时候,文件中就会出现多个Extended Linear Address Record。

3、 分析示例:

  • :020000040800F2 -----首行给出烧录的目标地址的高16位 : 0x0800

  • :100000003807002029020008B90300086F03000820 ----烧写到0x0800 0000 处的数据

  • :10001000B5030008D10200084706000800000000F0 ----烧写到0x0800 0010 处的数据

  • :040000050800018965 ----05类型的行对于烧写程序无用

  • :00000001FF ----HEX文件结束行

                                                            --- 完 ---
    

本文参考安富莱STM32开发板软件参考手册,笔者知识有限,如果发现本文有错误的地方欢迎批评、指正!

  • 6
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值