本发明涉及电子信息技术领域。
背景技术
随着计算机信息技术的不断发展,嵌入式系统在社会的各个领域都有广泛应用。由于用户的要求越来越高,嵌入式设备的功能也变得越来越强大,软件越来越复杂,固件版本也在不断的更新。
而固件升级一般的方法的程序运行区域分为代码区和boot区。设备复位后通过启动选择项进入boot区。boot区负责擦除代码区的原固件,接收新固件数据并写到代码区。固件更新完成后重新启动设备,然后通过启动选项进入代码区,运行新版本固件。
目前的技术主要存在如下问题:
1.上述方法造成设备在更新程序时,无法运行设备功能程序。
2.boot区代码固定,只能使用既定的方式下载升级包,无法进行空中升级。
3.固件更新必须是一次性完成,中途出现接收或者写入失败,只能重新更新一次。
4.在更新时,原固件已擦除,若更新未成功,设备无法运行。
技术实现要素:
为了解决上述问题,本发明提供了一种固件升级方法、设备和存储介质,在设备复位后,直接进入启动区进行升级确认,再自动进入代码区运行固件程序,在下载升级包的同时运行原固件程序。
本发明涉及的设备的固件升级方法,包括以下步骤:使设备进入启动区,读取升级信息区的升级信息;根据所述升级信息判断有无下载完成的升级数据包,若无,跳转至代码区运行原有固件程序,并开启设备的无线数据收发端口,接收并保存升级数据包至升级数据区;根据所述接收的升级数据包,更新升级信息区的升级信息;判断所述升级数据包是否接收完成,若是,使设备进入启动区,读取所述更新后的升级信息区的升级信息;擦除所述代码区原有固件程序,将所述升级数据区的升级数据包复制至代码区,运行升级后的固件程序;其中,所述启动区用于程序引导,所述代码区用于存储固件程序,所述升级数据区用于存储升级数据包,所述升级信息区用于保存升级数据包的升级信息。
优选地,接收升级数据包至升级数据区,包括接收由所述升级数据包分割成的若干个长度相同的数据块。
优选地,升级信息包括升级控制数据和数据块下载表。
优选地,升级控制数据包括升级版本号、数据块总数量、数据块序号和控制标识。
优选地,每个数据块对应一个数据块序号,并映射到所述数据块下载表中。
优选地,根据数据块序号在升级数据区的相应位置保存数据块,并在数据块下载表中的映射位置记录下该序号数据块已下载。
优选地,控制标识包括下载未完成、下载已完成和程序已更新。
优选地,根据升级信息判断有无下载完成的升级数据包,包括根据升级信息判断控制标识是否为下载未完成,若是,则读取固件升级数据包的升级版本号、数据块总数量和数据块序号。
优选地,本发明的固件升级方法还包括判断读取的升级版本是否为新版本且从未下载,若是,则初始化升级控制数据和数据块下载表,并根据数据块序号在升级数据区的相应位置保存数据块。
优选地,当根据所述升级信息判断出所述控制标识为下载已完成的升级数据包时,擦除所述代码区原有固件程序,将所述升级数据包复制至代码区。
优选地,当根据所述升级信息判断出所述控制标识为程序已更新时,直接进入代码区运行固件程序。
本发明还提供一种设备,该设备包括:无线数据收发端口;处理器;固件和程序存储器;当所述无线数据收发端口接收到一个无线升级数据包时,处理器执行所述程序存储器上的固件,实现如上所述方法的步骤。
本发明还提供一种用于具有无线数据收发端口的设备的存储介质,其上存储有固件程序,当所述无线数据收发端口接收到一个无线升级数据包时,执行所述存储介质上的固件程序,实现如上所述方法的步骤。
本发明的固件升级方法、设备和存储介质,能够实现设备的无线升级,设备复位后,直接进入启动区进行升级确认,再自动进入代码区运行固件程序,不需要启动选项来选择进入启动区或者代码区,并可同时运行下载升级包和原固件程序。采用分包和建表的方式,可以让本次升级包下载接着上次升级包下载中断的地方继续下载。由于每个升级包可单独下载,因此可以不用按照序号的前后顺序下载升级包,实现下载包‘随机保存’的功能。
附图说明
下面参考附图描述本发明的优选实施例,附图为了说明本发明的优选实施例而不是为了限制本发明的目的。附图中,
图1为本发明实施例的固件程序存储器结构示意图;
图2为本发明一个实施例的固件升级流程图。
具体实施方式
本发明的具体实施方式用来具体说明本发明,但并不局限于该具体实施方式。
图1为本发明实施例的固件程序存储器结构示意图。
如图1所示,固件的程序存储器分为启动区、代码区、升级数据区和升级信息区。启动区是引导程序区,用于程序引导,并可以读取升级信息区是否有升级信息。代码区是应用程序区,其存储并运行固件程序。升级数据区用于接收并存储升级数据包。升级信息区存储升级数据包的各种升级信息。
由于设备使用无线通信,其具有无线数据收发端口,而无线通信数据包有长度限制,因此升级数据区接收的固件升级数据包被分为若干个长度相同的数据块。
升级信息区中的升级信息包括升级控制数据和数据块下载表。升级控制数据包括升级版本号、数据块总数量、数据块序号和控制标识。控制标识包括:下载未完成、下载已完成和程序已更新。
升级数据区的每个数据块有唯一的序列号,并映射在数据块下载表中,数据块下载表中的每个单元对应一个数据块。
图2为本发明一个具体实施例的固件升级流程图。
如图2所示,设备的固件升级方法包括以下步骤:
步骤s1,设备复位后,进入启动区。
步骤s2,启动区内的进程读取升级信息区的内容,检测升级信息。
步骤s3,当升级数据包接收未完成时,跳转至代码区运行固件程序。
当检测到升级信息区内的控制标识不为“下载已完成”,即控制标识为“下载未完成”或“程序已更新”时,此时,表面升级数据包接收未完成,或者程序已更新完毕,固件不需要更新升级,则直接跳转到代码区运行固件功能程序。
步骤s4,接收并保存升级数据包至升级数据区。
设备首先开启无线数据收发端口,然后进入无线数据接收模式。当设备接收到一个无线数据包时,首先解析数据包。接收到的数据包存放在升级数据区,再读取数据包的关键字段,根据字段的定义处理该数据包。如果数据包为一般的功能性数据包,则进入功能性数据包处理流程。如果数据包为固件升级数据包时,则读取升级信息区中对应的升级版本号、数据块总数量和数据块序号。如果读取的升级版本号为新版本,且该版本从未下载更新过,则初始化升级信息区的升级控制数据集数据块下载表,将该升级数据包分为若干个数据块。然后根据数据块序号在升级数据区的相应位置保存数据块。
步骤s5,更新升级信息区。
将数据块保存在升级数据区的相应位置后,更新升级信息区,在数据块下载表中的映射位置记录下该序号数据块已下载。
步骤s6,检测数据升级包下载是否完成。
当数据块下载表中所有的位置都已记录时,表示升级数据包的所有数据块都已下载完成,此时,更新升级信息区,改写升级控制数据,将控制标识改写为“下载已完成”。如果下载未完成,则返回至步骤s4继续接收和保存升级数据包。
步骤s7,当升级数据包下载完成后,重新启动设备。
重启设备后,重新开始步骤s1,设备复位,进入启动区。然后进入步骤s2,启动区内的进程读取升级信息区的内容,检测升级信息。此时升级数据包已下载完成,进入步骤s8。
步骤s8,复制升级数据区的升级数据包至代码区。
升级数据包下载完成后,固件需要更新时,擦除整个代码区的数据,再把升级数据区的升级数据复制到代码区。
步骤s9,更新升级信息区。
升级数据复制至代码区后,改写控制标识为“程序已更新”,最后跳转至代码区,运行新版本程序。
本实施例中,当根据所述升级信息判断出有所述控制标识为下载未完成的升级数据包时,读取固件升级数据包的升级版本号、数据块总数量和数据块序号,当读取的升级版本从未下载,初始化升级控制数据和数据块下载表,根据数据块序号在升级数据区的相应位置保存数据块。
当根据所述升级信息判断出有所述控制标识为下载已完成的升级数据包时,擦除所述代码区原有固件程序,将所述升级数据包复制至代码区。
当根据所述升级信息判断出有所述控制标识为程序已更新时,直接进入代码区运行固件程序。
本发明还提供一种设备,包括:无线数据收发端口、处理器、固件和程序存储器,当所述无线数据收发端口接收到一个无线升级数据包时,处理器执行所述程序存储器上的固件,能够实现上述方法的步骤。
本发明提供的设备,主要针对无线广播通信的设备。分包处理和无序处理大文件升级数据,可以解决使用无线通信进行升级时的数据传输不稳定的问题。
本发明涉及的设备的一个具体实施例为快递物流行业的快件分拣设备。
本发明并不仅限于此,对于其他需要固件升级的具有无线数据收发端口的设备均适用于本发明。
本发明还涉及一种可用于具无线数据收发端口的设备的存储介质,其上存储有固件程序,当所述无线数据收发端口接收到一个无线升级数据包时,执行所述存储介质上的固件程序,实现上述方法的步骤。
以上实施例能够实现设备的空中无线升级,并可同时运行下载升级数据包和固件一般性功能流程。
采用分包和建表的方式,可以让本次升级包下载接着上次升级包下载中断的地方继续下载。由于每个升级包可单独下载,因此可以不用按照序号的前后顺序下载升级包,实现下载包‘随机保存’的功能。
以上实施例为本发明的优选实施例,并不用以限定本发明的目的,凡在本发明的精神和原则之内进行的修改和替换,均在本发明的保护之内。