一种单片机在线升级方法和系统与流程

文档序号:16666020发布日期:2019-01-18 23:16阅读:551来源:国知局
一种单片机在线升级方法和系统与流程

本发明涉及单片机技术领域,特别涉及一种单片机在线升级方法和系统。



背景技术:

当前,市场上的电子产品越来越广泛地采用单片机。应用程序在单片机上运行来完成产品各种各样的功能,通常情况下,电子产品销售到客户手中后,厂家要对电子产品进行维护与升级,这就需要对cpu内的软件在客户现场就能进行下载升级,并且尽量不影响产品的正常工作。

目前单片机的升级方式主要有两种:一种是将单片机的flash分为应用程序区和升级引导区,参考图1中左图,通过升级引导区给应用程序区升级;这种升级方式最大的问题是不能支持不中断业务,即升级的时候必须要在升级引导区进行。另一种升级方式是将单片机的flash分为应用程序区、升级备份区和升级引导区,参考图1中右图;这种升级方式虽然可以支持不中断业务的在线升级,但是,升级引导区占用较多的flash,而且,需将备用程序从升级备份区全部搬移到应用程序区,拷贝内容多,会花费较多的时间,造成时间浪费。

鉴于此,克服上述现有技术所存在的缺陷是本技术领域亟待解决的问题。



技术实现要素:

本发明需要解决的技术问题是:

传统升级方式中将单片机的flash分为应用程序区、升级备份区和升级引导区,升级引导区占用较多的flash,而且需将备用程序全部搬移到应用程序区,拷贝内容多,造成时间浪费。

本发明通过如下技术方案达到上述目的:

第一方面,本发明提供了一种单片机在线升级方法,将单片机的flash分为中断向量区、应用程序a区和应用程序b区,其中,所述中断向量区为所述应用程序a区和所述应用程序b区的公用区域,所述方法包括:

单片机接收到升级开始命令后初始化升级变量,并向上位机升级软件回复当前运行的应用程序区域,以便上位机升级软件根据单片机当前运行区域来决定生成需要传送的升级bin文件;

单片机接收由上位机升级软件传送来的升级bin文件,并将所述升级bin文件存储在单片机flash当前未运行的应用程序区域;

单片机接收升级跳转命令后关闭中断,并将升级程序的中断向量区复制到单片机的中断向量区,将单片机软重启并运行新的程序,完成升级。

优选的,所述上位机升级软件根据单片机当前运行区域来决定需要传送的升级bin文件,具体为:根据单片机回复的当前运行的应用程序区域,上位机升级软件判断升级程序是否与单片机当前运行区域同区,如果不同区,则直接将当前的升级bin文件传送给单片机;如果同区,则上位机升级软件将当前的升级bin文件转换成另一个区升级bin文件,再将转换后的升级bin文件传送给单片机。

优选的,所述上位机升级软件将当前的升级bin文件转换成另一个区升级bin文件,具体为:

根据转换的区域计算地址偏移量;

读取当前的升级bin文件的一个字节,通过查表获得对应指令包含的字节数n,并分析指令是否与地址有关;

如果指令与地址有关,则将指令对应的地址加上或者减去一个地址偏移量,生成新的地址并替换原地址字节;如果指令与地址无关,则直接将n个字节复制到新的bin文件中去。

优选的,所述单片机接收由上位机升级软件传送来的升级bin文件,并将所述升级bin文件存储在单片机flash当前未运行的应用程序区域,具体为:

单片机接收到由上位机升级软件传送来的升级bin文件的数据包,计算并判断所述数据包的校验值是否正确,如果正确,将所述数据包写入单片机flash当前未运行的应用程序区;其中,如果是第一个升级bin文件数据包,则先判断升级程序的区域是否正确,在正确的前提下再计算并判断所述数据包的校验值是否正确。

优选的,在所述单片机接收升级开始命令之前,所述方法还包括:将编译器生成的hex文件导入上位机升级软件,上位机升级软件将hex文件转换成升级所需的bin文件。

优选的,所述升级bin文件由中断向量区和程序代码区组成,所述升级bin文件的中断向量区内设有文件信息区,用于存储所述升级bin文件的文件长度和校验值;所述升级bin文件的程序代码区内设有文件识别区,用于判断所述升级bin文件是否为需要的升级文件。

优选的,对于所述应用程序a区和所述应用程序b区,所述升级bin文件的文件识别区位于固定地址,具体为:对于两个应用程序区域的升级bin文件,文件识别区的地址差值与两个应用程序区域间的地址偏移量一致,且文件识别区的起始地址与各自应用程序区域的起始地址间的差值也一致。

