打印

PIC单片机Hex文件的校验和是怎么计算的?

[复制链接]
2706|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
最近做一个PIC16F系列单片机的BootLoader更新程序上位机,想解析Hex文件,无法知道hex校验和的计算过程,按checksum16来计算发现对不上,我把程序文件全部填充x00,发现校验和是0x529F,应该是配置字这边计算的结果,把配置字相加取16位也对不上。              

使用特权

评论回复
沙发
虹涛犹珷|  楼主 | 2025-6-2 10:44 | 只看该作者
下面的测试的图片


使用特权

评论回复
板凳
丙丁先生| | 2025-6-2 22:37 | 只看该作者
没选对文件吧

使用特权

评论回复
地板
xch| | 2025-6-3 14:06 | 只看该作者
虹涛犹珷 发表于 2025-6-2 10:44
下面的测试的图片

写个软件破姐一下。也许是CRC16。

使用特权

评论回复
5
xch| | 2025-6-3 14:12 | 只看该作者
不需要一大堆样本。用两个字节。
比如 00 00;00 01;看看校验怎么变化。大变样就猜是CRC16。就穷举生成码和初始码。就32bit运算量。很快就能得到结果

使用特权

评论回复
6
wutaosamuel| | 2025-6-3 17:13 | 只看该作者
我用v6.25的IPE版本来看应该可以选择CRC32的校验的,看看CRC32的能不能用



使用特权

评论回复
7
治愈糖果屋| | 2025-6-3 19:09 | 只看该作者
校验和计算通常是根据Hex文件中的字节数据来计算的。对于PIC单片机,校验和的计算可能涉及到特定的算法,这可能需要查阅官方的技术文档。

使用特权

评论回复
8
虹涛犹珷|  楼主 | 2025-6-3 20:41 | 只看该作者

已经解决了校验的问题,需要看官方的文档https://ww1.microchip.com/downloads/aemdocuments/documents/oth/productdocuments/programmingspecifications/41390d.pdf#page=30

使用特权

评论回复
9
虹涛犹珷|  楼主 | 2025-6-3 20:42 | 只看该作者
治愈糖果屋 发表于 2025-6-3 19:09
校验和计算通常是根据Hex文件中的字节数据来计算的。对于PIC单片机,校验和的计算可能涉及到特定的算法,这 ...

是的,已经找到文档了

使用特权

评论回复
10
虹涛犹珷|  楼主 | 2025-6-3 20:46 | 只看该作者
wutaosamuel 发表于 2025-6-3 17:13
我用v6.25的IPE版本来看应该可以选择CRC32的校验的,看看CRC32的能不能用

在官方的文档帮助下已经找到了校验的计算过程。

使用特权

评论回复
11
丙丁先生| | 2025-6-4 06:56 | 只看该作者
虹涛犹珷 发表于 2025-6-3 20:41
已经解决了校验的问题,需要看官方的文档https://ww1.microchip.com/downloads/aemdocuments/documents/o ...

感谢分享,应用场景?

使用特权

评论回复
12
虹涛犹珷|  楼主 | 2025-6-4 15:35 | 只看该作者
丙丁先生 发表于 2025-6-4 06:56
感谢分享,应用场景?

制作了一个BootLoader的上位机,可以导入hex,解析并计算出校验和,然后通过串口更新程序。

使用特权

评论回复
13
丙丁先生| | 2025-6-5 03:16 | 只看该作者
虹涛犹珷 发表于 2025-6-4 15:35
制作了一个BootLoader的上位机,可以导入hex,解析并计算出校验和,然后通过串口更新程序。 ...

感谢分享

使用特权

评论回复
14
Annie556| | 2025-6-9 13:46 | 只看该作者
从每行Hex记录的起始字符(冒号“:”)之后开始,到校验和之前的所有字节均参与计算。例如,对于一行Hex记录“:040000002CEF10F0E1”,参与校验和计算的字节为“04 00 00 00 2C EF 10 F0”。

使用特权

评论回复
15
Estelle1999| | 2025-6-9 15:10 | 只看该作者
字节累加,将校验范围内的所有字节按无符号十六进制数进行累加。以示例行“:040000002CEF10F0E1”为例,累加和计算为:04+00+00+00+2C+EF+10+F0=1E1(十六进制)

使用特权

评论回复
16
Emily999| | 2025-6-9 15:58 | 只看该作者
取模运算,将累加和除以256(即十六进制的0x100),取余数。示例中的累加和1E1转换为十进制为481,481%256=225。

使用特权

评论回复
17
Carina卡| | 2025-6-9 17:05 | 只看该作者
用256减去余数,得到校验和。示例中256−225=31,即十六进制的0x1F

使用特权

评论回复
18
Freeandeasy| | 2025-6-9 18:14 | 只看该作者
校验和以一个字节的十六进制数表示,并紧跟在Hex记录的数据之后。在示例行中,计算得到的校验和0x1F与记录中的校验和“E1”(此处为示例错误,实际应为0x1F)对比,若一致则说明数据传输正确。

使用特权

评论回复
19
limerenceforu| | 2025-6-9 19:27 | 只看该作者
用于验证Hex文件在传输或存储过程中是否发生错误,确保数据的完整性。

使用特权

评论回复
20
EuphoriaV| | 2025-6-9 21:10 | 只看该作者
校验和位置,位于每行Hex记录的末尾,以两个十六进制字符表示。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

7

帖子

0

粉丝