硬汉嵌入式论坛

 找回密码
 立即注册
12
返回列表 发新帖
楼主: eric2013
收起左侧

[STM32H7] 成功实现MDK自动生成hex文件的crc值并附加到hex文件末尾(bin也支持),然后跟STM32的硬件CRC计算值做比较

  [复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
 楼主| 发表于 2022-6-13 19:54:25 | 显示全部楼层
yuanzhongda 发表于 2022-6-13 17:36
h743的FLASH的2M的CRC也是可以的吧,就是flash全部用的话

__attribute__((at(x)))固定到你的2M末尾即可,这样就不会全部被程序占用。

回复

使用道具 举报

1

主题

6

回帖

9

积分

新手上路

积分
9
发表于 2022-6-16 00:40:39 | 显示全部楼层
ruboss 发表于 2021-11-13 08:54
Keil获取固件末尾的方法:

示例脚本代码,调用了SRecord的-crc32-l-e,并非对应STM32的硬件CRC模块。在普通STM32系列MCU上,需要把-crc32-l-e 改成 -STM32_Little_Endian
1.png 2.png

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
 楼主| 发表于 2022-6-16 00:53:09 | 显示全部楼层
Fane_xs 发表于 2022-6-16 00:40
示例脚本代码,调用了SRecord的-crc32-l-e,并非对应STM32的硬件CRC模块。在普通STM32系列MCU上,需要把- ...

他这个是整了一个通用玩法,没有用这个-STM32_Little_Endian。

所以它的代码里面仅做了CRC使能就操作DR寄存器实现了。没有调用HAL库提供的CRC计算API。玩法不太一样。
回复

使用道具 举报

0

主题

4

回帖

4

积分

新手上路

积分
4
发表于 2022-6-30 09:57:15 | 显示全部楼层
HEX格式是不是没办法根据文件hex大小加到末尾?,只能加到固定位置?
回复

使用道具 举报

4

主题

166

回帖

178

积分

初级会员

积分
178
发表于 2022-10-12 17:20:38 | 显示全部楼层
我试了下,这样生成的CRC的hex文件会比原来大很多,因为用了所有的地址计算,有办法解决吗
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
 楼主| 发表于 2022-10-13 00:46:35 | 显示全部楼层
q779883414 发表于 2022-6-30 09:57
HEX格式是不是没办法根据文件hex大小加到末尾?,只能加到固定位置?

可以,视频教程里面改成加到末尾了

这个是放到末尾的。
BSP视频教程第18期:基于NAND,eMMC,SD卡和U盘的BootLoader实战,带CRC完整性校验(2022-06-16)
https://www.armbbs.cn/forum.php?mod=viewthread&tid=113053
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
 楼主| 发表于 2022-10-13 00:47:09 | 显示全部楼层
yuanzhongda 发表于 2022-10-12 17:20
我试了下,这样生成的CRC的hex文件会比原来大很多,因为用了所有的地址计算,有办法解决吗

不正常,CRC本身代码非常小的。
回复

使用道具 举报

4

主题

166

回帖

178

积分

初级会员

积分
178
发表于 2022-10-13 08:32:54 | 显示全部楼层
eric2013 发表于 2022-10-13 00:47
不正常,CRC本身代码非常小的。

-fill 0xFF  我发现是因为这个导致的,这个有必要加吗
回复

使用道具 举报

4

主题

166

回帖

178

积分

初级会员

积分
178
发表于 2022-10-13 08:45:24 | 显示全部楼层
eric2013 发表于 2022-10-13 00:47
不正常,CRC本身代码非常小的。

srec_cat.exe app.hex -intel -crop 0x08040000 0x081FFFFC  -fill 0xFF 0x08040000 0x081FFFFC -o .\appcrc.hex -intel   我是用的全部flash,是不是因为加了-fill 0xFF 很多的ff导致的,这个有必要吗
回复

使用道具 举报

76

主题

208

回帖

436

积分

高级会员

积分
436
发表于 2022-12-9 14:36:36 | 显示全部楼层
我现在用的是雅特力的CRC32,计算的flash大小也要4字节对齐,怎么保证生成的app固件的大小是4字节的倍数,还是说32位的MCU生成的固件大小都是4字节的倍数
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
 楼主| 发表于 2022-12-9 15:48:35 | 显示全部楼层
薪火相传 发表于 2022-12-9 14:36
我现在用的是雅特力的CRC32,计算的flash大小也要4字节对齐,怎么保证生成的app固件的大小是4字节的倍数,还 ...

视频教程里面分享这个问题了。

BSP视频教程第18期:基于NAND,eMMC,SD卡和U盘的BootLoader实战,带CRC完整性校验(2022-06-16)
https://www.armbbs.cn/forum.php? ... 3053&fromuid=58
(出处: 硬汉嵌入式论坛)
回复

使用道具 举报

0

主题

4

回帖

4

积分

新手上路

积分
4
发表于 2022-12-22 09:14:41 | 显示全部楼层
eric2013 发表于 2022-10-13 00:46
可以,视频教程里面改成加到末尾了

这个是放到末尾的。

我现在的做法是 生成bin文件把CRC加到末尾,再把BIN文件转换成HEX。 我想问的是 有没有直接把CRC加到HEX文件末尾的。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
 楼主| 发表于 2022-12-22 11:01:37 | 显示全部楼层
q779883414 发表于 2022-12-22 09:14
我现在的做法是 生成bin文件把CRC加到末尾,再把BIN文件转换成HEX。 我想问的是 有没有直接把CRC加到HEX ...

51楼的回复就是,换了个批处理方法。
回复

使用道具 举报

0

主题

1

回帖

1

积分

新手上路

积分
1
发表于 2022-12-22 17:57:19 | 显示全部楼层

h743的FLASH的2M的CRC也是可以的吧,就是flash全部用的话
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
 楼主| 发表于 2022-12-23 10:09:52 | 显示全部楼层
w356877795 发表于 2022-12-22 17:57
h743的FLASH的2M的CRC也是可以的吧,就是flash全部用的话

是的。此时考虑将CRC值存到其它地方了。
回复

使用道具 举报

4

主题

166

回帖

178

积分

初级会员

积分
178
发表于 2023-1-5 10:36:42 | 显示全部楼层
这个小程序是以32位为地址进行计算的吗
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
 楼主| 发表于 2023-1-5 13:04:19 | 显示全部楼层
yuanzhongda 发表于 2023-1-5 10:36
这个小程序是以32位为地址进行计算的吗

没太理解你的意思,32位是想表达4字节对齐?
回复

使用道具 举报

4

主题

166

回帖

178

积分

初级会员

积分
178
发表于 2023-1-5 14:47:15 | 显示全部楼层
eric2013 发表于 2023-1-5 13:04
没太理解你的意思,32位是想表达4字节对齐?

有个问题我不太清楚,就是这个bin文件如果长度不是4的倍数,比如11个字节,它是先对其到4的倍数,再计算,然后再存放在第13~16字节的位置吗
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
 楼主| 发表于 2023-1-6 00:19:44 | 显示全部楼层
yuanzhongda 发表于 2023-1-5 14:47
有个问题我不太清楚,就是这个bin文件如果长度不是4的倍数,比如11个字节,它是先对其到4的倍数,再计算 ...

一定是4字节的整数倍,应该是规约要求还什么,你可以实测下,转换的bin基本不会出现不是4字节的整数倍。

及时不是也没有关系,解决办法比较好弄,使用软件HEX NEO手动添加0就行行,这个在视频教程里面做了新的实现,直接把CRC值放在程序末尾,比此贴的实现更实用些。
BSP视频教程第18期:基于NAND,eMMC,SD卡和U盘的BootLoader实战,带CRC完整性校验(2022-06-16)
https://www.armbbs.cn/forum.php? ... 3053&fromuid=58
(出处: 硬汉嵌入式论坛)



回复

使用道具 举报

6

主题

24

回帖

42

积分

新手上路

积分
42
发表于 2023-8-25 10:13:25 | 显示全部楼层
0x08000000 0x0801FFFC -STM32_Little_Endian 0x0801FFFC   : 计算0x08000000 到 0x0801FFFC的CRC值,以小端格式存储到地址0x0801FFFC 。         这个地方计算的CRC32是常规的计算方式吗?我现在使用GD32的芯片,GD32计算的CRC32是CRC32-MPEG-2方式,现在和这个工具算的不一致,我看-STM32_Little_Endian 这个参数有很多不一样的,算出来结果也不一样,不知道哪里有这个参数的说明,
回复

使用道具 举报

0

主题

6

回帖

6

积分

新手上路

积分
6
发表于 2023-10-19 14:34:19 | 显示全部楼层
楼主,最近项目有这个需求,最终烧入的文件是output.crc.hex 嘛
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
 楼主| 发表于 2023-10-19 15:01:54 | 显示全部楼层
Embedded_Proter 发表于 2023-10-19 14:34
楼主,最近项目有这个需求,最终烧入的文件是output.crc.hex 嘛

芯片内部运行的必须得是bin,下载器下载的时候你可以选择hex或者bin
回复

使用道具 举报

0

主题

6

回帖

6

积分

新手上路

积分
6
发表于 2023-10-19 15:25:15 | 显示全部楼层
eric2013 发表于 2023-10-19 15:01
芯片内部运行的必须得是bin,下载器下载的时候你可以选择hex或者bin

好的 ,非常感谢    最近才发现您管理的这个硬核论坛 , 相见恨晚呀
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-4-29 07:12 , Processed in 0.240989 second(s), 26 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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