优选的,在所述单片机接收升级跳转命令后关闭中断之前,所述方法还包括:

单片机接收升级校验命令,并对接收到的升级bin文件进行校验,进而将升级校验结果回复给上位机升级软件;其中,所述升级bin文件的校验具体为:分别对升级bin文件的文件识别区、文件长度以及写入flash应用程序的校验值三者进行校验;如果三者均校验正确,则升级校验成功;如果有任一项校验错误,则升级校验失败。

优选的,所述将单片机软重启并运行新的程序之后,单片机向上位机升级软件上报当前运行的应用程序区域,上位机升级软件根据上报的当前运行区域,判断升级是否成功。

第二方面,本发明还提供了一种单片机在线升级系统,用于实现上述第一方面所述的单片机在线升级方法,包括单片机1、上位机升级软件2和通信接口3,所述单片机1的flash分为中断向量区、应用程序a区和应用程序b区,其中,所述中断向量区为所述应用程序a区和所述应用程序b区的公用区域;

所述上位机升级软件2用于根据所述单片机1上报的运行区域,将同区的升级bin文件转换生成另一个区的有效升级bin文件,并完成在线升级;

所述通信接口3用于实现所述单片机1与所述上位机升级软件2之间的通信连接。

本发明的有益效果是:

本发明提供的一种单片机在线升级方法和系统中,将单片机的flash分为中断向量区、应用程序a区和应用程序b区,中断向量区占用字节比传统的升级引导区小很多,升级时将升级程序的中断向量区复制到单片机的中断向量区,由于只需拷贝中断向量区,大大节约了flash和程序搬移时间;同时,上位机升级软件还可以根据单片机上报的当前运行区域,将生成的升级bin文件转换成另一个区的有效升级bin文件,在不中断业务的情况下顺利实现在线升级。

【附图说明】

为了更清楚地说明本发明实施例的技术方案,下面将对本发明实施例中所需要使用的附图作简单地介绍。显而易见地,下面所描述的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为传统方案中的两种单片机flash分区示意图;

图2为本发明实施例提供的一种单片机flash分区示意图;

图3为本发明实施例提供的单片机应用程序a区及应用程序b区的代码分布示意图;

图4为本发明实施例提供的一种单片机在线升级方法的流程示意图;

图5为本发明实施例提供的升级bin文件的示意图;

图6为本发明实施例提供的升级完成后单片机的代码分布示意图;

图7为本发明实施例提供的生成应用程序bin文件的流程图;

图8为本发明实施例提供的将bin文件转换成另一区应用程序bin文件的流程图;

图9为本发明实施例提供的单片机接收升级文件的流程图;

图10为本发明实施例提供的单片机校验升级文件的流程图;

图11为本发明实施例提供的一种单片机在线升级方法的完整流程图;

图12为本发明实施例提供的一种单片机在线升级系统的结构示意图。

【具体实施方式】

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。下面就参考附图和实施例结合来详细说明本发明。

实施例1:

本发明实施例提供了一种单片机在线升级的方法,运用所述方法进行升级之前,首先参考图2,将单片机的flash分为中断向量区、应用程序a区和应用程序b区;其中,所述中断向量区为所述应用程序a区和所述应用程序b区的公用区域。所述中断向量区内有用部分最多会有300字节,通常在100多个字节,因此所述中断向量区所占字节通常在512字节以内,比传统升级引导区小很多,这样分给应用程序a区和应用程序b区的代码空间将大大增加。

在本发明实施例中,以51单片机为例,所述中断向量区占用前512字节(代码0×0000-0×01ff)。其中,所述应用程序a区与所述应用程序b区均由中断向量区和程序代码区组成,且中断向量区也占用512字节。所述应用程序a区与所述应用程序b区的代码分布分别如图3中左图和右图所示,除共用的中断向量区外,所述应用程序a区的代码分布在flash的前半区,所述应用程序b区的代码分布在flash的后半区。本实施例中采用编译器生成代码,比如使用keilc51编译器,可在coderange里填入相应的地址范围,则编译生成代码时,就可将代码生成在对应的地址范围内。为了给各区的中断向量预留代码空间,各区的分区地址应比coderange的起始地址要小512字节。如图3,在所述应用程序a区,预留代码范围0×0200-0×03ff给中断向量区,程序代码区的范围是0×0400-0×7fff;在所述应用程序b区,预留代码范围0×8000-0×81ff给中断向量区,程序代码区的范围是0×8200-0×ffff。

