eric2013 发表于 2020-1-4 01:15:28

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

说明:
1、对于AP+APP方式的程序,出厂时,如果多个程序都在内部Flash或者外部flash,制作个hex或者bin合并,可以方便的下载。

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

2、hex合并需要用到一个小软件srec_cat.exe。


https://sourceforge.net/projects/srecord/files/srecord-win32
static/image/hrline/4.gif
1、简单写个批处理文件MergeHex.bat,内容如下:

合并两个文件,一个是boot.hex,地址0x0800 0000,另一个是app.hex,地址0x9000 0000。合并后生成文件MergedHexFile.hex。

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

这里将这几个文件也一起上传,方便大家测试:


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



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


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

eric2013 发表于 2020-1-4 01:32:50

http://www.keil.com/support/docs/1940.htm


missfox 发表于 2020-1-4 15:04:00

好贴{:34:}

kokoromi 发表于 2020-1-4 16:26:47

不错不错,我是三段程序 0x0800 0000(IAP),0x0804 0000(APP),0x9000 0000(图形库),合并成hex后使用这个工具一次下载完成,内部外部Flash全部搞定!
合并还是hex格式好,不会产生多余的填充数据,文件小。

dyhfaily 发表于 2020-4-14 21:12:30

硬汉兄 jflash可以直接合并然后下载 很方便

emwin 发表于 2020-4-14 22:52:34

IAR里正需要,之前用的BINtoC包含在Release里

eric2013 发表于 2020-4-15 09:24:43

dyhfaily 发表于 2020-4-14 21:12
硬汉兄 jflash可以直接合并然后下载 很方便

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

dyhfaily 发表于 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卡中就可以了

eric2013 发表于 2020-4-15 11:48:53

dyhfaily 发表于 2020-4-15 10:59
是的我是把app.hex和boot.hex合并成一个生产hex,然后需要升级固件直接把iar生成的app.bin放在tf卡中就 ...

嗯,这个小功能也不错。

心然 发表于 2020-5-17 14:13:45

有个批处理就方便了
有个疑问望指教:使用cubeprom的烧录外部flash话,是不是还得写个程序来操作片外flash呢

eric2013 发表于 2020-5-17 15:07:08

心然 发表于 2020-5-17 14:13
有个批处理就方便了
有个疑问望指教:使用cubeprom的烧录外部flash话,是不是还得写个程序来操作片外flash ...

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

心然 发表于 2020-5-17 19:25:10

eric2013 发表于 2020-5-17 15:07
是的,CubeProg对ST自家板子外部Flash都进行了支持,里面没有的,需要用户自己实现。

嗯嗯,谢谢老大

miaoguoqiang 发表于 2020-5-18 16:32:38

hex直接粘贴合并到一起不行吗

eric2013 发表于 2020-5-18 16:45:18

miaoguoqiang 发表于 2020-5-18 16:32
hex直接粘贴合并到一起不行吗

不行。

miaoguoqiang 发表于 2020-5-20 08:55:17

eric2013 发表于 2020-5-18 16:45
不行。

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

eric2013 发表于 2020-5-20 09:16:20

miaoguoqiang 发表于 2020-5-20 08:55
我测试,把第一个hex的尾部去掉,然后把新的合并进来。也是可以用
你合并下地址0x0800 0000的hex,另一个地址0x9000 0000的hex

这样两个地址的好使不。

关键就是这个地方,看看能不能正常区分开:
https://img.anfulai.cn/dz/attachment/forum/202001/04/010557k3z3xw0pnhn3eodp.png





miaoguoqiang 发表于 2020-5-20 11:01:54

eric2013 发表于 2020-5-20 09:16
你合并下地址0x0800 0000的hex,另一个地址0x9000 0000的hex

这样两个地址的好使不。


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

merge.hex

bootloader.hex



app.hex


miaoguoqiang 发表于 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: address= 0x8000000, size= 0x1974
11:03:25 : segment: address= 0x8003000, size= 0x41AC

eric2013 发表于 2020-5-20 11:41:10

miaoguoqiang 发表于 2020-5-20 11:04
打开自己复制粘贴合并的hex,下面的日志内容:

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

不错,貌似也行。

zhongdinggen 发表于 2020-6-22 14:14:50

Mark,以后肯定能用上。

kokoromi 发表于 2020-9-12 13:12:10


BOOT+IAP+APP+外部Flash,四段程序完美下载,非常方便,哈哈哈。

eric2013 发表于 2020-9-12 15:50:07

kokoromi 发表于 2020-9-12 13:12
BOOT+IAP+APP+外部Flash,四段程序完美下载,非常方便,哈哈哈。

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

kokoromi 发表于 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
是上面这个吗?感觉好强大。你们对技术的钻研令我佩服,在这学到了好多东西。{:8:}

eric2013 发表于 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?mod=viewthread&tid=89934&fromuid=58
(出处: 硬汉嵌入式论坛)

wdliming 发表于 2020-11-26 14:29:51

miaoguoqiang 发表于 2020-5-20 08:55
我测试,把第一个hex的尾部去掉,然后把新的合并进来。也是可以用

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

wdliming 发表于 2020-11-26 14:31:04

请教一个问题,外部flash的烧写,烧写器怎么链接呢??比如我使用w25q32的芯片,是spi驱动的。这个也能烧写??

cms277415310 发表于 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

lzhangjun01 发表于 2022-4-22 22:29:12

cms277415310 发表于 2021-1-13 09:01
硬汉兄,不使用第三方插件,这样合并是不是更简单
@echo off
set value=%date:~0,4%%date:~5,2%%date:~8, ...

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

lixueyue1372 发表于 2022-7-4 15:26:37

谢谢老大 :lol   

pljhc 发表于 2023-1-11 09:28:20

你好,在使用批处理实现内部flash,外部flash等多个地址hex文件合并,把你的test文件下载并进行了合并,发现合成的文件的boot数据与原boot文件有好多地方发生变化,这是怎么回事呢?谢谢

pljhc 发表于 2023-1-11 09:36:40

你好,在么,在使用使用批处理实现内部flash,外部flash等多个地址hex文件合并,多把你的test文件下载并进行了合并,发现合成的文件的boot文件与原文件有好多地方发生变化,这是怎么回事呢?谢谢图上上面是boot的数据,下面是合成后的前一段的数据,有颜色标注的是不同的,应该前面boot区的数据一致才对,这是什么原因呢,谢谢

pljhc 发表于 2023-1-11 11:04:34

找到原因了,每行包含的数据数据不一样:L

eric2013 发表于 2023-1-13 14:03:09

pljhc 发表于 2023-1-11 11:04
找到原因了,每行包含的数据数据不一样

好的。

abcde1224 发表于 2023-6-8 22:11:36

硬汉哥,如果我想在两个hex之间填充为0xff该怎么操作啊

2367643286 发表于 2023-8-19 08:50:43

硬汉哥,要是对每个固件进行加密,并增加校验字段,该怎么操作量产呀

王二Gou 发表于 2024-4-9 10:46:11

感谢硬汉哥,已经在项目上配合J-flash批量使用啦
页: [1]
查看完整版本: 使用批处理实现内部flash,外部flash等多个地址hex文件合并,再通过CubeProg同时下载