本发明涉及嵌入式终端设备固件升级方法及系统,特别是涉及一种基于双CPU系统的嵌入式终端设备固件无缝升级方法及系统。
背景技术:
嵌入式技术的迅速发展使得越来越多的嵌入式终端设备应用在人们的日常生活中,其中不乏应用在一些偏远地方,甚至工作在无人看管的场合下。
目前对嵌入式终端设备进行固件升级的方式主要有两种,一种是由维护人员亲自到达设备现场使用仿真器或者烧写工具进行固件升级,如果设备分布在一些偏远地方,那么这种升级方式将浪费大量的人力资源,效率低。另外一种是在线升级方式:在程序运行过程中接收升级文件并覆盖旧程序。此种在线升级方式的不足之处在于:
(1)一旦升级过程出现异常(如中断、干扰、错码、突然断电或是设备无故重启等异常情况)会导致升级失败,进而导致设备崩溃;
(2)新程序出现问题时无法切换回旧程序;
(3)升级完成后设备必须重新启动,会中断处理当前业务一段时间,对于工业场合应用的设备可能会导致致命的后果。
技术实现要素:
为了解决上述传统固件升级方式中存在的不足,提出一种新的方便快捷、可靠性高的基于双CPU系统嵌入式终端设备固件升级方法及系统,目的在于:确保固件能够被有效升级成功,防止系统在固件升级过程中因为异常而导致升级失败,进而导致系统崩溃;实现双CPU系统的控制权的无缝切换,避免升级过程中设备重启间隙对系统造成的隐患。
为实现上述的目的,本发明提供一种嵌入式终端设备固件升级方法,包括以下步骤:
外部固定电平决定初始CPU控制权;主控CPU和辅控CPU执行初始化;所述主控CPU和辅控CPU判断是否为固件升级指令;
所述主控CPU与辅控CPU接收固件升级程序;
所述辅控CPU对固件升级程序进行校验;
所述辅控CPU将新的固件升级程序写入存储区;
所述辅控CPU接收升级指令开始升级,升级后复位运行新程序,完成主控CPU和辅控CPU的控制权的交换;
其中,所述主控CPU与辅控CPU之间通过双向通信完成两者间指令的接收和传达。
本发明还提供一种嵌入式终端设备固件升级系统,包括:服务器,主控CPU,辅控CPU,通信模块,存储模块以及外部固定电平,其中:
所述服务器用于提供新的固件升级程序,并向主控CPU传达指令;
所述主控CPU与辅控CPU之间通过通信接口完成双向通信连接;
所述主控CPU,用于向服务器传达指令,接收服务器发送的指令;向辅控CPU传达指令,接收辅控CPU发送的指令;还用于控制系统的运行;
所述辅控CPU,用于向主控CPU传达指令,接收主控CPU发送的指令;还用于进行固件升级程序的校验,并进行固件升级;
所述存储模块,用于存储固件升级程序;
所述通信模块,用于建立服务器与主控CPU以及服务器与辅控CPU间的连接;
所述外部固定电平,用于决定初始CPU控制权。
相对于现有技术的固件升级方法,本发明的基于双CPU系统的固件升级方法及系统具有如下技术效果:
1、本发明将原来由单一CPU控制的系统改为双CPU控制,双CPU间通过双向通信连接,实现了固件升级后,CPU控制权的无缝切换,避免了升级过程中的设备重启间隙对系统造成的隐患。
2、本发明可以很方便的实现新旧程序之间的切换,只需通过服务器发送切换CPU控制权指令就可实现。
3、本发明避免出现升级过程由于异常情况导致系统崩溃问题。
4、本发明固件升级方法节省人力,方便快捷,可靠性高。
5、本发明固件升级完成后无需重新启动设备,可以继续当前业务的进程。
6、本发明存储模块的设置,使得双CPU的固件升级程序可以分别独立存储。
附图说明
图1是本发明升级系统结构框架图;
图2是本发明主控CPU固件升级流程图;
图3是本发明辅控CPU固件升级流程图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述:
如图1所示,本发明提供一种嵌入式终端设备固件升级系统,包括:
服务器,主控CPU,辅控CPU,通信模块,存储模块以及外部固定电平,其中:
所述服务器用于提供新的固件升级程序,并向主控CPU传达指令;
所述主控CPU与辅控CPU之间通过通信接口完成双向通信连接;
所述主控CPU,用于向服务器传达指令,接收服务器发送的指令;向辅控CPU传达指令,接收辅控CPU发送的指令;还用于控制系统的运行;
所述辅控CPU,用于向主控CPU传达指令,接收主控CPU发送的指令;还用于进行固件升级程序的校验,并进行固件升级;
所述存储模块,用于存储固件升级程序;
所述通信模块,用于建立服务器与主控CPU以及服务器与辅控CPU间的连接;
所述外部固定电平,用于决定初始CPU控制权。
进一步地,所述存储模块包括:主控CPU的FLASH存储区和辅控CPU的FLASH存储区,其中,所述主控CPU的FLASH存储区与主控CPU连接,用于存储主控CPU的固件升级程序;所述辅控CPU的FLASH存储区与辅控CPU连接,用于存储辅控CPU的固件升级程序。
本实施例中,所述服务器通过通信模块连接在双CPU的相应输入管脚上,并向双CPU传输信号;双CPU的信号通过二输入或门对外驱动外部接口。
进一步地,所述主控CPU10与辅控CPU20之间至少有一种通信接口完成双向通信,本实施例所述双CPU间的双向通信是串口通信连接,从而实现主控CPU10与辅控CPU20间指令的相互传送,完成CPU控制权的无缝切换。所述双CPU间的双向通信还可以是SPI连接。
进一步地,所述服务器可以通过有线或无线方式与双CPU连接。本实施例优选无线方式连接。
如图2所示,本发明提供的一种嵌入式终端设备固件程序升级方法,在固件升级过程中,主控CPU进行固件升级的流程如下:
首先,上电检测是否为主控CPU,外部固定电平决定初始主控CPU;主控CPU按照正常业务流程执行初始化。
步骤S102,某一时间主控CPU与服务器通信处理程序发生中断,主控CPU需判断是否为固件升级指令;若非固件升级指令,则继续判断是否为其他自定义指令。
步骤S103,若为固件升级指令,主控CPU通知辅控CPU准备接收固件升级程序;待收到辅控CPU准备好接收的指令后,主控CPU向服务器回复固件升级指令。
步骤S105,服务器按照既定协议向主控CPU发送固件升级程序,主控CPU接收的同时将固件升级程序转发给辅控CPU。
辅控CPU收到完整固件升级指令后通知主控CPU,主控CPU通知服务器已接收完新固件升级程序并准备升级,然后主控CPU将服务器开始升级的指令转送给辅控CPU。
步骤S110,主控CPU接收辅控CPU校验失败的指令后,主控CPU向服务器发送重发固件升级程序请求。
步骤S111,接收到辅控CPU的传送状态值指令后,主控CPU将系统当前所有状态变量以及所有输出IO口状态传输给辅控CPU。
主控CPU发送控制权交换指令给辅控CPU,此时主控CPU关闭除了与辅控CPU通信中断以外的所有中断,等待辅控CPU完成控制状态切换。
主控CPU接收到状态切换完成指令之后将自己所有的输出口切换为输出低电平,主控CPU切换到新辅控CPU流程。
如图3所示,本发明提供的一种嵌入式终端设备固件程序升级方法,在固件升级过程中,辅控CPU进行固件升级的流程如下:
首先,上电检测是否为辅控CPU,外部固定电平决定辅控CPU;辅控CPU将所有输出口初始化为低电平,输入口正常设置为输入口。
步骤S202,某一时间辅控CPU与主控CPU通信处理程序发生中断,辅控CPU需判断是否为固件升级指令;若非固件升级指令,则继续判断是否为其他自定义指令。
步骤S204,若为固件升级指令,辅控CPU收到主控CPU发送的接收指令后,通知主控CPU已经准备好接受固件升级程序。
步骤S206,辅控CPU接收主控CPU转发的固件升级程序。
步骤S207,辅控CPU对固件升级程序进行校验。
步骤S208,若校验结果准确,辅控CPU将固件升级程序写入自己的辅控CPU的FLASH存储区准备升级,同时辅控CPU通知主控CPU已接收到完整固件升级程序,辅控CPU收到开始升级指令后进行固件升级,辅控CPU升级完之后触发看门狗复位开始运行新固件程序,在初始化后通知主控CPU发送系统当前所有状态值。
步骤S209,若校验不准确,辅控CPU通知主控CPU校验失败,向主控CPU发送重发固件程序升级请求。
步骤S212,辅控CPU向主控CPU发送接收完状态值指令,准备开始控制权交换。
辅控CPU接收主控CPU发送的控制权交换指令,辅控CPU完成状态切换之后通知主控CPU已完成状态切换,开始控制系统运行。辅控CPU状态切换为新主控CPU并控制系统运行,完成CPU控制权的交换。
结合图1、2和3,对本发明提供的一种嵌入式终端设备固件程序升级方法的步骤做具体描述:
首先,上电检测是否为主控CPU,是否为辅控CPU,外部固定电平决定是主控CPU还是辅控CPU;主控CPU和辅控CPU执行正常业务流程初始化:主控CPU按照正常业务流程执行初始化,辅控CPU将所有输出口初始化为低电平,输入口正常设置为输入口。
步骤S102,某一时间主控CPU与服务器通信处理程序发生中断,主控CPU需判断是否为固件升级指令;若非固件升级指令,则继续判断是否为其他自定义指令。
步骤S202,某一时间辅控CPU与主控CPU通信处理程序发生中断,辅控CPU需判断是否为固件升级指令;若非固件升级指令,则继续判断是否为其他自定义指令。
步骤S103,若为固件升级指令,主控CPU通过通知辅控CPU准备接收固件升级程序。
步骤S204,辅控CPU通知主控CPU已经准备好接受固件升级程序。
步骤S105,主控CPU向服务器回复固件升级指令响应;服务器按照既定协议向主控CPU发送固件升级程序,同时主控CPU将固件升级程序转发给辅控CPU。
步骤S206,辅控CPU接收主控CPU转发的固件升级程序。
步骤S207,辅控CPU对固件升级程序进行校验。
步骤S208,若校验结果准确,辅控CPU将固件升级程序写入自己的辅控CPU的FLASH存储区准备升级,同时辅控CPU通知主控CPU已接收到完整固件升级程序,并由主控CPU通知服务器已接收完新固件升级程序并准备升级。辅控CPU进行固件升级,辅控CPU升级完之后触发看门狗复位开始运行新固件程序,在初始化后通知主控CPU准备接收系统当前所有状态值。
步骤S209,若校验不准确,辅控CPU通知主控CPU校验失败,向主控CPU发送重发固件程序升级请求。
步骤S110,主控CPU向服务器发送重发固件升级程序请求。
步骤S111,主控CPU将系统当前所有状态变量以及所有输出IO口状态传输给辅控CPU。
步骤S212,辅控CPU向主控CPU发送接收完状态值指令,准备开始控制权交换。
主控CPU发送控制权交换指令给辅控CPU,此时主控CPU关闭除了与辅控CPU通信中断以外的所有中断,等待辅控CPU完成控制状态切换。辅控CPU完成状态切换之后通知主控CPU已完成状态切换,开始控制系统运行。
主控CPU接收到状态切换完成指令之后将自己所有的输出口切换为输出低电平,转变为新辅控CPU,等待新主控CPU发送指令,与此同时辅控CPU状态切换为新主控CPU控制系统运行,完成CPU控制权的交换。
若再次固件升级,则只需此状态下的新主控CPU和新辅控CPU重复以上步骤即可进行新固件的升级。
综上所述,本发明通过双向通信连接的双CPU系统,进行固件升级解决了传统固件升级方法在升级过程中出现异常导致升级失败进而导致设备崩溃的问题;避免升级过程中设备重启间隙对系统造成的隐患;在保证系统不瘫痪的同时,双CPU系统进行CPU控制权的无缝切换进而实现嵌入式终端设备固件方便快捷、可靠地升级。
以上所述,仅是本发明的较佳实施方式,不应该被视为是对本发明范围的限制,而且本发明所主张的权利要求范围并不仅局限于此,凡熟悉此领域技艺的人士,依据本发明所揭露的技术内容,可轻易思及的等效变化,均应落入本发明的保护范围。