使用批处理实现内部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、点击开启下载后,可以看到已经正确分析出两个地址空间,以此执行相应下载:
http://www.keil.com/support/docs/1940.htm
好贴{:34:} 不错不错,我是三段程序 0x0800 0000(IAP),0x0804 0000(APP),0x9000 0000(图形库),合并成hex后使用这个工具一次下载完成,内部外部Flash全部搞定!
合并还是hex格式好,不会产生多余的填充数据,文件小。 硬汉兄 jflash可以直接合并然后下载 很方便 IAR里正需要,之前用的BINtoC包含在Release里 dyhfaily 发表于 2020-4-14 21:12
硬汉兄 jflash可以直接合并然后下载 很方便
你说的是J-Flash里面的merge data file功能? eric2013 发表于 2020-4-15 09:24
你说的是J-Flash里面的merge data file功能?
是的我是把app.hex和boot.hex合并成一个生产hex,然后需要升级固件直接把iar生成的app.bin放在tf卡中就可以了 dyhfaily 发表于 2020-4-15 10:59
是的我是把app.hex和boot.hex合并成一个生产hex,然后需要升级固件直接把iar生成的app.bin放在tf卡中就 ...
嗯,这个小功能也不错。 有个批处理就方便了
有个疑问望指教:使用cubeprom的烧录外部flash话,是不是还得写个程序来操作片外flash呢 心然 发表于 2020-5-17 14:13
有个批处理就方便了
有个疑问望指教:使用cubeprom的烧录外部flash话,是不是还得写个程序来操作片外flash ...
是的,CubeProg对ST自家板子外部Flash都进行了支持,里面没有的,需要用户自己实现。 eric2013 发表于 2020-5-17 15:07
是的,CubeProg对ST自家板子外部Flash都进行了支持,里面没有的,需要用户自己实现。
嗯嗯,谢谢老大 hex直接粘贴合并到一起不行吗 miaoguoqiang 发表于 2020-5-18 16:32
hex直接粘贴合并到一起不行吗
不行。 eric2013 发表于 2020-5-18 16:45
不行。
我测试,把第一个hex的尾部去掉,然后把新的合并进来。也是可以用 miaoguoqiang 发表于 2020-5-20 08:55
我测试,把第一个hex的尾部去掉,然后把新的合并进来。也是可以用
你合并下地址0x0800 0000的hex,另一个地址0x9000 0000的hex
这样两个地址的好使不。
关键就是这个地方,看看能不能正常区分开:
https://img.anfulai.cn/dz/attachment/forum/202001/04/010557k3z3xw0pnhn3eodp.png
eric2013 发表于 2020-5-20 09:16
你合并下地址0x0800 0000的hex,另一个地址0x9000 0000的hex
这样两个地址的好使不。
我只测试了我的boot和app文件
merge.hex
bootloader.hex
app.hex
打开自己复制粘贴合并的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 miaoguoqiang 发表于 2020-5-20 11:04
打开自己复制粘贴合并的hex,下面的日志内容:
11:03:25 : Read File: C:%users\test\Desktop\merge.hex ...
不错,貌似也行。 Mark,以后肯定能用上。
BOOT+IAP+APP+外部Flash,四段程序完美下载,非常方便,哈哈哈。
kokoromi 发表于 2020-9-12 13:12
BOOT+IAP+APP+外部Flash,四段程序完美下载,非常方便,哈哈哈。
我们的H7-TOOL也支持这种BOOT+IAP+APP+外部Flash下载。 eric2013 发表于 2020-9-12 15:50
我们的H7-TOOL也支持这种BOOT+IAP+APP+外部Flash下载。
https://www.cnblogs.com/armfly/p/12283459.html
是上面这个吗?感觉好强大。你们对技术的钻研令我佩服,在这学到了好多东西。{:8:} 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
(出处: 硬汉嵌入式论坛)
miaoguoqiang 发表于 2020-5-20 08:55
我测试,把第一个hex的尾部去掉,然后把新的合并进来。也是可以用
这种方式也是可以的,好像 请教一个问题,外部flash的烧写,烧写器怎么链接呢??比如我使用w25q32的芯片,是spi驱动的。这个也能烧写?? 硬汉兄,不使用第三方插件,这样合并是不是更简单
@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 cms277415310 发表于 2021-1-13 09:01
硬汉兄,不使用第三方插件,这样合并是不是更简单
@echo off
set value=%date:~0,4%%date:~5,2%%date:~8, ...
高手这能加个注释吗?方便复用。:lol 谢谢老大 :lol 你好,在使用批处理实现内部flash,外部flash等多个地址hex文件合并,把你的test文件下载并进行了合并,发现合成的文件的boot数据与原boot文件有好多地方发生变化,这是怎么回事呢?谢谢 你好,在么,在使用使用批处理实现内部flash,外部flash等多个地址hex文件合并,多把你的test文件下载并进行了合并,发现合成的文件的boot文件与原文件有好多地方发生变化,这是怎么回事呢?谢谢图上上面是boot的数据,下面是合成后的前一段的数据,有颜色标注的是不同的,应该前面boot区的数据一致才对,这是什么原因呢,谢谢 找到原因了,每行包含的数据数据不一样:L pljhc 发表于 2023-1-11 11:04
找到原因了,每行包含的数据数据不一样
好的。 硬汉哥,如果我想在两个hex之间填充为0xff该怎么操作啊 硬汉哥,要是对每个固件进行加密,并增加校验字段,该怎么操作量产呀 感谢硬汉哥,已经在项目上配合J-flash批量使用啦
页:
[1]