参考博客:STM32 BootLoader升级固件_cyang's blog-优快云博客
STM32固件升级详解(BootLoader)_EmbeddedOsprey-优快云博客_stm32升级bootloader
一、关于BootLoader
- 1、BootLoader就是单片机启动时候运行的一段小程序,这段程序负责单片机固件的更新,也就是单片机选择性的自己给自己下程序。可以更新,也可以不更新,更新的话,BootLoader更新完程序后,跳转到新程序运行;不更新的话,BootLoader直接跳转到原来的程序去运行。
- 2、BootLoader更新完程序后并不擦除自己,下次启动后依然先运行BootLoader程序,又可以选择性的更新或者不更新程序,所以BootLoader就是用来管理单片机程序的更新。
- 3、在实际的单片机工程项目中,如果加入了BootLoader功能,就可以给单片机日后升级程序留出一个接口,方便日后单片机程序更新。当然,这就需要创建两个工程项目,一个为BootLoader工程,一个为APP工程。
- 4、BootLoader工程生成的.hex或者.bin文件通常下载到ROM或Flash中的首地址,这样可以保证上电后先运行BootLoader程序。而APP工程生成的.hex或者.bin文件则下载到ROM或Flash中BootLoader后面的地址中。也就是说,存在ROM/Flash中的内容是分为两部分的。
- 5、要实现在同一个ROM/Flash中保存两段程序,并且保证不能相互覆盖,则需要在下载程序时指定地址。如在Keil下,可以进行如下的调整

(版权声明:本文为优快云博主「cyang812」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.youkuaiyun.com/u011303443/article/details/53378602)
二、OTA升级方式:(涉及到BootLoader的编写)
1.全量升级:
完整的下载新版本固件,下载完成后将固件搬运到APP程序运行的位置。(一般来说是将APP从片外flash搬运到片内flash上)。搬运完成后校验通过后重启APP。

2.差分升级:

服务器端: 生成差分包,bsdiff算法
1.对old文件中所有子字符串形成一个字典;
2.对比old文件和new文件,产生diff string 和extra string;
3.将diff string 和extra string 以及相应的控制 字用zip压缩成一个patch包。
设备端: 生成new File,bspatch算法
1.接收patch包;
2.解压patch包;
3.还原new文件。
3.原地升级:
相比差分升级,合包的过程,直接搬运。
容错

本文介绍了STM32单片机的BootLoader概念及其在固件升级中的作用,包括全量升级、差分升级等OTA方式,并详细阐述了各种升级方式的优缺点。此外,还提供了BootLoader的实现代码示例。
最低0.47元/天 解锁文章
1058

被折叠的 条评论
为什么被折叠?



