CN110096293A - 一种基于STM32具有OTA升级功能的通用Bootloader实现方法 - Google Patents
一种基于STM32具有OTA升级功能的通用Bootloader实现方法 Download PDFInfo
- Publication number
- CN110096293A CN110096293A CN201910363895.8A CN201910363895A CN110096293A CN 110096293 A CN110096293 A CN 110096293A CN 201910363895 A CN201910363895 A CN 201910363895A CN 110096293 A CN110096293 A CN 110096293A
- Authority
- CN
- China
- Prior art keywords
- firmware
- bootloader
- subregion
- initialization
- pin
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/65—Updates
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04W—WIRELESS COMMUNICATION NETWORKS
- H04W8/00—Network data management
- H04W8/22—Processing or transfer of terminal data, e.g. status or physical capabilities
Abstract
本发明提供了一种可以运行于STM32多系列微控制器上的通用Bootloader,涉及Bootloader技术领域,特别涉及在STM32系列微控制器上的一种具备OTA功能通用Bootloader的实现。所述Bootloader主要由系统初始化模块,固件下载模块,固件恢复模块以及固件升级模块组成。本发明提供了在STM32系列微控制器平台上进行OTA升级所需的通用可靠Bootloader,大大降低了实现OTA功能的技术门槛,缩短项目开发周期。
Description
技术领域
本发明涉及Bootloader技术领域,特别涉及在STM32系列微控制器上的一种,可以添加OTA功能的通用Bootloader实现。
背景技术
随着物联网时代到来,越来越多的智能设备拥有了在线升级的能力,无论是系统更新,产品迭代还是漏洞修复都能在第一时间抵达用户手中的智能设备。在线升级功能需要使用OTA(Over the Air Technology)空中下载技术,该技术可以为产品添加联网升级功能。OTA技术中必不可少的一环就是通过Bootloader来管理、升级设备固件。而带有OTA功能的Bootloader功能复杂,技术门槛较高,给开发者带来很大困难。同时Bootloader的设计与底层硬件有紧密联系,一旦硬件稍有改动常常需要重新设计,给技术开发过程带来很多重复工作。
发明内容
本发明鉴于现有技术中存在的问题,目的在于为基于STM32系列微控制器的产品,添加OTA功能时遇到的复杂技术问题提供通用的解决方案。
为了实现上述目的,本发明提供了一种可以运行于STM32多系列微控制器上的通用Bootloader,使用该Bootloader可以为基于STM32微控制器开发的产品快速添加OTA升级功能。本发明可解决添加OTA升级功能时遇到的各种复杂问题,例如升级过程中缺乏中安全机制、APP固件无法正常启动、升级过程中出现硬件错误、固件解密解压错误等。本发明实现的Bootloader资源占用小,支持多系列STM32芯片,支持各种SPI Flash存储器,支持固件加解密和压缩,支持恢复出厂固件,支持定制化Logo,并且这些功能均可自由配置。
本发明的有益效果在于通用Bootloader可以运行在多系列的STM32微控制器上,并且可以提供OTA升级功能所需多种技术的可靠实现。解决了在为基于STM32系列微控制器开发的产品添加OTA升级功能时遇到的种种技术困难,缩短开发周期,避免重复设计。
附图说明
图1为本发明实施例的整体系统结构模块组成图;
图2为本发明实施例的系统初始化流程;
图3为本发明实施例的使用固件下载器下载系统固件后启动固件升级流程;
图4为本发明实施例的Bootloader引导系统启动并进行固件升级流程;
图5为本发明实施例的Bootloader引导系统固件恢复流程;
图6为本发明实施例的用户可自定义配置的存储分区表。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面结合说明书附图对本发明实施例进行说明,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例提供一种基于STM32具有OTA升级功能的通用Bootloader,整体功能由系统初始化模块11、固件下载模块12、固件恢复模块13、固件升级模块14组成。
本发明实施例提供使用方法说明,系统初始化模块11的执行流程包含如下步骤:
步骤201:根据板卡的实际情况将指定的引脚作为串口输出,进行串口的初始化操作;
步骤202:首先根据芯片的实际Flash参数进行驱动初始化,如果配置了外部SPIFlash,则根据指定的SPI引脚对片外SPI Flash进行初始化。本发明实施例提供的Bootloader所附带的SPI Flash驱动可适配市面上绝大部分SPI Flash,因此具有很好的通用性;
步骤203:根据用户给定的参数进行分区表初始化,指定各个分区在具体存储器中的实际位置。图6说明了Bootloader中所包含的系统分区表以及分区表中的各个配置项的参数。该表说明了系统中的分区名、分区的作用、分区所在的具体存储器、分区在存储器中的偏移量以及分区大小。在Bootloader程序内部要实现与之相应的分区表,才可以保证OTA升级过程正确进行。
在实施例中,固件下载模块12描述了使用固件下载器将固件下载到download分区后,系统的执行流程包含如下步骤:
步骤301:运行带有下载器功能的app固件,选择一种固件下载方式;
步骤302:指定需要下载的固件地址;
步骤303:运行固件下载程序,将固件下载到系统的download分区进行存储;
步骤304:固件下载完毕,系统会自动重新启动进入固件升级模块14所示流程。
在实施例中,固件恢复模块13描述了由Bootloader引导系统固件恢复流程,包含如下步骤:
步骤401:系统启动后检查是否需要进行固件恢复,进行固件恢复的条件为指定的IO引脚处于指定的有效电平,并保持10秒;
步骤402:如果符合固件恢复的条件,则进行系统固件恢复。Bootloader将对factory分区内存储的打包好的固件进行校验、解密、解压缩操作,同时将系统固件从factory分区搬运到app分区,搬运成功后将会进入步骤403继续执行;
步骤403:程序将会跳转到app分区中的固件运行;
在实施例中,固件升级模块14描述了由Bootloader引导系统启动并进行固件升级的流程。同时体现了系统初始化模块11和固件下载模块12在整个系统升级过程中的位置和相互关系:
步骤501:调用系统初始化模块对系统进行初始化,详细流程可参阅图2,初始化完成后进行步骤502执行;
步骤502:调用固件恢复模块,检查是否需要进行固件恢复,如果需要进行固件恢复则进入图4所示的固件恢复流程,如果不需要进行固件恢复则进入步骤503继续执行;
步骤503:检查是否需要对app分区中的系统固件进行升级,进行固件升级的条件为download分区中的固件版本号与app分区中的固件版本号不一致。如果符合固件升级条件,则进入到步骤504进行固件升级操作;
步骤504:在本步骤中Bootloader将对download分区内存储的打包好的固件进行校验、解密、解压缩操作,同时将系统固件从download分区搬运到app分区,搬运成功后将会进入步骤505继续执行;
步骤505:程序将会跳转到app分区中的固件运行;
最后应说明的是:以上实施例仅用以说明本发明的技术方案而非对其进行限制,尽管参照优化实施例对本发明进行了详细的说明,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
Claims (10)
1.一种基于STM32多系列微控制器具有OTA升级功能的通用Bootloader,其特征在于,可以自动生成可执行的Bootloader二进制bin文件,该二进制bin文件可以直接运行在多系列的STM32微控制器上,用户无需任何代码移植过程即可为基于STM32微控制器的产品添加OTA功能;所述Bootloader在实现时充分考虑了对不同板卡兼容性,使得Bootloader可以在多系列STM32微控制器上通用。
所述Bootloader包含多个功能模块,在系统启动时,首先调用系统初始化模块对整个系统进行初始化,接下来调用固件恢复模块检查是否需要进行固件恢复,然后调用固件升级模块检查是否需要进行固件升级。
所述Bootloader的固件下载模块被调用时,会将固件下载到指定分区,然后重新启动系统。
2.根据权利要求1所述的自动生成可执行的Bootloader二进制bin文件,其特征在于用户可以通过在网页端填写配置等方式,根据自己拥有的板卡的参数特征对所需的Bootloader进行配置。Bootloader生成程序会根据用户填写的配置自动生成对应的Bootloader二进制bin文件。
3.根据权利要求1所述的用户无需任何代码移植过程,其特征在于由于Bootloader是根据用户目标板卡的特征参数而生成的,因此生成的Bootloader符合用户拥有的目标板卡的特征与要求,因此可以直接运行在目标板卡上。
4.根据权利要求1所述的系统初始化模块,其特征在于,包括系统时钟的初始化、串口的初始化、片上Flash以及片外SPI Flash的初始化以及系统分区表的初始化。
所述系统时钟的初始化,其特征在于使用芯片内部时钟源,不依赖芯片外部高速晶振,因此可以保证芯片内部时钟的稳定性。对同系列的芯片使用统一的可正常运行的配置,因此可以使得时钟配置在同系列的各种芯片间通用。
所述串口初始化,其特征在于串口输出引脚可以指定为芯片的任意IO引脚。因此Bootloader的串口输出引脚具有高度的可配置性,为其运行在各种不同的板卡上提供了条件。串口输出引脚的实现方式为使用IO引脚来模拟串口输出,数据输出延时使用同系列都具备的通用定时器来实现,因此具有高度的通用性。
所述片外SPI Flash初始化,其特征在于CS引脚、CLK引脚、MOSI引脚和MISO引脚均可指定为任意的芯片IO来实现。因此SPI Flash具有高度的可配置性,为Bootloader运行在各种不同的板卡上提供了条件。为了实现这种高度可配置性,SPI引脚均使用普通IO引脚来模拟实现。因此具有高度的通用性。
所述系统分区表的初始化,其特征在于,对系统内的存储器进行分区管理,创建于OTA升级相关的app分区、download分区以及用于恢复出厂固件的factory分区。
5.根据权利要求1所述的固件恢复模块,其特征在于通过检测外部引脚的输入电平来判断是否进行固件恢复。触发固件恢复的条件是系统启动前外部引脚输入电平为有效电平,且持续不少于10秒。如果判断符合固件恢复条件,则进行系统固件恢复。Bootloader将对factory分区内存储的以特定格式打包好的固件进行校验、解密、解压缩操作,同时将系统固件从factory分区搬运到app分区,搬运成功完成后跳转到app分区执行程序。
6.根据权利要求1所述的固件升级模块,其特征在于会检查app分区中的固件版本号以及download分区中的版本号,对比两者是否一致。如果两者版本号一致,则直接跳转到app分区中的固件执行。如果两者不一致,则启动固件升级程序,此时Bootloader将对download分区中存储的以特定格式打包好的固件进行校验、解密、解压缩操作,同时将系统固件从download分区搬运到app分区,搬运成功后跳转到app分区执行程序。
7.根据权利要求1所述的固件下载模块,其特征在于可以将固件通过多种途径下载到指定的系统分区中。例如使用Ymodem协议,通过硬件串口来接收固件文件并存储到指定分区中。或者使用HTTP协议,通过网络下载文件到指定系统分区。固件下载模块一般用于将需要升级的固件下载到系统的download分区,当固件被成功下载到指定分区后,固件下载模块会重启进入系统启动流程,然后通过固件升级模块来更新系统固件。
8.根据权利要求4所述的SPI Flash支持市面上绝大多数初始化SPI Flash型号,其特征在于由于Bootloader内部集成了通用的SPI Flash驱动程序,因此只需要配置SPI Flash通信所使用的SPI接口,Bootloader即可自动读出板卡上所使用的SPI Flash的容量大小等参数信息。这使得用户可以非常方便地使用各种SPI Flash来作为存放固件存储器,而不必要关心SPI Flash驱动的适配问题。
9.根据权利要求5所述的固件存储的特定格式,其特征在于可以在外部PC端对固件进行加密和压缩。支持的加密算法为AES256,支持的固件压缩方式有fastlz、quicklz以及zlib。通过使用给定的固件打包工具,可以将固件bin文件打包为特定的rbl格式文件,该格式的文件经过了加密和压缩,可以被当做升级固件被直接下载到系统的指定分区中。在固件打包时,用户可以指定AES256加密算法的IV以及KEY,后续在Bootloader搬运该打包固件到app分区时,其内置的IV以及KEY必须打包时指定的相一致,才能通过校验。
10.根据权利要求12所述的Bootloader中内置的IV以及KEY,其特征在于在Bootloader生成时被指定,且同样采用一种特殊的加密算法加密,最终以加密的形式存储在Bootloader中。Bootloader在运行固件的解密程序前,通过特定的算法解密出正确的IV和KEY,用于固件的解密过程。由于其存储时也是以密文的形式存在,因此具有较高的安全性。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910363895.8A CN110096293A (zh) | 2019-04-30 | 2019-04-30 | 一种基于STM32具有OTA升级功能的通用Bootloader实现方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910363895.8A CN110096293A (zh) | 2019-04-30 | 2019-04-30 | 一种基于STM32具有OTA升级功能的通用Bootloader实现方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN110096293A true CN110096293A (zh) | 2019-08-06 |
Family
ID=67446721
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910363895.8A Pending CN110096293A (zh) | 2019-04-30 | 2019-04-30 | 一种基于STM32具有OTA升级功能的通用Bootloader实现方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110096293A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2021197484A1 (zh) * | 2020-04-03 | 2021-10-07 | 江苏芯盛智能科技有限公司 | 固件运行方法、装置、固件烧录方法、装置和计算机设备 |
CN113741940A (zh) * | 2021-09-14 | 2021-12-03 | 天津易鼎丰动力科技有限公司 | 在线升级电动汽车整车控制器bootloader的方法 |
CN113821230A (zh) * | 2020-06-18 | 2021-12-21 | 神州龙芯智能科技有限公司 | 一种嵌入式系统的系统固件更新方式设计 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2009004388A2 (en) * | 2007-07-05 | 2009-01-08 | Vodafone Group Plc | Received message verification |
CN101650662A (zh) * | 2009-08-26 | 2010-02-17 | 中兴通讯股份有限公司 | 一种嵌入式系统的存储器件、固件启动及升级方法 |
US20130185563A1 (en) * | 2012-01-12 | 2013-07-18 | Gueorgui Djabarov | Multiple System Images for Over-The-Air Updates |
CN105204899A (zh) * | 2015-09-17 | 2015-12-30 | 浪潮软件集团有限公司 | 一种基于网络的单片机固件升级方法的实现 |
CN105630546A (zh) * | 2015-12-22 | 2016-06-01 | 小米科技有限责任公司 | 系统更新方法及装置 |
CN106020861A (zh) * | 2016-05-05 | 2016-10-12 | 惠州Tcl移动通信有限公司 | 一种智能手表的fota升级方法及系统 |
CN107402776A (zh) * | 2016-05-20 | 2017-11-28 | 南京阿波罗机器人科技有限公司 | 一种基于蓝牙4的手机无线升级stm32单片机控制器固件方法 |
CN108509215A (zh) * | 2018-03-22 | 2018-09-07 | 广州视源电子科技股份有限公司 | 一种系统软件的更换方法、装置、终端设备及存储介质 |
-
2019
- 2019-04-30 CN CN201910363895.8A patent/CN110096293A/zh active Pending
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2009004388A2 (en) * | 2007-07-05 | 2009-01-08 | Vodafone Group Plc | Received message verification |
CN101650662A (zh) * | 2009-08-26 | 2010-02-17 | 中兴通讯股份有限公司 | 一种嵌入式系统的存储器件、固件启动及升级方法 |
US20130185563A1 (en) * | 2012-01-12 | 2013-07-18 | Gueorgui Djabarov | Multiple System Images for Over-The-Air Updates |
CN105204899A (zh) * | 2015-09-17 | 2015-12-30 | 浪潮软件集团有限公司 | 一种基于网络的单片机固件升级方法的实现 |
CN105630546A (zh) * | 2015-12-22 | 2016-06-01 | 小米科技有限责任公司 | 系统更新方法及装置 |
CN106020861A (zh) * | 2016-05-05 | 2016-10-12 | 惠州Tcl移动通信有限公司 | 一种智能手表的fota升级方法及系统 |
CN107402776A (zh) * | 2016-05-20 | 2017-11-28 | 南京阿波罗机器人科技有限公司 | 一种基于蓝牙4的手机无线升级stm32单片机控制器固件方法 |
CN108509215A (zh) * | 2018-03-22 | 2018-09-07 | 广州视源电子科技股份有限公司 | 一种系统软件的更换方法、装置、终端设备及存储介质 |
Non-Patent Citations (2)
Title |
---|
Y. KANG 等: "Generic Bootloader Architecture Based on Automatic Update Mechanism", 《2018 IEEE 3RD INTERNATIONAL CONFERENCE ON SIGNAL AND IMAGE PROCESSING (ICSIP)》 * |
陶鸿飞 等: "空中下载(OTA)系统安全性的研究", 《中国图象图形学报》 * |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2021197484A1 (zh) * | 2020-04-03 | 2021-10-07 | 江苏芯盛智能科技有限公司 | 固件运行方法、装置、固件烧录方法、装置和计算机设备 |
CN113821230A (zh) * | 2020-06-18 | 2021-12-21 | 神州龙芯智能科技有限公司 | 一种嵌入式系统的系统固件更新方式设计 |
CN113741940A (zh) * | 2021-09-14 | 2021-12-03 | 天津易鼎丰动力科技有限公司 | 在线升级电动汽车整车控制器bootloader的方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110096293A (zh) | 一种基于STM32具有OTA升级功能的通用Bootloader实现方法 | |
CN106775723B (zh) | 基于Android平台的系统固件定制的方法和Android设备 | |
Reijers et al. | Efficient code distribution in wireless sensor networks | |
CN107346252B (zh) | 应用更新方法和装置 | |
Zaddach et al. | Embedded devices security and firmware reverse engineering | |
CN110134426A (zh) | 一种嵌入式系统升级方法、装置及终端设备 | |
WO2019062635A1 (zh) | 升级方法和装置 | |
CN104572206A (zh) | 应用程序自更新和备份恢复的方法 | |
CN105094913B (zh) | 系统、基带固件和系统应用升级方法及装置 | |
EP2675110A2 (en) | Method, system and terminal for system update between mobile communication terminals | |
US20070294685A1 (en) | Program upgrade system and method for ota-capable portable device | |
CN104427119B (zh) | 通信终端及其非易失性数据的处理方法 | |
EP2076834A1 (en) | Program upgrade system and method for ota-capable mobile terminal | |
CN103577211A (zh) | 一种新的Android ROM系统打包和烧录、更新方式 | |
CN103688268A (zh) | 车辆单元和用来操作车辆单元的方法 | |
CN101901160A (zh) | 版本升级软件包的打包方法及装置 | |
WO2017202338A1 (zh) | 机顶盒加载驱动的方法及系统 | |
KR102083751B1 (ko) | 보안 요소에서의 객체들을 관리하기 위한 방법 | |
CN105867985B (zh) | 一种车载解码器软件升级文件的方法 | |
CN112947977A (zh) | 一种软件在线升级方法及系统 | |
WO2016078060A1 (zh) | 用于多系统终端的系统升级方法、升级装置和终端 | |
CN105068834A (zh) | 系统升级方法及装置 | |
US10642623B1 (en) | Preserving firmware settings during firmware updates | |
WO2018024198A1 (zh) | 机顶盒的应用程序升级方法、系统及机顶盒 | |
CN104427120B (zh) | 通信终端及其非易失性数据的处理方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20190806 |
|
WD01 | Invention patent application deemed withdrawn after publication |