791560795 发表于 2023-11-23 17:28:29

请教工作中的各位大佬,如果对bootloader 进行更新,防止断电变砖有没有好方法

正常MCU 启动从指定的地址启动,如果应用APP 对bootloader 升级过程中断电,那么整个设备就直接变砖了。 是否有什么好的办法不变砖。 异常断电这件事情还是会存在的

yklstudent 发表于 2023-11-23 23:55:39

感觉设计三层架构吧

eric2013 发表于 2023-11-24 08:55:03

双boot方案,适合的系列
1、H7系列可以设置从任意Flash地址启动。切换后,同时通过选项字节配置,将启动地址也改了,防止掉电损坏。
2、支持双BANK的也可以,这个也可以设置从任意BANK启动。

791560795 发表于 2023-11-24 09:18:49

yklstudent 发表于 2023-11-23 23:55
感觉设计三层架构吧

三层架构增加维护难度,而且每一层的代码不是都有可能有BUG,陷入死循环了

791560795 发表于 2023-11-24 09:19:36

eric2013 发表于 2023-11-24 08:55
双boot方案,适合的系列
1、H7系列可以设置从任意Flash地址启动。切换后,同时通过选项字节配置,将启动地 ...

针对STM32F4 的Cortex-M4 是否有好的方案方式死机

791560795 发表于 2023-11-24 09:21:09

eric2013 发表于 2023-11-24 08:55
双boot方案,适合的系列
1、H7系列可以设置从任意Flash地址启动。切换后,同时通过选项字节配置,将启动地 ...

双bank 方案缺陷就是少了一半可以使用的FLASH 感觉不划算

DX3906 发表于 2023-11-24 15:42:01

规划两块flash区域,默认使用区域1,传输固件的时候不覆盖默认区域,而是存到区域2,复位重启后对比版本号+做校验,通不过继续从区域1启动,通过了就跳转到区域2,之后上电都从区域2启动
下次更新的时候固件覆盖区域1,然后从区域1启动,再下次更新又覆盖区域2,两个区域交替保存新固件,这样应该可以保证无论如何都有一个可用的固件

Dinor 发表于 2023-11-24 16:09:43

可以看看这个
mOTA

yklstudent 发表于 2023-11-24 23:39:42

一般芯片就一个bank区吧,0x08000000位置如果放置boot,0x08XXXXXX位置放置app用户程序,从app用户程序对boot进行升级过程中断电啥的,boot工程损坏,这时候芯片重新上电就应该没法正常执行了吧,这个如何支持让程序可以继续跳转执行app程序,确保可以继续支持升级boot功能?

会飞的猪_2020 发表于 2023-11-25 10:15:11

貌似没太好的办法

会飞的猪_2020 发表于 2023-11-25 10:16:27

是什么业务需求导致要升级boot,这个不合理吧。

sagade 发表于 2023-11-25 12:00:57

1ST-BOOT+2ND-BOOT+APP
1ST-BOOT只做跳转,如果2ND-BOOT出错,则跳转到APP,否则跳转到2ND-BOOT,然后再跳转到APP
如果有外部NOR,是不是可以先存放新的2ND-BOOT到外部NOR,校验通过后再更新到2ND-BOOT
不知道这样行不行,感觉有点复杂麻烦了,实际客户一般只做APP升级吧

791560795 发表于 2024-1-4 15:47:10

会飞的猪_2020 发表于 2023-11-25 10:16
是什么业务需求导致要升级boot,这个不合理吧。

新产品bootloader 写的有bug,不是很完善

312456990 发表于 2024-1-15 13:16:02

或者 双BOOT 方案,就是BOOT1+ BOOT 2 + APP :
1. BOOT1, 用来指向固件升级 或者 应用程序; 每次跳转程序之前 存储标志位 , 然后再目标程序中去判断和清除 ,这样如果APP有问题 或者 BOOT2 有问题 都可以回到BOOT1中 重新切换;
2. BOOT2,用来执行固件更新的目的, 比如 对APP区域进行固件更新等;
3. APP, 用来执行业务程序, 以及 固件接收程序 , 讲固件接收 并 存储至片外FLASH,供BOOT1去更新;

理由: 通常来说 一般对APP程序有更新的需求, BOOT程序一旦稳定后 不会变更, 我这里用双BOOT的方法 , 实际上是 分摊风险 , 就是 要保证BOOT1的程序是正确的(这相对容易, 因为只有一个指向跳转功能) , 然后如果BOOT2有修改需求 , 那么 可以在APP中去 更新BOOT2

apleilx 发表于 2024-1-20 09:30:28

最好的方法就是对BOOT的各项功能做好全面验证,别的花里胡哨的方法都是在徒增复杂度和维护难度。

shu8992767 发表于 2024-3-14 10:23:27

eric2013 发表于 2023-11-24 08:55
双boot方案,适合的系列
1、H7系列可以设置从任意Flash地址启动。切换后,同时通过选项字节配置,将启动地 ...

大佬请教下,我在用H7设置任意地址的方式实现boot更新,发现一个问题,就是我从Boot1(0x8000000) 升级到 boot2(0x8020000)的程序固件,bin文件内的函数、常量等信息的起始地址必须调整到 boot2分区的起始地址(0x8020000),否则切换启动地址时会出现问题,但是如果这样的话,每次升级固件就要搞清楚当前的boot分区的起始地址是 0x8000000 还是 boo2分区0x8020000,请问有什么解决办法
页: [1]
查看完整版本: 请教工作中的各位大佬,如果对bootloader 进行更新,防止断电变砖有没有好方法