一种基于Bootloader的嵌入式软件升级及运行方法与流程
未命名
07-23
阅读:132
评论:0
一种基于bootloader的嵌入式软件升级及运行方法
技术领域
1.本发明涉及嵌入式系统的技术领域,特别是涉及一种基于bootloader的嵌入式软件升级及运行方法。
背景技术:
2.随着人机互联,物联网,车载电子等技术的快速发展,嵌入式软硬件必不可少。以车载电子为例,现在一辆汽车中的电子产品种类数量呈现指数增长。电子产品必然会涉及程序的下载和更新,而产品一旦量产后会进行外壳的封装,有了封装后在不打开外壳的情况下,很难再次接触到电路板,所以通过程序下载器给电子产品进行程序的下载和更新变成了不可能。
3.市场上现在解决这个问题的方法有很多,最为常见的方法就是在电子产品在出厂前设计bootloader(引导程序),然后通过bootloader将应用程序升级文件写入到mcuflash中对电子产品进行离线程序下载和更新。但这种下载程序的方法有比较大的风险,风险在于通过bootloader进行应用程序下载时会在擦除存储在mcuflash地址段中的当前的应用程序后再写入新程序,如果在程序下载中出现干扰、通信失效、断电等不可抗力因素,导致新写入mcuflash中的数据丢包或数据错误,造成新写入的数据异常而旧数据被擦除,会导致升级后的应用程序无法正常运行,电子产品最终无法正常工作,功能丧失,最严重的都有可能导致无法开机。
技术实现要素:
4.为解决上述技术问题,本发明提供一种通过bootloader有序控制应用程序下载到对应的内存段,避免下载异常导致的产品问题,并且新版本程序无法使用时系统自动转入旧版本程序运行,确保产品的基本功能的基于bootloader的嵌入式软件升级及运行方法。
5.本发明的一种基于bootloader的嵌入式软件升级及运行方法,软件升级方法及运行方法为:
6.一、在嵌入式软件内设计存储器mcuflash,将mcuflash按照需求将flash内存区域分为四段:boot地址段、application_1地址段、application_2地址段、parameter地址段;其中boot地址段用于存储产品的bootloader程序,application_1和application_2地址段用来存储旧应用程序和新应用程序,parameter地址段用来存储application有效地址段号、bootloader跳转application的标志位等
7.二、软件升级方法为:通过下载器将bootloader程序烧写入芯片flash的boot段,产品开机并运行application_1或application_2中的旧版本程序,bootloader运行将新版本程序数据覆盖application_1或application_2中未运行的旧版本程序数据,bootloader在运行校验程序后判断有效跳转标志位决定跳转到application_1或application_2或停留在bootloader运行;
8.三、软件运行方法为:产品正常升级完新版本应用程序之后,bootloader正常跳转
到新版应用程序地址段,新版本应用程序正式运行,如果最新版本应用程序无法正常运行导致重启次数大于阈值,则恢复parameter地址段中的应用程序运行的内存段号为上一版本内存段号,使bootloader跳转到旧版本应用程序运行。
9.优选的,软件详细升级方法为:
10.一.bootloader程序读取存储在parameter地址段内的当前应用程序的运行内存段号和应用程序跳转标志位两个参数;
11.二.上位机通过外部通信(如can、pwm、uart等)向产品发送应用升级请求,bootloader接收到请求后擦除存储在parameter地址段中的应用程序跳转标志位。根据上电读取的当前应用程序的运行内存号段进行application地址段的首页进行擦除(如:当前应用程序存储在application_1区域,则擦除application_2区域段的首页地址,即将下载的新应用程序将下载到application_2区域,保留旧程序在application_1区域,反之亦然),并回复上位机擦除状态;
12.三.上位机发送升级密钥,bootloader校验密钥;
13.四.上位机下发应用程序升级文件中的数据;
14.五.bootloader接收到数据后根据初始地址和接收的数据总长度进行取整计算,判断写入地址是否需要进行页擦除,然后对相应的application地址段进行数据写入操作;
15.六.接收完数据以后bootloader对接收的数据进行校验;
16.七.根据校验结果重新写入应用程序运行内存号段和程序跳转标志位至parameter地址段中;
17.八.校验通过,bootloader跳转到新应用程序运行的内存段号,校验失败bootloader跳转到旧应用程序运行的内存号段;
18.九.升级完成。
19.优选的,在异常中断中增加cnt计数器,计数器计数增加时将数据写入parameter地址段中,bootloader中对cnt计数进行判断,cnt》x(x为可设阈值)时则修改parameter地址段中的应用程序运行的内存段号为上一版本内存段号,使bootloader跳转到旧版本应用程序运行。
20.优选的,自动切换应用流程如下:
21.一.产品上电应用程序运行;
22.二.应用程序出现异常bug,触发系统异常中断;
23.三.系统异常计数器cnt累加并写入parameter地址段进行记录;
24.四.系统重启;
25.五.bootloader从parameter中读取cnt计数器;
26.六.判断cnt计数大于设定值,修改parameter地址段中应用程序运行内存段号;
27.七.parameter地址段中的cnt计数器清零;
28.八.bootloader跳转到旧版本应用程序。
29.与现有技术相比本发明的有益效果为:
30.1.在写入数据过程中不需要上位机下发擦除flash地址指令,减小交互,提升升级速率,节省时间;
31.2.提高产品的稳定性,升级过程中不论出现内部还是外部干扰导致数据丢失、错
位,掉电等异常情况不会导致应用程序丢失,产品功能丧失;
32.3.mcuflash出现内存坏块时不会导致程序无法运行,可启用另一块flash地址块下载程序,利于维护,降低维护成本;
33.4.产品运行过程中若出现重大bug导致无法正常运行频繁重启,也可自动切入到上一个稳定版本保证产品功能不丧失;
34.5.方法简单,设计易实现。
附图说明
35.图1是本发明的flash内存分配结构示意图;
36.图2是本发明的升级流程示意图;
37.图3是本发明的程序运行和自动切换应用流程示意图;
具体实施方式
38.为了便于理解本发明,下面将参照相关附图对本发明进行更全面的描述。本发明可以以许多不同的形式来实现,并不限于本文所描述的实施例。相反地,提供这些实施例的目的是使对本发明的公开内容更加透彻全面。
39.实施例1
40.在bootloader跳转到应用时,首先从parameter地址段中读取当前应用程序运行内存段号,选择是跳转到application_1地址段运行application_1中的应用程序,还是跳转到application_2地址段运行application_2中的应用程序。如:当前应用程序存储在application_1地址段,parameter中存储的当前应用程序运行内存段号是1,在bootloader进行应用程序升级时,先擦除程序跳转有效标志位确保不跳转到应用程序,始终保持在boot模式下。上位机发来数据后bootloader将新应用程序的数据写入到application_2地址段,保留application_1地址段中的数据,不对application_1地址段进行擦除。升级数据发送完毕后bootloader进行数据校验,若校验成功,则将存储在parameter中的应用程序运行内存段号更改为2。若校验失败,则不更改存储在parameter中的应用程序运行内存段号。校验结束重新写入程序跳转有效标志位到parameter地址段中。若校验成功则跳转到新应用程序地址段application_2内,若校验失败则跳转到旧应用程序地址段application_2内。
41.同样原理,若当前应用程序地址运行在application_2内,则向application_1地址段内进行新应用程序更新。
42.假如旧版本应用程序存储在application_1地址段内,经过升级后新版本应用程序被升级到了application_2地址段内,产品在实际运行过程中出现异常情况的重启,则在重启前cnt计数器会进行累加计数并写入到parameter内存段进行存储,然后重新启动系统进入bootloader,重启后bootloader进行cnt计数判断,如果cnt》x(x=1、2、3、4、5
……
整数)更改parameter内存段的应用程序运行内存段号为1,并将parameter中的cnt计数清零,使bootloader跳转到application_1,运行旧版本应用程序。
43.如图1至图3所示,本发明的一种基于bootloader的嵌入式软件升级及运行方法,其在工作时,将mcuflash内存划分为boot段、application_1、application_2、parameter段
共四段,bootloader下载程序时有序控制应用程序下载到对应的application_1或application_2内存段,数据传输结束后校验传输数据的完整性来判断bootloader跳转到application_1或application_2地址段的应用,避免因为下载应用程序时数据异常导致的产品无法正常工作、功能丧失、变砖等问题;在当前程序运行过程中若出现程序死循环,无法正常运行的bug,系统也可依靠此设计进入旧版本程序进行运行,确保产品的基本功能运行。
44.本发明所实现的主要功能为:
45.1、通过bootloader有序控制应用程序下载到对应的内存段,避免下载异常导致的产品问题;
46.2、新版本程序无法使用时系统自动转入旧版本程序运行,确保产品的基本功能。
47.本发明的一种基于bootloader的嵌入式软件升级及运行方法,其安装方式、连接方式或设置方式均为常见机械方式,只要能够达成其有益效果的均可进行实施;本发明的一种基于bootloader的嵌入式软件升级及运行方法的mcuflash存储器为市面上采购,本行业内技术人员只需按照其附带的使用说明书进行安装和操作即可,而无需本领域的技术人员付出创造性劳动。
48.本文所使用的所有的技术和科学术语与属于本发明的技术领域的技术人员通常理解的含义相同。本文中在本发明的说明书中所使用的术语只是为了描述具体的实施例的目的,不是旨在于限制本发明。本文所使用的术语“及/或”包括一个或多个相关的所列项目的任意的和所有的组合。
49.以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明技术原理的前提下,还可以做出若干改进和变型,这些改进和变型也应视为本发明的保护范围。
技术特征:
1.一种基于bootloader的嵌入式软件升级及运行方法,其特征在于,软件升级方法及运行方法为:一、在嵌入式软件内设计存储器mcuflash,将mcuflash按照需求将flash内存区域分为四段:boot地址段、application_1地址段、application_2地址段、parameter地址段;其中boot地址段用于存储产品的bootloader程序,application_1和application_2地址段用来存储旧应用程序和新应用程序,parameter地址段用来存储application有效地址段号、bootloader跳转application的标志位等;二、软件升级方法为:通过下载器将bootloader程序烧写入芯片flash的boot段,产品开机并运行application_1或application_2中的旧版本程序,bootloader运行将新版本程序数据覆盖application_1或application_2中未运行的旧版本程序数据,bootloader在运行校验程序后判断有效跳转标志位决定跳转到application_1或application_2或停留在bootloader运行;三、软件运行方法为:产品正常升级完新版本应用程序之后,bootloader正常跳转到新版应用程序地址段,新版本应用程序正式运行,如果最新版本应用程序无法正常运行导致重启次数大于阈值,则恢复parameter地址段中的应用程序运行的内存段号为上一版本内存段号,使bootloader跳转到旧版本应用程序运行。2.如权利要求1所述的一种基于bootloader的嵌入式软件升级及运行方法,其特征在于,软件详细升级方法为:一.bootloader程序读取存储在parameter地址段内的当前应用程序的运行内存段号和应用程序跳转标志位两个参数;二.上位机通过外部通信(如can、pwm、uart等)向产品发送应用升级请求,bootloader接收到请求后擦除存储在parameter地址段中的应用程序跳转标志位,根据上电读取的当前应用程序的运行内存号段进行application地址段的首页进行擦除(如:当前应用程序存储在application_1区域,则擦除application_2区域段的首页地址,即将下载的新应用程序将下载到application_2区域,保留旧程序在application_1区域,反之亦然);并回复上位机擦除状态;三.上位机发送升级密钥,bootloader校验密钥;四.上位机下发应用程序升级文件中的数据;五.bootloader接收到数据后根据初始地址和接收的数据总长度进行取整计算,判断写入地址是否需要进行页擦除,然后对相应的application地址段进行数据写入操作;六.接收完数据以后bootloader对接收的数据进行校验;七.根据校验结果重新写入应用程序运行内存号段和程序跳转标志位至parameter地址段中;八.校验通过,bootloader跳转到新应用程序运行的内存段号,校验失败bootloader跳转到旧应用程序运行的内存号段;九.升级完成。3.如权利要求1所述的一种基于bootloader的嵌入式软件升级及运行方法,其特征在于,在异常中断中增加cnt计数器,计数器计数增加时将数据写入parameter地址段中,bootloader中对cnt计数进行判断,cnt>x(x为可设阈值)时则修改parameter地址段中的应
用程序运行的内存段号为上一版本内存段号,使bootloader跳转到旧版本应用程序运行。4.如权利要求1或3所述的一种基于bootloader的嵌入式软件升级及运行方法,其特征在于,自动切换应用流程如下:一.产品上电应用程序运行;二.应用程序出现异常bug,触发系统异常中断;三.系统异常计数器cnt累加并写入parameter地址段进行记录;四.系统重启;五.bootloader从parameter中读取cnt计数器;六.判断cnt计数大于设定值,修改parameter地址段中应用程序运行内存段号;七.parameter地址段中的cnt计数器清零;八.bootloader跳转到旧版本应用程序。
技术总结
本发明涉及嵌入式系统的技术领域,特别是涉及一种基于Bootloader的嵌入式软件升级及运行方法,其通过Bootloader有序控制应用程序下载到对应的内存段,避免下载异常导致的产品问题,并且新版本程序无法使用时系统自动转入旧版本程序运行,确保产品的基本功能;将MCUFlash按照需求将Flash内存区域分为Boot地址段、Application_1地址段、Application_2地址段、Parameter地址段,Bootloader运行将新版本程序数据覆盖Application_1或Application_2的旧版本程序数据,Bootloader自动跳转选择程序;如果应用程序无法正常运行导致重启次数大于阈值,则使Bootloader跳转到旧版本应用程序运行。序运行。序运行。
技术研发人员:赵鑫 于正坤
受保护的技术使用者:烟台创为新能源科技股份有限公司
技术研发日:2023.03.29
技术公布日:2023/7/22
版权声明
本文仅代表作者观点,不代表航空之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)
飞行汽车 https://www.autovtol.com/