参考图4,本发明实施例提供的单片机升级方法包括以下步骤:

步骤201,单片机接收到升级开始命令后初始化升级变量,并向上位机升级软件回复当前运行的应用程序区域,以便上位机升级软件根据单片机当前运行区域来决定需要传送的升级bin文件。

由于在本发明中应用程序分为应用程序a区和应用程序b区,需要根据单片机实际运行区来决定必须升级的bin文件,这就需要管理两个应用程序,比较麻烦,而且升级时容易出错。为解决这个问题,本发明的上位机升级软件具有将一个区的升级bin文件转换成另一个区的升级bin文件的功能,这样就只需管理一个应用程序。具体为:根据单片机回复的当前运行的应用程序区域,上位机升级软件判断升级程序是否与单片机当前运行区域同区,如果不同区,则直接将当前的升级bin文件传送给单片机进行升级;如果同区,则上位机升级软件将当前的升级bin文件转换成另一个区升级bin文件,再将转换后的升级bin文件传送给单片机进行升级。在本实施例中,以单片机当前在应用程序a区运行为例,则升级必须在应用程序b区进行,假设升级bin文件是应用程序b区的,则可直接传送升级bin文件进行升级;假设升级bin文件是应用程序a区的,则先将a区对应升级bin文件转换成b区对应升级bin文件后,再进行升级。

步骤202,单片机接收由上位机升级软件传送来的升级bin文件,并将所述升级bin文件存储在单片机flash当前未运行的应用程序区域。以单片机当前在应用程序a区运行为例,上位机升级软件最终经过转换传送来的为b区对应升级bin文件,则单片机将接收到的升级bin文件存储在单片机flash的应用程序b区,以便后续在应用程序b区进行升级。

步骤203,单片机接收升级跳转命令后关闭中断,并将升级程序的中断向量区复制到单片机的中断向量区,将单片机软重启并运行新的程序,完成升级。

当在程序里设置成将所有中断打开时,那么单片机所有类型的中断都会在特有的时间和条件下,进入各自的中断程序去执行工作。如果关闭中断,则所有类型的中断不论什么条件和时间都不会进入中断程序。在所述步骤202中,升级bin文件已存储在单片机的应用程序b区,则升级程序写入应用程序b区,对应地,升级程序的中断向量区对应写入单片机应用程序b区的中断向量区(0×8000-0×81ff);将所有中断关闭后,将写入的升级程序的中断向量区拷贝搬移到单片机的中断向量区,也就是将更新后的应用程序b区的中断向量区(0×8000-0×81ff)拷贝到单片机的中断向量区(0×0000-0×01ff)。拷贝完成后将单片机软重启,运行新的程序,单片机向上位机升级软件上报当前运行的应用程序区域,上位机升级软件根据上报的当前运行区域,判断升级是否成功:如果当前运行区域为应用程序b区,则运行区域正确,升级成功;否则升级失败。

本发明提供的一种单片机在线升级方法中,将单片机的flash分为中断向量区、应用程序a区和应用程序b区,中断向量区占用字节比传统的升级引导区小很多,升级时将升级程序的中断向量区复制到单片机的中断向量区,由于只需拷贝中断向量区,大大节约了flash空间和程序搬移时间;同时,上位机升级软件还可以根据单片机上报的当前运行区域,将生成的升级bin文件转换成另一个区的有效升级bin文件,在不中断业务的情况下顺利实现在线升级。

参考图5,在本发明实施例中,所述升级bin文件也由中断向量区和程序代码区组成,中断向量区同样占用512字节。所述升级bin文件的中断向量区内设有文件信息区,用于存储所述升级bin文件的文件信息,比如文件长度和校验值;所述升级bin文件的程序代码区内设有文件识别区,文件识别区内存储文件标识字节,用于判断所述升级bin文件是否为需要的升级文件。文件信息可存储在中断向量区的后半部分,因为中断向量有用的部分最多会有300字节,后面的200多字节都是无效代码,因此可将文件信息存放在中断向量区的后128字节,以便升级时传给单片机,用于升级校验。

