硬汉嵌入式论坛

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

[其它] 如何将多个bin文件合并成一个,然后用下载工具下载?

[复制链接]

76

主题

237

回帖

465

积分

高级会员

积分
465
发表于 2020-1-3 14:47:00 | 显示全部楼层 |阅读模式
本帖最后由 kokoromi 于 2020-1-3 16:19 编辑

现在有三个起始地址不同的bin文件,一个起始地址0x0800 0000,一个起始地址0x0804 0000,还有一个起始地址 0x9000 0000。其中前两个都位于内部Flash中,第三个位于外部Flash中,想问下,怎么把这三个bin文件合并成一个,并且用下载工具一次性下载完毕?现在手头有STM32 ST-LINK Utility这个工具,不知道如何实现?

据我所知,bin文件是无法保存地址的,上面说的三个地址空间相差较大的bin合并的话估计得好几个GB大小...中间都是填充的0x00之类的无用数据,有没有工具能把上述的三个bin文件合并成hex文件?不知道STM32 ST-LINK Utility这个工具能不能烧写这种hex。
回复

使用道具 举报

36

主题

1446

回帖

1554

积分

至尊会员

积分
1554
发表于 2020-1-3 16:08:24 | 显示全部楼层
二进制文件合并工具1.1
http://www.armbbs.cn/forum.php?m ... 1&fromuid=16360
(出处: 硬汉嵌入式论坛)
回复

使用道具 举报

76

主题

237

回帖

465

积分

高级会员

积分
465
 楼主| 发表于 2020-1-3 18:21:30 | 显示全部楼层
