dso_2012 发表于 2022-9-13 16:22:47

大家好,有在STM32,GD32 实现 BOOT自身的升级吗

现在有一个用GD32 M4项目,想要做成BOOT也可以升级的方式,目前想了一个方案就是 做两级BOOT,
一级BOOT负责加载二级BOOT,以及校验BOOT的合法性,若BOOT不合法则从备份区加载BOOT来进行烧录,烧录后再启动二级BOOT,二级BOOT启动负责引导APP ,APP中升级二级BOOT的时候先要烧录到备份区(备份区放在FLASH 尾部),升级APP 就跳转二级BOOT,不知道这样做是否可行,之前都是一级BOOT,没有这么玩过

kitten 发表于 2022-9-13 16:28:36

通常有boot升级的需求,那么一级boot也会需要升级的。你这个方案明显一级boot不可升级。所以不用费那么大劲,直接APP里升级boot就好了,无非就是担心升级时意外断电设备变砖的情况嘛,小概率事件,大不了回厂解决。

akey3000 发表于 2022-9-13 16:36:42

有的mcu,比如瑞萨,是支持配置上电启动的flash的地址。st和gd的mcu,上电启动都是flash的起始地址开始,所以可以参考二楼。

dso_2012 发表于 2022-9-13 16:46:10

是这样的,一级BOOT的功能出厂后不再修改,但是二级BOOT 有可能设备换了新的部件要做一些匹配,比如设备的屏幕换了,那么驱动也要换,如果不换驱动,升级APP的时候会黑屏

unifax001 发表于 2022-9-13 17:18:28

一级引导二级 二级引导三级当然可以,FLASH够大怎么弄都行!
我们一般是boot不能升级,但是最近接手的项目里就有个BootUpgrade的线程,就是楼主说的这种事情,他们原来使用的就是BOOT刷APP,这次是APP刷BOOT。

zjykwym 发表于 2022-9-13 17:31:33

可以选带双bank的mcu,互相升级。

unifax001 发表于 2022-9-14 17:07:02

楼主搞复杂了,boot1 就是bootboot2 完全可以作为app的初始化部分啊

astankvai 发表于 2022-9-14 17:18:24

我们都只做一个USB HID BOOTLOADER, 然后就APP了。

albert_w 发表于 2022-9-14 17:23:51

akey3000 发表于 2022-9-13 16:36
有的mcu,比如瑞萨,是支持配置上电启动的flash的地址。st和gd的mcu,上电启动都是flash的起始地址开始,所 ...
(引用自3楼)

一些型号我记得有这个的, 支持双bank

albert_w 发表于 2022-9-14 17:25:06

升级之前先从app干掉boot, 然后重启, boot干掉app.
你问我app干掉boot的时候中断了咋办? 凉拌, 除非双boot,双app

zchong 发表于 2022-9-15 07:53:37

boot升级自己呗,做好一点,变砖的风险可控

xy-mcu 发表于 2022-9-19 15:18:15

boot 可以在ram 里面运行. 不过确实有小概率事件.
就看这个小概率事件的维护费用和开发费用的对比权衡了.

pt2go 发表于 2022-9-20 21:13:26

本帖最后由 pt2go 于 2022-9-20 21:37 编辑

可以让boot在ram里面运行的..............不过确实有小概率事件{:funk:} ,升级boot存储空间的时候断电.........



另外注意一下,代码里面用到中断,需要重定向中断向量表的起始地址到0x20000000

dso_2012 发表于 2022-9-26 11:53:45

pt2go 发表于 2022-9-20 21:13
可以让boot在ram里面运行的..............不过确实有小概率事件 ,升级boot存储空间的时候断电.... ...
(引用自13楼)

这个是把所有代码都复制到RAM里面执行吗?

jianfengxixi 发表于 2022-9-26 13:12:01

直接给客户用烧录器烧,外行看起来还显得专业。。。

2nd 发表于 2022-9-28 10:50:24

做过相同功能,但产品运行中,升级Bootloader没用到过。

pt2go 发表于 2022-9-29 22:35:10

dso_2012 发表于 2022-9-26 11:53
这个是把所有代码都复制到RAM里面执行吗?
(引用自14楼)

是的,连编译的时候code空间都是在ram地址的

xmlbb 发表于 2022-9-30 09:32:55

dso_2012 发表于 2022-9-13 16:46
是这样的,一级BOOT的功能出厂后不再修改,但是二级BOOT 有可能设备换了新的部件要做一些匹配,比如设备的 ...
(引用自4楼)

一般都是生产的时候换部件吧,在客户手里还需要换部件?

在生产不是好解决吗?不同的物料烧录不同的boot就行了。

dso_2012 发表于 2022-10-14 14:20:37

pt2go 发表于 2022-9-29 22:35
是的,连编译的时候code空间都是在ram地址的
(引用自17楼)

如果将FLASH 擦除烧录的函数放到RAM里面,其它代码还是在FLASH里面,可以实现自己对自己升级吗

dso_2012 发表于 2022-10-14 17:25:00

pt2go 发表于 2022-9-29 22:35
是的,连编译的时候code空间都是在ram地址的
(引用自17楼)

这个用IAR 怎么操作啊
页: [1]
查看完整版本: 大家好,有在STM32,GD32 实现 BOOT自身的升级吗