System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本专利技术涉及存储器固件升级,具体为一种存储器固件在线升级方法以及装置。
技术介绍
1、纵观目前系统的固件升级方案几乎全部采用recovery的方式。其具体过程为:系统首先从云服务器上获取需要升级的固件包,然后存储到本地,如分区a中,重启设备进入recovery升级模式,在recovery模式下从分区a中读取对应的固件包文件数据,将固件包文件数据烧录或者是写到对应的分区b中,然后重启设备运行升级后的系统。recovery的升级模式一般用于flash存储空间比较大的存储设备中,因为此flash最少需要固件包两倍大小的空间才可以完成,一个是系统正常运行的固件分区,如分区b。另外一个是存储系统需要升级的固件的分区,如分区a。因此,recovery升级模式不适合flash存储空间较小的设备进行固件升级。
技术实现思路
1、本专利技术的目的在于提供一种存储器固件在线升级方法以及装置,以解决上述
技术介绍
中提出的问题。
2、为解决上述技术问题,本专利技术是通过以下技术方案实现的:
3、本专利技术为一种存储器固件在线升级方法,包括如下步骤:
4、步骤一,存储器固件在运行的过程中,基于通信接口的flash引导程序中下载的新固件进行升级判断;
5、步骤二,基于引导程序获取不同分区固件数据,并在获得固件分区数据后,根据获取的固件分区数据划分flash存储区域;
6、存储器固件在线升级包括bootloader和app应用程序,系统复位后先运行bo
7、引导程序,每次复位时程序默认执行此程序,在接下来的执行过程中可以跳转到用户编写的程序,因此这部分程序是固化在以0x08000000为起始的区域中。在引导程序中可以对电路系统作出一些自检和初始化检查的工作,因此该程序又称为bootloader或boot程序,需要注意的是在设计bootloader时要提前规定好程序空间的大小,比如规定程序存储区域为0x08000000-0x8007fff,则bootlader程序存储空间为32kb引导程序,每次复位时程序默认执行此程序,在接下来的执行过程中可以跳转到用户编写的程序,因此这部分程序是固化在以0x08000000为起始的区域中。在引导程序中可以对电路系统作出一些自检和初始化检查的工作,因此该程序又称为bootloader或boot程序,需要注意的是在设计bootloader时要提前规定好程序空间的大小,比如规定程序存储区域为0x08000000-0x8007fff,则bootlader程序存储空间为32kb;
8、用户需要升级的新程序,这部分包含了用户的业务代码,复杂的运算逻辑和算法实现均在这一部分完成,称为app程序,该部分程序一般存储在bootloader区域之后的flash中。用一个不是特别恰当的例子类比bootloader和app:bootloader相当于电脑组装时的bios,app则相当于操作系统,电脑开机时首先运行bios,完成后跳转运行到操作系统。
9、进一步的,所述步骤一中新固件下载方法如下:
10、步骤一,将待升级的新固件文件命名为a.bin后,通过支持的方式传输至存储器固件卡中;
11、步骤二,通过下发升级指令,在flash中写入升级标志,该标志存储在backup ram的起始位置处,存储好升级标志后,延时进行复位,复位后将跳转到bootloader。
12、所述新固件文件的传出方式为通过网络tftp传输、can通信传输和usb数据接口拷贝中的任意一种或多种。
13、进一步的,所述bootloader程序执行过程如下:
14、复位后将跳转到bootloader,读取升级标志位判断是否需要升级,若不需要升级直接跳转到app1;
15、若需要升级,打开存储器固件中a.bin文件后,以设定的512字节/包的方式进行固件对的读取和擦写,当读取的数据小于设定的512字节,表明固件已经读取完毕,擦除完以后就可以跳转到app2,完成升级。
16、进一步的,所述bootloader程序存储在内部flash中,按照不同的单片机型号flash大小有所不同,有64kb,128kb,512kb;
17、以stm32f407vet6系列单片机为例,内置flash大小为512kb,存储地址为0x08000000-0x0807ffff,单片机每次程序复位时从0x08000000的位置开始执行主程序。
18、进一步的,所述需要修改app2的flash起始地址和大小,默认起始地址是0x8000000,大小为0x100000,需根据flash的空间划分进行修改,例如bootloader预留64k,那么app的起始地址就为0x8010000。
19、将所述升级标志清除,升级标志存储在backup ram里,需要先初始化一下,添加并调用如下bkp_sram_init函数进行初始化,再执行*(volatile int*)bkpsram_base = o*aaaabbbb,清除升级标志,人为定义的特殊值,其值含义需与bootloader一致。
20、一种存储器固件在线升级装置,包括:
21、存储器固件,用于存储数据信息;
22、升级模块,用于引导程序获取不同分区固件数据,并在获得固件分区数据后,根据分区数据划分flash存储区域。
23、进一步的,所述升级模块升级前对老版程序进行备份;
24、相当于电脑系统更新前对老系统的备份,一旦在升级过程中发生错误需要还原到备份系统,防止系统升级失败成砖。同样的app与app备份将剩余的flash平分,以上述booloader为例,app程序及其备份所占区域为:(512-32)/2=240kb,因此编写的app程序编译后的占用的flash空间不得超过240kb,这一点可以通过查验.map文件确认,对于不同flash大小的芯片可以类比以上计算方法确认自己的程序大小上限。
25、本专利技术具有以下有益效果:
26、本专利技术通过用户编写的引导程序实现bin文件的下载,然后引导代码将.bin的内容写入特定的flash地址,通过跳转指令和中断向量表的重新定义,确保代码进入指定应用程序地址,完成固件升级。
27、当然,实施本专利技术的任一产品并不一定需要同时达到以上所述的所有优点。
本文档来自技高网...【技术保护点】
1.一种存储器固件在线升级方法,其特征在于,包括如下步骤:
2.根据权利要求1所述的一种存储器固件在线升级方法,其特征在于:所述步骤一中新固件下载方法如下:
3.根据权利要求2所述的一种存储器固件在线升级方法,其特征在于:所述新固件文件的传出方式为通过网络Tftp传输、can通信传输和usb数据接口拷贝中的任意一种或多种。
4.根据权利要求2所述的一种存储器固件在线升级方法,其特征在于:所述bootloader程序执行过程如下:
5.根据权利要求4所述的一种存储器固件在线升级方法,其特征在于:所述bootloader程序存储在内部FLASH中。
6.根据权利要求4所述的一种存储器固件在线升级方法,其特征在于:将所述升级标志清除,升级标志存储在backup ram里,需要先初始化一下,添加并调用如下BKP_SRAM_Init函数进行初始化,再执行*(volatile int*)BKPSRAM_BASE = O*AAAABBBB;
7.一种存储器固件在线升级装置,其特征在于,包括:
8.根据权利要求7
...【技术特征摘要】
1.一种存储器固件在线升级方法,其特征在于,包括如下步骤:
2.根据权利要求1所述的一种存储器固件在线升级方法,其特征在于:所述步骤一中新固件下载方法如下:
3.根据权利要求2所述的一种存储器固件在线升级方法,其特征在于:所述新固件文件的传出方式为通过网络tftp传输、can通信传输和usb数据接口拷贝中的任意一种或多种。
4.根据权利要求2所述的一种存储器固件在线升级方法,其特征在于:所述bootloader程序执行过程如下:
5.根据权利要求4所述的一种存储器固件在线升级方法,其特征...
【专利技术属性】
技术研发人员:黄少娃,黄旭彪,郭威成,吴桂冠,刘政宏,
申请(专利权)人:深圳市铨兴科技有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。