sanit 发表于 2020-1-3 16:08
二进制文件合并工具1.1
http://www.armbbs.cn/forum.php?mod=viewthread&tid=90041&fromuid=16360
(出处: ...

谢谢。但是这个不能用,我那几个bin文件起始地址相差很大,如果中间填充的话文件大小好几个GB。
想了想,只能用hex实现,有没有多个bin配合各自起始地址合并为一个hex文件的工具?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107101
QQ
发表于 2020-1-3 18:23:00 | 显示全部楼层
kokoromi 发表于 2020-1-3 18:21
谢谢。但是这个不能用,我那几个bin文件起始地址相差很大,如果中间填充的话文件大小好几个GB。
想了想 ...

地址差别大用不了。只能内置flash和外置flash独立分开整
回复

使用道具 举报

76

主题

237

回帖

465

积分

高级会员

积分
465
 楼主| 发表于 2020-1-3 19:48:20 | 显示全部楼层
eric2013 发表于 2020-1-3 18:23
地址差别大用不了。只能内置flash和外置flash独立分开整

用Hex格式的也不行吗,这个格式不是可以记录地址吗?分开弄有点麻烦...
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107101
QQ
发表于 2020-1-3 21:02:27 | 显示全部楼层
kokoromi 发表于 2020-1-3 19:48
用Hex格式的也不行吗,这个格式不是可以记录地址吗?分开弄有点麻烦...

关键是下载软件没有那么智能,给你下载到指定的几个位置。
回复

使用道具 举报

7

主题

125

回帖

146

积分

初级会员

积分
146
发表于 2020-1-3 21:05:30 | 显示全部楼层
1. STM32 ST-LINK Utility和STM32CubeProg都支持你描述得分段hex文件
2. bin就不用想了,算算0x08000000到0x90000000有多大,瞬间就会打消这个念头
3. bin转成hex带地址没弄过,不过一般编译器都可以生成hex文件,把hex文件拼接是可以的,如果是同一个工程,MDK通过分散加载文件就可以实现,gcc下面用链接文件和objcopy也可以实现,你可以找个HAL库里touchgfx例程看下
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107101
QQ
发表于 2020-1-3 21:17:42 | 显示全部楼层
狂野的庄稼汉 发表于 2020-1-3 21:05
1. STM32 ST-LINK Utility和STM32CubeProg都支持你描述得分段hex文件
2. bin就不用想了,算算0x08000000到 ...

按照他的意思,最关键的就是0x0800 0000和0x9000 0000这两个地址的hex合并后,怎么一次性分别下载到这两个地址空间里面。

CubeProg没有这种功能吧。
回复

使用道具 举报

76

主题

237

回帖

465

积分

高级会员

积分
465
 楼主| 发表于 2020-1-3 21:35:09 | 显示全部楼层
eric2013 发表于 2020-1-3 21:17
按照他的意思,最关键的就是0x0800 0000和0x9000 0000这两个地址的hex合并后,怎么一次性分别下载到这两 ...

我看STM32 ST-LINK Utility这个软件可以加载自己写的外部闪存算法,我加载完外部闪存算法后,这个软件不能根据hex中的地址自动调用内部闪存算法和外部闪存算法分别进行烧写吗?现在主要是我这几个bin文件没法合并成带地址的hex...没法试。
回复

使用道具 举报

76

主题

237

回帖

465

积分

高级会员

积分
465
 楼主| 发表于 2020-1-3 21:37:26 | 显示全部楼层
狂野的庄稼汉 发表于 2020-1-3 21:05
1. STM32 ST-LINK Utility和STM32CubeProg都支持你描述得分段hex文件
2. bin就不用想了,算算0x08000000到 ...

0x9000 0000这个起始地址开始的bin文件没法用编译器生成,都是些图片字体什么的,用小工具直接合并生成的...0x0800 0000 开始的那两个没问题,所以现在需要一个能把多个bin文件按照指定起始地址合并成一个hex的工具,没找到....
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107101
QQ
发表于 2020-1-3 21:41:09 | 显示全部楼层
kokoromi 发表于 2020-1-3 21:35
我看STM32 ST-LINK Utility这个软件可以加载自己写的外部闪存算法,我加载完外部闪存算法后,这个软件不 ...

CubeProg都不支持,ST-LINK Utility这种老软件更不支持了。

现在还没有支持不同存储器的多合一算法同步执行案例。
回复

使用道具 举报

7

主题

125

回帖

146

积分

初级会员

积分
146
发表于 2020-1-3 21:58:21 | 显示全部楼层
eric2013 发表于 2020-1-3 21:17
按照他的意思,最关键的就是0x0800 0000和0x9000 0000这两个地址的hex合并后,怎么一次性分别下载到这两 ...

STM32 ST-LINK Utility和STM32CubeProg都有这种功能,叫external loader,通过下载算法,可以直接用stlink将固件下载到外部flash中
STM32CubeProg.png
STM32 ST-LINK Utility.png
回复

使用道具 举报

7

主题

125

回帖

146

积分

初级会员

积分
146
发表于 2020-1-3 21:59:37 | 显示全部楼层
kokoromi 发表于 2020-1-3 21:35
我看STM32 ST-LINK Utility这个软件可以加载自己写的外部闪存算法,我加载完外部闪存算法后,这个软件不 ...

可以的,合并后会根据地址烧录对应的部分,先烧录MCU flash,在烧录外部flash
回复

使用道具 举报

7

主题

125

回帖

146

积分

初级会员

积分
146
发表于 2020-1-3 22:30:26 | 显示全部楼层
kokoromi 发表于 2020-1-3 21:37
0x9000 0000这个起始地址开始的bin文件没法用编译器生成,都是些图片字体什么的,用小工具直接合并生成的 ...

工具可以用这个,刚试了一下是可以把bin转换成hex,并且带上地址的
SRecord 1.64

  1. srec_cat.exe extflash.bin -binary -offset 0x90000000 -o ext.hex -intel
复制代码
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107101
QQ
发表于 2020-1-3 22:37:21 | 显示全部楼层
狂野的庄稼汉 发表于 2020-1-3 21:58
STM32 ST-LINK Utility和STM32CubeProg都有这种功能,叫external loader,通过下载算法,可以直接用stlin ...

这个功能我知道,关键的问题就是内部和外部存储可以同时下载吗

要不他这个合并操作就没有价值。
回复

使用道具 举报

7

主题

125

回帖

146

积分

初级会员

积分
146
发表于 2020-1-3 22:40:16 | 显示全部楼层
eric2013 发表于 2020-1-3 22:37
这个功能我知道,关键的问题就是内部和外部存储可以同时下面吗

要不他这个合并操作就没有价值。

可以的,内部flash数据和外部flash数据合并后,会先下载内部flash,然后加载下载算法,再烧录外部flash,和Keil的FLM类似的
回复

使用道具 举报

7

主题

125

回帖

146

积分

初级会员

积分
146
发表于 2020-1-3 22:43:44 | 显示全部楼层
eric2013 发表于 2020-1-3 21:41
CubeProg都不支持,ST-LINK Utility这种老软件更不支持了。

现在还没有支持不同存储器的多合一算法同 ...

论坛的新消息提醒似乎有问题,你回复我的有提醒;其他坛友回复的没有
批注 2020-01-03 224112.png
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107101
QQ
发表于 2020-1-3 22:57:51 | 显示全部楼层
狂野的庄稼汉 发表于 2020-1-3 22:40
可以的,内部flash数据和外部flash数据合并后,会先下载内部flash,然后加载下载算法,再烧录外部flash, ...

看了一下,还真可以同时选择。我这里没有可用的外部算法,测试效果是不是点击download后,一次性完成了内部和外部同时下载?

QQ截图20200103232333.png
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107101
QQ
发表于 2020-1-3 22:59:26 | 显示全部楼层
狂野的庄稼汉 发表于 2020-1-3 22:43
论坛的新消息提醒似乎有问题,你回复我的有提醒;其他坛友回复的没有

这个是因为设置了回复审核的原因。

因为论坛之前出了一次问题,暂时还不能开放回复审核
回复

使用道具 举报

7

主题

125

回帖

146

积分

初级会员

积分
146
发表于 2020-1-3 23:09:49 | 显示全部楼层
eric2013 发表于 2020-1-3 22:57
看了一下,还真可以同时选择。我这里没有可用的外部算法,测试效果是不是点击download后,一次性完成了内 ...

是的,选择对应的external loader,然后加载固件,剩下的就自动完成
回复

使用道具 举报

7

主题

125

回帖

146

积分

初级会员

积分
146
发表于 2020-1-3 23:37:09 | 显示全部楼层
kokoromi 发表于 2020-1-3 21:37
0x9000 0000这个起始地址开始的bin文件没法用编译器生成,都是些图片字体什么的,用小工具直接合并生成的 ...
  1. srec_cat.exe extflash_origin.bin -binary -offset 0x90000000 -o extflash_new.hex -intel -Output_Block_Size=16
复制代码

我用的gcc编译器,这样转出来的文件和编译器生成的hex完全一样

extflash_origin.hex (2.73 MB, 下载次数: 0)

extflash_origin.bin (994.48 KB, 下载次数: 0)
extflash_new.hex (2.73 MB, 下载次数: 0)

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107101
QQ
发表于 2020-1-4 00:46:29 | 显示全部楼层
狂野的庄稼汉 发表于 2020-1-3 23:09
是的,选择对应的external loader,然后加载固件,剩下的就自动完成

感谢,前面的小软件srec_cat.exe小软件好用,批处理调用很方便。
回复

使用道具 举报

76

主题

237

回帖

465

积分

高级会员

积分
465
 楼主| 发表于 2020-1-4 12:30:04 | 显示全部楼层
非常感谢大神的详解,以后搞生产下载程序方便多了~
回复

使用道具 举报

7

主题

125

回帖

146

积分

初级会员

积分
146
发表于 2020-1-5 01:46:07 | 显示全部楼层
kokoromi 发表于 2020-1-4 12:30
非常感谢大神的详解,以后搞生产下载程序方便多了~

量产一般都不会这么搞,flash直接烧录好再贴片
回复

使用道具 举报

76

主题

237

回帖

465

积分

高级会员

积分
465
 楼主| 发表于 2020-1-6 12:48:41 | 显示全部楼层
狂野的庄稼汉 发表于 2020-1-5 01:46
量产一般都不会这么搞,flash直接烧录好再贴片

我们是小公司,小作坊那种,所谓的量产最多也不会超过100个,一般几个或几十个
回复

使用道具 举报

7

主题

125

回帖

146

积分

初级会员

积分
146
发表于 2020-1-6 21:53:52 | 显示全部楼层
kokoromi 发表于 2020-1-6 12:48
我们是小公司,小作坊那种,所谓的量产最多也不会超过100个,一般几个或几十个

那没关系了,我们试产也是一起烧录
回复

使用道具 举报

335

主题

2040

回帖

3050

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3050
发表于 2020-1-9 09:27:00 | 显示全部楼层
狂野的庄稼汉 发表于 2020-1-3 21:58
STM32 ST-LINK Utility和STM32CubeProg都有这种功能,叫external loader,通过下载算法,可以直接用stlin ...

这位大侠,能不能出个简单的文档加图片说明,很感兴趣,但是不知道怎么搞哦。
回复

使用道具 举报

7

主题

125

回帖

146

积分

初级会员

积分
146
发表于 2020-1-9 09:34:10 | 显示全部楼层
caicaptain2 发表于 2020-1-9 09:27
这位大侠,能不能出个简单的文档加图片说明,很感兴趣,但是不知道怎么搞哦。

硬汉写了一个帖子,你可以参考下
使用批处理实现内部flash,外部flash等多个地址hex文件合并,再通过CubeProg同时下载
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-17 16:30 , Processed in 0.422838 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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