CN104915219A - 单片机程序升级方法及装置 - Google Patents
单片机程序升级方法及装置 Download PDFInfo
- Publication number
- CN104915219A CN104915219A CN201410090866.6A CN201410090866A CN104915219A CN 104915219 A CN104915219 A CN 104915219A CN 201410090866 A CN201410090866 A CN 201410090866A CN 104915219 A CN104915219 A CN 104915219A
- Authority
- CN
- China
- Prior art keywords
- chip microcomputer
- user program
- program
- target version
- subregion
- 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.)
- Granted
Links
Landscapes
- Stored Programmes (AREA)
Abstract
本发明涉及电子技术领域,尤其涉及一种单片机升级方法及装置,单片机升级方法预先在单片机的用户程序代码区内设置一个只读存储区,用于存储单片机的默认程序;首先对单片机内分区的用户程序进行校验,当所有分区的用户程序都校验失败时,运行单片机的默认程序,使单片机退回到出厂模式,从而恢复可读写存储区内的用户程序,使单片机回退到升级之前的初始状态。使得在恢复所述用户程序之后,能够继续对单片机进行升级,提高了整个分布式***的安全性及可靠性。而且,当对用户程序校验成功且单片机的用户程序允许升级时,接收上位机通过广播方式下发的目标版本号对应的用户程序,实现多节点同时升级,提高了升级效率。
Description
技术领域
本发明涉及电子技术领域,特别是涉及一种单片机程序升级方法及装置。
背景技术
IAP(in-application programming,应用编程)技术是指在用户程序运行过程中进行编程。IAP技术是从结构上将单片机内的Flash存储器内存储用户程序的存储空间划分为两个存储区,当运行一个存储区域内存储的用户程序时,可以对另一个存储区域内存储的用户程序进行重新编程,然后,再运行重新编程后的存储体上的用户程序。
现有大多数的IAP升级方案都是针对单个节点(一个节点即一个单片机)设计的,对于分布式***而言,存在多个单片机节点,如果采用单个节点逐个升级的方案,多个节点程序升级所需时间等于各个节点升级时间的总和,因此升级效率很低。
发明内容
本发明实施例中提供了一种单片机程序升级方法及装置,以解决现有技术中的多节点升级效率低的问题。
为了解决上述技术问题,本发明实施例公开了如下技术方案:
第一方面,本发明提供一种单片机程序升级方法,应用于多节点分布式***中的单片机,预先在所述单片机的程序代码区内设置至少三个分区,其中一个分区为只读存储区用于存储单片机的默认程序,剩余分区为可读写存储区,用于存储用户程序,所述方法包括:
校验指定分区内的用户程序是否能够运行;
当所述指定分区内的所述用户程序校验失败时,将下一个分区作为指定分区,并返回执行检验指定分区内的的用户程序是否能够运行的步骤,直到全部分区的用户程序都校验失败时,进入存储单片机的默认程序的分区,并运行所述单片机的默认程序;
当所述指定分区内的用户程序校验成功时,接收上位机通过广播方式下发的程序升级命令,所述程序升级命令携带所述用户程序的目标版本号;
根据所述目标版本号判断所述用户程序是否允许升级;
当确定所述用户程序允许升级时,接收上位机通过广播方式下发的所述目标版本号对应的用户程序;
校验所述目标版本号对应的用户程序是否能够运行,校验成功后将所述用户程序更新为所述目标版本号对应的用户程序。
优选地,在校验指定分区内的用户程序是否能够运行之前,所述方法还包括:
记录所述单片机的上电复位次数;
判断所述上电复位次数是否超过预设次数,当所述上电复位次数超过预设次数时,进入存储单片机的默认程序的分区,并运行所述单片机的默认程序;
当所述上电复位次数未超过所述预设次数时,执行校验指定分区内的所述用户程序是否能够运行的步骤。
优选地,在所述执行校验指定分区内的用户程序是否能够运行的步骤之前,所述方法还包括:
获取所述单片机内存储的全部用户程序中最新版本号的用户程序所在分区的分区识别号,并将所述分区识别号对应的分区作为所述指定分区。
优选地,所述对所述目标版本号对应的用户程序进行校验,包括:
计算所述目标版本号对应的用户程序的第一整体校验值;
接收上位机下发的升级结束命令,所述升级结束命令携带所述目标版本号对应的用户程序的第二整体校验值;
判断所述第一整体校验值与所述第二整体校验值是否相同,当所述第一整体校验值与所述第二整体校验值相同时,确定所述目标版本号对应的用户程序校验成功。
优选地,在将所述用户程序更新为所述目标版本号对应的用户程序之后,还包括:
所述单片机在预设时长内与所述上位机进行握手检测,当握手成功时,所述单片机将可读写的分区内存储的用户程序的最新版本号上传给所述上位机,所述最新版本号用于使上位机判断所述最新版本号与所述目标版本号是否相同,得到验证结果;
当所述单片机接收到表明所述用户程序升级成功的验证结果时,修改所述分区的程序认证标识,修改后的所述程序认证标识表明所述用户程序能够运行;
当所述单片机与所述上位机握手失败时,尝试下一次握手检测,直到所述单片机与所述上位机握手失败的次数达到预设值,删除所述最新版本号的用户程序。
第二方面本发明提供一种单片机程序升级方法,应用于多节点分布式***中的上位机,所述方法包括:
上位机检测到各个单片机上电后,通过广播方式向各个所述单片机下发程序升级命令,所述程序升级命令携带所述用户程序的目标版本号,所述目标版本号用于使所述单片机判断是否允许用户程序升级;
当所述上位机接收到所述单片机发送的允许所述用户程序升级的判断结果时,所述上位机通过广播方式向各个所述单片机下发所述目标版本号对应的用户程序,其中,所述上位机的广播次数大于一次;
所述上位机向各个所述单片机下发包含目标版本号的升级结束命令,所述升级结束命令用于使各个所述单片机对所述目标版本号对应的用户程序进行校验,并在校验成功后更新所述用户程序;
所述上位机验证各个所述单片机的用户程序升级是否成功,如果验证成功,向单片机下发升级成功的验证结果。
优选地,所述上位机验证各个所述单片机的用户程序升级是否成功,如果验证成功,向单片机下发升级成功的验证结果,包括:
所述上位机在预设时长内与所述单片机进行握手检测;
当握手成功时,所述上位机接收单片机上传的单片机内存储的用户程序的最新版本号;
所述上位机判断所述最新版本号与所述目标版本号是否相同;
当所述最新版本号与所述目标版本号相同时,向单片机下发升级成功的验证结果,所述升级成功的验证结果用于使所述单片机修改所述用户程序对应的程序认证标识,修改后的所述程序认证标识表明所述用户程序能够运行;
当握手失败时,返回执行所述上位机在预设时长内与所述单片机进行握手检测,直到握手失败的次数达到预设值。
第三方面,本发明提供一种单片机程序升级装置,应用于多节点分布式***中的单片机,预先在所述单片机的程序代码区内设置至少三个分区,其中一个分区为只读存储区,用于存储所述单片机的默认程序;剩余分区为可读写存储区,用于存储用户程序;所述装置包括:
第一校验单元,用于校验指定分区内的用户程序是否能够运行,当所述指定分区内的所述用户程序校验失败时,将下一个分区作为指定分区,并执行检验指定分区内的的用户程序是否能够运行;
第一默认程序执行单元,用于当所述单片机内的全部用户程序都校验失败时,进入存储单片机的默认程序的分区,并运行所述单片机的默认程序;
第一接收单元,用于当所述指定分区的用户程序校验成功时,接收上位机通过广播方式下发的程序升级命令,所述程序升级命令携带所述用户程序的目标版本号;
第一判断单元,用于根据所述目标版本号判断所述用户程序是否允许升级;
第二接收单元,用于当确定所述用户程序允许升级时,接收上位机通过广播方式下发的所述目标版本号对应的用户程序;
第二校验单元,用于对所述目标版本号对应的用户程序进行校验;
更新单元,用于当所述目标版本号对应的用户程序校验成功后,将所述用户程序更新为所述目标版本号对应的用户程序。
优选地,所述装置还包括:
上电次数记录单元,用于记录所述单片机的上电复位次数;
第二判断单元,用于判断所述上电复位次数是否超过预设次数,当所述上电复位次数未超过预设次数时,控制所述第一校验单元执行校验指定分区内的用户程序是否能够运行;
第二默认程序执行单元,用于当所述上电复位次数超过预设次数时,进入存储单片机的默认程序的分区,并运行所述单片机的默认程序。
优选地,所述装置还包括:
第一获取单元,用于获取所述单片机内存储的全部用户程序中最新版本号的用户程序所在分区的分区识别号,并将所述分区识别号对应的分区作为所述指定分区。
优选地,所述装置还包括:
握手检测单元,用于在预设时长内与所述上位机进行握手检测,当握手失败时,进行下一次握手检测;
发送单元,用于当握手成功时,所述单片机将可读写的分区内存储的用户程序的最新版本号上传给所述上位机,所述最新版本号用于使上位机判断所述最新版本号与所述目标版本号是否相同,得到验证结果;
第三接收单元,用于接收所述上位机验证所述单片机的用户程序升级是否成功的验证结果;
程序认证标识修改单元,用于当所述验证结果表明所述用户程序升级成功时,修改所述分区的程序认证标识,修改后的所述程序认证标识表明所述用户程序能够运行;
删除单元,用于当所述握手检测单元的握手失败的次数达到预设值时,删除单片机接收到的所述用户程序。
第四方面,本发明提供一种单片机程序升级装置,应用于多节点分布式***中的上位机,所述装置包括:
第一发送单元,用于当检测到各个单片机上电完成后,通过广播方式向各个所述单片机下发程序升级命令,所述程序升级命令携带所述用户程序的目标版本号,所述目标版本号用于使所述单片机判断所述用户程序是否允许升级,其中,所述第一发送单元的广播次数大于一次;
第二发送单元,用于当所述单片机根据所述目标版本号确定所述用户程序允许升级时,通过广播方式向各个所述单片机下发所述目标版本号对应的用户程序,其中,所述广播次数大于一次;
第三发送单元,用于向各个所述单片机下发包含所述目标版本号的升级结束命令,所述升级结束命令用于使各个所述单片机对所述目标版本号对应的用户程序进行校验,并在校验成功后更新所述用户程序;
验证单元,用于验证所述单片机的用户程序升级是否成功,如果验证成功,向单片机下发升级成功的验证结果。
优选地,所述验证单元包括:
握手检测单元,在预设时长内与所述单片机进行握手检测;当握手失败时,执行在预设时长内与所述单片机进行握手检测,直到握手失败的次数达到预设值;
第一接收单元,用于当上位机与所述单片机握手成功时,接收所述单片机上传的单片机内存储用户程序的最新版本号;
第一判断单元,用于判断所述最新版本号与所述目标版本号是否相同;
第一验证结果发送单元,用于当所述最新版本号与所述目标版本号相同时,向单片机下发升级成功的验证结果,所述升级成功的验证结果用于使所述单片机修改所述最新用户程序对应的程序认证标识,修改后的所述程序认证标识表明所述用户程序能够运行;
第二验证结果发送单元,用于当所述最新版本号与所述目标版本号不相同时,向所述单片机下发升级失败的验证结果。
本实施例提供的单片机程序升级方法及装置,首先将单片机的程序代码区划分成多个分区,其中一个分区为只读存储区用于存储单片机的默认程序,剩余分区为可读写存储区用于存储用户程序;所述方法首先校验单片机内存储的用户程序,如果单片机内的全部用户程序都校验失败,进入单片机内存储默认程序的分区,运行单片机的默认程序,使单片机退回到出厂模式,从而恢复可读写存储区内的用户程序,使单片机回退到升级之前的初始状态。在恢复所述用户程序之后,能够继续对单片机进行升级,提高了整个分布式***的安全性及可靠性。当单片机对用户程序校验成功后才进入该分区,从而保证单片机的用户程序每次都能正常运行;上位机通过广播方式实现多节点同时升级,提高了多节点的升级效率。
本方法通过设置上电复位次数控制策略,当检测到单片机上电复位次数超过预设次数时,认为单片机内存储用户程序的全部分区全部损坏无法自行恢复,此时,控制单片机进入默认程序的分区,运行单片机的默认程序,使单片机退回到出厂模式,从而恢复单片机内的用户程序,使单片机回退到升级之前的初始状态。使得在恢复所述用户程序之后,能够继续对单片机进行升级,提高了整个分布式***的安全性及可靠性。
单片机在成功接收上位机发送的目标版本对应的用户程序之后,验证用户程序升级是否成功,如果验证成功,表明单片机的用户程序能够正常运行,即该用户程序通过验证,此后,在使用该用户程序时可以直接运行不需再进行验证。
此外,上位机与单片机在预设时长内握手检测的次数达到预设次数时,认为单片机接收的用户程序不能运行,删除接收到的所述用户程序,提高了单片机内存储的用户程序的可靠性,同时,也提高了单片机的可靠性。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例一种单片机程序升级方法的流程示意图;
图2为一种多节点的分布式***的拓扑结构示意图;
图3为图1所示步骤S160的方法流程示意图;
图4为本发明实施例另一种单片机程序升级方法的流程示意图;
图5为本发明实施例一种单片机运行程序升级验证方法的流程示意图;
图6为本发明实施例另一种单片机程序升级方法的流程示意图;
图7为本发明实施例一种单片机程序升级装置的结构示意图;
图8为本发明实施例另一种单片机程序升级装置的结构示意图;
图9为本发明实施例另一种单片机程序升级装置的结构示意图;
图10为图9中的验证单元的结构示意图。
具体实施方式
为了使本技术领域的人员更好地理解本发明中的技术方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
请参见图1和图2,图1示出了本发明实施例提供的一种单片机程序升级方法的流程示意图,图2示出了多节点的分布式***的拓扑结构示意图。
所述单片机程序升级方法应用于多节点分布式***中,如图2所示,所述多节点分布式***包括上位机1和多个节点2,所述多个节点2通过总线与所述上位机1连接。需要说明的是,本说明书中的节点即单片机,每个节点对应一个单片机。
所述单片机的存储器包括引导区和用户程序代码区,预先将所述程序代码区设置至少三个分区,其中一个分区为只读存储区用于存储单片机的默认程序;剩余分区为可读写存储区用于存储用户程序。如图1所示,所述方法包括以下步骤:
S100,校验指定分区内的所述用户程序是否能够运行。其中,所述指定分区可以是单片机默认的程序代码区中存储用户程序的某个分区,或者用户选择的单片机内存储的最新版本号的用户程序的分区,本发明对此并不限制。
校验用户程序是否能够运行时,可以通过循环冗余校验码进行校验,如果校验成功,表明用户程序可以运行;如果校验失败,表明用户程序损坏不可运行。
当所述指定分区内的所述用户程序校验失败时,将下一个分区作为指定分区,继续校验指定分区的用户程序是否能够运行,直到全部用户程序都校验失败时,进入存储单片机的默认程序的分区,并运行所述单片机的默认程序。
当步骤S100校验失败时,在步骤S110中,判断单片机内存储的用户程序是否全部判断完,如果否,将下一个分区作为指定分区,返回执行步骤S100;如果是,进入步骤S120。
分布式***中的全部节点上电后,首先进入指定分区,对该分区内的用户程序进行校验,校验成功后,进入该分区;如果校验失败,表明该分区存储的用户程序已损坏,然后,将下一个存储用户程序的分区作为指定分区,返回步骤S100校验更新后的指定分区的用户程序是否能够运行。如果存储用户程序的全部分区均校验失败,表明单片机内存储的全部用户程序都被损坏。
在步骤S120,进入存储单片机的默认程序的分区,并运行所述单片机的默认程序。
当单片机内存储的全部用户程序都被损坏时,进入单片机内存储默认程序的分区,运行单片机的默认程序,使单片机回到出厂模式,恢复可读写存储区内的用户程序,使单片机回退到升级之前的初始状态,从而在恢复所述用户程序之后,能够继续对单片机进行升级,提高了整个分布式***的安全性及可靠性。由于存储默认程序的分区为只读存储区,不能够被改写,因此,单片机的默认程序一般不会被损坏。
当所述用户程序校验成功时,在步骤S130,接收上位机通过广播方式下发的程序升级命令,所述程序升级命令携带所述用户程序的目标版本号。
当某个分区的用户程序校验成功后,单片机接收上位机广播下发的程序升级命令,程序升级命令携带所述用户程序的目标版本号(所述目标版本号是用户程序升级之后的版本号),所述目标版本号高于单片机所述分区内存储的用户程序的当前版本号。
其中,上位机广播消息的次数可以是多次(例如,2次或2次以上),以提高分布式***中多个节点升级的成功率。
而且,在上位机广播下发消息时,各个节点(单片机)保持只能接收数据的状态,从而保证各个节点之间相互不影响,即使一个节点升级出现问题,也不会影响其他节点的升级。
S140,根据所述目标版本号判断用户程序是否允许升级,如果允许所述用户程序升级,则执行步骤S150;否则,结束。
获取所述程序升级命令中的所述目标版本号,判断校验成功的所述用户程序的当前版本号是否低于所述目标版本号,如果所述当前版本号低于所述目标版本号,则允许所述用户程序升级;否则,不能升级。
当判断出所述用户程序允许升级时,在步骤S150,接收上位机通过广播方式下发的所述目标版本号对应的用户程序。
上位机1通过总线多次广播(例如,2次或2次以上)所述目标版本号对应的用户程序,从而提高分布式***中多个节点升级的成功率。在多次广播的过程中,升级成功的节点将不再接收上位机所广播的消息。
S160,对所述目标版本号对应的用户程序进行校验,校验成功后将所述用户程序更新为所述目标版本号对应的用户程序。
该步骤的校验过程与步骤S100的校验过程相似,可以采用循环冗余校验码的方式进行校验。
在本申请的一个实施例中,如图3所示,步骤S160可以包括以下步骤:
在步骤S161,计算所述目标版本号对应的用户程序的第一整体校验值。
所述上位机以广播方式下发的目标版本号对应的用户程序时,将所述用户程序代码分成多个数据帧下发。节点每收到一个上位机下发的所述数据帧,都会采用校验函数(例如,CRC校验算法)计算该数据帧的校验值,并将该校验值作为下一次校验函数的输入,每个数据帧得到一个校验值,直到所述目标版本号对应的用户程序的全部数据帧都校验完,最后根据得到的全部校验值计算得到整个所述用户程序的第一整体校验值。
需要说明的是,在节点接收上位机下发的目标版本号对应的用户程序的过程中,相邻的数据帧之间间隔预设时间发送,保证节点有足够的时间进行上述的校验处理及擦写操作,所述擦写操作主要是将当前的分区原有的程序代码删除,将接收到的数据帧写入该分区。
S162,接收上位机通过广播方式下发的升级结束命令,所述升级结束命令携带所述目标版本号对应的用户程序的第二整体校验值。
需要说明的是,步骤S161和S162的执行顺序可以互换,即先执行步骤S162,再执行步骤S161,换言之,单片机在收到上位机下发的升级结束命令后,再计算接收到的所述目标版本号对应的用户程序的第一整体校验值。
S163,判断所述第一整体校验值与所述第二整体校验值是否相同。
当所述第一整体校验值与所述第二整体校验值相同时,在步骤S164,确定所述目标版本号对应的用户程序校验成功,并更新单片机的所述用户程序。
节点比较第一整体校验值和第二整体校验值相同时,表明所述用户程序校验成功,节点记录所述目标版本号,并修改所述分区的程序填充标识,所述程序填充标识表征分区内是否有程序代码。
在本发明的一个实施例中,所述节点在接收到上位机下发的数据帧后,便写入所述分区内,直到接收到的全部数据帧均写入到所述分区内后,比较所述第一整体校验值和第二整体校验值,当两者相同时,修改所述分区的程序填充标识,修改后的程序填充标识表明所述分区内存储有升级后的用户程序。
当所述第一整体校验值与所述第二整体校验值不相同时,在步骤S165,确定所述目标版本号对应的用户程序校验失败,并删除接收到的用户程序。
本实施例提供的单片机程序升级方法首先将单片机的程序代码区划分成多个分区,其中一个分区为只读存储区用于存储单片机的默认程序;剩余分区为可读写存储区用于存储用户程序;接着,校验单片机内存储的用户程序,如果校验失败,进入下一个可读写的分区进行校验;当单片机内的全部用户程序都校验失败时,进入单片机内存储默认程序的分区,运行单片机的默认程序,使单片机退回到出厂模式,从而恢复可读写存储区内的用户程序,使单片机回退到升级之前的初始状态。使得在恢复所述用户程序之后,能够继续对单片机进行升级,提高了整个分布式***的安全性及可靠性;如果用户程序校验成功,进入该分区,然后接收上位机通过广播方式发送的程序升级命令,判断是否允许所述用户程序升级;当确定允许所述用户程序升级时,接收上位机通过广播方式下发的目标版本号对应的用户程序。通过广播方式实现多节点同时升级,提高了多节点的升级效率。单片机对接收到的所述目标版本号对应的用户程序进行校验,校验成功后将所述分区内的用户程序更新为所述目标版本号对应的用户程序,如果所述用户程序校验失败,则擦除接收到的用户程序,提高了用户程序的可靠性。
考虑到可能存在下述情况:当单片机的用户程序升级成功后,在用户程序运行的过程中,可能由于某种原因损坏无法继续正常运行,而且其它的用户程序也无法正常运行时,导致单片机不能正常运行。本发明提供了另一种单片机升级方法,所述方法应用于分布式***的单片机中,预先在所述单片机的程序代码区内设置至少三个分区,其中一个分区为只读存储区,用于存储单片机的默认程序;剩余的分区为可读写存储区,用于存储用户的用户程序。
如图4所示,所述单片机程序升级方法可以包括以下步骤:
在步骤S210,统计单片机的上电复位次数。
当上位机检测到某个节点(单片机)的程序代码区的全部可读写的分区被损坏时,控制该单片机下电,然后,上电复位。单片机一旦检测到是上电复位动作,则在芯片复位寄存器内的计数加1,当正常进入所述用户程序的代码区时,所述芯片复位寄存器的计数会在所述用户程序退出时清零。
在步骤S220,判断所述上电复位次数是否超过预设次数;当所述上电复位次数超过预设次数时,执行步骤S250;当所述上电复位次数未超过预设次数时,执行步骤S230。
当某些原因(例如,升级的用户程序的代码不正确,或单片机内存储器的写操作错误)导致单片机的用户程序损坏时,可以通过下电然后再上电复位的方式恢复,从而进入能够正常运行的程序代码区;但是对于无法通过上电复位方式恢复的情况,可以通过判断上电复位的次数是否超过预设次数检测,当单片机的上电复位次数超过预设次数时,认为单片机内的程序代码区的全部分区全部损坏无法自行恢复。
所述预设次数可以根据要求自由设定,例如,可以设定为5次。
在步骤S230,校验指定分区内的所述用户程序是否能够运行;如果校验成功,执行步骤S260。
如果校验失败,在步骤S240中,判断单片机内存储的用户程序是否全部判断完,如果否,将下一个分区作为指定分区,返回执行步骤S230;如果是,进入步骤S250。
如果单片机上电复位次数不大于预设次数(例如,5次),对指定分区内的用户程序进行校验,例如,可以根据循环冗余校验码对所述用户程序进行校验。
所述指定分区可以是单片机默认的存储用户程序的分区,也可以是用户设定存储用户程序的分区,本发明对此并不限制。
在步骤S250,进入存储单片机的默认程序的分区,并运行所述单片机的默认程序。
转入存储默认程序的分区,能够使单片机从当前状态回退到出厂模式,恢复可读写分区的用户程序,使单片机回退到升级之前的初始状态,从而在恢复所述用户程序之后,能够继续对单片机进行升级,提高了分布式***升级的安全性和可靠性。
当所述用户程序校验成功时,在步骤S260,接收上位机通过广播方式下发的程序升级命令。
在步骤S270,根据所述目标版本号判断用户程序是否允许升级,如果允许所述用户程序升级,则执行步骤S280;否则,结束。
在步骤S280,接收上位机通过广播方式下发的所述目标版本号对应的用户程序。
上位机1通过总线多次广播(例如,2次或2次以上)所述目标版本号对应的用户程序,从而提高分布式***中多个节点升级的成功率。在多次广播的过程中,升级成功的节点将不再接收上位机所广播的消息。
在步骤S290,对所述目标版本号对应的用户程序进行校验,校验成功后将所述用户程序更新为所述目标版本号对应的用户程序。
需要说明的是,步骤S230~S290与图1中的步骤S100~S160中对应的步骤相同,本实施例中不再赘述。
本实施例提供的单片机程序升级方法,不但能够在对单片机升级之前对单片机内的用户程序进行校验,当全部的用户程序校验失败后,控制单片机进入默认程序的分区,运行单片机的默认程序。而且,在单片机的用户程序升级过程中,可以通过上电复位次数控制策略识别出单片机内的用户程序出现不可恢复的状态,并控制单片机进入默认程序的分区。运行所述单片机的默认程序,能够使单片机退回到出厂模式,从而恢复所述用户程序,使单片机回退到升级之前的初始状态。使得恢复所述用户程序之后,能够继续对单片机进行升级,提高了整个分布式***在用户程序升级时安全性及可靠性。
本实施例提供的单片机程序升级方法,首先在单片机的存储区域划分一个只读分区,用于存储单片机的默认程序,当单片机中存储用户程序的各个分区都被损坏时,转入单片机的默认程序的分区,并运行单片机的默认程序,使单片机退回到出厂模式,恢复可读写存储区内的用户程序,使单片机回退到升级之前的初始状态,从而在恢复所述用户程序之后,能够继续对单片机进行升级,从而提高了整个分布式***的安全性及可靠性。为了进一步提高分布式***的可靠性,增设了对节点的上电复位次数的检测策略,当单片机内的用户程序可能在单片机进入用户程序的代码区后无法正常运行,此时可以通过检测上电复位次数,判断所述用户程序是否被损坏,如果所述用户程序被损坏且不可恢复,则转入单片机的默认程序的分区,并运行单片机的默认程序,使单片机退回到出厂模式,提高了分布式***的安全性及可靠性。
可选地,在本发明的一个实施例中,在步骤S220之后,S230之前还可以包括:获取单片机内最新版本号用户程序所在分区的分区识别号,并将所述分区识别号对应的分区作为所述指定分区。
在单片机上电后,需要对单片机内存储的用户程序进行校验,单片机的程序代码区设置有多个存储用户程序的分区,因此,在校验用户程序之前,单片机首先要确定校验哪个分区的用户程序。优选地,在第一次用户程序校验之前,可以将单片机内的最新版本号对应的用户程序所在的分区作为第一次校验的指定分区。如果最新版本号的用户程序校验失败,则继续校验下一个分区的用户程序,此阶段的指定分区即所述下一个分区。
需要说明的是,根据接收到上位机发送的升级结束命令对接收到的目标版本号对应的用户程序校验成功后,将单片机内存储的所述分区识别号修改为所述目标版本号对应的用户程序所在分区的分区识别号。这样,在后续验证单片机的用户程序升级是否成功时,根据修改后的分区识别号进入对应的分区,验证该分区内的用户程序升级是否成功。
在本申请的一个实施例中,在单片机的存储器的某个区域存储该单片机内最新版本号的用户程序所在分区的分区识别号,单片机根据该分区识别号就知道首先进入哪个分区。从而无需工作人员自己选择(例如,通过按键方式)单片机内最新版本号的用户程序,操作简单。
在进入所述分区识别号对应的存储用户程序的分区后,如果该分区存储的用户程序被损坏,单片机会自动去搜索其它分区,直到有一个分区内的用户程序可以运行;或者,当单片机内全部可读写分区内的用户程序均被损坏时,进入存储单片机的默认程序的分区。
可选地,在图1或图4所示的单片机程序升级方法,在校验所述目标版本号对应的用户程序是否能够运行,校验成功后将所述用户程序更新为所述目标版本号对应的用户程序(即图1中的步骤S160或图4中的步骤S290)之后,还可以包括验证所述单片机的用户程序升级是否成功。
单片机对接收到的用户程序校验成功,并更新所述分区的用户程序后,上位机控制各个单片机重新上电,单片机根据所述分区识别号,验证单片机内的用户程序升级是否成功。
在本发明的一个实施例中,如图5所示,具体的验证过程可以包括以下步骤:
在步骤S311,单片机在预设时长内与上位机进行握手检测,如果握手成功,则执行步骤S312;如果握手失败,则执行步骤S313;
所述预设时长可以根据具体应用场景设定,例如,可以设定为30S。如果在预设时长内单片机与上位机握手失败,则认为此次握手失败,可以在后续步骤尝试下一次握手。
在步骤S312,单片机向上位机上传单片机内存储的用户程序的最新版本号;所述用户程序的最新版本号用于使上位机验证所述用户程序升级是否成功,以及,当所述用户程序升级成功时,将程序认证标识存储到存储器中,表明所述用户程序已经经过验证,在后续执行所述用户程序时,无需再进行校验。
上位机比较所述用户程序的最新版本号与所述目标版本号是否相同,如果相同,则表明所述用户程序升级成功;如果不相同,则表明所述用户程序升级不成功,可以重新控制节点升级。如果单片机的某一分区的用户程序升级失败。
在单片机重新上电后,由于所述某一分区的用户程序损坏,可能会进入另一分区运行,或者,进入单片机的默认程序区运行。此时,所述用户程序的最新版本号可能是未进行升级的其它分区的用户程序的版本号,或者可能是单片机的默认程序的版本号,还可能存在版本号为空的情况。因此,用户程序升级失败时,所述用户程序的最新版本号与目标版本号不相同。
在步骤S313,判断当前握手次数是否达到预设值,如果未达到预设值,执行步骤S314;如果达到预设值,执行步骤S315;
S314,当前握手次数加1,并返回执行步骤S311;
假设当前握手次数为i,如果握手失败令i=i+1,进行下一次握手检测。
S315,删除接收到的所述用户程序。握手次数超过预设值,表明所述用户程序不可运行,故删除所述用户程序。
在单片机接收到上位机下发的所述目标版本号对应的用户程序后,首次运行时,并不能保证通过对目标版本号对应的用户程序校验成功后就能使用,因此,当所有的用户程序在首次执行时,都会在预设时长内与上位机进行握手检测,如果握手成功则表明所述用户程序已经通过验证可以运行,提高了分布式***升级的可靠性。此外,用户程序通过验证后,后续可以直接执行而不必每次都验证,增加了分布式***的灵活性。而且,本实施例增加了握手尝试次数,提高了用户程序的验证通过率。
相应于上述的单片机程序升级方法,本发明还提供一种应用于上位机的单片机程序升级方法。
请参见图6,示出了本发明实施例另一种单片机程序升级方法的流程示意图,所述方法包括以下步骤:
S610,上位机检测到各个单片机上电后,通过广播方式向各个所述单片机下发程序升级命令;
所述程序升级命令携带所述用户程序的目标版本号,所述目标版本号用于使所述单片机判断用户程序是否允许升级;其中,所述上位机的广播次数大于一次,从而提高分布式***中多个节点升级的成功率。
需要说明的是,在上位机广播下发消息时,各个节点保持只能接收数据的状态,从而保证各个节点之间相互不影响,即使一个节点升级出现问题,也不会影响其他节点的升级。
在步骤S620,当所述上位机接收到所述单片机发送的允许所述用户程序升级的判断结果时,上位机通过广播方式向各个所述单片机下发所述目标版本号对应的用户程序;
此过程中,上位机可以通过总线多次广播(例如,2次或2次以上)所述目标版本号对应的用户程序,从而提高分布式***中多个节点升级的成功率。在多次广播的过程中,升级成功的节点将不再接收所广播的消息。
在步骤S630,上位机向各个所述单片机下发包含目标版本号的升级结束命令,所述升级结束命令用于各个所述单片机对所述目标版本号对应的用户程序进行校验,并在校验成功后更新所述用户程序;
S640,上位机验证所述单片机的用户程序升级是否成功,如果验证成功,向单片机下发升级成功的验证结果。
当所述单片机的用户程序升级成功时,所述单片机修改所述用户程序的程序认证标识,修改后的所述程序认证标识表明所述分区内的用户程序能够执行。
例如,未验证的用户程序对应的程序认证标识可以为0,验证升级成功后的用户程序的程序认证标识可以为设置为1,因此,当确定单片机的用户程序升级成功后,置位对应的用户程序认证标识即可。
上位机验证所述单片机的用户程序升级是否成功过程可以包括以下步骤:
上位机在预设时长内与所述单片机进行握手检测,如果握手失败,继续进行握手检测,直到握手失败的次数达到预设值。如果上位机与单片机之间的握手失败的次数达到预设值,所述单片机删除所述分区存储的用户程序。
如果握手成功,上位机接收单片机上传的单片机内存储的用户程序的最新版本号。
然后,上位机判断所述用户程序的最新版本号与所述目标版本号是否相同,如果相同,则表明所述用户程序升级成功,上位机向单片机下发升级成功的验证结果,所述升级成功的验证结果用于使所述单片机修改所述最新用户程序对应的程序认证标识,修改后的所述程序认证标识表明所述用户程序能够执行;如果不相同,则表明所述用户程序升级不成功,则向所述单片机下发升级失败的验证结果,可以重新控制节点升级。
本实施例提供的单片机程序升级方法,应用于分布式***中的上位机,所述上位机通过广播方式使分布式***中的各个节点同时升级,提高了多节点的升级效率,而且对单片机内的用户程序进行校验和验证后才运行,提高了用户程序的可靠性。
相应于上述的单片机程序升级方法,本发明实施例还提供了单片机程序升级装置。
请参见图7,示出了本发明实施例一种单片机程序升级装置的结构示意图,所述装置应用于分布式***的中的单片机中,所述单片机的存储器包括引导区和程序代码区,预先在所述程序代码区内设置为多个分区,其中,一个分区为只读存储区用于存储单片机的默认程序;剩余分区为可读写存储区用于存储用户程序。
如图7所示,所述装置包括:第一校验单元100、第一默认程序执行单元200、第一接收单元300、第一判断单元400、第二接收单元500、第二校验单元600和更新单元700;
第一校验单元100,用于校验指定分区内的用户程序是否能够运行,当所述指定分区内的所述用户程序校验失败时,将下一个分区作为指定分区,并执行检验指定分区内的的用户程序是否能够运行。
第一默认程序执行单元200,用于当全部用户程序都校验失败时,进入存储单片机的默认程序的分区,并运行所述单片机的默认程序。
在单片机上电进入程序代码区的某个存储用户程序的分区后,该分区的用户程序也有可能被损坏导致不能继续运行,通过单片机上电复位次数检测所述用户程序是否被损坏,如果所述用户程序被损坏且不可自行恢复,则转入单片机的默认程序的分区,并运行单片机的默认程序,使单片机退回到出厂模式,恢复程序代码区的可读写分区的用户程序,使单片机回退到升级之前的初始状态,从而在恢复所述用户程序之后,能够继续对单片机进行升级,提高了分布式***的安全性及可靠性。
第一接收单元300,用于当所述指定分区的用户程序校验成功时,接收上位机通过广播方式下发的程序升级命令,所述程序升级命令携带所述用户程序的目标版本号。
需要说明的是,上位机通过总线多次广播(例如,2次或2次以上)所述目标版本号对应的用户程序,从而提高分布式***中多个节点升级的成功率。而且,在上位机广播下发消息时,各个节点保持只能接收数据的状态,从而保证各个节点之间相互不影响,即使一个节点升级出现问题,也不会影响其他节点的升级。
第一判断单元400,用于根据所述目标版本号判断所述用户程序是否允许升级。
第二接收单元500,用于当确定所述用户程序允许升级时,接收上位机通过广播方式下发的所述目标版本号对应的用户程序。可选地,上位机的广播次数大于一次,提高分布式***中多个节点升级的成功率。
第二校验单元600,用于所述目标版本号对应的用户程序进行校验。
更新单元700,用于当所述目标版本号对应的用户程序校验成功后,将所述用户程序更新为所述目标版本号对应的用户程序。
本实施例提供的单片机升级装置,首先对单片机的程序代码区划分成多个分区,其中设置一个只读存储区用于存储单片机的默认程序。在单片机上电后,首先对单片机内存储用户程序的分区内所存储的用户程序,如果校验失败,进入下一个存储用户程序的分区校验,当单片机内全部存储用户程序的分区都校验失败时,进入单片机内存储默认程序的分区,运行单片机的默认程序,使单片机退回到出厂模式,恢复可读写存储区内的用户程序,使单片机回退到升级之前的初始状态,从而在恢复所述用户程序之后,能够继续对单片机进行升级,提高了整个分布式***的安全性及可靠性;如果校验成功,进入该分区;通过第一接收单元接收上位机发送的程序升级命令。然后,当通过第一判断单元确定允许所述用户程序升级时,利用第二接收单元接收上位机通过广播方式下发的目标版本号对应的用户程序。最后,利用第二校验单元对所述目标版本号对应的用户程序进行校验,校验成功后将所述用户程序更新为所述目标版本号对应的用户程序。由上述内容可知,所述单片机程序升级方法通过广播方式实现多节点同时升级,提高了多节点的升级效率,而且在接收到的所述目标版本的用户程序通过校验后才更新所述用户程序,提高了用户程序升级的可靠性。
可选地,如图7所示,所述单片机程序升级装置还包括:上电次数记录单元800、第二判断单元900和第二默认程序执行单元1000。
上电次数记录单元800,用于记录所述单片机的上电复位次数。
第二判断单元900,用于判断所述上电复位次数是否超过预设次数。
第二默认程序执行单元1000,用于当所述上电复位次数超过预设次数时,进入存储单片机的默认程序的分区,并运行所述单片机的默认程序。
当所述上电复位次数未超过预设次数时,控制第一校验单元100根据用户程序的校验值对指定分区内的所述用户程序进行校验。
可选地,如图7所示,所述单片机程序升级装置还包括第一获取单元1010。
第一获取单元1010,用于获取所述单片机内存储的全部用户程序中最新版本号的用户程序所在分区的分区识别号,并将所述分区识别号对应的分区作为所述指定分区。
在单片机上电后,需要对单片机内存储的用户程序进行校验,单片机的程序代码区设置有多个存储用户程序的分区,因此,在校验用户程序之前,单片机首先要确定校验哪个分区的用户程序。优选地,在第一次用户程序校验之前,可以将单片机内的最新版本号对应的用户程序所在的分区作为第一次校验的指定分区。如果最新版本号的用户程序校验失败,则继续校验下一个分区的用户程序,此阶段的指定分区即所述下一个分区。
需要说明的是,根据接收到上位机发送的升级结束命令对接收到的目标版本号对应的用户程序校验成功后,将单片机内存储的所述分区识别号修改为所述目标版本号对应的用户程序所在分区的分区识别号。这样,在后续验证单片机的用户程序升级是否成功时,根据修改后的分区识别号进入对应的分区,验证该分区内的用户程序升级是否成功。
在本申请的一个实施例中,在单片机的存储器的某个区域存储该单片机内最新版本号的用户程序所在分区的分区识别号,单片机根据该分区识别号就知道首先进入哪个分区。从而无需工作人员自己选择(例如,通过按键方式)单片机内最新版本号的用户程序,操作简单。
可选地,如图8所示,图7所示的单片机程序升级装置还包括:握手检测单元1030、发送单元1040、第三接收单元1050、程序认证标识修改单元1060和删除单元1070。
握手检测单元1030与所述更新单元700相连接,用于在预设时长内与所述上位机进行握手检测,当握手失败时,进行下一次握手检测。
所述预设时长可以根据具体应用场景设定,例如,可以设定为30S。如果在预设时长内单片机与上位机握手失败,则认为此次握手失败,可以在后续步骤尝试下一次握手。
发送单元1040,用于当握手成功时,所述单片机将可读写的分区内存储的用户程序的最新版本号上传给所述上位机,所述最新版本号用于使上位机判断所述最新版本号与所述目标版本号是否相同,得到验证结果。
第三接收单元1050,用于接收所述上位机验证所述单片机的用户程序升级是否成功的验证结果。
程序认证标识修改单元1060,用于当所述验证结果表明所述用户程序升级成功时,存储所述分区的程序认证标识,所述程序认证标识表明所述分区内的用户程序是否能执行;
删除单元1070,用于当所述握手检测单元的握手失败的次数达到预设值时,删除单片机接收到的所述用户程序。
在单片机接收到上位机发送的用户程序后,首次运行时,并不能保证通过第二校验单元的校验后就能使用,因此,在所述用户程序中增设一个验证定时器和程序认证标识,所有的用户程序在首次执行时,都会在所述验证定时器规定的预设时长内与上位机进行握手检测,如果握手成功则表明所述用户程序升级成功可以运行,避免了在不知道用户程序升级是否成功的情况下,进入升级不成功的分区内导致单片机重新选择分区后无法运行的情况发生,因此提高了分布式***的可靠性。此外,所述用户程序在验证后,后续可以直接执行而不必每次都验证,增加了分布式***的灵活性。而且,本实施例增加了握手尝试次数,提高了用户程序的验证通过率。
请参见图9,示出了本发明实施例另一种单片机程序升级装置的结构示意图,所述装置应用于分布式***中的上位机,所述上位机可以是计算机、单片机等能够控制其它设备的控制设备。
如图9所示,所述装置可以包括:第一发送单元10、第二发送单元20、第三发送单元30和验证单元40。
第一发送单元10,用于当检测到各个单片机上电完成后,通过广播方式向各个所述单片机下发程序升级命令,所述程序升级命令携带所述用户程序的目标版本号,所述目标版本号用于使所述单片机判断用户程序是否允许升级。其中,所述广播次数大于一次,从而提高分布式***中多个节点升级的成功率。
需要说明的是,在上位机广播下发消息时,各个节点保持只能接收数据的状态,从而保证各个节点之间相互不影响,即使一个节点升级出现问题,也不会影响其他节点的升级。
第二发送单元20,用于通过广播方式向各个所述单片机下发所述目标版本号对应的用户程序,广播次数大于一次。
第二发送单元20可以通过总线多次广播所述目标版本号对应的用户程序,从而提高分布式***中多个节点升级的成功率。
第三发送单元30,用于向各个所述单片机下发包含所述目标版本号的升级结束命令,所述升级结束命令用于使各个所述单片机对所述目标版本号对应的用户程序进行校验,并在校验成功后更新所述用户程序。
验证单元40,用于验证所述单片机的用户程序升级是否成功,如果验证成功,向单片机下发升级成功的验证结果。
在本发明的一个实施例中,如图10所示,所述验证单元可以包括:握手检测单元41、第一接收单元42、第一判断单元43、第一验证结果发送单元44和第二验证单元发送单元45。
握手检测单元41与第三发送单元30连接,用于在预设时长内与所述单片机进行握手检测,如果握手失败,执行在预设时长内与所述单片机进行下一次握手检测,直到握手失败的次数达到预设值。如果握手失败的次数达到预设值,所述单片机删除接收到的所述用户程序。
第一接收单元42,用于在上位机与所述单片机握手成功后,接收所述单片机上传的单片机内存储的用户程序的最新版本号。
第一判断单元43,用于判断所述最新版本号与所述目标版本号是否相同。
第一验证结果发送单元44,用于当所述最新版本号与所述目标版本号相同时,向单片机下发升级成功的验证结果,所述升级成功的验证结果用于使所述单片机修改所述最新用户程序对应的程序认证标识,所述程序认证标识用于表明所述用户程序是否能够运行,修改后的程序认证标识表明所述用户程序能够运行。
第二验证单元发送单元45,用于当所述最新版本号与所述目标版本号不相同时,向所述单片机下发升级失败的验证结果,可以重新控制该单片机升级。
本实施例提供的单片机程序升级装置,所述第一发送单元在检测到单片机上电后,通过广播方式向各个单片机下发程序升级命令。接着,通过第二发送单元向各个单片机下发目标版本号对应的用户程序。然后,利用第三发送单元向单片机下发升级结束命令。当单片机接收到所述目标版本号对应的用户程序后,上位机通过验证单元验证所述单片机的用户程序升级是否成功,当得到升级成功的验证结果时,单片机存储用户程序的程序认证标识,所述程序认证标识表明所述用户程序能够执行。综上所述,所述上位机通过广播方式与单片机通信,使分布式***中的多个单片机节点同时升级,提高了多节点的升级效率,而且通过校验后才更新用户程序,提高了用户程序的可靠性。
通过以上的方法实施例的描述,所属领域的技术人员可以清楚地了解到本发明可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:只读存储器(ROM)、随机存取存储器(RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
本发明可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本发明,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
需要说明的是,在本文中,诸如“第一”和“第二”等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上所述仅是本发明的具体实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
Claims (13)
1.一种单片机程序升级方法,其特征在于,应用于多节点分布式***中的单片机,预先在所述单片机的程序代码区内设置至少三个分区,其中一个分区为只读存储区,用于存储单片机的默认程序,剩余分区为可读写存储区,用于存储用户程序,所述方法包括:
校验指定分区内的用户程序是否能够运行;
当所述指定分区内的所述用户程序校验失败时,将下一个分区作为指定分区,并返回执行检验指定分区内的的用户程序是否能够运行的步骤,直到全部分区的用户程序都校验失败时,进入存储单片机的默认程序的分区,并运行所述单片机的默认程序;
当所述指定分区内的用户程序校验成功时,接收上位机通过广播方式下发的程序升级命令,所述程序升级命令携带所述用户程序的目标版本号;
根据所述目标版本号判断所述用户程序是否允许升级;
当确定所述用户程序允许升级时,接收上位机通过广播方式下发的所述目标版本号对应的用户程序;
校验所述目标版本号对应的用户程序是否能够运行,校验成功后将所述用户程序更新为所述目标版本号对应的用户程序。
2.根据权利要求1所述的方法,其特征在于,在校验指定分区内的用户程序是否能够运行之前,所述方法还包括:
记录所述单片机的上电复位次数;
判断所述上电复位次数是否超过预设次数,当所述上电复位次数超过预设次数时,进入存储单片机的默认程序的分区,并运行所述单片机的默认程序;
当所述上电复位次数未超过所述预设次数时,执行校验指定分区内的所述用户程序是否能够运行的步骤。
3.根据权利要求2所述的方法,其特征在于,所述执行校验指定分区内的用户程序是否能够运行的步骤之前,所述方法还包括:
获取所述单片机内存储的全部用户程序中最新版本号的用户程序所在分区的分区识别号,并将所述分区识别号对应的分区作为所述指定分区。
4.根据权利要求1-3任一项所述的方法,其特征在于,所述对所述目标版本号对应的用户程序进行校验,包括:
计算所述目标版本号对应的用户程序的第一整体校验值;
接收上位机下发的升级结束命令,所述升级结束命令携带所述目标版本号对应的用户程序的第二整体校验值;
判断所述第一整体校验值与所述第二整体校验值是否相同,当所述第一整体校验值与所述第二整体校验值相同时,确定所述目标版本号对应的用户程序校验成功。
5.根据权利要求1所述的方法,其特征在于,在将所述用户程序更新为所述目标版本号对应的用户程序之后,还包括:
所述单片机在预设时长内与所述上位机进行握手检测,当握手成功时,所述单片机将可读写的分区内存储的用户程序的最新版本号上传给所述上位机,所述最新版本号用于使上位机判断所述最新版本号与所述目标版本号是否相同,得到验证结果;
当所述单片机接收到表明所述用户程序升级成功的验证结果时,修改所述分区的程序认证标识,修改后的所述程序认证标识表明所述用户程序能够运行;
当所述单片机与所述上位机握手失败时,尝试下一次握手检测,直到所述单片机与所述上位机握手失败的次数达到预设值,删除所述最新版本号的用户程序。
6.一种单片机程序升级方法,其特征在于,应用于多节点分布式***中的上位机,所述方法包括:
上位机检测到各个单片机上电后,通过广播方式向各个所述单片机下发程序升级命令,所述程序升级命令携带所述用户程序的目标版本号,所述目标版本号用于使所述单片机判断是否允许用户程序升级;
当所述上位机接收到所述单片机发送的允许所述用户程序升级的判断结果时,所述上位机通过广播方式向各个所述单片机下发所述目标版本号对应的用户程序,其中,所述上位机的广播次数大于一次;
所述上位机向各个所述单片机下发包含目标版本号的升级结束命令,所述升级结束命令用于使各个所述单片机对所述目标版本号对应的用户程序进行校验,并在校验成功后更新所述的用户程序;
所述上位机验证各个所述单片机的用户程序升级是否成功,如果验证成功,向单片机下发升级成功的验证结果。
7.根据权利要求6所述的方法,其特征在于,所述上位机验证各个所述单片机的用户程序升级是否成功,如果验证成功,向单片机下发升级成功的验证结果,包括:
所述上位机在预设时长内与所述单片机进行握手检测;
当握手成功时,所述上位机接收单片机上传的单片机内存储的用户程序的最新版本号;
所述上位机判断所述最新版本号与所述目标版本号是否相同;
当所述最新版本号与所述目标版本号相同时,向单片机下发升级成功的验证结果,所述升级成功的验证结果用于使所述单片机修改所述用户程序对应的程序认证标识,修改后的所述程序认证标识表明所述用户程序能够运行;
当握手失败时,返回执行所述上位机在预设时长内与所述单片机进行握手检测,直到握手失败的次数达到预设值。
8.一种单片机程序升级装置,其特征在于,应用于多节点分布式***中的单片机,预先在所述单片机的程序代码区内设置至少三个分区,其中一个分区为只读存储区,用于存储所述单片机的默认程序;剩余分区为可读写存储区,用于存储用户程序;所述装置包括:
第一校验单元,用于校验指定分区内的用户程序是否能够运行,当所述指定分区内的所述用户程序校验失败时,将下一个分区作为指定分区,并执行检验指定分区内的的用户程序是否能够运行;
第一默认程序执行单元,用于当所述单片机内的全部用户程序都校验失败时,进入存储单片机的默认程序的分区,并运行所述单片机的默认程序;
第一接收单元,用于当所述指定分区内的用户程序校验成功时,接收上位机通过广播方式下发的程序升级命令,所述程序升级命令携带所述用户程序的目标版本号;
第一判断单元,用于根据所述目标版本号判断所述用户程序是否允许升级;
第二接收单元,用于当确定所述用户程序允许升级时,接收上位机通过广播方式下发的所述目标版本号对应的用户程序;
第二校验单元,用于对所述目标版本号对应的用户程序进行校验;
更新单元,用于当所述目标版本号对应的用户程序校验成功后,将所述用户程序更新为所述目标版本号对应的用户程序。
9.根据权利要求8所述的装置,其特征在于,所述装置还包括:
上电次数记录单元,用于记录所述单片机的上电复位次数;
第二判断单元,用于判断所述上电复位次数是否超过预设次数,当所述上电复位次数未超过预设次数时,控制所述第一校验单元执行校验指定分区内的用户程序是否能够运行;
第二默认程序执行单元,用于当所述上电复位次数超过预设次数时,进入存储单片机的默认程序的分区,并运行所述单片机的默认程序。
10.根据权利要求9所述的装置,其特征在于,所述装置还包括:
第一获取单元,用于获取所述单片机内存储的全部用户程序中最新版本号的用户程序所在分区的分区识别号,并将所述分区识别号对应的分区作为所述指定分区。
11.根据权利要求8所述的装置,其特征在于,所述装置还包括:
握手检测单元,用于在预设时长内与所述上位机进行握手检测,当握手失败时,进行下一次握手检测;
发送单元,用于当握手成功时,所述单片机将可读写的分区内存储的用户程序的最新版本号上传给所述上位机,所述最新版本号用于使上位机判断所述最新版本号与所述目标版本号是否相同,得到验证结果;
第三接收单元,用于接收所述上位机验证所述单片机的用户程序升级是否成功的验证结果;
程序认证标识修改单元,用于当所述验证结果表明所述用户程序升级成功时,修改所述分区的程序认证标识,修改后的所述程序认证标识表明所述用户程序能够运行;
删除单元,用于当所述握手检测单元的握手失败的次数达到预设值时,删除单片机接收到的所述用户程序。
12.一种单片机程序升级装置,其特征在于,应用于多节点分布式***中的上位机,所述装置包括:
第一发送单元,用于当检测到各个单片机上电完成后,通过广播方式向各个所述单片机下发程序升级命令,所述程序升级命令携带所述用户程序的目标版本号,所述目标版本号用于使所述单片机判断所述用户程序是否允许升级,其中,所述第一发送单元的广播次数大于一次;
第二发送单元,用于当所述单片机根据所述目标版本号确定所述用户程序允许升级时,通过广播方式向各个所述单片机下发所述目标版本号对应的用户程序,其中,所述广播次数大于一次;
第三发送单元,用于向各个所述单片机下发包含所述目标版本号的升级结束命令,所述升级结束命令用于使各个所述单片机对所述目标版本号对应的用户程序进行校验,并在校验成功后更新所述用户程序;
验证单元,用于验证所述单片机的用户程序升级是否成功,如果验证成功,向单片机下发升级成功的验证结果。
13.根据权利要求12所述的装置,其特征在于,所述验证单元包括:
握手检测单元,在预设时长内与所述单片机进行握手检测;当握手失败时,执行在预设时长内与所述单片机进行握手检测,直到握手失败的次数达到预设值;
第一接收单元,用于当上位机与所述单片机握手成功时,接收所述单片机上传的单片机内存储用户程序的最新版本号;
第一判断单元,用于判断所述最新版本号与所述目标版本号是否相同;
第一验证结果发送单元,用于当所述最新版本号与所述目标版本号相同时,向单片机下发升级成功的验证结果,所述升级成功的验证结果用于使所述单片机修改所述最新用户程序对应的程序认证标识,修改后的所述程序认证标识表明所述用户程序能够运行;
第二验证结果发送单元,用于当所述最新版本号与所述目标版本号不相同时,向所述单片机下发升级失败的验证结果。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410090866.6A CN104915219B (zh) | 2014-03-12 | 2014-03-12 | 单片机程序升级方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410090866.6A CN104915219B (zh) | 2014-03-12 | 2014-03-12 | 单片机程序升级方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104915219A true CN104915219A (zh) | 2015-09-16 |
CN104915219B CN104915219B (zh) | 2018-11-27 |
Family
ID=54084303
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410090866.6A Active CN104915219B (zh) | 2014-03-12 | 2014-03-12 | 单片机程序升级方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104915219B (zh) |
Cited By (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105700924A (zh) * | 2016-01-13 | 2016-06-22 | 深圳市盛弘电气股份有限公司 | 一种为多个模块烧录程序的方法及装置 |
CN106020869A (zh) * | 2016-05-09 | 2016-10-12 | 广州康盛生物科技有限公司 | 基于can总线的选择性烧录多个单片机节点程序的方法 |
CN106598686A (zh) * | 2017-01-03 | 2017-04-26 | 青岛海信移动通信技术股份有限公司 | ***分区中实现差分升级调试的方法和装置 |
CN106708560A (zh) * | 2016-11-17 | 2017-05-24 | 华立科技股份有限公司 | 基于rf通讯的电表无线程序升级方法及无线升级的电表 |
CN107301068A (zh) * | 2017-06-12 | 2017-10-27 | 合肥众志行云科技有限公司 | 一种单片机上的一对多无线程序升级***及方法 |
CN107770279A (zh) * | 2017-10-31 | 2018-03-06 | 深圳市银河风云网络***股份有限公司 | 远程升级方法及*** |
CN108415721A (zh) * | 2018-03-20 | 2018-08-17 | 山东比特智能科技股份有限公司 | 一种节点设备程序升级方法及相关装置 |
CN108446566A (zh) * | 2018-01-31 | 2018-08-24 | 制旋科技(深圳)有限公司 | 一种单片机程序安全加密的数字信号处理方法 |
CN108563457A (zh) * | 2018-04-11 | 2018-09-21 | 上海东软载波微电子有限公司 | 遥控式移动终端及其程序更新方法、可读存储介质 |
CN109947440A (zh) * | 2017-12-21 | 2019-06-28 | 北京长城华冠汽车科技股份有限公司 | 一种用于电池管理***控制器应用程序更新的校验方法及*** |
CN109977044A (zh) * | 2019-03-27 | 2019-07-05 | 歌尔科技有限公司 | Usb设备枚举检测方法和***及固件升级方法和*** |
CN110691365A (zh) * | 2019-10-23 | 2020-01-14 | 南方电网科学研究院有限责任公司 | 一种无线通信模块的网管方法、装置及*** |
JP2020021201A (ja) * | 2018-07-31 | 2020-02-06 | ラピスセミコンダクタ株式会社 | 通信システム及びプログラム更新方法 |
CN110769411A (zh) * | 2019-10-23 | 2020-02-07 | 厦门四信通信科技有限公司 | 稳定实现终端设备的批量ota升级方法、装置、设备及*** |
CN111580844A (zh) * | 2020-05-09 | 2020-08-25 | 上海航天电子通讯设备研究所 | 支持在轨动态更新的软硬件协同的应用程序维护方法 |
CN112612524A (zh) * | 2020-12-22 | 2021-04-06 | 西人马(西安)测控科技有限公司 | Linux***启动的方法、装置、设备及存储介质 |
CN112825036A (zh) * | 2019-11-21 | 2021-05-21 | 青岛海尔新能源电器有限公司 | 程序更新的方法、装置、电子设备和存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1851645A (zh) * | 2006-01-17 | 2006-10-25 | 华为技术有限公司 | 一种单片机***在运行中升级的装置和方法 |
CN101777003A (zh) * | 2010-02-08 | 2010-07-14 | 宁波大学 | 工业燃气表数据集抄器远程程序升级的方法 |
US20110260879A1 (en) * | 2010-04-21 | 2011-10-27 | Microsoft Corporation | Automated recovery and escalation in complex distributed applications |
CN102360304A (zh) * | 2011-10-18 | 2012-02-22 | 华南理工大学 | 嵌入式微处理器***及其固件更新方法 |
-
2014
- 2014-03-12 CN CN201410090866.6A patent/CN104915219B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1851645A (zh) * | 2006-01-17 | 2006-10-25 | 华为技术有限公司 | 一种单片机***在运行中升级的装置和方法 |
CN101777003A (zh) * | 2010-02-08 | 2010-07-14 | 宁波大学 | 工业燃气表数据集抄器远程程序升级的方法 |
US20110260879A1 (en) * | 2010-04-21 | 2011-10-27 | Microsoft Corporation | Automated recovery and escalation in complex distributed applications |
CN102360304A (zh) * | 2011-10-18 | 2012-02-22 | 华南理工大学 | 嵌入式微处理器***及其固件更新方法 |
Cited By (26)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105700924B (zh) * | 2016-01-13 | 2018-11-27 | 深圳市盛弘电气股份有限公司 | 一种为多个模块烧录程序的方法及装置 |
CN105700924A (zh) * | 2016-01-13 | 2016-06-22 | 深圳市盛弘电气股份有限公司 | 一种为多个模块烧录程序的方法及装置 |
CN106020869A (zh) * | 2016-05-09 | 2016-10-12 | 广州康盛生物科技有限公司 | 基于can总线的选择性烧录多个单片机节点程序的方法 |
CN106020869B (zh) * | 2016-05-09 | 2019-05-31 | 广州康盛生物科技有限公司 | 基于can总线的选择性烧录多个单片机节点程序的方法 |
CN106708560A (zh) * | 2016-11-17 | 2017-05-24 | 华立科技股份有限公司 | 基于rf通讯的电表无线程序升级方法及无线升级的电表 |
CN106598686A (zh) * | 2017-01-03 | 2017-04-26 | 青岛海信移动通信技术股份有限公司 | ***分区中实现差分升级调试的方法和装置 |
CN106598686B (zh) * | 2017-01-03 | 2020-03-06 | 青岛海信移动通信技术股份有限公司 | ***分区中实现差分升级调试的方法和装置 |
CN107301068A (zh) * | 2017-06-12 | 2017-10-27 | 合肥众志行云科技有限公司 | 一种单片机上的一对多无线程序升级***及方法 |
CN107770279A (zh) * | 2017-10-31 | 2018-03-06 | 深圳市银河风云网络***股份有限公司 | 远程升级方法及*** |
CN107770279B (zh) * | 2017-10-31 | 2020-12-29 | 深圳市银河风云网络***股份有限公司 | 远程升级方法及*** |
CN109947440A (zh) * | 2017-12-21 | 2019-06-28 | 北京长城华冠汽车科技股份有限公司 | 一种用于电池管理***控制器应用程序更新的校验方法及*** |
CN108446566A (zh) * | 2018-01-31 | 2018-08-24 | 制旋科技(深圳)有限公司 | 一种单片机程序安全加密的数字信号处理方法 |
CN108446566B (zh) * | 2018-01-31 | 2020-07-03 | 制旋科技(深圳)有限公司 | 一种单片机程序安全加密的数字信号处理方法 |
CN108415721A (zh) * | 2018-03-20 | 2018-08-17 | 山东比特智能科技股份有限公司 | 一种节点设备程序升级方法及相关装置 |
CN108563457A (zh) * | 2018-04-11 | 2018-09-21 | 上海东软载波微电子有限公司 | 遥控式移动终端及其程序更新方法、可读存储介质 |
CN108563457B (zh) * | 2018-04-11 | 2022-06-24 | 上海东软载波微电子有限公司 | 遥控式移动终端及其程序更新方法、可读存储介质 |
JP2020021201A (ja) * | 2018-07-31 | 2020-02-06 | ラピスセミコンダクタ株式会社 | 通信システム及びプログラム更新方法 |
CN110784327A (zh) * | 2018-07-31 | 2020-02-11 | 拉碧斯半导体株式会社 | 通信***以及程序更新方法 |
JP7134771B2 (ja) | 2018-07-31 | 2022-09-12 | ラピスセミコンダクタ株式会社 | 通信システム及びプログラム更新方法 |
CN109977044A (zh) * | 2019-03-27 | 2019-07-05 | 歌尔科技有限公司 | Usb设备枚举检测方法和***及固件升级方法和*** |
CN110769411A (zh) * | 2019-10-23 | 2020-02-07 | 厦门四信通信科技有限公司 | 稳定实现终端设备的批量ota升级方法、装置、设备及*** |
CN110691365A (zh) * | 2019-10-23 | 2020-01-14 | 南方电网科学研究院有限责任公司 | 一种无线通信模块的网管方法、装置及*** |
CN112825036A (zh) * | 2019-11-21 | 2021-05-21 | 青岛海尔新能源电器有限公司 | 程序更新的方法、装置、电子设备和存储介质 |
CN111580844A (zh) * | 2020-05-09 | 2020-08-25 | 上海航天电子通讯设备研究所 | 支持在轨动态更新的软硬件协同的应用程序维护方法 |
CN111580844B (zh) * | 2020-05-09 | 2024-02-02 | 上海航天电子通讯设备研究所 | 支持在轨动态更新的软硬件协同的应用程序维护方法 |
CN112612524A (zh) * | 2020-12-22 | 2021-04-06 | 西人马(西安)测控科技有限公司 | Linux***启动的方法、装置、设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN104915219B (zh) | 2018-11-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104915219A (zh) | 单片机程序升级方法及装置 | |
CN102023908B (zh) | 一种引导程序备份方法及装置 | |
CN109189445B (zh) | 一种物联网设备程序升级的方法 | |
WO2018149504A1 (en) | Changing smart contracts recorded in block chains | |
CN109358887B (zh) | 一种单片机程序的在线升级方法、装置及*** | |
US20110320794A1 (en) | Flash System And Method For Updating The Flash System | |
CN110633091A (zh) | 一种电子模块及其软件无线升级方法 | |
CN109062598A (zh) | 一种安全的ota升级方法及*** | |
CN108958767B (zh) | 一种基于最小***备份实现的安全模式自动升级方法 | |
CN106406955A (zh) | RSU设备bootloader程序升级的方法、装置 | |
CN106020882A (zh) | 一种应用升级方法、智能终端及升级*** | |
CN107566169A (zh) | 一种基于openwrt的固件升级方法及路由器 | |
CN108345464A (zh) | 一种安卓***的启动方法及安卓车机 | |
CN105045640A (zh) | 一种软件升级方法、装置及智能设备 | |
CN108920168A (zh) | 支持多个同类ECU同时升级且具防程序不匹配功能的Bootloader方法 | |
CN105069381B (zh) | 一种基于智能终端的分区保护方法及*** | |
CN114153484A (zh) | 更新程序的运行方法、装置、电子装置和存储介质 | |
CN113220319A (zh) | 一种数据更新方法、装置及车辆 | |
CN105718416A (zh) | 一种升级fpga的配置文件的方法和升级设备 | |
CN105279043A (zh) | 一种对单片机软件错误进行恢复的方法及*** | |
CN116627519A (zh) | 一种嵌入式设备的多***启动方法 | |
CN116301995A (zh) | 基于bootloader架构的固件升级方法 | |
CN115827069A (zh) | 服务器主板的启动控制方法、***及装置 | |
CN100359485C (zh) | 嵌入式***的测试装置及测试方法 | |
CN108549539A (zh) | 一种进行设备远程升级的方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CP02 | Change in the address of a patent holder | ||
CP02 | Change in the address of a patent holder |
Address after: 100176 room 502-1, floor 5, building 2, courtyard 10, keguyi street, Beijing Economic and Technological Development Zone, Daxing District, Beijing Patentee after: NEW SINGULARITY INTERNATIONAL TECHNICAL DEVELOPMENT Co.,Ltd. Address before: 100081, Beijing, Haidian District sorghum Bridge oblique Street No. 34, building 212, room 19 Patentee before: NEW SINGULARITY INTERNATIONAL TECHNICAL DEVELOPMENT Co.,Ltd. |