CN105335279A - 单片机中闪存程序自动检测及修复方法和装置 - Google Patents

单片机中闪存程序自动检测及修复方法和装置 Download PDF

Info

Publication number
CN105335279A
CN105335279A CN201410305308.7A CN201410305308A CN105335279A CN 105335279 A CN105335279 A CN 105335279A CN 201410305308 A CN201410305308 A CN 201410305308A CN 105335279 A CN105335279 A CN 105335279A
Authority
CN
China
Prior art keywords
program code
code segments
program
chip microcomputer
flash
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN201410305308.7A
Other languages
English (en)
Other versions
CN105335279B (zh
Inventor
周博
郭平日
李奇峰
杨云
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
BYD Semiconductor Co Ltd
Original Assignee
BYD Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by BYD Co Ltd filed Critical BYD Co Ltd
Priority to CN201410305308.7A priority Critical patent/CN105335279B/zh
Publication of CN105335279A publication Critical patent/CN105335279A/zh
Application granted granted Critical
Publication of CN105335279B publication Critical patent/CN105335279B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Storage Device Security (AREA)

Abstract

本发明公开了一种单片机中闪存程序自动检测及修复方法和装置,其中所述方法,包括:获取单片机中的闪存程序,其中,闪存程序包括多个程序代码段及与每个程序代码段对应的多个关联码段,每个关联码段根据关联码段对应的程序代码段及相邻的程序代码段生成;根据多个关联码段依次对多个程序代码段进行检测;以及当判断多个程序代码段中的至少一个程序代码段被损坏时,根据与至少一个程序代码段相邻的程序代码段和对应的关联码段对至少一个程序代码段进行恢复。本发明实施例的方法,可以应用于处于工作状态的单片机中,使得在单片机的闪存和内部程序出现故障时,能够对故障进行修复,从而使单片机继续工作。

Description

单片机中闪存程序自动检测及修复方法和装置
技术领域
本发明涉及单片机技术领域,特别涉及一种单片机中闪存程序自动检测及修复方法和装置。
背景技术
单片机的工作离不开程序的运行。当前单片机内部储存程序的介质绝大多数为闪存flash。基于闪存的特性,单片机在不同环境下工作时,或者单片机受到各种环境影响,其内部闪存很容易被损坏,出现坏块,导致其中存储的程序丢失,使得单片机无法正常工作。
为解决上述问题,相关技术中所采取的解决方案为:针对整体的闪存进行坏块管理。其主要实现方式为:在单片机量产测试或工厂测试时,提前测试闪存的可靠性,确保闪存不存在坏块;或者坏块数量在产品可靠性和良品度可接受范围内,将坏块的信息存在固定的地方,并提供冗余的闪存块,将这些坏块通过映射,被这些后备的冗余块进行逻辑地址替换,已达到坏块替换的效果,确保闪存在整体可操作的地址区间内无不可用的存储空间出现。
上述解决方案仅仅解决了在已知坏块信息的条件下,处理坏块的问题。但是,上述解决方案仅用于单片机闪存程序初始化之前,一旦程序烧写至闪存后,如果在单片机正常工作中出现了闪存块损坏的情况,上述解决方案将无法解决问题,因为此时并不知道是哪块闪存块损坏,所以无法对损坏的闪存块进行修复。更重要的,如果在单片机正常工作时出现了闪存块损坏的情况,那就意味着该闪存块内部烧写的某一程序块也会随之丢失,从而导致单片机完全不能工作,该单片机芯片即处于报废处境。
发明内容
本发明旨在至少在一定程度上解决相关技术中的技术问题之一。为此,本发明的一个目的在于提出一种单片机中闪存程序自动检测及修复方法,该方法可以应用于处于工作状态的单片机中,使得在单片机的闪存和内部程序出现故障时,能够对故障进行修复,从而使单片机继续工作。
本发明的第二个目的在于提出一种单片机中闪存程序自动检测及修复装置。
为了实现上述目的,本发明第一方面实施例的单片机中闪存程序自动检测及修复方法,包括以下步骤:获取单片机中的闪存程序,其中,所述闪存程序包括多个程序代码段及与每个所述程序代码段对应的多个关联码段,每个所述关联码段根据所述关联码段对应的程序代码段及相邻的程序代码段生成;根据所述多个关联码段依次对所述多个程序代码段进行检测;以及当判断所述多个程序代码段中的至少一个程序代码段被损坏时,根据与所述至少一个程序代码段相邻的程序代码段和对应的关联码段对所述至少一个程序代码段进行恢复。
根据本发明实施例的单片机中闪存程序自动检测及修复方法,首先获取单片机中的闪存程序,根据闪存程序中的多个关联码段依次对闪存程序中的多个程序代码段进行检测,当判断多个程序代码段中的至少一个程序代码段被损坏时,根据与至少一个程序代码段相邻的程序代码段和对应的关联码段对至少一个程序代码段进行恢复,由于闪存程序中的程序代码段之间具有关联性,所以该方法可以准确检测出被损坏的程序代码段,并根据程序代码段之间的关联性对被损坏的程序代码段进行恢复,该方法可以应用于处于工作状态的单片机中,使得在单片机的闪存和内部程序出现故障时,能够对故障进行修复,从而使单片机继续工作。
为了实现上述目的,本发明第二方面实施例的单片机中闪存程序自动检测及修复装置,包括:内存程序获取模块,用于获取单片机中的闪存程序,其中,所述闪存程序包括多个程序代码段及与每个所述程序代码段对应的多个关联码段,每个所述关联码段根据所述关联码段对应的程序代码段及相邻的程序代码段生成;检测模块,用于根据所述多个关联码段依次对所述多个程序代码段进行检测;以及修复模块,用于当判断所述多个程序代码段中的至少一个程序代码段被损坏时,根据与所述至少一个程序代码段相邻的程序代码段和对应的关联码段对所述至少一个程序代码段进行恢复。
根据本发明实施例的单片机中闪存程序自动检测及修复装置,首先通过内存程序获取模块获取单片机中的闪存程序,然后检测模块根据闪存程序中的多个关联码段依次对闪存程序中的多个程序代码段进行检测,当判断多个程序代码段中的至少一个程序代码段被损坏时,修复模块根据与至少一个程序代码段相邻的程序代码段和对应的关联码段对至少一个程序代码段进行恢复,由于闪存程序中的程序代码段之间具有关联性,所以该装置可以准确检测出被损坏的程序代码段,并根据程序代码段之间的关联性对被损坏的程序代码段进行恢复,该装置可以对处于工作状态的单片机进行检测,并当单片机的闪存和内部程序出现故障时能够对故障进行修复并使单片机可以继续工作。
附图说明
图1是根据本发明一个实施例的单片机中闪存程序自动检测及修复方法的流程图;
图2是根据本发明一个实施例的读取闪存程序的示意图;
图3是根据本发明一个实施例的闪存内部数据存储结构的示意图;
图4是根据本发明另一个实施例的单片机中闪存程序自动检测及修复方法的流程图;
图5是根据本发明一个实施例的单片机中闪存程序自动检测及修复装置的结构示意图;
图6是根据本发明另一个实施例的单片机中闪存程序自动检测及修复装置的结构示意图。
具体实施方式
下面详细描述本发明的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,旨在用于解释本发明,而不能理解为对本发明的限制。
图1是根据本发明一个实施例的单片机中闪存程序自动检测及修复方法的流程图。如图1所示,本发明实施例的单片机中闪存程序自动检测及修复方法,包括以下步骤:
S101,获取单片机中的闪存程序,其中,闪存程序包括多个程序代码段及与每个程序代码段对应的多个关联码段,每个关联码段根据关联码段对应的程序代码段及相邻的程序代码段生成。
下面首先对单片机中的闪存程序的存储结构进行介绍。
如图2所示,首先要将程序代码段烧写至单片机中。具体地,通过关联码生成逻辑和其中的计算法则生成存储数据段,并存储至闪存中。
更具体地,如图3所示,单片机的闪存由多个闪存块组成,而每个闪存块由多组数据段组成。其中,闪存块中存储的数据段的格式为:程序代码段+关联码段。整个闪存中所存储的所有数据段均具有关联性。程序代码段由最后烧写到闪存的数据所决定,其对应单片机程序,具有唯一性和固定性。而每一组数据段中的关联码段是由该数据段中的程序代码段和相邻数据段中的程序代码段生成的。
在本发明的一个实施例中,关联码生成逻辑对关联码段对应的程序代码段及相邻的程序代码段进行逻辑运算或数学运算生成关联码段。
具体地,例如,逻辑运算可以是与或非等基本逻辑运算,也可以是与非、异或、同或等复杂逻辑运算;数学运算可以是加减乘除等基本数学运算,也可以是微积分等复杂数学运算。对关联码段对应的程序代码段及相邻的程序代码段进行逻辑运算或者数学运算或者逻辑运算与数学运算的组合运算,以生成关联码段。下面进行举例说明。
例如,关联码段的生成方法为:
(关联码段1-2)=alg(程序代码段1-1、程序代码段1-2);
(关联码段1-3)=alg(程序代码段1-2、程序代码段1-3);
(关联码段2-1)=alg(程序代码段1-N、程序代码段2-1);
(关联码段2-2)=alg(程序代码段2-1、程序代码段2-2),…,其它关联码段的生成方法以此推类。其中,alg表示两个值之间的运算方法、法则或算法操作,具体通过关联码生成逻辑(如图2所示)实现,alg操作由数字硬件电路生成并检测。例如,alg可以为两个程序代码段之间的相加运算,可以为两个程序代码段之间的相乘运算,可以为两个程序代码段之间的与非运算,可以为两个程序代码段之间的数学运算或逻辑运算,还可以为两个程序代码段之间的数学运算和逻辑运算的组合。当程序代码段烧写至闪存内部后,整个闪存储存空间与数据值已固定,且每一个数据段通过关联码段与相邻的数据段关联。
下面以8组正确的程序代码段分别存储在2个闪存块中为例,对关联码段的生成过程进行说明,即:
Z(程序代码段1-1)=0x3017=0011_0000_0001_0111;
Z(程序代码段1-2)=0x114a=0001_0001_0100_1010;
Z(程序代码段1-3)=0x70d8=0111_0000_1101_1000;
Z(程序代码段1-4)=0x6bf5=0110_1011_1111_0101;
Z(程序代码段2-1)=0xec8e=1110_1100_1000_1110;
Z(程序代码段2-2)=0x5621=0101_0110_0010_0001;
Z(程序代码段2-3)=0x0372=0000_0011_0111_0010;
Z(程序代码段2-4)=0xff10=1111_1111_0001_0000。其中,Z代表括号中的数据值。
进一步地,根据关联码段的生成方法(此处以alg(a,b)=a^b为例),生成关联码段的过程为:
Z(关联码段1-1)=0xff10^0x3017=0xcf07;
Z(关联码段1-2)=0x3017^0x114a=0x215d;
Z(关联码段1-3)=0x114a^0x70d8=0x6192;
Z(关联码段1-4)=0x70d8^0x6bf5=0x1b2d;
Z(关联码段2-1)=0x6bf5^0xec8e=0x877b;
Z(关联码段2-2)=0xec8e^0x5621=0xbaaf;
Z(关联码段2-3)=0x5621^0x0372=0x5553;
Z(关联码段2-4)=0x0372^0xff10=0xfc62。
其中,Z(关联码段1-1)=Z(程序代码段1-1)^Z(程序代码段2-4)。
S102,根据多个关联码段依次对多个程序代码段进行检测。
首先对检测所使用的判断依据进行说明。在对单片机进行上述8组程序代码段的烧写以及关联码生成逻辑根据alg计算法则生成8组存储数据段并存储至闪存中之后,关联码生成逻辑还根据闪存中存储的数据计算SUM1值和SUM2值,并将SUM1值和SUM2值存储到受到保护的数据信息中。
具体地,如图2所示,在闪存中有个存储区域存储有受到保护的数据信息(即SUM1值和SUM2值),受到保护的数据信息供检测程序代码段使用,即为检测程序代码段提供正确的校验值,下面以检测时使用求和校验为例进行说明。例如:
SUM1=Z(程序代码段1-1)+Z(程序代码段1-2)+Z(程序代码段1-3)+Z(程序代码段1-4)+Z(程序代码段2-1)+Z(程序代码段2-2)+Z(程序代码段2-3)+Z(程序代码段2-4);
SUM2=Z(关联码段1-1)+Z(关联码段1-2)+Z(关联码段1-3)+Z(关联码段1-4)+Z(关联码段2-1)+Z(关联码段2-2)+Z(关联码段2-3)+Z(关联码段2-4)。
关联码生成逻辑根据上述公式计算得到:SUM1=0x3635d,SUM2=0x40102。取前4个数值,即:SUM1=0x635d,SUM2=0x0102。关联码生成逻辑将该数值存储在闪存中受到保护的数据信息中。
获取到单片机中的闪存程序之后,根据多个关联码段依次对多个程序代码段进行检测。
下面对根据多个关联码段依次对多个程序代码段进行检测的过程进行说明。
具体地,如图2所示,在单片机工作的情况下,校验值计算逻辑读取闪存中的全部数据(仍以前面列举出的8组数据为例),并计算出8组数据的SUM1值和SUM2值,然后将计算出的SUM1值和SUM2值与受到保护的数据信息块中正确的SUM1和SUM2进行比较。如果相等,则说明闪存中存储的程序正确无误,单片机正常运行;如果不相等,则说明闪存中存储的程序被损坏,需要定位错误点并修复。
假设Z(程序代码段1-2)、Z(关联码段1-2)、Z(程序代码段2-3)和Z(关联码段2-3)被损坏,下面将以此为例,说明对多个程序代码段进行检测的过程。在此,假设被损坏的程序代码段的数据为:Z(程序代码段1-2)=0xffff,Z(关联码段1-2)=0xaaaa;Z(程序代码段2-3)=0x0373,Z(关联码段2-3)=0x5553。
具体地,如图2所示,校验值计算逻辑计算当前闪存中数据的SUM1=0x5215,SUM2=0x573a,然后与受到保护的数据信息块中正确的SUM1=0x635d和SUM2=0x0102进行比较,比较结果为不相等,那么,说明闪存中存储的程序被损坏,需要自动修复逻辑检测错误点并修复。
进一步地,自动修复逻辑逐一检测存储数据段的正确性,例如从Z(程序代码段1-1)开始检测:
Z(程序代码段2-4)=Z(程序代码段1-1)^Z(关联码段1-1),即:0xff10=0x3017^0xcf07正确,说明程序代码段1-1没有被损坏,然后:
Z(程序代码段1-1)=Z(程序代码段1-2)^Z(关联码段1-2),即:表达式0x3017=0xffff^0xaaaa不成立,说明程序代码段1-2被损坏,同样的,对所有的程序代码段依次进行检测,可以检测出程序代码段2-3被损坏。至此,自动修复逻辑成功检测出了被损坏的程序代码段。
S103,当判断多个程序代码段中的至少一个程序代码段被损坏时,根据与至少一个程序代码段相邻的程序代码段和对应的关联码段对至少一个程序代码段进行恢复。
具体地,自动修复逻辑定位出被损坏的程序代码段之后,将对被损坏的程序代码段(程序代码段1-2和程序代码段2-3)进行修复。
在本发明的一个实施例中,根据与至少一个程序代码段相邻的程序代码段和对应的关联码段对至少一个程序代码段进行恢复具体包括:根据与至少一个程序代码段相邻的程序代码段和对应的关联码段进行反向逻辑运算或数学运算以生成至少一个程序代码段。
具体地,自动修复逻辑根据与被损坏的程序代码段相邻的程序代码段和其关联码段进行反向逻辑运算或数学运算以生成恢复后程序代码段。例如:
Z(程序代码段1-2)=Z(程序代码段1-3)^Z(关联码段1-3),即:Z(程序代码段1-2)=0x70d8^0x6192=0x114a,Z(关联码段1-2)=Z(程序代码段1-1)^Z(程序代码段1-2)=0x114a^0x3017=0x215d;
同样的,Z(程序代码段2-3)=Z(程序代码段2-4)^Z(关联码段2-4),即:Z(程序代码段2-3)=0xff10^0xfc62=0x0372,Z(关联码段2-3)=Z(程序代码段2-2)^Z(程序代码段2-3)=0x5621^0x0372=0x5553。
至此,被损坏的程序代码段(程序代码段1-2和程序代码段2-3)被成功恢复。
本发明实施例的单片机中闪存程序自动检测及修复方法,首先获取单片机中的闪存程序,根据闪存程序中的多个关联码段依次对闪存程序中的多个程序代码段进行检测,当判断多个程序代码段中的至少一个程序代码段被损坏时,根据与至少一个程序代码段相邻的程序代码段和对应的关联码段对至少一个程序代码段进行恢复,由于闪存程序中的程序代码段之间具有关联性,所以该方法可以准确检测出被损坏的程序代码段,并根据程序代码段之间的关联性对被损坏的程序代码段进行恢复,该方法可以应用于处于工作状态的单片机中,使得在单片机的闪存和内部程序出现故障时,能够对故障进行修复,从而使单片机继续工作。
在本发明的一个实施例中,如图4所示,在上述S103之后,还包括:
S204,将恢复的至少一个程序代码段存储至备用访问区,并将至少一个程序代码段的错误修复信息反馈至程序读取控制逻辑,以使程序读取控制逻辑在调用至少一个程序代码段时从备用访问区读取恢复之后的至少一个程序代码段。
具体地,例如,如图2所示,被损坏的程序代码段(程序代码段1-2和程序代码段2-3)被成功恢复之后,自动修复逻辑将恢复后的程序代码段(程序代码段1-2和程序代码段2-3)存储至备用访问区,并将程序代码段的错误修复信息反馈至程序读取控制逻辑,那么,程序读取控制逻辑在读取至闪存中的程序代码段1-2和程序代码段2-3位置时,从备用访问区读取恢复之后的程序代码段1-2和程序代码段2-3,从而保证了闪存程序的正确运行。
为了实现上述实施例,本发明还提出一种单片机中闪存程序自动检测及修复装置。
图5是根据本发明一个实施例的单片机中闪存程序自动检测及修复装置的结构示意图。如图5所示,本发明实施例的单片机中闪存程序自动检测及修复装置,包括:内存程序获取模块100、检测模块200和修复模块300。
内存程序获取模块100用于获取单片机中的闪存程序,其中,闪存程序包括多个程序代码段及与每个程序代码段对应的多个关联码段,每个关联码段根据关联码段对应的程序代码段及相邻的程序代码段生成。
下面首先对单片机中的闪存程序的存储结构进行介绍。
如图2所示,首先要将程序代码段烧写至单片机中。具体地,通过关联码生成逻辑和其中的计算法则生成存储数据段,并存储至闪存中。
更具体地,如图3所示,单片机的闪存由多个闪存块组成,而每个闪存块由多组数据段组成。其中,闪存块中存储的数据段的格式为:程序代码段+关联码段。整个闪存中所存储的所有数据段均具有关联性。程序代码段由最后烧写到闪存的数据所决定,其对应单片机程序,具有唯一性和固定性。而每一组数据段中的关联码段是由该数据段中的程序代码段和相邻数据段中的程序代码段生成的。
在本发明的一个实施例中,对关联码段对应的程序代码段及相邻的程序代码段进行逻辑运算或数学运算生成关联码段。
具体地,例如,逻辑运算可以是与或非等基本逻辑运算,也可以是与非、异或、同或等复杂逻辑运算;数学运算可以是加减乘除等基本数学运算,也可以是微积分等复杂数学运算。对关联码段对应的程序代码段及相邻的程序代码段进行逻辑运算或者数学运算或者逻辑运算与数学运算的组合运算,以生成关联码段。下面进行举例说明。
例如,关联码段的生成方法为:
(关联码段1-2)=alg(程序代码段1-1、程序代码段1-2);
(关联码段1-3)=alg(程序代码段1-2、程序代码段1-3);
(关联码段2-1)=alg(程序代码段1-N、程序代码段2-1);
(关联码段2-2)=alg(程序代码段2-1、程序代码段2-2),…,其它关联码段的生成方法以此推类。其中,alg表示两个值之间的运算方法、法则或算法操作,具体通过关联码生成逻辑(如图2所示)实现,alg操作由数字硬件电路生成并检测。例如,alg可以为两个程序代码段之间的相加运算,可以为两个程序代码段之间的相乘运算,可以为两个程序代码段之间的与非运算,可以为两个程序代码段之间的数学运算或逻辑运算,还可以为两个程序代码段之间的数学运算和逻辑运算的组合。当程序代码段烧写至闪存内部后,整个闪存储存空间与数据值已固定,且每一个数据段通过关联码段与相邻的数据段关联。
进一步地,根据关联码段的生成方法(此处以alg(a,b)=a^b为例),生成关联码段的过程为:
Z(关联码段1-1)=0xff10^0x3017=0xcf07;
Z(关联码段1-2)=0x3017^0x114a=0x215d;
Z(关联码段1-3)=0x114a^0x70d8=0x6192;
Z(关联码段1-4)=0x70d8^0x6bf5=0x1b2d;
Z(关联码段2-1)=0x6bf5^0xec8e=0x877b;
Z(关联码段2-2)=0xec8e^0x5621=0xbaaf;
Z(关联码段2-3)=0x5621^0x0372=0x5553;
Z(关联码段2-4)=0x0372^0xff10=0xfc62。
其中,Z(关联码段1-1)=Z(程序代码段1-1)^Z(程序代码段2-4)。
检测模块200用于根据多个关联码段依次对多个程序代码段进行检测。
首先对检测所使用的判断依据进行说明。在对单片机进行上述8组程序代码段的烧写以及关联码生成逻辑根据alg计算法则生成8组存储数据段并存储至闪存中之后,关联码生成逻辑还根据闪存中存储的数据计算SUM1值和SUM2值,并将SUM1值和SUM2值存储到受到保护的数据信息中。
具体地,如图2所示,在闪存中有个存储区域存储有受到保护的数据信息(即SUM1值和SUM2值),受到保护的数据信息供检测程序代码段使用,即为检测程序代码段提供正确的校验值,下面以检测时使用求和校验为例进行说明。例如:
SUM1=Z(程序代码段1-1)+Z(程序代码段1-2)+Z(程序代码段1-3)+Z(程序代码段1-4)+Z(程序代码段2-1)+Z(程序代码段2-2)+Z(程序代码段2-3)+Z(程序代码段2-4);
SUM2=Z(关联码段1-1)+Z(关联码段1-2)+Z(关联码段1-3)+Z(关联码段1-4)+Z(关联码段2-1)+Z(关联码段2-2)+Z(关联码段2-3)+Z(关联码段2-4)。
关联码生成逻辑根据上述公式计算得到:SUM1=0x3635d,SUM2=0x40102。取前4个数值,即:SUM1=0x635d,SUM2=0x0102。关联码生成逻辑将该数值存储在闪存中受到保护的数据信息中。
在内存程序获取模块100获取到单片机中的闪存程序之后,检测模块200用于根据多个关联码段依次对多个程序代码段进行检测。
具体地,在单片机工作的情况下,检测模块200根据闪存程序中的全部数据(仍以前面列举出的8组数据为例)计算出8组数据的SUM1值和SUM2值,然后将计算出的SUM1值和SUM2值与受到保护的数据信息块中正确的SUM1和SUM2进行比较。如果相等,则说明闪存中存储的程序正确无误,单片机正常运行;如果不相等,则说明闪存中存储的程序被损坏,需要定位错误点并修复。
假设Z(程序代码段1-2)、Z(关联码段1-2)、Z(程序代码段2-3)和Z(关联码段2-3)被损坏,下面将以此为例,说明对多个程序代码段进行检测的过程。在此,假设被损坏的程序代码段的数据为:Z(程序代码段1-2)=0xffff,Z(关联码段1-2)=0xaaaa;Z(程序代码段2-3)=0x0373,Z(关联码段2-3)=0x5553。
具体地,检测模块200计算当前闪存中数据的SUM1=0x5215,SUM2=0x573a,然后与受到保护的数据信息块中正确的SUM1=0x635d和SUM2=0x0102进行比较,比较结果为不相等,那么,说明闪存中存储的程序被损坏,需要检测出定位错误点并修复。
进一步地,检测模块200逐一检测存储数据段的正确性,例如从Z(程序代码段1-1)开始检测:
Z(程序代码段2-4)=Z(程序代码段1-1)^Z(关联码段1-1),即:0xff10=0x3017^0xcf07正确,说明程序代码段1-1没有被损坏,然后:
Z(程序代码段1-1)=Z(程序代码段1-2)^Z(关联码段1-2),即:表达式0x3017=0xffff^0xaaaa不成立,说明程序代码段1-2被损坏,同样的,对所有的程序代码段依次进行检测,可以检测出程序代码段2-3被损坏。至此,检测模块200成功检测出了被损坏的程序代码段。
修复模块300用于当判断多个程序代码段中的至少一个程序代码段被损坏时,根据与至少一个程序代码段相邻的程序代码段和对应的关联码段对至少一个程序代码段进行恢复。
具体地,在检测模块200检测出被损坏的程序代码段时,修复模块300将对被损坏的程序代码段(程序代码段1-2和程序代码段2-3)进行修复。
在本发明的一个实施例中,修复模块300根据与至少一个程序代码段相邻的程序代码段和对应的关联码段进行反向逻辑运算或数学运算以对至少一个程序代码段进行恢复。
具体地,修复模块300根据与被损坏的程序代码段相邻的程序代码段和其对应的关联码段进行反向逻辑运算或数学运算以生成恢复后程序代码段。例如:
Z(程序代码段1-2)=Z(程序代码段1-3)^Z(关联码段1-3),即:Z(程序代码段1-2)=0x70d8^0x6192=0x114a,Z(关联码段1-2)=Z(程序代码段1-1)^Z(程序代码段1-2)=0x114a^0x3017=0x215d;
同样的,Z(程序代码段2-3)=Z(程序代码段2-4)^Z(关联码段2-4),即:Z(程序代码段2-3)=0xff10^0xfc62=0x0372,Z(关联码段2-3)=Z(程序代码段2-2)^Z(程序代码段2-3)=0x5621^0x0372=0x5553。
至此,被损坏的程序代码段(程序代码段1-2和程序代码段2-3)被成功恢复。
本发明实施例的单片机中闪存程序自动检测及修复装置,首先通过内存程序获取模块获取单片机中的闪存程序,然后检测模块根据闪存程序中的多个关联码段依次对闪存程序中的多个程序代码段进行检测,当判断多个程序代码段中的至少一个程序代码段被损坏时,修复模块根据与至少一个程序代码段相邻的程序代码段和对应的关联码段对至少一个程序代码段进行恢复,由于闪存程序中的程序代码段之间具有关联性,所以该装置可以准确检测出被损坏的程序代码段,并根据程序代码段之间的关联性对被损坏的程序代码段进行恢复,该装置可以对处于工作状态的单片机进行检测,并当单片机的闪存和内部程序出现故障时能够对故障进行修复并使单片机可以继续工作。
在本发明的一个实施例中,如图6所示,单片机中闪存程序自动检测及修复装置,还包括:管理模块400。
管理模块400用于将恢复的至少一个程序代码段存储至备用访问区,并将至少一个程序代码段的错误修复信息反馈至程序读取控制逻辑,以使程序读取控制逻辑在调用至少一个程序代码段时从备用访问区读取恢复之后的至少一个程序代码段。
具体地,例如,被损坏的程序代码段(程序代码段1-2和程序代码段2-3)被成功恢复之后,管理模块400将恢复后的程序代码段(程序代码段1-2和程序代码段2-3)存储至备用访问区,并将程序代码段的错误修复信息反馈至程序读取控制逻辑,那么,程序读取控制逻辑在读取至闪存中的程序代码段1-2和程序代码段2-3位置时,从备用访问区读取恢复之后的程序代码段1-2和程序代码段2-3,从而保证了闪存程序的正确运行。
在本发明的描述中,需要理解的是,术语“中心”、“纵向”、“横向”、“长度”、“宽度”、“厚度”、“上”、“下”、“前”、“后”、“左”、“右”、“竖直”、“水平”、“顶”、“底”“内”、“外”、“顺时针”、“逆时针”、“轴向”、“径向”、“周向”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。
此外,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。在本发明的描述中,“多个”的含义是至少两个,例如两个,三个等,除非另有明确具体的限定。
在本发明中,除非另有明确的规定和限定,术语“安装”、“相连”、“连接”、“固定”等术语应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或成一体;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通或两个元件的相互作用关系,除非另有明确的限定。对于本领域的普通技术人员而言,可以根据具体情况理解上述术语在本发明中的具体含义。
在本发明中,除非另有明确的规定和限定,第一特征在第二特征“上”或“下”可以是第一和第二特征直接接触,或第一和第二特征通过中间媒介间接接触。而且,第一特征在第二特征“之上”、“上方”和“上面”可是第一特征在第二特征正上方或斜上方,或仅仅表示第一特征水平高度高于第二特征。第一特征在第二特征“之下”、“下方”和“下面”可以是第一特征在第二特征正下方或斜下方,或仅仅表示第一特征水平高度小于第二特征。
在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不必须针对的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任一个或多个实施例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。
尽管上面已经示出和描述了本发明的实施例,可以理解的是,上述实施例是示例性的,不能理解为对本发明的限制,本领域的普通技术人员在本发明的范围内可以对上述实施例进行变化、修改、替换和变型。

Claims (8)

1.一种单片机中闪存程序自动检测及修复方法,其特征在于,包括以下步骤:
获取单片机中的闪存程序,其中,所述闪存程序包括多个程序代码段及与每个所述程序代码段对应的多个关联码段,每个所述关联码段根据所述关联码段对应的程序代码段及相邻的程序代码段生成;
根据所述多个关联码段依次对所述多个程序代码段进行检测;以及
当判断所述多个程序代码段中的至少一个程序代码段被损坏时,根据与所述至少一个程序代码段相邻的程序代码段和对应的关联码段对所述至少一个程序代码段进行恢复。
2.如权利要求1所述的单片机中闪存程序自动检测及修复方法,其特征在于,其中,对所述关联码段对应的程序代码段及相邻的程序代码段进行逻辑运算或数学运算生成所述关联码段。
3.如权利要求2所述的单片机中闪存程序自动检测及修复方法,其特征在于,所述根据与所述至少一个程序代码段相邻的程序代码段和对应的关联码段对所述至少一个程序代码段进行恢复具体包括:
根据与所述至少一个程序代码段相邻的程序代码段和对应的关联码段进行反向逻辑运算或数学运算以生成所述至少一个程序代码段。
4.如权利要求1-3任一项所述的单片机中闪存程序自动检测及修复方法,其特征在于,在所述根据与所述至少一个程序代码段相邻的程序代码段和对应的关联码段对所述至少一个程序代码段进行恢复之后,还包括:
将恢复的所述至少一个程序代码段存储至备用访问区,并将所述至少一个程序代码段的错误修复信息反馈至程序读取控制逻辑,以使所述程序读取控制逻辑在调用所述至少一个程序代码段时从所述备用访问区读取恢复之后的所述至少一个程序代码段。
5.一种单片机中闪存程序自动检测及修复装置,其特征在于,包括:
内存程序获取模块,用于获取单片机中的闪存程序,其中,所述闪存程序包括多个程序代码段及与每个所述程序代码段对应的多个关联码段,每个所述关联码段根据所述关联码段对应的程序代码段及相邻的程序代码段生成;
检测模块,用于根据所述多个关联码段依次对所述多个程序代码段进行检测;以及
修复模块,用于当判断所述多个程序代码段中的至少一个程序代码段被损坏时,根据与所述至少一个程序代码段相邻的程序代码段和对应的关联码段对所述至少一个程序代码段进行恢复。
6.如权利要求5所述的单片机中闪存程序自动检测及修复装置,其特征在于,其中,对所述关联码段对应的程序代码段及相邻的程序代码段进行逻辑运算或数学运算生成所述关联码段。
7.如权利要求6所述的单片机中闪存程序自动检测及修复装置,其特征在于,所述修复模块根据与所述至少一个程序代码段相邻的程序代码段和对应的关联码段进行反向逻辑运算或数学运算以对所述至少一个程序代码段进行恢复。
8.如权利要求5-7任一项所述的单片机中闪存程序自动检测及修复装置,其特征在于,还包括:
管理模块,用于将恢复的所述至少一个程序代码段存储至备用访问区,并将所述至少一个程序代码段的错误修复信息反馈至程序读取控制逻辑,以使所述程序读取控制逻辑在调用所述至少一个程序代码段时从所述备用访问区读取恢复之后的所述至少一个程序代码段。
CN201410305308.7A 2014-06-27 2014-06-27 单片机中闪存程序自动检测及修复方法和装置 Active CN105335279B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201410305308.7A CN105335279B (zh) 2014-06-27 2014-06-27 单片机中闪存程序自动检测及修复方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201410305308.7A CN105335279B (zh) 2014-06-27 2014-06-27 单片机中闪存程序自动检测及修复方法和装置

Publications (2)

Publication Number Publication Date
CN105335279A true CN105335279A (zh) 2016-02-17
CN105335279B CN105335279B (zh) 2018-04-20

Family

ID=55285834

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201410305308.7A Active CN105335279B (zh) 2014-06-27 2014-06-27 单片机中闪存程序自动检测及修复方法和装置

Country Status (1)

Country Link
CN (1) CN105335279B (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109885342A (zh) * 2019-02-25 2019-06-14 深圳警翼智能科技股份有限公司 一种执法记录仪的系统程序修复方法
CN110334417A (zh) * 2019-06-18 2019-10-15 海芯科技(厦门)有限公司 一种otp单片机量产可测试性集成电路及其设计方法
CN110837434A (zh) * 2018-08-15 2020-02-25 杭州海康慧影科技有限公司 一种修复数据的方法及装置

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6658656B1 (en) * 2000-10-31 2003-12-02 Hewlett-Packard Development Company, L.P. Method and apparatus for creating alternative versions of code segments and dynamically substituting execution of the alternative code versions
CN101697132A (zh) * 2009-10-30 2010-04-21 北京星网锐捷网络技术有限公司 一种操作系统快速重启的方法、装置和网络设备
CN102662847A (zh) * 2012-04-23 2012-09-12 中颖电子股份有限公司 基于闪存应用的嵌入式系统的程序调试系统及方法

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6658656B1 (en) * 2000-10-31 2003-12-02 Hewlett-Packard Development Company, L.P. Method and apparatus for creating alternative versions of code segments and dynamically substituting execution of the alternative code versions
CN101697132A (zh) * 2009-10-30 2010-04-21 北京星网锐捷网络技术有限公司 一种操作系统快速重启的方法、装置和网络设备
CN102662847A (zh) * 2012-04-23 2012-09-12 中颖电子股份有限公司 基于闪存应用的嵌入式系统的程序调试系统及方法

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110837434A (zh) * 2018-08-15 2020-02-25 杭州海康慧影科技有限公司 一种修复数据的方法及装置
CN109885342A (zh) * 2019-02-25 2019-06-14 深圳警翼智能科技股份有限公司 一种执法记录仪的系统程序修复方法
CN110334417A (zh) * 2019-06-18 2019-10-15 海芯科技(厦门)有限公司 一种otp单片机量产可测试性集成电路及其设计方法
CN110334417B (zh) * 2019-06-18 2023-02-17 海芯科技(厦门)有限公司 一种otp单片机量产可测试性集成电路及其设计方法

Also Published As

Publication number Publication date
CN105335279B (zh) 2018-04-20

Similar Documents

Publication Publication Date Title
CN102804146B (zh) 跟踪存储器件内的错误数据的系统和方法
US7240178B2 (en) Non-volatile memory and non-volatile memory data rewriting method
CN205881469U (zh) 电子设备和用于具有经受瞬态故障和永久故障的多个存储器位置的存储器的故障检测设备
CN103247345A (zh) 快闪存储器及快闪存储器失效存储单元检测方法
US20090313505A1 (en) System and method for detecting combinations of perfomance indicators associated with a root cause
EP2715541B1 (en) Mram field disturb detection and recovery
CN102479554B (zh) 修复分析装置和方法
CN105335279A (zh) 单片机中闪存程序自动检测及修复方法和装置
CN105204968A (zh) 一种故障内存检测方法和装置
CN103745751A (zh) 一种故障告警方法与装置
CN102760496A (zh) 反或型闪存装置的字线漏电检测方法、系统及储存媒体
CN115658373B (zh) 基于服务器的内存处理方法和装置、处理器及电子设备
US9103744B2 (en) Method and apparatus for redundant detection of a rotational direction
CN102360568B (zh) 一种并行异步存储器及其数据读取方法
CN116820821A (zh) 磁盘故障检测方法、装置、电子设备及计算机可读存储介质
CN109254898B (zh) 一种软件模块执行顺序监视方法及监视系统
CN115223878B (zh) 失效位置的修补方法和装置
CN116125854A (zh) 制动系统的运行控制方法、装置、制动系统、设备及介质
CN105159810A (zh) 对计算机系统的bios进行测试的方法及装置
CN109686397A (zh) 具有自检功能的存储器及其检测方法
CN111352754A (zh) 一种数据存储检错纠错方法及数据存储装置
CN216749321U (zh) 坏点自检测装置及芯片
WO2017067249A1 (zh) 光纤电子标签的故障定位方法及装置
CN114692674B (zh) 一种船舶推进系统故障判断方法及系统
JP2008090656A (ja) プログラマブルコントローラ

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant
TR01 Transfer of patent right
TR01 Transfer of patent right

Effective date of registration: 20191230

Address after: 518119 1 Yanan Road, Kwai Chung street, Dapeng New District, Shenzhen, Guangdong

Patentee after: SHENZHEN BYD MICROELECTRONICS Co.,Ltd.

Address before: BYD 518118 Shenzhen Road, Guangdong province Pingshan New District No. 3009

Patentee before: BYD Co.,Ltd.

CP01 Change in the name or title of a patent holder
CP01 Change in the name or title of a patent holder

Address after: 518119 No.1 Yan'an Road, Kuiyong street, Dapeng New District, Shenzhen City, Guangdong Province

Patentee after: BYD Semiconductor Co.,Ltd.

Address before: 518119 No.1 Yan'an Road, Kuiyong street, Dapeng New District, Shenzhen City, Guangdong Province

Patentee before: BYD Semiconductor Co.,Ltd.

Address after: 518119 No.1 Yan'an Road, Kuiyong street, Dapeng New District, Shenzhen City, Guangdong Province

Patentee after: BYD Semiconductor Co.,Ltd.

Address before: 518119 No.1 Yan'an Road, Kuiyong street, Dapeng New District, Shenzhen City, Guangdong Province

Patentee before: SHENZHEN BYD MICROELECTRONICS Co.,Ltd.