一种单片机升级失败自动恢复运行的方法与流程

文档序号:25543642发布日期:2021-06-18 20:40阅读:416来源:国知局
一种单片机升级失败自动恢复运行的方法与流程

本发明涉及单片机控制技术领域,尤其是指一种单片机升级失败自动恢复运行的方法。



背景技术:

使用单片机开发的产品在日常生产生活中非常常见。例如遥控器、电磁炉、智能手环、工控设备等;常见的单片机低端的有51系列8位单片机,ti的msp430系列,高端的有st的stm32系列;它们的特点是一个芯片上面集成了cpu和核心、运行内存ram、数据存储器flash和其它必要的控制单元;不需要外接内存、硬盘即可实现程序的运行控制,减小了设计成本和体积。

日常使用的内置单片机的产品功能简单、稳定。通常出厂后功能就固定不变了,不会有后期的软件升级、维护等步骤;但对于一些工控、储能设备来说,发货到用户那里后还会面临有功能需求的变化,bug的修复等问题;这时候就需要对单片机内置程序进行升级以实现新增功能。对于这些复杂的工业设备来说,内置软件的升级的过程必须十分的稳定可靠,不能出现升级失败导致固件丢失、变砖等现象。

由于终端客户实际使用环境千差万别,用户也不具备对设备维护的技能;一般单片机为了能升级,内置flash会作如图1划分;bootloader固定不变,可升级的是应用层(可升级固件)部分;也是由它来完成实现各种功能。所以需要一种方法,能防范单片机升级过程的异常,即使变砖也能自动恢复正常。



技术实现要素:

本发明针对现有技术的问题提供一种单片机升级失败自动恢复运行的方法,可以大大提高系统的稳定性、可用性和安全性;特别是对于工控、储能、电源控制模块等可靠性要求较高的场景。

为了解决上述技术问题,本发明采用如下技术方案:

本发明提供的一种单片机升级失败自动恢复运行的方法,包括以下步骤:

步骤a,进入bootloader;

步骤b,开启看门狗模块;

步骤c,判断本次是否接收到升级指令,若是,则进入升级模式;若否,则进入正常运行模式;

步骤d,清除运行成功标志;

步骤e,跳转到应用层运行;

步骤f,应用层初始化;

步骤g,写运行成功的标志;

步骤h,开启喂狗任务。

其中,所述步骤c中的升级模式步骤为:

步骤c1,从串口接收升级数据帧;

步骤c2,接收完数据帧,校验完成后烧写进内置flash;

步骤c3,判断升级是否成功;若是,则进入所述步骤d;若否,则从外接flash读取之前备份的固件,烧写进内置flash。

其中,所述步骤c中的正常运行模式步骤为:

步骤c11,检查应用层是否有运行成功标志;

步骤c12,若运行成功,则进入所述步骤d;若没有运行成功,则从外接flash读取之前备份的固件,烧写进内置flash。

其中,所述看门狗模块为计数模块。

其中,所述步骤c3中,判断升级失败的方法为:预设超时时间阈值,升级固件在接收数据时,出现无法接收数据的情况,若该情况超过该超时时间阈值,则判断为升级失败。

本发明的有益效果:

本发明可以大大提高系统的稳定性、可用性和安全性;特别是对于工控、储能、电源控制模块等可靠性要求较高的场景。

附图说明

图1为内置flash的划分示意图。

图2为本发明的一种单片机升级失败自动恢复运行的方法流程图。

具体实施方式

为了便于本领域技术人员的理解,下面结合实施例与附图对本发明作进一步的说明,实施方式提及的内容并非对本发明的限定。以下结合附图对本发明进行详细的描述。

一种单片机升级失败自动恢复运行的方法,包括以下步骤:

步骤a,进入bootloader;

步骤b,开启看门狗模块;其中,所述看门狗模块为计数模块。

步骤c,判断本次是否接收到升级指令,若是,则进入升级模式;若否,则进入正常运行模式;

