这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » MCU中Hex文件的校验生成和验证

共6条 1/1 1 跳转至

MCU中Hex文件的校验生成和验证

高工
2021-08-19 10:29:23     打赏

手机升级系统,下载完系统都会存在一个校验过程:

image.png


其实,在MCU升级过程中,也是需要校验hex文件,如果要想升级更可靠,还可以在hex或bin升级文件后再增加校验信息。


我们之前公司做的一个远程升级的产品,就是在升级文件之后增加了CRC16校验信息,在接收完整个升级文件之后,进行校验,这样做的目的就是使升级更可靠。

今天来讲讲hex文件的校验和验证校验的内容。

image.png


hex 格式文件由 Intel 制定的一种十六进制标准文件格式,是由编译器转换而成的一种用于下载到处理器里面的ASCII文本文件。


1.解释image.png

2.格式

image.png

其中:

代表行开始,固定为冒号:

BB代表Bytes,数据长度

AAAA代表Address,地址

TT代表Type,数据类型(标识)

D···D代表Date,数据

CC代表CheckSum,校验和

说明:

BB数据长度,也就是D···D这个字段的数据长度;

AAAA地址,起始地址、偏移地址,根据数据类型(TT)有关;

TT数据类型(标识):

  • 00:数据标识

  • 01:文件结束标识

  • 02:扩展段地址

  • 04:线性地址

  • 05:线性开始地址

(地址代表高16位地址,也就是要向左移16bit)

CC校验和计算公式:

image.png

image.png

下面通过一个例子来说明hex。

说明一下:不同数据类型的数据略有差异,先再看下00(数据类型)的格式:

image.png

一个常见hex文件:

image.png

1.04类型:线性地址行

image.png


02:数据长度,这里是(0800)地址的2字节长度;


0000:偏移地址,这里数据其实无效;
04:线性地址数据类型;

0800:线性起始地址,左移16位,即:0x0800 0000;
F2:校验和

F2 =  0x100 - (0x02 + 0x04 + 0x08);

比如,修改起始地址为0600:

image.png

2.00类型:数据行

image.png

10:数据长度,这里是16字节(程序)数据的长度;

0000:偏移地址,数据第一行偏移0000地址,第二行就是偏移0010,第二行就是偏移0020,依次偏移到FFF0;如果偏移到FFF0,则会重新下一个起始地址,一段程序你就明白了:

image.png


00:线性地址数据类型;


00040020B1010008FD020008BD020008:程序数据,就是bin文件里面的纯程序数据;
44:校验和

44 =  0x100 - (0x10 + 0x04 + 0x20 + 0xB1 + 0x01 + 0x08 + 0xFD + 0x02 + 0x08 + 0xBD + 0x02 + 0x08 + 0x44) & 0xFF;


3.01类型:文件结束行

image.png


00:数据长度;


0000:偏移地址,这里数据其实无效;
01:代表文件结束

FF:校验和

这里代表hex文件结束了,有些公司为了使hex传输(下载)更可靠,或通过工具(或命令在)结束行后面追加校验信息,一般远程升级会考虑更多校验信息(后期抽时间讲述一下远程升级)。

image.png

Hex实际占用存储区大小计算办法:

Hex实际大小=文件结束标志前面一条记录的存储起始地址+这条记录的有效数据长度。
下面算法实现hex行的校验,校验成功返回1,失败返回0:


image.png

当然,实现的算法可以各式各样,按照原理实现即可。

转帖自网络




关键词: MCU     hex    

工程师
2021-08-19 20:00:58     打赏
2楼

谢谢分享


工程师
2021-08-19 20:14:21     打赏
3楼

谢谢楼主分享



工程师
2021-08-19 20:46:15     打赏
4楼

谢谢分享


工程师
2021-08-19 20:52:45     打赏
5楼

学习到了


工程师
2021-08-19 21:00:53     打赏
6楼

谢谢楼主分享


共6条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]