一种用于充电桩安全升级自身程序的客户端软件启动方法
技术领域
本发明属于电动汽车充电桩的嵌入式系统领域,具体涉及安全升级自身程序的客户端软件启动方法。
背景技术
随着全球节能和环保意识的不断增强,新能源领域的电动汽车产业迅速发展。与此同时,随着电动汽车充电桩的大量建设和应用,用户对良好体验感的需求也被提上了日程,用户的体验感和充电桩的程序就是有着最直接的关系。
由于充电桩往往安装在室外,工作条件比较恶劣,而且在行业刚起步的时候,用户的体验感是需要不断地改进的,充电桩的长期正常运行和充电桩能够实时运行工程师修改后的新程序是用户体验感的基础,所以远程升级技术的应用在我们的产品中应运而生。
现有技术存在如下缺陷:(1)现有的远程升级技术中升级完成后许多都是通过服务器端进行软复位重启动;(2)现有的远程升级技术都是通过直接修改启动参数达到运行新旧程序的目的,这样的情况下一旦存储启动参数的区域硬件损坏,那么就会导致整个设备运行出错,如果是大型设备的话,程序运行出错很有可能发生事故;(3)现有的升级技术大部分会通过直接启动新程序然后通过判断服务器和新程序之间的通信来确认是否升级成功,这样不够安全,因为一个程序的部分数据出错不一定能够导致通信不正常。
发明内容
为了解决上述现有技术的缺陷,本发明提供一种针对嵌入式系统设备能够长期稳定运行,能够实时更新运行新程序的方法。根据系统存储区域更新的升级数据是否正确来判断是运行最新的程序还是运行上传故障的程序。
为了实现本发明的实现的安全功能,采取如下技术方案:
一种用于充电桩安全升级自身程序的客户端软件启动方法,包括:
步骤1,将系统存储区域分区,包括bootcode区域;
步骤2,系统运行程序时,若检测到更新指令,则接收服务器发送过来的升级数据以及所述升级数据的算法校验值b,系统进入bootcode区域;在bootcode区域里判断升级数据的对错情况确定运行正常程序还是运行故障程序。
作为优选,步骤1中的系统存储区域还包括:正常区域,故障区域,更新程序备份区域,标识区域;步骤2中接收的升级数据以及所述升级数据的算法校验值b分别保存在所述更新程序备份区域、所述标识区域;所述正常程序存放在所述正常区域,所述故障程序存放在所述故障区域。
作为优选,步骤2中判断升级数据的对错情况确定运行正常程序还是运行故障程序的方法为:
步骤2.1,对更新程序备份区域的升级数据进行校验计算,得到算法校验值a;
步骤2.2,将算法校验值a与算法校验值b比对,若一致,则执行步骤2.3,否则,执行当前版本的程序;
步骤2.3,将更新程序备份区域的升级数据搬运至正常区域;
步骤2.4,对正常区域的升级数据进行校验计算,得到算法校验值c;
步骤2.5,将算法校验值c与算法校验值b比对,若一致,则运行正常区域里的升级数据,否则,执行故障区域的程序。
作为优选,所述步骤2.5中所述的故障区域的程序包括:
建立一个故障上传通道,上传三次故障信息后自动关闭,然后建立正常通道,设备自动进入正常工作状态。
作为优选,所述步骤2.1中的校验计算和所述步骤2.4中的校验计算的算法相同,均包括如下步骤:
步骤A,读取升级数据进行32位无符号的累加和;
步骤B,对步骤A算出来的值进行按位取反的操作;
步骤C,对步骤B求出来的数据和一个固定值求差值。
作为优选,所述步骤C中的固定值可自行定义为任一个32位数据。
与现有技术相比,本发明的有益效果:
(1)本发明提出的远程升级程序客户端软件启动的方法,通过多次逻辑判断存储区域中自定义的不同分区的数据来确认远程升级是否成功,因为任何程序在存储区域中都是以数据的形式存在,我们通过直接判断最原始的数据是否正确来确认我们的远程升级是否成功,这样能够保证远程升级更准确。
(2)即使程序升级数据存放的硬件区域损坏了,设备通过运行到故障区域的程序,依然可以正常运作,实现正常的功能;并上传设备存储区域的损坏信息给服务器,由售后人员及时维修。故障区域的程序从出厂后一直不变。
(3)现有的远程升级技术在升级完成后都是通过服务器端进行软复位重启动,本发明提出的远程升级技术在客户端升级完成后会自行判断升级成功然后自动软复位重启动。
附图说明
图1是本发明系统软件循环启动的流程图。
图2是本发明在bootcode程序中的逻辑流程图。
具体实施方式
下面结合附图来对本发明作进一步说明。
1、首先对嵌入式系统的存储区域进行划分,包括五个部分,分别为:bootcode区域、正常区域、故障区域、更新程序备份区域、标识区域,下面分别进行说明。
1)bootcode区域——该区域存放系统启动程序,系统一旦启动首先运行到这里,能够通过判断标识区域的数据来确认是否有最新的升级程序需要更新,能够把最新的升级程序从更新程序备份区域搬运到正常区域,能够判断出搬运后的正常区域的硬件是否损坏从而判断下一步启动的程序是正常区域程序还是故障区域程序。
2)正常区域——该区域存放系统正常功能程序,系统能够运行设备的正常功能,能够判断是否进入更新模式,能够保存最新的数据到更新程序备份区域,能够自动软复位启动到bootcode程序。
3)故障区域——该区域存放主动上传故障信息的故障程序,能够主动上传故障信息到服务器,能够运行设备的正常功能,能够判断是否进入更新模式,能够保存最新的数据到更新程序备份区域,能够自动软复位启动到bootcode程序。
4)更新程序备份区域——该区域用来存放最新的程序,能够保存前述正常区域或者故障区域中接收到的更新数据。
5)标识区域——该区域存放更新成功标志,在正常区域或者故障区域里,在自动软复位启动的时候会对这个区域进行操作,能够使得bootcode程序知道是否有数据需要更新。
2、系统运行过程中,若检测到更新指令,则接收服务器发送过来的升级数据以及所述升级数据的算法校验值b,当更新完成后系统软件复位重新启动进入bootcode区域;在bootcode区域里判断升级数据的对错情况确定运行正常程序还是运行故障程序。
如图1所示,系统的启动有两种方式,一种就是第一次上电的启动,还有一种就是系统运行过程中通过服务器发送复位命令的方式进行软件复位的重新启动方式,系统启动后运行bootcode区域的程序,然后在这里会判断是运行正常程序(正常程序存放在正常区域)还是运行故障程序(故障程序存放在故障区域)。如果运行正常程序那么系统会建立正常通道,然后执行设备的各项功能,进入正常工作状态;如果运行故障程序,系统会建立一个故障上传通道,上传三次故障信息后自动关闭,然后建立正常通道,设备自动进入正常工作状态。在上传故障信息的同时,远程服务器根据收到的故障信息推送故障问题信息给服务器维护人员,维护人员安排售后进行到现场维修,在这里的一个优点就是:即使出现故障并且在维修人员没到现场维修,设备依然可以正常运作,实现正常的功能,只是不是最新的程序而已。
系统在正常区域和故障区域的程序都可以运行设备的正常功能,但这两个区域有两个不同点,第一、正常区域的程序是会根据升级数据更新到最新的程序,能够一直运行最新的程序,故障区域的程序是从出厂后一直保持不变的。第二、故障区域的程序比正常区域的程序多一个主动上传故障信息的部分,所以一旦运行到故障区域内的故障程序就代表正常区域的flash硬件出现了问题,就会主动上传故障信息给服务器,由服务器推送故障信息进行售后服务。
在运行正常区域和故障区域的程序时都可以接收服务器发送的更新指令,并且正常区域和故障区域在接收到升级数据后都会把升级数据存放到更新程序备份区域、与升级数据对应的算法校验值b存放到标识区域。当判断服务器更新成功后会改变标识区域里的值来提示有程序更新,然后系统自动软件复位重启进入运行用户的bootcode区域程序,在bootcode区域程序里判断更新程序备份区域的升级数据情况来确定是运行正常区域的程序还是运行故障区域的程序。
如图2所示,在bootcode区域里选择程序运行有三种情况,当系统硬件初始化过后,会去判断标识区域的数据,如果标识区域的标识数据没有更新提示,那么就运行当前旧版本正常程序;如果发现有更新提示,就把更新程序备份区域的数据读出来做一个校验计算,校验算法包括如下步骤:
步骤A,读取更新程序备份区域的更新数据进行32位无符号的累加和;
步骤B,对步骤A算出来的值进行按位取反的操作;
步骤C,对步骤B求出来的数据和一个固定值求差值(固定值可以自行定义为任意一个32位的数据)。
上述步骤C算出的差值即为算法校验值a,将计算得到的算法校验值a和保存在标识区域中的算法校验值b(该值由服务器按照上述相同的校验算法计算发送过来)进行比对,如果算法校验值a和算法校验值b的比对结果不一致,代表更新程序备份区域的数据有错误,那么就会运行旧版本(当前版本)的正常程序;如果算法校验值a和算法校验值b的比对结果一致,那么就把更新程序备份区域的数据搬运到正常区域进行覆盖,覆盖完成后,按照上述步骤A~步骤C的算法对搬运到正常区域的数据进行校验计算,得到算法校验值c,将算法校验值c和上面提到的保存在标识区域中的算法校验值b做比对。如果比对结果一致,那么升级成功,直接运行正常程序(该正常程序即为搬运至正常区域的数据),如果比对结果不一致,那么就运行故障区域的程序,通过故障区域的程序上传故障信息给服务器,由服务器推送故障信息进行售后服务。
以上所述仅用于描述本发明的技术方案,并不用于限定本发明的保护范围,应当理解,在不违背本发明实质内容和原则的前提下,本领域人员所作任何修改、改进或等同替换等都将落入本发明的保护范围内。