其中,所述步骤c中的升级模式步骤为:

步骤c1,从串口接收升级数据帧;

步骤c2,接收完数据帧,校验完成后烧写进内置flash;

步骤c3,判断升级是否成功;若是,则进入所述步骤d;若否,则从外接flash读取之前备份的固件,烧写进内置flash。

其中,所述步骤c中的正常运行模式步骤为:

步骤c11,检查应用层是否有运行成功标志;

步骤c12,若运行成功,则进入所述步骤d;若没有运行成功,则从外接flash读取之前备份的固件,烧写进内置flash。

步骤d,清除运行成功标志;

步骤e,跳转到应用层运行;

步骤f,应用层初始化;

步骤g,写运行成功的标志;

步骤h,开启喂狗任务。

具体地,本发明首先不管是单片机正常运行过程中还是刚好开机那一刻收到了升级指令,它都会进入bootloader进行升级操作;因为单片机内置ram较小,无法将整个固件接收完毕后放到内存中再进行升级;而且单片机程序正在运行,也不能擦除正在运行的flash区域,那样会导致崩溃;所以都要进入bootloader处理。

本发明的工作流程:

设备进入bootloader后,首先要开启看门狗,这样在升级失败固件无法运行时可以重启;

接下来判断本次是否接收到了升级指令,如果接收到了升级指令,那么就开始进入升级模式;从串口接收升级数据帧,接收完一帧并且校验完成后烧写进内置flash;根据升级协议,固件接收完成并且所有帧都校验成功就可以认为升级成功;

本实施例所述的一种单片机升级失败自动恢复运行的方法,所述步骤c3中,判断升级失败的方法为:预设超时时间阈值,升级固件在接收数据时,出现无法接收数据的情况,若该情况超过该超时时间阈值,则判断为升级失败。

认定升级失败后就可以从外接的flash中读取备份的固件,烧写到单片机内置flash中;

如果bootloader没有收到升级指令,那么就是正常运行;此刻它会检查固件应用层写的运行成功标志;如果没有运行成功的标志则说明上一次的固件并不能运行,没有及时喂狗才导致看门狗超时重启进入本次的bootloader;所以就可以认为是固件损坏、或者之前升级没有真正成功,那此刻就可以从外置flash读出备份的固件,烧写到单片机内置flash中;

不管是有运行成功标志还是刚从外置flash中恢复了备份的固件,此刻都要清除运行成功标志;这样如果内置flash中的固件还无法运行,那么没有运行成功标志就可以再次判断并从外置flash中恢复固件;

清除运行成功的标志后就是正式跳转到固件的应用层运行了;如果应用层无法正确执行那么就会导致看门狗超时重启进入从外置flash恢复的流程;

进入应用层会做一些初始化相关的工作,初始化之后,就可以写运行成功的标志了,表明本次固件运行成功,这样下一次重启还会直接从内置flash正常运行,避免出现误判进入恢复;

最后要开启喂狗任务,保证系统正常运行下去。

在设备生产、测试时,要对备份flash进行烧写固件,保证和内置flash都烧写相同的出厂固件。

在步骤a前,通过外置flash并在它里面存储备份固件,可以解决单片机升级失败无法运行的问题,达到提高设备可靠性、稳定性目的。

本发明可以大大提高系统的稳定性、可用性和安全性;特别是对于工控、储能、电源控制模块等可靠性要求较高的场景。

以上所述,仅是本发明较佳实施例而已,并非对本发明作任何形式上的限制,虽然本发明以较佳实施例公开如上,然而并非用以限定本发明,任何熟悉本专业的技术人员,在不脱离本发明技术方案范围内,当利用上述揭示的技术内容作出些许变更或修饰为等同变化的等效实施例,但凡是未脱离本发明技术方案内容,依据本发明技术是指对以上实施例所作的任何简单修改、等同变化与修饰,均属于本发明技术方案的范围内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1