硬汉嵌入式论坛

 找回密码
 立即注册
查看: 11255|回复: 35
收起左侧

[STM32CubeProg] 使用批处理实现内部flash,外部flash等多个地址hex文件合并,再通过CubeProg同时下载

  [复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106734
QQ
发表于 2020-1-4 01:15:28 | 显示全部楼层 |阅读模式
说明:
1、对于AP+APP方式的程序,出厂时,如果多个程序都在内部Flash或者外部flash,制作个hex或者bin合并,可以方便的下载。

     但下载到不同的存储器,是否还可以同时下载,也是可以的,尽管下载算法不同。

2、hex合并需要用到一个小软件srec_cat.exe。
srecord-1.64-win32.zip (1.88 MB, 下载次数: 2261)

https://sourceforge.net/projects/srecord/files/srecord-win32

1、简单写个批处理文件MergeHex.bat,内容如下:
QQ截图20200104005621.png
合并两个文件,一个是boot.hex,地址0x0800 0000,另一个是app.hex,地址0x9000 0000。合并后生成文件MergedHexFile.hex。

大家将MergeHex.bat,boot.hex,app.hex,srec_cat.exe文件放在同一个路径下,路径不要有中文,点击批处理文件即可生成MergedHexFile.hex

这里将这几个文件也一起上传,方便大家测试:
test.rar (462.47 KB, 下载次数: 474)

2、将生成的MergedHexFile.hex加载到STM32CubeProg小软件里面,可以看到两个地址正常区分了:
1.png


3、设置使用外部flash算法:
2.png

4、点击开启下载后,可以看到已经正确分析出两个地址空间,以此执行相应下载:
QQ截图20200104011752.png
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106734
QQ
 楼主| 发表于 2020-1-4 01:32:50 | 显示全部楼层
回复

使用道具 举报

23

主题

1406

回帖

1475

积分

至尊会员

积分
1475
发表于 2020-1-4 15:04:00 | 显示全部楼层
好贴
代码不规范,亲人两行泪!
回复

使用道具 举报

76

主题

237

回帖

465

积分

高级会员

积分
465
发表于 2020-1-4 16:26:47 | 显示全部楼层
不错不错,我是三段程序 0x0800 0000(IAP),0x0804 0000(APP),0x9000 0000(图形库),合并成hex后使用这个工具一次下载完成,内部外部Flash全部搞定!
合并还是hex格式好,不会产生多余的填充数据,文件小。
回复

使用道具 举报

16

主题

148

回帖

196

积分

初级会员

积分
196
发表于 2020-4-14 21:12:30 | 显示全部楼层
硬汉兄 jflash可以直接合并然后下载 很方便
回复

使用道具 举报

210

主题

1043

回帖

1683

积分

至尊会员

More we do, more we can do.

积分
1683
发表于 2020-4-14 22:52:34 | 显示全部楼层
IAR里正需要,之前用的BINtoC包含在Release里
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106734
QQ
 楼主| 发表于 2020-4-15 09:24:43 | 显示全部楼层
dyhfaily 发表于 2020-4-14 21:12
硬汉兄 jflash可以直接合并然后下载 很方便

你说的是J-Flash里面的merge data file功能?
回复

使用道具 举报

16

主题

148

回帖

196

积分

初级会员

积分
196
发表于 2020-4-15 10:59:15 | 显示全部楼层
eric2013 发表于 2020-4-15 09:24
你说的是J-Flash里面的merge data file功能?

是的  我是把app.hex和boot.hex合并成一个生产hex,然后需要升级固件直接把iar生成的app.bin放在tf卡中就可以了
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106734
QQ
 楼主| 发表于 2020-4-15 11:48:53 | 显示全部楼层
dyhfaily 发表于 2020-4-15 10:59
是的  我是把app.hex和boot.hex合并成一个生产hex,然后需要升级固件直接把iar生成的app.bin放在tf卡中就 ...

嗯,这个小功能也不错。
回复

使用道具 举报

1

主题

12

回帖

15

积分

新手上路

积分
15
发表于 2020-5-17 14:13:45 | 显示全部楼层
有个批处理就方便了
有个疑问望指教:使用cubeprom的烧录外部flash话,是不是还得写个程序来操作片外flash呢
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106734
QQ
 楼主| 发表于 2020-5-17 15:07:08 | 显示全部楼层
心然 发表于 2020-5-17 14:13
有个批处理就方便了
有个疑问望指教:使用cubeprom的烧录外部flash话,是不是还得写个程序来操作片外flash ...

是的,CubeProg对ST自家板子外部Flash都进行了支持,里面没有的,需要用户自己实现。
回复

使用道具 举报

1

主题

12

回帖

15

积分

新手上路

积分
15
发表于 2020-5-17 19:25:10 | 显示全部楼层
eric2013 发表于 2020-5-17 15:07
是的,CubeProg对ST自家板子外部Flash都进行了支持,里面没有的,需要用户自己实现。

嗯嗯,谢谢老大
回复

使用道具 举报

0

主题

26

回帖

26

积分

新手上路

积分
26
发表于 2020-5-18 16:32:38 | 显示全部楼层
hex直接粘贴合并到一起不行吗
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106734
QQ
 楼主| 发表于 2020-5-18 16:45:18 | 显示全部楼层
miaoguoqiang 发表于 2020-5-18 16:32
hex直接粘贴合并到一起不行吗

不行。
回复

使用道具 举报

0

主题

26

回帖

26

积分

新手上路

积分
26
发表于 2020-5-20 08:55:17 | 显示全部楼层

我测试,把第一个hex的尾部去掉,然后把新的合并进来。也是可以用
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106734
QQ
 楼主| 发表于 2020-5-20 09:16:20 | 显示全部楼层
miaoguoqiang 发表于 2020-5-20 08:55
我测试,把第一个hex的尾部去掉,然后把新的合并进来。也是可以用

你合并下地址0x0800 0000的hex,另一个地址0x9000 0000的hex

这样两个地址的好使不。

关键就是这个地方,看看能不能正常区分开:






回复

使用道具 举报

0

主题

26

回帖

26

积分

新手上路

积分
26
发表于 2020-5-20 11:01:54 | 显示全部楼层
eric2013 发表于 2020-5-20 09:16
你合并下地址0x0800 0000的hex,另一个地址0x9000 0000的hex

这样两个地址的好使不。

我只测试了我的boot和app文件

merge.hex

paste merge.hex

paste merge.hex

bootloader.hex

boot 0x8000000

boot 0x8000000


app.hex

app 0x8003000

app 0x8003000


回复

使用道具 举报

0

主题

26

回帖

26

积分

新手上路

积分
26
发表于 2020-5-20 11:04:45 | 显示全部楼层
打开自己复制粘贴合并的hex,下面的日志内容:

11:03:25 : Read File: C:\Users\test\Desktop\merge.hex
11:03:25 : Number of segments: 2
11:03:25 : segment[0]: address= 0x8000000, size= 0x1974
11:03:25 : segment[1]: address= 0x8003000, size= 0x41AC
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106734
QQ
 楼主| 发表于 2020-5-20 11:41:10 | 显示全部楼层
miaoguoqiang 发表于 2020-5-20 11:04
打开自己复制粘贴合并的hex,下面的日志内容:

11:03:25 : Read File: C:%users\test\Desktop\merge.hex ...

不错,貌似也行。
回复

使用道具 举报

0

主题

14

回帖

14

积分

新手上路

积分
14
发表于 2020-6-22 14:14:50 | 显示全部楼层
Mark,以后肯定能用上。
回复

使用道具 举报

76

主题

237

回帖

465

积分

高级会员

积分
465
发表于 2020-9-12 13:12:10 | 显示全部楼层
无标题.png
BOOT+IAP+APP+外部Flash,四段程序完美下载,非常方便,哈哈哈。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106734
QQ
 楼主| 发表于 2020-9-12 15:50:07 | 显示全部楼层
kokoromi 发表于 2020-9-12 13:12
BOOT+IAP+APP+外部Flash,四段程序完美下载,非常方便,哈哈哈。

我们的H7-TOOL也支持这种BOOT+IAP+APP+外部Flash下载。
回复

使用道具 举报

76

主题

237

回帖

465

积分

高级会员

积分
465
发表于 2020-9-14 13:54:47 | 显示全部楼层
eric2013 发表于 2020-9-12 15:50
我们的H7-TOOL也支持这种BOOT+IAP+APP+外部Flash下载。

https://www.cnblogs.com/armfly/p/12283459.html
是上面这个吗?感觉好强大。你们对技术的钻研令我佩服,在这学到了好多东西。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106734
QQ
 楼主| 发表于 2020-9-14 17:11:19 | 显示全部楼层
kokoromi 发表于 2020-9-14 13:54
https://www.cnblogs.com/armfly/p/12283459.html
是上面这个吗?感觉好强大。你们对技术的钻研令我佩服 ...

是的,这个是原始帖子:

开源设计一款H7-TOOL开发工具,CPU选择STM32H750,所有资源汇总贴(2020-09-11)
http://www.armbbs.cn/forum.php?m ... 9934&fromuid=58
(出处: 硬汉嵌入式论坛)
回复

使用道具 举报

73

主题

1193

回帖

1412

积分

至尊会员

积分
1412
发表于 2020-11-26 14:29:51 | 显示全部楼层
miaoguoqiang 发表于 2020-5-20 08:55
我测试,把第一个hex的尾部去掉,然后把新的合并进来。也是可以用

这种方式也是可以的,好像
回复

使用道具 举报

73

主题

1193

回帖

1412

积分

至尊会员

积分
1412
发表于 2020-11-26 14:31:04 | 显示全部楼层
请教一个问题,外部flash的烧写,烧写器怎么链接呢??比如我使用w25q32的芯片,是spi驱动的。这个也能烧写??
回复

使用道具 举报

0

主题

38

回帖

38

积分

新手上路

积分
38
发表于 2021-1-13 09:01:47 | 显示全部楼层
硬汉兄,不使用第三方插件,这样合并是不是更简单
@echo off
set value=%date:~0,4%%date:~5,2%%date:~8,2%
findstr /v ":00000001FF" "OBJ\app.hex">APP%1_%value%.hex
type Bootloader.hex>>APP%1_%value%.hex
type "OBJ\app.bin">>APP%1_%value%.bin
回复

使用道具 举报

0

主题

6

回帖

6

积分

新手上路

积分
6
发表于 2022-4-22 22:29:12 | 显示全部楼层
cms277415310 发表于 2021-1-13 09:01
硬汉兄,不使用第三方插件,这样合并是不是更简单
@echo off
set value=%date:~0,4%%date:~5,2%%date:~8, ...

高手这能加个注释吗?方便复用。
回复

使用道具 举报

0

主题

1

回帖

1

积分

新手上路

积分
1
发表于 2022-7-4 15:26:37 | 显示全部楼层
谢谢老大    
回复

使用道具 举报

0

主题

3

回帖

3

积分

新手上路

积分
3
发表于 2023-1-11 09:28:20 | 显示全部楼层
你好,在使用批处理实现内部flash,外部flash等多个地址hex文件合并,把你的test文件下载并进行了合并,发现合成的文件的boot数据与原boot文件有好多地方发生变化,这是怎么回事呢?谢谢
回复

使用道具 举报

0

主题

3

回帖

3

积分

新手上路

积分
3
发表于 2023-1-11 09:36:40 | 显示全部楼层
你好,在么,在使用使用批处理实现内部flash,外部flash等多个地址hex文件合并,多把你的test文件下载并进行了合并,发现合成的文件的boot文件与原文件有好多地方发生变化,这是怎么回事呢?谢谢 image.png 图上上面是boot的数据,下面是合成后的前一段的数据,有颜色标注的是不同的,应该前面boot区的数据一致才对,这是什么原因呢,谢谢
回复

使用道具 举报

0

主题

3

回帖

3

积分

新手上路

积分
3
发表于 2023-1-11 11:04:34 | 显示全部楼层
找到原因了,每行包含的数据数据不一样
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106734
QQ
 楼主| 发表于 2023-1-13 14:03:09 | 显示全部楼层
pljhc 发表于 2023-1-11 11:04
找到原因了,每行包含的数据数据不一样

好的。
回复

使用道具 举报

7

主题

190

回帖

216

积分

高级会员

积分
216
发表于 2023-6-8 22:11:36 | 显示全部楼层
硬汉哥,如果我想在两个hex之间填充为0xff  该怎么操作啊
回复

使用道具 举报

2

主题

5

回帖

11

积分

新手上路

积分
11
发表于 2023-8-19 08:50:43 | 显示全部楼层
硬汉哥,要是对每个固件进行加密,并增加校验字段,该怎么操作量产呀
回复

使用道具 举报

3

主题

8

回帖

17

积分

新手上路

积分
17
发表于 2024-4-9 10:46:11 | 显示全部楼层
感谢硬汉哥,已经在项目上配合J-flash批量使用啦
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-3 01:00 , Processed in 0.364906 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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