OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4015|回复: 9

IAP在线升级的思路

[复制链接]

19

主题

97

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
313
金钱
313
注册时间
2017-9-5
在线时间
78 小时
发表于 2018-12-2 15:12:27 | 显示全部楼层 |阅读模式
5金钱
公司最近在STM32在线升级的方案,技术汇总了一下在线升级的设计思路,也想请大家一起来批评指导。
如下图所示,设计一个BOOT程序,BOOT程序的功能是引导程序跳转执行APP1或者APP2程序。
当最开始的时候,先烧录BOOT程序,后烧录APP1程序。在利用串口或者网络的方式将需要升级的APP2程序HEX文件放置到到0X02开始的位置,然后改变BOOT引导到重启到APP2的位置。
到APP2升级APP1的时候亦是如此,
这样设计对存储空间要求比较大。请问还有更优的设计方案吗。?
QQ截图20181202150735.png

最佳答案

查看完整内容[请看2#楼]

不支持映射地址的,两个APP要单独编译链接,加大了开发难度。 建议在BOOT中做COPY,把 TMP COPY 到 APP1中即可。 这样 APP1 与 TMP(APP2)需要对半分,比较浪费空间,可以对TMP进行压缩处理,这样空间利用率更高些。 另外,因为是COPY到APP1上面运行的,所以不要求TMP也是内部FLASH,用外部SPI FLASH也一样,这样便宜量足。 至于有人担心的变砖问题,说两个APP会好些。 事实上如果新的APP有问题,也得需要人工按键切换 ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

11

主题

1044

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3722
金钱
3722
注册时间
2011-5-23
在线时间
2013 小时
发表于 2018-12-2 15:12:28 | 显示全部楼层
不支持映射地址的,两个APP要单独编译链接,加大了开发难度。
建议在BOOT中做COPY,把 TMP COPY 到 APP1中即可。

这样 APP1 与 TMP(APP2)需要对半分,比较浪费空间,可以对TMP进行压缩处理,这样空间利用率更高些。

另外,因为是COPY到APP1上面运行的,所以不要求TMP也是内部FLASH,用外部SPI FLASH也一样,这样便宜量足。

至于有人担心的变砖问题,说两个APP会好些。
事实上如果新的APP有问题,也得需要人工按键切换才行。
至于boot中自动判断新的APP是否能跑起来,这简直了,都不能跑起来的APP是如何通过测试和预演流程的?
RT-Thread RTOS 音频,WIFI,蓝牙
回复

使用道具 举报

6

主题

108

帖子

1

精华

高级会员

Rank: 4

积分
716
金钱
716
注册时间
2017-4-25
在线时间
203 小时
发表于 2018-12-2 17:45:15 | 显示全部楼层
看要不要支持远程升级,不需要远程升级的话,直接bootloader+app1就够了。升级失败了就在bootloader里等下次升级。
回复

使用道具 举报

2

主题

685

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3448
金钱
3448
注册时间
2017-7-4
在线时间
869 小时
发表于 2018-12-2 18:48:12 | 显示全部楼层
最开始公司用的是楼主的方式,发现弊端挺大,就是二楼aozima大神所说,后面就改用了aozima的方式,固件小用内部flash,固件大加一片spi flash,做好校验(各种匹配、CRC等),没出现过升级成砖头的。
回复

使用道具 举报

70

主题

6763

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
13129
金钱
13129
注册时间
2012-11-26
在线时间
3814 小时
发表于 2018-12-2 20:17:57 | 显示全部楼层
同意 aozima 的做法
学无止境
回复

使用道具 举报

19

主题

97

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
313
金钱
313
注册时间
2017-9-5
在线时间
78 小时
 楼主| 发表于 2018-12-3 09:55:42 | 显示全部楼层
aozima 发表于 2018-12-2 15:12
不支持映射地址的,两个APP要单独编译链接,加大了开发难度。
建议在BOOT中做COPY,把 TMP COPY 到 APP1中 ...

您好,您的意思是,每次启动的时候,首先从外部SPI FLASH  COPY一份代码到APP1中,然后直接运行APP1,不需要APP2,节约开发空间对吧? 请问SPI   FLASH您有推荐的吗?大概多少费用?
回复

使用道具 举报

19

主题

97

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
313
金钱
313
注册时间
2017-9-5
在线时间
78 小时
 楼主| 发表于 2018-12-3 09:56:55 | 显示全部楼层
biglu 发表于 2018-12-2 17:45
看要不要支持远程升级,不需要远程升级的话,直接bootloader+app1就够了。升级失败了就在bootloader里等下 ...

我觉得BOOT 里面只需要最简单的程序就行。就是COPY 和 程序跳转就行。
回复

使用道具 举报

11

主题

1044

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3722
金钱
3722
注册时间
2011-5-23
在线时间
2013 小时
发表于 2018-12-3 10:17:19 | 显示全部楼层
本帖最后由 aozima 于 2018-12-3 10:20 编辑
每次启动的时候,首先从外部SPI FLASH  COPY一份代码到APP1中

去掉每次,后面每次启动只检查版本,相同就跳过。

不然太慢,也很快就烧坏了。
RT-Thread RTOS 音频,WIFI,蓝牙
回复

使用道具 举报

6

主题

108

帖子

1

精华

高级会员

Rank: 4

积分
716
金钱
716
注册时间
2017-4-25
在线时间
203 小时
发表于 2018-12-3 11:25:24 | 显示全部楼层
andychen 发表于 2018-12-3 09:56
我觉得BOOT 里面只需要最简单的程序就行。就是COPY 和 程序跳转就行。

是的啊,如果在APP里进行远程升级的话,那是需要分APP1+APP2的,在APP1里接收APP2成功并校验通过,就可以复位到Bootloader里了,然后将APP2代码移到APP1里,跳转就可以了。
但如果不需要远程升级,就是个串口升级,只需要1个APP1,因为升级过程中可能接收失败或写flash失败,所以如果失败了boolodaer重启继续等升级,如果成功就跳转。
回复

使用道具 举报

19

主题

97

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
313
金钱
313
注册时间
2017-9-5
在线时间
78 小时
 楼主| 发表于 2018-12-3 22:49:19 | 显示全部楼层
aozima 发表于 2018-12-3 10:17
去掉每次,后面每次启动只检查版本,相同就跳过。

不然太慢,也很快就烧坏了。

请问您SPI FLASH是使用的那款?
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-22 08:33

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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