发明内容
本发明要解决的技术问题是:提供一种单片机在线升级的方法及装置,解决现有技术难以实现Rabbit单片机在线升级的问题。
本发明的技术方案如下所述:
本发明提供了一种单片机在线升级的方法,包括:
升级服务器接收客户端发送的升级请求,并返回升级结果,所述升级请求是客户端根据用户的应用程序升级命令生成的;
客户端根据匹配条件对所述升级结果进行判断,将满足匹配条件的升级结果保存,并运行,以完成对所述单片机应用程序的在线升级。
进一步的,所述方法还包括:
系统上电时,客户端启动定时器检测用户是否具有应用程序升级命令,当在所述定时器超时前,检查用户输入命令中具有所述升级命令时,根据所述升级命令生成所述升级请求,并将所述升级请求发送给升级服务器,所述升级请求中包括用户输入的服务器IP地址和应用程序中需要升级的文件名;否则,退出升级流程。
进一步的,升级服务器接收客户端发送的升级请求,并返回升级结果,具体过程包括:
升级服务器接收所述客户端发送的升级请求,并根据所述升级请求升级指定文件,并将升级后的升级结果返回给所述客户端。
进一步的,客户端根据匹配条件对所述升级结果进行判断,将满足匹配条件的升级结果保存,具体过程包括:
客户端将接收到的所述升级结果对应的保存在应用程序的相应位置;
根据所述匹配条件对所述升级结果进行判断,当所述升级结果满足所述匹配条件时,提示用户立刻启动升级后的应用程序或者进行再次升级;当所述升级结果不满足所述匹配条件时,提示用户重新升级;所述匹配条件包括应用程序的长度值以及校验和。
进一步的,所述方法还包括:
当所述升级结果满足所述匹配条件时,将存储在FLASH中升级后的应用程序搬移到RAM中,根据单片机的地址映射倒换功能运行所述升级后的应用程序,以完成单片机应用程序的在线升级。
本发明还提供了一种单片机在线升级的装置,包括:
请求处理模块,用于升级服务器接收客户端发送的升级请求,并返回升级结果,所述升级请求是客户端根据用户的应用程序升级命令生成的;
结果处理模块,用于客户端根据匹配条件对所述请求处理模块返回的升级结果进行判断,将满足匹配条件的升级结果保存,并运行,以完成对所述单片机应用程序的在线升级。
优选的,所述装置还包括:
升级检测模块,用于在系统上电时,客户端启动定时器检测用户是否具有应用程序升级命令,当在所述定时器超时前,检查出用户输入命令中具有所述升级命令时,根据所述升级命令生成所述升级请求,并将所述升级请求发送给升级服务器,所述升级请求中包括用户输入的服务器IP地址和应用程序中需要升级的文件名;否则,退出升级流程。
优选的,所述请求处理模块具体包括:
请求接收单元,用于升级服务器接收所述客户端发送的升级请求;
程序升级单元,用于根据所述请求接收单元接收到的升级请求升级指定文件,并将升级后的升级结果返回给所述客户端。
优选的,所述结果处理模块具体包括:
结果存储单元,用于客户端将接收到的所述升级结果对应的保存在应用程序的相应位置;
判断执行单元,用于根据所述匹配条件对所述升级结果进行判断,当所述升级结果满足所述匹配条件时,提示用户立刻启动升级后的应用程序或者进行再次升级;当所述升级结果不满足所述匹配条件时,提示用户重新升级;所述匹配条件包括应用程序的长度值以及校验和。
优选的,所述结果处理模块具体还包括:
程序运行单元,用于当所述升级结果满足所述匹配条件时,将存储在FLASH中升级后的应用程序搬移到RAM中,根据单片机的地址映射倒换功能运行所述升级后的应用程序,以完成单片机应用程序的在线升级。
本发明的有益效果:
采用本发明所述的一种单片机在线升级的方法及装置,实现了现有Rabbit单片机的在线升级,并且可以实现单片机应用程序版本的维护、回退等功能,避免了现有技术中采用断电升级方式对正常业务的影响,避免了正常业务中断造成的损失,节约了成本,并且本发明所述的技术方案,操作简单,易于推广。
具体实施方式
为了进一步说明本发明所述的一种单片机在线升级的方法及装置,下面结合具体实施例进行详细说明。
现有技术中,由于Rabbit处理器能够提供串口升级功能,所以大多用户通过Rabbit单片机工作包直接将应用程序烧制到指定的并行FLASH中,但是采用这种升级方式通常为了避免串口烧坏,都要在升级之前切断电源,这样必定会影响正常业务的运行,给用户造成极大的损失。
在开发Rabbit单片机时,出于成本考虑,通常只采用单片RAM和单片并行FLASH,这样就没有足够多的空间来存放升级程序,针对这种情况,虽然可以通过外接存器的方式来增加内存空间,但内存空间中存储的应用程序不能被直接运行,所以实现单片机的在线升级仍然是个未解决的难题。如果通过覆写正在FLASH中运行的原程序的方式进行升级,由于系统负担过重,通常会导致设备死机,导致原程序的损坏,不能正常运行。
所以基于上述现有技术存在的问题,本发明实施例根据Rabbit单片机的配置特点和功能,提出了一种能够通过TFTP(Trivial File Transfer Protocol,简单文件传输协议)或FTP(File Transfer Protocol,文件传输协议)、WEBSERVER等方式,实现单片机在线升级的方法及装置,能够实现现有Rabbit单片机的在线升级。采用本发明的技术方案,避免了断电升级对正常业务的影响,节约了维护成本。
如图1所示,本发明实施例一种单片机在线升级的方法,技术方案可以包括:
步骤101:升级服务器接收客户端发送的升级请求,并返回升级结果,所述升级请求是客户端根据用户的应用程序升级命令生成的;
步骤201:客户端根据匹配条件对所述升级结果进行判断,将满足匹配条件的升级结果保存,并运行,以完成对所述单片机应用程序的在线升级。
可见,基于上述步骤,提出了一种针对Rabbit单片机在线升级的专用方法,通过匹配条件对升级结果的判断,保证了升级结果的完整性和准确性,避免了源程序的损坏,保证了单片机应用程序的正常升级和运行。
具体的,所述方法还可以包括:
系统上电时,客户端启动定时器检测用户是否具有应用程序升级命令,当在所述定时器超时前,检查出用户输入命令(telnet,Internet远程登陆服务的标准协议或命令行)中具有所述升级命令时中,根据所述升级命令生成所述升级请求,并将所述升级请求发送给升级服务器,所述升级请求中包括用户输入的服务器IP地址和应用程序中需要升级的文件名;否则,退出升级流程。
由上述步骤可见,客户端在升级之前对用户升级命令的检测过程,保证了升级过程的及时性和准确性。
具体的,步骤101的具体过程可以包括:
升级服务器接收所述客户端发送的升级请求,并根据所述升级请求升级指定文件,并将升级后的升级结果返回给所述客户端。
具体的,步骤201的具体过程可以包括:
客户端将接收到的所述升级结果对应的保存在应用程序的相应位置;
根据所述匹配条件对所述升级结果进行判断,当所述升级结果满足所述匹配条件时,提示用户立刻启动升级后的应用程序或者进行再次升级;当所述升级结果不满足所述匹配条件时,提示用户重新升级;所述匹配条件包括应用程序的长度值以及校验和。
具体的,步骤201的具体过程还可以包括:
当所述升级结果满足所述匹配条件时,将存储在FLASH中升级后的应用程序搬移到RAM中,根据单片机的地址映射倒换功能运行所述升级后的应用程序,以完成单片机应用程序的在线升级。
基于上述如图1所示的方法,本发明实施例还提出一种单片机在线升级的装置,技术方案可以包括:
请求处理模块11,用于升级服务器接收客户端发送的升级请求,并返回升级结果,所述升级请求是客户端根据用户的应用程序升级命令生成的;
结果处理模块22,用于客户端根据匹配条件对所述请求处理模块返回的升级结果进行判断,将满足匹配条件的升级结果保存,并运行,以完成对所述单片机应用程序的在线升级。
可见,基于上述步骤,提出了一种针对Rabbit单片机在线升级的专用装置,通过结果处理模块22中匹配条件对升级结果的判断,保证了升级结果的完整性和准确性,避免了源程序的损坏,保证了单片机应用程序的正常升级和运行。
特别的,所述装置还可以包括:
升级检测模块,用于在系统上电时,客户端启动定时器检测用户是否具有应用程序升级命令,当在所述定时器超时前,检查出用户输入命令(telnet,Internet远程登陆服务的标准协议或命令行)中具有所述升级命令时,根据所述升级命令生成所述升级请求,并将所述升级请求发送给升级服务器,所述升级请求中包括用户输入的服务器IP地址和应用程序中需要升级的文件名;否则,退出升级流程。
特别的,所述请求处理模块具体可以包括:
请求接收单元,用于升级服务器接收所述客户端发送的升级请求;
程序升级单元,用于根据所述请求接收单元接收到的升级请求升级指定文件,并将升级后的升级结果返回给所述客户端。
特别的,所述结果处理模块具体可以包括:
结果存储单元,用于客户端将接收到的所述升级结果对应的保存在应用程序的相应位置;
判断执行单元,用于根据所述匹配条件对所述升级结果进行判断,当所述升级结果满足所述匹配条件时,提示用户立刻启动升级后的应用程序或者进行再次升级;当所述升级结果不满足所述匹配条件时,提示用户重新升级;所述匹配条件包括应用程序的长度值以及校验和。
特别的,所述结果处理模块具体还可以包括:
程序运行单元,用于当所述升级结果满足所述匹配条件时,将存储在FLASH中升级后的应用程序搬移到RAM中,根据单片机的地址映射倒换功能运行所述升级后的应用程序,以完成单片机应用程序的在线升级。
鉴于本发明实施例所述的装置是基于上述图1所述的方法实施例获得的,其中具体涉及的技术方案与图1所示的方法实施例相同,再次不作赘述。
为了更加清楚的说明如上所述一种单片机在线升级的方法的工作原理,下面结合实施例进一步说明,但下述实施例一只是本发明的最佳实施方式,所有关于本发明所述技术方案的变形和组合,均属于本发明的保护范围。
实施例一:
结合Rabbit单片机程序的编译过程及运行过程,下面对本发明实施例所述一种单片机在线升级的方法进行详细说明。
为了实现客户端在系统上电时,检测用户是否具有应用程序升级命令以及在应用程序升级完毕后,实现对升级结果的正确性检测,在程序编写阶段可以通过增加实现这些功能的源程序,具体过程如下:
(1)编写Rabbit单片机应用程序的bootloader.bin(单片机应用程序的启动程序),该程序功能简单,能够提供基本的TFTP或FTP升级、版本检测功能,该程序被编译在并行FLASH中运行,该程序提供基本的TFTP客户端功能、telnet或命令行接口,能够实现单片机客户端在系统上电时,检测用户是否具有应用程序的升级命令。
(2)编写Rabbit单片机的正式应用程序sv.bin,该程序在RAM调试模式下运行,包含完整的用户所需要的功能。由于采用RAM模式编译的程序,只能在RAM里运行,所以sv.bin虽然被保存在FLASH,但不能在FLASH中运行,最终sv.bin需要被复制到在RAM中运行。
(3)将编写的Rabbit单片机应用程序的bootloader.bin和正式应用程序sv.bin合并生成all.bin,其中,将bootloader.bin放在合并文件all.bin的前端,Sv.bin放到bootloader后面某个指定的位置,bootloader.bin与Sv.bin之间需要空出固定的一段空间不使用,理由是用来保证all.bin中sv.bin总是从某个固定地址开始,这样在搬移和复制程序时,就可以方便的找到起始点;具体过程如图3中的结构;
在sv.bin的前端增设head字段(如图3中所示的结构),所述head字段中包含sv.bin的4个字节的长度值以及4个字节的CRC32校验和,用于在启动升级程序后,客户端根据head字段中的内容判断接收到的升级结果是否准确和完整,避免由于升级结果不完整导致源程序的损坏。所述匹配条件是指升级服务器提供给用户的升级文件中包含的head字段,所述head字段包括sv.bin的长度值和CRC32校验和。升级时,客户端接收服务器端发送的升级文件,同时会获得升级文件的长度值,在接收完毕后,根据接收到升级文件的长度值计算升级文件的CRC校验和,根据计算出的升级文件长度值和校验和与所述升级服务器发送的升级文件中head字段进行比较、以判断接收到的升级文件是否完整和准确。
经过如上所述的配置过程,待单片机系统上电后,就可以实现本发明所述的技术方案,具体流程结合图4所示。
步骤100:系统上电时,客户端启动定时器检测用户是否具有应用程序升级命令,当在所述定时器超时前,检查出telnet(Internet远程登陆服务的标准协议)或命令行中具有所述升级命令时,要求用户输入服务器IP地址和升级文件名,客户端根据所述升级命令生成所述升级请求,并将所述升级请求发送给升级服务器,所述升级请求中包括用户输入的服务器IP地址和应用程序中需要升级的文件名,执行步骤200;否则,在定时器超时后进入步骤300;
步骤200:升级服务器接收客户端发送的升级请求,并根据所述升级请求升级指定文件,返回升级结果,所述升级请求是客户端根据用户的应用程序升级命令生成的;客户端将接收到的升级结果保存到sv.bin开始的地址(包括head字段);接收完成后,根据接收的head字段中的长度值和CRC校验和,检测sv.bin的CRC32校验是否正确,如果不正确,提示用户,要求重新升级;如果正确,提示用户是立刻启动新程序还是进行再次升级,如果选择再次升级,将重复步骤200,否则进入步骤400;
步骤300:检测sv.bin的完整性,检测失败时提示给用户,要求用户重新升级,检测成功后进入步骤400;
步骤400:将FLASH中的sv.bin(不包括head字段)搬移到RAM中0地址开始的位置;执行Rabbit单片机提供的FLASH、RAM地址映射倒换指令。由于通常Rabbit单片机在FLASH中运行时,低512K是FLASH应用程序,高512K是RAM,所以在采用了地址映射倒换指令后,低512K变成了RAM,然后执行跳转指令后,从RAM的0地址开始运行升级后的应用程序sv.bin。
FLASH、RAM地址映射倒换指令的原理图可以参见图5和图6。
特别的说,如图7所示的流程图,在单片机应用程序成功升级后,可以不立刻运行升级后的新应用程序,因为很多情况下用户更希望能在设备业务不繁忙的时间段(例如:深夜)使新程序生效。通常升级成功后的新应用程序只有在断电后才会被运行生效,所以在设备正常运行的情况下业务,不必中断当前业务使升级后的应用程序立即生效。
本发明实施例所述单片机在线升级的方法,当sv.bin程序较小的时,可以在单片FLASH上实现多份sv.bin程序并存,从而实现版本的回退和管理功能,具体参见图8所示:在FLASH中增加MBR(Master Boot Record,主引导记录)字段,该字段用来存储当前sv.bin版本的使用情况,例如,当前使用sv1作为正式运行的应用程序时,如果需要升级,就将新的升级文件写到sv2处,同时在MBR处标记下回启动时将sv2作为正式程序启动;扩展方式的优点是,增加了应用程序的备份,防止在升级过程中出现问题,造成对原有应用程序的破坏。因为上述方法和单sv.bin程序技术方案基本相同,不再进行详细的介绍。
采用本发明实施例所述的一种单片机在线升级的方法及装置,解决了目前现有技术中采用断电升级导致单片机正常业务终端的问题,节约了设备的维护成本,提高了升级效率,并且通过对升级结果的检验,保证了单片机应用程序的准确性和可靠性,避免了由于升级失败导致源程序损坏的情况。
以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求书的保护范围为准。