一种应用数据高占比的单片机分区以及固件升级方法与流程
未命名
09-06
阅读:208
评论:0
1.本发明涉及单片机领域,尤其涉及一种应用数据高占比的单片机分区以及固件升级方法。
背景技术:
2.随着自动化与物联网技术的发展与普及,越来越多的单片机控制电路被运用在了生产与生活的各个领域。一般情况下,app(application,应用程序)固件占单片机内部flash(闪存)总容量的比例不会太高,在app占flash容量低于50%的情况下,通常可以针对内部flash进行分区,并通过各种外设接口下载新的app固件到区别于原有app固件的分区,再通过地址跳转和中断向量表偏移的方式完成固件的升级。然而,随着单片机的需求量和装配量成几何级数增长,为了节约成本,越来越多的厂商与开发者逐渐尝试更充分的开发利用单片机的性能。
3.当app占flash容量的比例大于总容量的50%时,内部flash将不足以被分为两个可以分别容纳新旧app的区域,但仍然可以使用常用的iap的升级方式,以bootloader作为启动代码的单片机为例:将单片机中的flash划分成两个区域,第一区域存放user-bootloader固件(下文称u-bootloader);该区域占用flash容量小,只用于app区域的数据接收、擦写以及地址跳转的操作,通过擦写app区域的数据达到升级app的效果;第二区域存放app,执行各种应用功能。介于单片机的中断机制,无论是哪个分区的程序,单片机在main函数的中断,都将强制跳转到地址为0x8000004的中断向量表并执行,而不是执行分区所在app的新的中断向量表;如:u-bootloader存放在起始地址0x8000000,其中断向量表起始地址为0x8000004;app存放在0x8010000,新的中断向量表地址为0x8010004;但是中断偏移仍然指向0x8000004。因为u-bootloader作为第一区,必须放在flash的0x8000000起始地址处。若在单片机运行的过程中强行改写0x8000004的地址数据,将有可能无法正常中断,导致程序完全卡死,因此改写第一区域的内容风险极高。
4.因而,采用iap的升级方式在app占flash容量的比例大于50%的情况下,由于u-bootloader的地址跟app的地址有紧密联系,单片机出厂时会对u-bootloader的操作地址或者升级数据接收的协议内容解析等进行固定,后续难以改写;当app升级流程、协议格式、app地址等参数需要改变时,采用u-bootloader模式来更新u-bootloader的数据存在很大的风险,当u-bootloader刷写出错时,会导致整个单片机电路由于跳转地址错误或无法执行中断操作,进而无法正常启动运行,难以修复。
技术实现要素:
5.为了克服现有的应用数据高占比的单片机固件升级容易破坏中断向量表的问题,本发明提供一种应用数据高占比的单片机分区以及固件升级方法。
6.本发明提供了一种应用数据高占比的单片机分区方法,运用于内置flash启动的单片机,包括:
7.将单片机的flash划分为直接跳转区、u-bootloader区和app区;
8.其中,所述直接跳转区的数据在单片机上电时必然被首先读取并执行,且所述直接跳转区的数据被所述单片机执行后直接跳转向所述u-bootloader区;
9.所述u-bootloader区用于储存u-bootloader程序,所述u-bootloader程序用于对app进行固件升级以及地址跳转;
10.所述app区用于储存app;其中,所述app包含用于对u-bootloader程序进行固件升级的引导程序。
11.作为优选地,所述直接跳转区占flash的容量比例低于1%。
12.优选地,所述直接跳转区的起始地址是0x8000000,直接跳转区的地址0x8000004处保存有中断向量表。
13.本方案还公开了一种应用数据高占比的单片机固件升级方法,应用于上述应用数据高占比的单片机分区方法进行分区的单片机,包括步骤如下:
14.单片机上电,通过直接跳转区跳转至所述u-bootloader区;
15.所述u-bootloader区的程序被所述单片机执行,实时检测是否需要升级app;
16.如是,对app区的数据进行升级,重启单片机;
17.否则,跳转到app区;
18.所述app区的程序被所述单片机执行,实时检测是否需要升级u-bootloader;
19.如是,对u-bootloader区的程序进行升级,重启单片机;
20.否则,运行app。
21.作为优选地,对app区的数据进行升级,具体为:
22.下载app升级数据到外部储存器;
23.将外部储存器的数据擦写覆盖所述app区的数据。
24.优选地,对u-bootloader区的程序进行升级,具体为:
25.下载u-bootloader升级数据到外部储存器;
26.将外部储存器的数据擦写覆盖所述u-bootloader区的数据。本发明的有益效果是:
27.通过将flash划分为直接跳转区、u-bootloader区和app区,其中直接跳转区仅执行跳转操作,速度快,且直接跳转区无需刷写修改内容,保护了中断向量表,保证了单片机升级固件时的安全性,使u-bootloader区和app区相互可以进行升级操作,在u-bootloader区或app区升级出现问题的时候,单片机仍可正常工作,重新执行升级程序直至单片机完成固件升级。
附图说明
28.下文将结合说明书附图对本发明进行进一步的描述说明,其中:
29.图1为本发明其中一个实施例的单片机flash分区占用容量示意图;
30.图2为本发明另一个实施例的固件升级逻辑流程图。
具体实施方式
31.下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完
整地描述,显然,所描述的实施例仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
32.参见图1,作为本发明的其中一个实施例,公开了一种应用数据高占比的单片机分区方法,包括:
33.将单片机的flash划分为直接跳转区、u-bootloader区和app区;
34.其中,直接跳转区的程序在单片机上电时必然被首先读取并执行,且直接跳转区的程序被单片机执行后直接跳转向u-bootloader区;
35.u-bootloader区用于储存u-bootloader程序,u-bootloader程序用于对app进行固件升级以及地址跳转;u-bootloader程序包含两个部分:app下载程序(用于app固件升级)和指向app的跳转程序。
36.app区用于存储app;其中,app包含用于对u-bootloader程序进行固件升级的引导程序,用于在需要升级u-bootloader固件时,将u-bootloader的更新数据导入u-bootloader区进行擦写覆盖。
37.作为优选地直接跳转区占flash的容量比例低于1%。
38.优选地,直接跳转区的起始地址是0x8000000,直接跳转区的地址0x8000004保存有中断向量表。
39.区别现有的单片机的flash分区方法,本实施例将直接跳转区放在第一区,u-bootloader区和app区都做地址偏移;其中,直接跳转区仅起到在上电后直接跳转到u-bootloader区的作用,然后由u-bootloader来判断后续是执行升级任务还是直接跳转到app区运行app。该方法有如下优势:
40.1.直接跳转区仅做跳转操作,速度快,无副作用,可以等效为直接上电就运行u-bootloader区的u-bootloader程序;
41.2.u-bootloader程序储存在u-bootloader区,可以保证在修改u-bootloader数据的时候,位于直接跳转区的地址0x8000004处的中断向量表不受任何影响。这样就可以引出另一种操作:当有地址划分或者协议解析需要变更时,也可以不必再拆机去使用单片机最初始的u-bootloader更新模式来更新u-bootloader,在app中可以添加对u-bootloader的升级程序,进行u-bootloader区和app区的双向升级;
42.3.针对app区占比高的情况,当app擦写出现问题时,仍然可以正常跳转到u-bootloader区来执行一些其它的单片机恢复机制。
43.参见图2,作为本方案的另一个实施例,具体公开了一种应用数据高占比的单片机固件升级方法,应用于上述实施例进行了分区的单片机,包括步骤如下:
44.s1、单片机上电启动时,必然首先读取并执行直接跳转区的程序,直接跳转至u-bootloader区;
45.s2、u-bootloader区的程序被单片机执行,实时检测是否需要升级app;
46.s3、如是,下载app升级数据到外部储存器,将外部储存器下载好的数据擦写覆盖app区的数据,重启单片机;
47.s4、否则,跳转到app区;
48.s5、app区的程序被单片机执行,实时检测是否需要升级u-bootloader;
49.s6、如是,下载u-bootloader升级数据到外部储存器,将外部储存器下载好的数据擦写覆盖u-bootloader区的数据,重启单片机;
50.s7、否则,运行app。
51.直接跳转区无需刷写修改内容,保护了中断向量表,保证了单片机升级固件时的安全性,使u-bootloader区和app区相互可以进行升级操作,在u-bootloader区或app区升级出现问题的时候,单片机仍可正常工作,重新执行升级程序直至单片机完成固件升级。
技术特征:
1.一种应用数据高占比的单片机分区方法,运用于内置flash启动的单片机,其特征在于,包括:将单片机的flash划分为直接跳转区、u-bootloader区和app区;其中,所述直接跳转区的数据在单片机上电时必然被首先读取并执行,且所述直接跳转区的数据被所述单片机执行后直接跳转向所述u-bootloader区;所述u-bootloader区用于储存u-bootloader程序,所述u-bootloader程序用于对app进行固件升级以及地址跳转;所述app区用于储存app;其中,所述app包含用于对u-bootloader程序进行固件升级的引导程序。2.根据权利要求1所述的一种应用数据高占比的单片机分区方法,其特征在于,所述直接跳转区占flash的容量比例低于1%。3.根据权利要求1所述的一种应用数据高占比的单片机分区方法,其特征在于,所述直接跳转区的起始地址是0x8000000,直接跳转区的地址0x8000004处保存有中断向量表。4.一种应用数据高占比的单片机固件升级方法,应用于如上述权利要求1至3中任意一项所述的应用数据高占比的单片机分区方法进行分区的单片机,其特征在于,包括步骤如下:单片机上电,通过直接跳转区跳转至所述u-bootloader区;所述u-bootloader区的程序被所述单片机执行,实时检测是否需要升级app;如是,对app区的数据进行升级,重启单片机;否则,跳转到app区;所述app区的程序被所述单片机执行,实时检测是否需要升级u-bootloader;如是,对u-bootloader区的程序进行升级,重启单片机;否则,运行app。5.根据权利要求4所述的一种应用数据高占比的单片机固件升级方法,其特征在于,对app区的数据进行升级,具体为:下载app升级数据到外部储存器;将外部储存器的数据擦写覆盖所述app区的数据。6.根据权利要求4所述的一种应用数据高占比的单片机固件升级方法,其特征在于,对u-bootloader区的程序进行升级,具体为:下载u-bootloader升级数据到外部储存器;将外部储存器的数据擦写覆盖所述u-bootloader区的数据。
技术总结
本发明涉及单片机领域,具体公开了一种应用数据高占比的单片机分区以及固件升级方法,通过将FLASH划分为直接跳转区、U-bootloader区和APP区,其中直接跳转区仅执行跳转操作,速度快,等效于单片机直接上电就运行U-bootloader区的程序,适用于APP区占Flash容量比大于50%的情况;且通过直接跳转区保护中断向量表,使U-bootloader区和APP区相互可以进行升级操作,保证了单片机功能的安全性,在U-bootloader区或APP区升级出现问题的时候,单片机仍可正常工作,重新执行升级程序直至单片机完成固件升级。机完成固件升级。机完成固件升级。
技术研发人员:熊兴发 朱正辉 赵定金 明德
受保护的技术使用者:广东保伦电子股份有限公司
技术研发日:2023.06.20
技术公布日:2023/8/9
版权声明
本文仅代表作者观点,不代表航空之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)
飞行汽车 https://www.autovtol.com/