在本发明实施例中,为了防止升级错误的文件,在升级bin文件中使用了文件标识字节。升级的bin文件生成后,在发送升级bin文件之前,可根据文件标识字节来判断升级文件是否有效。具体可在应用程序中定义一个c文件,c文件里只定义一个code数组,并初始化为专门的识别字节,最后定义这个code数组的地址位置。其中,所述应用程序a区和所述应用程序b区的升级bin文件的文件识别区位于同一个位置,即固定地址,则在定义地址时,对于两个应用程序区域的升级bin文件,文件识别区的地址差值与两个应用程序区域间的地址偏移量一致,且文件识别区的起始地址与各自应用程序区域的起始地址间的差值也一致。比如,对于应用程序a区的升级bin文件,文件识别区位于0×0500-0×050f,则对于应用程序b区的升级bin文件,文件识别区位于0×8300-0×830f。其中,所述文件识别区占用内存较小,一般16个字节就足够。

在所述步骤203中,将升级程序写入单片机的应用程序b区,也就是将b区对应的升级bin文件写入单片机的应用程序b区,再将此时单片机应用程序b区的中断向量区(0×8000-0×81ff)拷贝到单片机的中断向量区(0×0000-0×01ff)。升级完成后,单片机的flash如图6所示,其中,前512字节(0×0000-0×01ff)是当前运行区的中断向量区,应用程序a区和应用程序b区都是由512字节中断向量区和程序代码区组成。

通常,采用keilc51编译只能生成hex文件,而一般的升级文件都是bin文件,则在本发明实施例中,向单片机发送升级开始命令之前,上位机升级软件先导入编译器生成的升级hex文件,再将编译器生成的hex文件转换成升级所需的升级bin文件,实现应用程序a区或应用程序b区的hex文件统一生成bin文件。随后上位机升级软件判断生成的升级bin文件是否有效,如果有效则继续向单片机发送升级开始命令;如果无效则升级失败,直接结束升级。

其中,上位机升级软件将hex文件转换成bin文件的过程可参考图7,转换方法与普通的hex文件转bin文件一致,不同之处在于:为了使应用程序a区和应用程序b区生成的bin格式一致,如果数据地址不是在中断向量区的地址范围(0×0000-0×01ff)内,则将数据地址减去一个地址偏移量;其中,应用程序a区的地址偏移量为0,应用程序b区的地址偏移量为两区域的地址差,即0×7e00;偏移之后,以新地址更新对应的数组内容和文件长度。转换完成后,还需要生成此bin文件的文件信息,比如文件长度和文件的校验值。

按照上述步骤生成bin文件后,如果在步骤201中升级程序与单片机当前运行区域同区,则上位机升级软件需将当前的升级bin文件转换成另一个区升级bin文件,具体过程参考图8:

首先根据转换的区域计算地址偏移量,即两应用程序区间的地址差;定义一个文件字符串并赋值为空,打开当前的升级bin文件并将文件索引设为文件开始;

然后读取当前的升级bin文件的一个字节,通过查询单片机汇编语言指令表,获得对应指令包含的字节数n,并分析指令是否与地址有关;如果指令与地址有关,则将指令对应的地址加上(应用程序a区转到应用程序b区)或者减去(应用程序b区转到应用程序a区)一个地址偏移量,生成新的地址并替换原地址字节,并将指令按原顺序添加到文件字符串尾部;如果指令与地址无关,则直接读取剩余n-1个字节,将n个字节均添加到文件字符串尾部。其中,文件信息区和文件标识区的代码不需要通过查表进行分析,直接将字节数据添加到文件字符串尾部即可;

不断循环重复读取当前的升级bin文件中的字节,按上述第二个步骤进行分析、复制,直至读取长度为0,则bin文件转换结束。随后在文件字符串中将旧文件信息字节用0×ff代替,根据新代码生成新文件的文件信息,并填入文件字符串的对应位置;最后将文件字符串写入新的bin文件,则生成新区的bin文件成功。

在所述步骤202中,单片机接收由上位机升级软件传送来的升级bin文件,并将升级bin文件存储在单片机flash当前未运行的应用程序区域,具体实施方式可参考图9,步骤如下:单片机接收到由上位机升级软件传送来的升级bin文件的数据包,计算并判断所述数据包的校验值是否正确,如果正确,将升级文件数据包写入单片机flash当前未运行的应用程序区,此处即应用程序b区;如果错误则接收升级文件失败。其中,如果是第一个升级bin文件数据包,则接收到数据包后应先根据代码的相关字节判断升级程序的区域是否正确,即是否是在应用程序b区的升级bin文件,如果是则升级程序的区域是正确的,再计算并判断所述数据包的校验值是否正确;如果区域不正确则接收升级文件失败。

