原创 谈谈STM32的bootload方案

2021-1-18 23:02 3698 20 5 分类: MCU/ 嵌入式 文集: 嵌入式开发
这个话题相信很多嵌入式的同行都困惑过很长一段时间,其实说起来也不算复杂,借此机会,也把以前做过的bootloader方案说一下
先说怎么实现的,要知道bootloader本身其实也是一个应用程序,不过这个应用程序本身不会做太多的处理,他只负责告诉程序得往哪里走。
一般来说,需要以下几个操作,
  1. 地址跳转,需要跳转到某一个位置开始执行
  2. 中断向量表需要偏移
  3. 需要关闭总中断
  4. 需要注意一点是需要关闭看门狗,不然在app中没喂狗会重启
关于这个升级方案,有以下几种做法,
将芯片的flash分为几个部分,一部分用来存储升级数据app2,一部分用来存储正常运行的代码区app1,当有升级任务来的时候,mcu将数据先放到app2的区域,并在升级手法完成时候对数据进行校验,考虑到嵌入式设备的算力,建议用md5或者crc16.比较无误后在某个安全地址写入标志位后,重启设备 设备上电后会检测到有app2存在,将其数据更替到app1的区域,更新完成后跳到app1(此时存储的是app2的代码) 程序正常运行后擦除标志位
当本身空间不够的情况下,使用25q80等外设,增加一些成本,但这样可以做到更高的灵活性,比如针对刚才的情况,假如说程序运行失败了,升级固件失败了或者更新的固件达不到要求,这个时候需要回复出厂设置了,那该怎么处理呢?可以先把出厂时候的程序放在外置flash,等到比如检测到按键长按,这个时候就可以回复出厂设置了,程序从外置flash中将数据加载到app1的区域,加载完成便跳转。

作者: Bruce-Woo, 来源:面包板社区

链接: https://mbb.eet-china.com/blog/uid-me-1850657.html

版权声明:本文为博主原创,未经本人允许,禁止转载!

PARTNER CONTENT

文章评论2条评论)

登录后参与讨论

curton 2021-1-20 20:38

谢谢楼主

yzw92 2021-1-20 06:21

谢谢楼主
相关推荐阅读
Bruce-Woo 2023-03-07 15:14
嵌入式面试之系统
最近一段时间在开始找工作,自己以前也面试过其他人,想从实际工作的角度,来提出一些有意义的问题并做一些浅薄的解答,期望帮助到找工作或者刚开始当面试官的朋友。我把面试要准备的地方列成一下几个注意点,大家...
Bruce-Woo 2023-02-25 21:59
芯片选型的思路
近来在面试,不知为何很多人问起我刚毕业的时候的项目中的一个芯片选型的事情,回过头来整理下,希望可以帮助到后面的朋友1. 开发难度 开发难度,要考虑本身的程序员的开发能力,擅长的领域和工具等。综合下你...
Bruce-Woo 2021-03-17 14:19
记一次调用动态库报错的处理过程( undefined symbol)
最近工作在调用其他同事的一个动态库的时候发现有 未识别的错误 特此记录一下         首先我们用ldd查一下动态库连接是否有问题   ...
Bruce-Woo 2021-03-11 15:03
ubuntu16.04下安装svn
SVN和GIT相信是大家使用最多的代码协同工具,不过可能在win下用的比较多,那今天在ubuntu上运行一遍,操作都差不多。某种程度上讲,我也更喜欢指令操作。1. 远程登录虚拟机,也可以页面操作,看个...
Bruce-Woo 2021-02-09 01:08
2020,我想和你谈谈
这篇文字无关技术,也没有代码。 这是最好的时代,也是最坏的时代!写在回家前夜。 不到10个小时后就要开始坐车回家,手头的工作也没有做完。正经的事儿没完成,乱七八糟的事情倒是想了不少,说话是一种表达方...
Bruce-Woo 2021-01-19 12:34
cmake的安装过程
今天在编译opencv的时候突然发现cmake失败,显示版本不同遂决定修复之方法如下下载更高版本cmake,可在cmake官网下载 解压 tar -zxvf cmake-3.19....
我要评论
2
20
关闭 站长推荐上一条 /3 下一条