一种车辆的软件更新方法和装置
技术领域
本发明涉及电子技术领域,特别涉及一种车辆的软件更新方法和装置。
背景技术
随着电子技术的发展,现在车辆的ECU(Electronic Control Unit,电子控制单元)中的软件越来越多,例如,ECU中的软件包括启动加载程序,为了给用户带来更好的用户体验,车辆需要每隔一段时间对ECU中的软件进行更新,以便使ECU中的软件更加完善。
现有技术中车辆的软件更新方法可以为:在车辆的ECU上设置一个串行通信端口,通过串行通信端口将ECU和上位机进行连接;ECU通过串行通信端口接收上位机发送的最新的启动加载程序,并将ECU中的启动加载程序更新为最新的启动加载程序。
在实现本发明的过程中,发明人发现现有技术至少存在以下问题:
需要在ECU上设置串行通信端口,增加了硬件设计的复杂性;并且,串行通信端口的通信距离太短,抗干扰能力太差,在车辆复杂的电磁环境下很容易导致更新失败。
发明内容
为了使解决现有技术的问题,本发明提供了一车辆的软件更新方法和装置。技术方案如下:
一方面,本发明提供了一种车辆的软件更新方法,所述方法包括:
判断车辆的电子控制单元ECU中的启动加载程序是否需要更新;
如果需要更新,通过所述车辆的控制器局域网CAN总线从上位机中获取最新的启动加载程序,所述ECU中的启动加载程序包括第一启动加载程序和第二启动加载程序,且所述第一启动加载程序和第二启动加载程序相同;
设置所述第一启动加载程序处于工作状态,将所述第二启动加载程序更新为所述最新的启动加载程序;
在所述第二启动加载程序更新完成时,设置所述第二启动加载程序处于工作状态,将所述第一启动加载程序更新为所述最新的启动加载程序。
优选的,所述判断车辆的电子控制单元ECU中的启动加载程序是否需要更新,包括:
判断指定存储单元中是否存在启动加载程序的更新标识;
如果存在,则确定所述车辆的电子控制单元ECU中的启动加载程序需要更新;
如果不存在,则确定所述车辆的电子控制单元ECU中的启动加载程序不需要更新。
优选的,所述方法还包括:
通过所述车辆的CAN总线接收所述上位机发送的更新命令,所述更新命令携带所述启动加载程序的程序标识;
为所述启动加载程序分配更新标识;
将所述启动加载程序的更新标识存储在指定存储单元中。
优选的,所述方法还包括:
判断所述车辆的ECU中的应用程序是否需要更新;
如果需要更新,通过所述车辆的CAN总线从所述上位机中获取最新的应用程序;
将所述ECU中的应用程序更新为所述最新的应用程序。
优选的,所述判断所述车辆的ECU中的应用程序是否需要更新,包括:
获取所述车辆的ECU中应用程序的存储地址;
判断所述存储地址对应的存储空间中是否存在完整的应用程序;
如果所述存储地址对应的存储空间中不存在完整的应用程序,则确定所述车辆的ECU中的应用程序需要更新;
如果所述存储地址对应的存储空间中存在完整的应用程序,则确定所述车辆的ECU中的应用程序不需要更新。
另一方面,本发明提供了一种车辆的软件更新装置,所述装置包括:
第一判断模块,用于判断车辆的电子控制单元ECU中的启动加载程序是否需要更新;
第一获取模块,用于如果需要更新,通过所述车辆的控制器局域网CAN总线从上位机中获取最新的启动加载程序,所述ECU中的启动加载程序包括第一启动加载程序和第二启动加载程序,且所述第一启动加载程序和第二启动加载程序相同;
第一更新模块,用于设置所述第一启动加载程序处于工作状态,将所述第二启动加载程序更新为所述最新的启动加载程序;
第二更新模块,用于在所述第二启动加载程序更新完成时,设置所述第二启动加载程序处于工作状态,将所述第一启动加载程序更新为所述最新的启动加载程序。
优选的,所述第一判断模块,包括:
第一判断单元,用于判断指定存储单元中是否存在启动加载程序的更新标识;
第一确定单元,用于如果存在,则确定所述车辆的电子控制单元ECU中的启动加载程序需要更新;
第二确定单元,用于如果不存在,则确定所述车辆的电子控制单元ECU中的启动加载程序不需要更新。
优选的,所述装置还包括:
接收模块,用于通过所述车辆的CAN总线接收所述上位机发送的更新命令,所述更新命令携带所述启动加载程序的程序标识;
分配模块,用于为所述启动加载程序分配更新标识;
存储模块,用于将所述启动加载程序的更新标识存储在指定存储单元中。
优选的,所述装置还包括:
第二判断模块,用于判断所述车辆的ECU中的应用程序是否需要更新;
第二获取模块,用于如果需要更新,通过所述车辆的CAN总线从所述上位机中获取最新的应用程序;
第三更新模块,用于将所述ECU中的应用程序更新为所述最新的应用程序。
优选的,所述第二判断模块,包括:
获取单元,用于获取所述车辆的ECU中应用程序的存储地址;
第二判断单元,用于判断所述存储地址对应的存储空间中是否存在完整的应用程序;
第三确定单元,用于如果所述存储地址对应的存储空间中不存在完整的应用程序,则确定所述车辆的ECU中的应用程序需要更新;
第四确定单元,用于如果所述存储地址对应的存储空间中存在完整的应用程序,则确定所述车辆的ECU中的应用程序不需要更新。
在本发明中,通过车辆的CAN总线从上位机中获取最新的启动加载程序,从而不需要在ECU上设置串行通信端口,减少了硬件设计的复杂性;并且,CAN总线通信距离长,抗干扰能力强,从而提高了车辆软件的更新成功率;并且,ECU中的启动加载程序包括第一启动加载程序和第二启动加载程序,在更新ECU中的启动加载程序时,设置第一启动加载程序处于工作状态,更新第二启动加载程序;在第二启动程序更新完成时,设置第二启动加载程序处于工作状态,更新第一启动加载程序,从而避免了在更新启动加载程序断电无法运行启动加载程序的问题。
附图说明
图1是本发明实施例1提供的一种车辆的软件更新方法流程图;
图2是本发明实施例2提供的一种车辆的软件更新方法流程图;
图3是本发明实施例3提供的一种车辆的软件更新装置结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。
实施例1
本发明实施例提供了一种车辆的软件更新方法,该方法的执行主体可以为ECU,参见图1,其中,该方法包括:
步骤101:判断车辆的电子控制单元ECU中的启动加载程序是否需要更新;
步骤102:如果需要更新,通过车辆的控制器局域网CAN总线从上位机中获取最新的启动加载程序,ECU中的启动加载程序包括第一启动加载程序和第二启动加载程序,且第一启动加载程序和第二启动加载程序相同;
步骤103:设置第一启动加载程序处于工作状态,将第二启动加载程序更新为最新的启动加载程序;
步骤104:在第二启动加载程序更新完成时,设置第二启动加载程序处于工作状态,将第一启动加载程序更新为最新的启动加载程序。
优选的,判断车辆的电子控制单元ECU中的启动加载程序是否需要更新,包括:
判断指定存储单元中是否存在启动加载程序的更新标识;
如果存在,则确定车辆的电子控制单元ECU中的启动加载程序需要更新;
如果不存在,则确定车辆的电子控制单元ECU中的启动加载程序不需要更新。
优选的,该方法还包括:
通过车辆的CAN总线接收上位机发送的更新命令,更新命令携带启动加载程序的程序标识;
为启动加载程序分配更新标识;
将启动加载程序的更新标识存储在指定存储单元中。
优选的,该方法还包括:
判断车辆的ECU中的应用程序是否需要更新;
如果需要更新,通过车辆的CAN总线从上位机中获取最新的应用程序;
将ECU中的应用程序更新为最新的应用程序。
优选的,判断车辆的ECU中的应用程序是否需要更新,包括:
获取车辆的ECU中应用程序的存储地址;
判断存储地址对应的存储空间中是否存在完整的应用程序;
如果存储地址对应的存储空间中不存在完整的应用程序,则确定车辆的ECU中的应用程序需要更新;
如果存储地址对应的存储空间中存在完整的应用程序,则确定车辆的ECU中的应用程序不需要更新。
在本发明中,通过车辆的CAN总线从上位机中获取最新的启动加载程序,从而不需要在ECU上设置串行通信端口,减少了硬件设计的复杂性;并且,CAN总线通信距离长,抗干扰能力强,从而提高了车辆软件的更新成功率;并且,ECU中的启动加载程序包括第一启动加载程序和第二启动加载程序,在更新ECU中的启动加载程序时,设置第一启动加载程序处于工作状态,更新第二启动加载程序;在第二启动程序更新完成时,设置第二启动加载程序处于工作状态,更新第一启动加载程序,从而避免了在更新启动加载程序断电无法运行启动加载程序的问题。
实施例2
本发明实施例提供了一种车辆的软件更新方法,该方法的执行主体可以为ECU,其中,车辆的软件包括启动加载程序和应用程序。并且,启动加载程序和应用程序存储在车辆的ECU中。当车辆的ECU中的启动加载程序需要更新时,在指定存储单元中存储启动加载程序的更新标识。参见图2,其中,该方法包括:
步骤201:判断指定存储单元中是否存在启动加载程序的更新标识,如果存在,执行步骤202;如果不存在,结束;
当车辆的启动加载程序需要更新时,上位机通过车辆的CAN(ControllerArea Network,控制器局域网)总线发送更新命令给车辆的ECU,该更新命令携带启动加载程序的程序标识;ECU通过CAN总线接收上位机发送的更新命令;根据该更新命令为启动加载程序分配更新标识;将启动加载程序的更新标识存储在指定存储单元中。
启动加载程序的程序标识可以为启动加载程序的名称等;指定存储单元可以为ECU的Flash(闪存)单元等。
在步骤201中判断指定存储单元中是否存在启动加载程序的更新标识;如果存在,执行步骤202;如果不存在,则确定车辆的ECU中的启动加载程序不需要更新,结束。
需要说明的是,在本步骤之前,初始化车辆的各个模块,如CAN总线等。
步骤202:如果存在,则确定车辆的ECU中的启动加载程序需要更新;
如果指定存储单元中存在启动加载程序的程序标识,则上位机已经发过更新命令给ECU,也即确定车辆的ECU中的启动加载程序需要更新。
步骤203:通过车辆的CAN总线从上位机中获取最新的启动加载程序,ECU中的启动加载程序包括第一启动加载程序和第二启动加载程序,且第一启动加载程序和第二启动加载程序相同;
其中,第一启动加载程序和第二启动加载程序相同,但第一启动加载程序和第二启动加载程序的存储地址不同,从而实现了启动加载程序的备份,避免了启动加载程序运行出错时,ECU无法运行的问题。并且,有效的避免了启动加载程序更新失败时导致打开ECU重新写入启动加载程序的问题。
其中,通过车辆的CAN总线从上位机中获取最新的启动加载程序可以通过以下步骤(1)至(3)实现,包括:
(1):ECU通过车辆的CAN总线发送第一更新请求给上位机,该第一更新请求携带启动加载程序的程序标识;
具体地,如果确定出ECU中的启动加载程序需要更新,获取启动加载程序的程序标识,将启动加载程序的程序标识添加到第一更新请求中,并通过CAN总线发送第一更新请求给上位机,以请求获取最新的启动加载程序。
(2):上位机接收ECU通过车辆的CAN总线发送的第一更新请求,根据启动加载程序的程序标识获取最新的启动加载程序,并通过车辆的CAN总线发送最新的启动加载程序给ECU;
具体地,上位机接收ECU通过CAN总线发送的第一更新请求,从第一更新请求中获取启动加载程序的程序标识,根据启动加载程序的程序标识,从程序标识和最新的程序中获取最新的启动加载程序,并通过CAN总线发送最新的启动加载程序给ECU。
需要说明的是,上位机中存储有一个程序列表,该程序列表中存储有程序标识和程序的对应关系,当上位机接收到最新的启动加载程序时,根据启动加载程序的程序标识,从程序列表中获取该启动加载程序的程序标识对应的启动加载程序,并将该获取的启动加载程序替换为最新的启动加载程序,从而实现程序列表中存储的启动加载程序为最新的启动加载程序。
(3):ECU接收上位机通过CAN总线发送的最新的启动加载程序。
步骤204:设置第一启动加载程序处于工作状态,将第二启动加载程序更新为最新的启动加载程序;
步骤204具体可以通过以下步骤(1)至(3)实现,包括:
(1):ECU设置第一启动加载程序处于工作状态;
ECU设置启动加载程序的工作标识位为1,也即设置第一启动加载程序处于工作状态。
进一步地,当ECU中的引导程序运行时,读取启动加载程序的工作标识位的值,根据启动加载程序的工作标识位的值加载启动加载程序。也即启动加载程序的工作标识位为1,则获取第一启动加载程序的存储地址,并加载第一启动加载程序的存储地址对应的存储空间中的启动加载程序。
需要说明的是,引导程序在ECU出厂时写入引导区,由于引导区存储地址固定,所以无需对引导程序进行更新。
(2):根据第二启动加载程序的程序标识获取第二启动加载程序的存储地址;
在将第二启动加载程序写入车辆的ECU时,在车辆的ECU中为该第二启动加载程序分配一个存储空间,获取该存储空间的存储地址,将第二启动加载程序的程序标识和第二启动加载程序的存储地址存储在程序标识和存储地址的对应关系中。
相应的,步骤(2)可以为:根据第二启动加载程序的程序标识,从程序标识和存储地址的对应关系中获取第二启动加载程序的存储地址。
(3):将第二启动加载程序的存储地址对应的存储空间中的启动加载程序删除,并将最新的启动加载程序写入第二启动加载程序的存储地址对应的存储空间中。
需要说明的是,由于ECU的存储空间很多,而启动加载程序本身占用存储空间很少,因此设置ECU中包括两个启动加载程序对ECU的存储空间的开销可以忽略。
步骤205:在第二启动加载程序更新完成时,设置第二启动加载程序处于工作状态,将第一启动加载程序更新为最新的启动加载程序;
步骤205具体可以通过以下步骤(1)至(3)实现,包括:
(1):在第二启动加载程序更新完成时,ECU设置第二启动加载程序处于工作状态;
在第二启动加载程序更新完成时,ECU设置启动加载程序的工作标识位为2,也即设置第二启动加载程序处于工作状态。
进一步地,当ECU中的引导程序运行时,读取启动加载程序的工作标识位的值,根据启动加载程序的工作标识位的值加载启动加载程序。也即启动加载程序的工作标识位为2,则获取第二启动加载程序的存储地址,并加载第二启动加载程序的存储地址对应的存储空间中的启动加载程序。
(2):根据第一启动加载程序的程序标识获取第一启动加载程序的存储地址;
在将第一启动加载程序写入车辆的ECU时,在车辆的ECU中为该第一启动加载程序分配一个存储空间,获取该存储空间的存储地址,将第一启动加载程序的程序标识和第一启动加载程序的存储地址存储在程序标识和存储地址的对应关系中。
相应的,步骤(2)可以为:根据第一启动加载程序的程序标识,从程序标识和存储地址的对应关系中获取第一启动加载程序的存储地址。
(3):将第一启动加载程序的存储地址对应的存储空间中的启动加载程序删除,并将最新的启动加载程序写入第一启动加载程序的存储地址对应的存储空间中。
进一步地,当第一启动加载程序和第二启动加载程序都更新完成时,重新启动第一启动加载程序和/或第二启动加载程序。
步骤206:判断车辆的ECU中的应用程序是否需要更新,如果需要更新,执行步骤207;如果不需要更新,结束;
其中,步骤206可以通过以下步骤(1)至(4)实现,包括:
(1):获取车辆的ECU中应用程序的存储地址;
在将应用程序写入车辆的ECU时,在车辆的ECU中为该应用程序分配一个存储空间,获取该存储空间的存储地址,将应用程序的程序标识和应用程序的存储地址存储在程序标识和存储地址的对应关系中。
相应的,步骤(1)可以为:根据车辆的ECU中应用程序的程序标识,从程序标识和存储地址的对应关系中获取应用程序的存储地址。
(2):判断存储地址对应的存储空间中是否存在完整的应用程序,如果不存在,执行步骤(3),如果存在,执行步骤(4);
具体地,判断存储地址对应的存储空间中是否存在应用程序,如果不存在应用程序,执行步骤(3);如果存在应用程序,判断存在的应用程序是否为完整的应用程序,如果是完整的应用程序,执行步骤(4);如果存在的应用程序不是完整的应用程序执行步骤(3)。
判断存在的应用程序是否为完整的应用程序的步骤可以为:判断是否存在应用程序的完整性标识;如果存在,则确定存在的应用程序是完整的应用程序;如果不存在,则确定存在的应用程序不是完整的应用程序。
(3):如果存储地址对应的存储空间中不存在完整的应用程序,则确定车辆的ECU中的应用程序需要更新;
具体地,如果存储地址对应的存储空间中不存在应用程序,或者存在应用程序但不是完整的应用程序,则确定车辆的ECU中的应用程序需要更新。
(4):如果存储地址对应的存储空间中存在完整的应用程序,则确定车辆的ECU中的应用程序不需要更新。
具体地,如果存储地址对应的存储空间中存在应用程序且该应用程序是完整的应用程序,则确定车辆的ECU中的应用程序不需要更新。
步骤207:如果需要更新,通过车辆的CAN总线从上位机中获取最新的应用程序;
步骤207可以通过以下步骤(1)至(3)实现,包括:
(1):ECU通过车辆的CAN总线发送第二更新请求给上位机,该第二更新请求携带应用程序的程序标识;
具体地,如果确定出ECU中的应用程序需要更新时,获取应用程序的程序标识,将应用程序的程序标识添加到第二更新请求中,并通过CAN总线发送第二更新请求给上位机。
应用程序的程序标识可以为应用程序的名称等。
(2):上位机接收ECU通过CAN总线发送的第二更新请求,根据应用程序的程序标识获取最新的应用程序,并通过CAN总线发送最新的应用程序给ECU;
具体地,上位机接收ECU通过CAN总线发送的第二更新请求,从第二更新请求中获取应用程序的程序标识,根据应用程序的程序标识,从程序标识和最新的程序中获取最新的应用程序,并通过CAN总线发送最新的应用程序给ECU。
需要说明的是,上位机中存储有一个程序列表,该程序列表中存储有程序标识和程序的对应关系,当上位机接收到最新的应用程序时,根据应用程序的程序标识,从程序列表中获取该应用程序的程序标识对应的应用程序程序,并将该获取的应用程序替换为最新的应用程序,从而实现程序列表中存储的应用程序为最新的应用程序。
(3):ECU接收上位机发送的最新的应用程序。
步骤208:将ECU中的应用程序更新为最新的应用程序。
根据应用程序的程序标识,从程序标识和存储地址的对应关系中获取应用程序的存储地址;将应用程序的存储地址对应的存储空间中的应用程序删除,并将最新的应用程序写入应用程序的存储地址对应的存储空间中。
进一步地,当应用程序更新完成时,重新启动应用程序。并且,设置应用程序的完整性标识。
在本发明中,通过车辆的CAN总线从上位机中获取最新的启动加载程序,从而不需要在ECU上设置串行通信端口,减少了硬件设计的复杂性;并且,CAN总线通信距离长,抗干扰能力强,从而提高了车辆软件的更新成功率;并且,ECU中的启动加载程序包括第一启动加载程序和第二启动加载程序,在更新ECU中的启动加载程序时,设置第一启动加载程序处于工作状态,更新第二启动加载程序;在第二启动程序更新完成时,设置第二启动加载程序处于工作状态,更新第一启动加载程序,从而避免了在更新启动加载程序断电无法运行启动加载程序的问题。
实施例3
本发明实施例提供了一种车辆的软件更新装置,参见图3,其中,该装置包括:
第一判断模块301,用于判断车辆的电子控制单元ECU中的启动加载程序是否需要更新;
第一获取模块302,用于如果需要更新,通过车辆的控制器局域网CAN总线从上位机中获取最新的启动加载程序,ECU中的启动加载程序包括第一启动加载程序和第二启动加载程序,且第一启动加载程序和第二启动加载程序相同;
第一更新模块303,用于设置第一启动加载程序处于工作状态,将第二启动加载程序更新为最新的启动加载程序;
第二更新模块304,用于在第二启动加载程序更新完成时,设置第二启动加载程序处于工作状态,将第一启动加载程序更新为最新的启动加载程序。
优选的,第一判断模块301,包括:
第一判断单元,用于判断指定存储单元中是否存在启动加载程序的更新标识;
第一确定单元,用于如果存在,则确定车辆的电子控制单元ECU中的启动加载程序需要更新;
第二确定单元,用于如果不存在,则确定车辆的电子控制单元ECU中的启动加载程序不需要更新。
优选的,该装置还包括:
接收模块,用于通过车辆的CAN总线接收上位机发送的更新命令,更新命令携带启动加载程序的程序标识;
分配模块,用于为启动加载程序分配更新标识;
存储模块,用于将启动加载程序的更新标识存储在指定存储单元中。
优选的,该装置还包括:
第二判断模块,用于判断车辆的ECU中的应用程序是否需要更新;
第二获取模块,用于如果需要更新,通过车辆的CAN总线从上位机中获取最新的应用程序;
第三更新模块,用于将ECU中的应用程序更新为最新的应用程序。
优选的,第二判断模块,包括:
获取单元,用于获取车辆的ECU中应用程序的存储地址;
第二判断单元,用于判断存储地址对应的存储空间中是否存在完整的应用程序;
第三确定单元,用于如果存储地址对应的存储空间中不存在完整的应用程序,则确定车辆的ECU中的应用程序需要更新;
第四确定单元,用于如果存储地址对应的存储空间中存在完整的应用程序,则确定车辆的ECU中的应用程序不需要更新。
在本发明中,通过车辆的CAN总线从上位机中获取最新的启动加载程序,从而不需要在ECU上设置串行通信端口,减少了硬件设计的复杂性;并且,CAN总线通信距离长,抗干扰能力强,从而提高了车辆软件的更新成功率;并且,ECU中的启动加载程序包括第一启动加载程序和第二启动加载程序,在更新ECU中的启动加载程序时,设置第一启动加载程序处于工作状态,更新第二启动加载程序;在第二启动程序更新完成时,设置第二启动加载程序处于工作状态,更新第一启动加载程序,从而避免了在更新启动加载程序断电无法运行启动加载程序的问题。
需要说明的是:上述实施例提供的车辆的软件更新装置在车辆的软件更新时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的车辆的软件更新装置与车辆的软件更新方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。