通常地,在所述步骤202与所述203之间,还包括升级文件校验的步骤:单片机接收升级校验命令,并对接收到的升级bin文件进行校验,进而将升级校验结果回复给上位机升级软件。其中,所述升级bin文件的校验具体为:分别对升级bin文件的文件识别区、文件长度以及写入flash应用程序的校验值三者进行校验;如果三者均校验正确,则升级校验成功;如果有任一项校验错误,则升级校验失败。具体过程可参考图10,首先可根据文件识别区的代码判断升级bin文件是否为需要的升级文件,也就是判断应用程序是否正确,如果不正确则升级校验失败,如果正确则继续校验;其次可根据文件信息区的文件长度判断接收的应用程序的长度是否正确,如果不正确则升级校验失败,如果正确则继续校验;最后计算写入flash接收的应用程序的校验值,根据文件信息区的校验值判断写入flash的应用程序是否正确,如果不正确则升级校验失败,如果正确则升级校验成功。

在本发明实施例中,单片机的整个升级流程可参考图11,综合上述对各步骤的介绍,单片机的完整升级流程可分为升级开始、升级文件传送、升级校验以及升级跳转四个过程。在升级开始阶段,单片机接收指令并上报当前运行区域,使上位机升级软件根据运行区域决定是否将升级bin文件转换成另一个区升级bin文件;在升级文件传送阶段,上位机升级软件将升级bin文件传送给单片机,单片机将升级bin文件存储在当前未运行区域;在升级校验阶段,分别校验文件识别区、文件长度和写入flash的应用程序校验值;在升级跳转阶段,关闭中断并将升级程序的中断向量区复制到单片机的中断向量区,将单片机软重启后运行新的程序。通过上述步骤,可以在不影响业务的情况下,完成单片机的在线升级。

实施例2:

在上述实施例1的基础上,本发明实施例还提供了一种单片机在线升级系统,用于执行实施例1中的单片机在线升级方法,如图12所示,所述升级系统包括单片机1、上位机升级软件2和通信接口3。参考图2,所述单片机1的flash分为中断向量区、应用程序a区和应用程序b区;其中,所述中断向量区为所述应用程序a区和所述应用程序b区的公用区域。此处所述中断向量区占用前512字节(代码0×0000-0×01ff),比传统升级引导区小很多,这样分给应用程序a区和应用程序b区的代码空间将大大增加。所述应用程序a区与所述应用程序b区均由512字节中断向量区和程序代码区组成。通过这样的分区方式,在采用本发明实施例所述升级系统进行升级时,只需将升级程序的中断向量区复制到单片机的中断向量区,由于只需拷贝中断向量区,大大节约了flash和程序搬移时间。

所述上位机升级软件2主要有三个功能:一是可以将编译器生成的hex文件转换成升级所需的bin文件,即执行图7中所示的各步骤;二是可以根据所述单片机1上报的运行区域,将生成的升级bin文件转换生成另一个区的有效升级bin文件,即执行图8中所示的各步骤;三是实行在线升级功能。其中,通过将生成的升级bin文件转换生成另一个区的有效升级bin文件,虽然本发明中应用程序分为应用程序a区和应用程序b区,但只需要管理一个应用程序,避免管理两个应用程序带来的麻烦,在不中断业务的情况下顺利实现在线升级。

所述通信接口3用于实现所述单片机1与所述上位机升级软件2之间的通信连接,所述上位机升级软件2通过所述通信接口3可向所述单片机1发送相关命令,使所述单片机1按照命令实现相应的操作,比如执行图9中所示的接收升级文件时的各步骤,以及图10中所示的升级检验时的各步骤;同时所述单片机1还可通过所述通信接口3向所述上位机升级软件2回复信息,使所述上位机升级软件2按照回复结果进行相应的操作。所述通信接口3可以是串口、i2c或网口,具体不做限制。

具体可参考图11,在所述单片机1的虚线框内的流程图部分,虚线框中相应的操作步骤可由所述单片机1实现完成;相应地,在所述上位机升级软件2的虚线框内的流程图部分,虚线框中相应的操作步骤可由所述上位机升级软件2实现完成。所述单片机1与所述上位机升级软件2的具体的功能实现过程可参考实施例1中的各步骤介绍以及附图,此处不再赘述。

本发明提供的一种单片机在线升级系统中,单片机的flash分为中断向量区、应用程序a区和应用程序b区,中断向量区占用字节比传统的升级引导区小很多,升级时只需将升级程序的中断向量区复制到单片机的中断向量区,大大节约了flash和程序搬移时间;同时,上位机升级软件还可以根据单片机上报的当前运行区域,将生成的升级bin文件转换成另一个区的有效升级bin文件,在不中断业务的情况下顺利实现在线升级。

以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1