Hex格式文件的解析及单片机中代码实现

2023-1-27 22:30| 发布者: l7kkzvta4q| 查看: 1765| 评论: 4

这里是默认签名
前言

最近在研究STM32的IAP升级功能,发现大多数的IAP升级时的文件格式都是BIN文件,可以直接烧录进FLASH中,但是BIN文件中不含FLASH的地址,这就造成了烧写程序存在一定的不严谨性,可能烧写出错后,不知道在哪块烧写的地址出错,只能全部重新烧写,为此研究了一下IAP升级时使用hex格式文件,hex格式文件每行数据都包含烧写的地址信息,可确保出错后可以方便定位到哪一段地址烧写错误。
hex文件的格式




hex文件部分

hex格式文件每行都必须以‘:’开头,以‘\r\n’换行。

如图,其中第一行:020000040800F2中,可以看做是0x02 0x00 0x00 0x04 0x08 0x00 0xf2,其前四个字节和最后一个字节有特殊含义。中间为数据

第一个0x02表示该行数据中有两个数据

第二个,第三个0x00 0x00表示本行数据的起始地址位,即起始地址为0x0000

第四个字节有0x00 0x01 0x02 0x03 0x04 0x05,分别有以下含义:

'00'Data Rrecord:用来记录数据,HEX文件的大部分记录都是数据记录

'01'文件结束记录:用来标识文件结束,放在文件的最后,标识HEX文件的结尾

'02'扩展段地址记录:用来标识扩展段地址的记录

'03'开始段地址记录:开始段地址记录

'04'扩展线性地址记录:用来标识扩展线性地址的记录

'05'开始线性地址记录:开始线性地址记录

本行数据的第四个字节为04,即表示该行中的数据是记录扩展线性地址的,地址为0x0800,所以数据的起始地址为扩展线性地址+起始地址,即本例的起始地址为0x08000000

最后一个字节0xf2为校验和。校验和= 0x100 - 累加和

第二行数据:

:10F80000D83D002025A7010879A401087BA40108A0

该行数据0x10,表示该行有16个数据,F8 00 表示改行数据的起始地址为0xF800,00表示该行数据的类型是数据记录,D8 3D 00 20 25 A7 01 08 79 A4 01 08 7B A4 01 08表示记录的16个数据,A0为校验和。
代码实现

了解了hex文件的构成后,就需要用代码去解析该文件,在STM32中对接收到上层发下来的文件进行解析,具体代码实现过程如下:

hex文件数据的类型定义



hex格式文件的类型定义

hex文件解析数据结构



hex格式文件结构体

hex文件数据行结构体,最大行需根据硬件的RAM缓存来设置,一般不超过30行。



数据行结构体

头文件定义好后,就可以着手编程了。

具体的代码如下:



hex数据转字符串



hex文件解析代码1



hex文件解析代码2



hex文件解析代码3



hex文件解析代码4



hex文件解析代码5

按此代码运行后就可以解析hex文件,实现IAP升级了。

话说头条编辑代码真的low,不像CSDN一样好用,就这样吧,凑合着看下截图的代码吧,若有源码需求的可以私信我。
这里是默认签名
回复

使用道具 举报

上一篇:三伏天泡脚出汗多好吗 三伏天泡脚可以开空调吗

下一篇:玩了这么多年单片机,hex文件和bin文件的区别你知道吗?

sitemap.txt | sitemap.xml | sitemap.html |Archiver|手机版|小黑屋|彩虹邦人脉系统 ( 皖ICP备2021012059号 )

GMT+8, 2024-4-20 01:16 , Processed in 0.197659 second(s), 46 queries .

快速回复 返回顶部 返回列表