一种微控制器及防止微控制器Flash误擦写的方法转让专利

申请号 : CN202310966243.X

文献号 : CN116700786B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 芦世雄赛斌杨东旭

申请人 : 成都利普芯微电子有限公司

摘要 :

本申请涉及一种微控制器及防止微控制器Flash误擦写的方法,属于微控制器领域,解决现有技术中由于干扰或攻击造成的Flash误擦写问题。本申请的微控制器,内置Flash存储器或外置Flash存储器,所述微控制器配置为:内置Flash存储器或外置Flash存储器通过Flash擦写流程进行擦写;其中,所述Flash擦写流程被拆分成多个操作函数,并分别存储在不同的存储位置中。本申请的微控制器和方法,可以避免微控制器内置或外置的Flash存储器由于干扰或攻击造成的误擦写。

权利要求 :

1.一种微控制器,其特征在于,

所述微控制器内置Flash存储器或外置Flash存储器;

所述内置Flash存储器或外置Flash存储器通过Flash擦写流程进行擦写;

其中,所述Flash擦写流程的关键步骤被拆分到多个操作函数中,并分别存储在不相邻的存储位置中;

所述微控制器还被配置为:

在所述Flash擦写流程的部分或全部相邻的操作函数之间增加冗余步骤;当检查出所述冗余步骤的数据运算结果不正确时,进入异常处理流程;

其中,所述冗余步骤对预设数据进行预设运算,或,所述冗余步骤对上一冗余步骤的计算结果进行预设运算。

2.根据权利要求1所述的一种微控制器,其特征在于,所述多个操作函数包括Flash扇区擦除函数、Flash写操作函数;

或,

所述多个操作函数包括Flash配置寄存器解锁函数、Flash扇区擦除函数、Flash写操作函数。

3.根据权利要求1所述的一种微控制器,其特征在于,还包括:计时模块,用于对操作函数进行执行时间检查,若所述操作函数的执行时间在预设范围以外,则进入异常处理程序。

4.根据权利要求1‑3任一项所述的一种微控制器,其特征在于,所述微控制器被配置为:在判断前一操作函数被执行后,才会执行下一操作函数。

5.根据权利要求4所述的一种微控制器,其特征在于,在执行到前一操作函数时进行计数,并且在执行下一操作函数之前判断计数值是否等于预期计数值,若不等于,则进入异常处理流程。

6.一种防止微控制器Flash误擦写的方法,其特征在于,包括:将Flash擦写流程的关键步骤拆分到多个操作函数中;

依次执行所述多个操作函数;其中,所述多个操作函数分别存储在不相邻的存储位置中;

所述防止微控制器Flash误擦写的方法,还包括:在部分或全部相邻的操作函数之间增加冗余步骤和冗余步骤结果判断步骤;

其中,所述冗余步骤,用于对预设数据进行预设运算,或对上一冗余步骤的计算结果进行预设运算;

所述冗余步骤结果判断步骤,用于判断所述冗余步骤的数据运算结果是否正确,若结果不正确,则进入异常处理流程。

7.根据权利要求6所述的一种防止微控制器Flash误擦写的方法,其特征在于,还包括:在执行所述多个操作函数中的一个或多个操作函数时,对所述一个或多个操作函数进行执行时间计时,若计时时间在预设范围以外,则进入异常处理程序;

和/或,

在执行到前一操作函数时进行计数,并且在执行下一操作函数之前判断计数值是否等于预期计数值,若不等于,则进入异常处理流程。

说明书 :

一种微控制器及防止微控制器Flash误擦写的方法

技术领域

[0001] 本申请涉及微控制器领域,具体涉及一种微控制器及防止微控制器Flash误擦写的方法。

背景技术

[0002] 主流MCU(微控制器)一般都支持嵌入式Flash(内置)或者外挂Flash存储器。Flash存储器保存的内容掉电后不会丢失,支持多次擦写,一般用于存储用户程序和数据等信息。按照特定的访问时序可以实现对Flash存储器的读取、擦除和写入等操作。
[0003] 用户通常通过MCU支持的在系统编程(ISP)、在应用编程(IAP)等技术可以方便的实现对MCU的Flash的擦除和写入。这些技术通常都需要通过软件调用底层的Flash擦除、写入函数来实现。
[0004] 上述技术极大程度的方便了用户对产品中微控制器的Flash程序和数据的擦除和写入,但与此同时也带来了安全隐患。比如,某些环境下,误操作、干扰或者某些恶意攻击都可能造成不期望的对Flash关键信息的擦写。
[0005] 现有技术一般通过在MCU中增加Flash的擦写保护配置和相应的硬件电路,并且只有满足特定的配置、授权、协议或操作流程的情况下,用户才能进行对Flash的擦写。当MCU在正常工作条件下,上述现有技术可以很好的防止Flash中的关键信息被误擦写或者恶意篡改。但当MCU受到某些干扰或者黑客攻击时,MCU的程序计数器(PC)可能会不按照既定流程跳转,这会影响程序的执行顺序,比如,有可能导致程序执行时误跳转到Flash的擦写函数,造成关键程序和数据被误擦写或者恶意篡改。
[0006] 另外,外部干扰或者黑客攻击还可能影响MCU内部硬件对数据运算处理的过程和结果的正确性,可能导致错误的数据被写入Flash中,造成关键程序和数据被写入错误值或者被恶意篡改。
[0007] 上述问题成为亟需解决的问题。

发明内容

[0008] 本申请的目的在于克服现有技术的不足,提供一种微控制器及防止微控制器Flash误擦写的方法,以克服现有技术中微控制器内置或外置的Flash存储器误擦写的问题。
[0009] 本申请第一方面提供一种微控制器,所述微控制器内置Flash存储器或外置Flash存储器;所述内置Flash存储器或外置Flash存储器通过Flash擦写流程进行擦写;其中,所述Flash擦写流程的关键步骤被拆分到多个操作函数中,并分别存储在不同的存储位置中。
[0010] 可选地,所述多个操作函数存储在不相邻的存储位置中。
[0011] 可选地,所述多个操作函数包括Flash扇区擦除、Flash写操作;或,所述多个操作函数包括Flash配置寄存器解锁、Flash扇区擦除、Flash写操作。
[0012] 可选地,包括计时模块,用于对操作函数进行执行时间检查,若所述操作函数的执行时间在预设范围以外,则进入异常处理程序。
[0013] 可选地,所述微控制器被配置为:
[0014] 在判断前一操作函数被执行后,才会执行下一操作函数。
[0015] 可选地,在执行到前一操作函数时进行计数,并且在执行下一操作函数之前判断计数值是否等于预期计数值,若不等于,则进入异常处理流程。
[0016] 可选地,所述微控制器还被配置为:
[0017] 在所述Flash擦写流程的部分或全部相邻的操作函数之间增加冗余步骤;当检查出所述冗余步骤的数据运算结果不正确时,进入异常处理流程。
[0018] 可选地,所述冗余步骤对预设数据进行预设运算,或,所述冗余步骤对上一冗余步骤的计算结果进行预设运算。
[0019] 本申请的第二方面提供一种防止微控制器Flash误擦写的方法,包括:
[0020] 将Flash擦写流程的关键步骤拆分到多个操作函数;
[0021] 依次执行所述多个操作函数;
[0022] 其中,所述多个操作函数分别存储在不同的存储位置中。
[0023] 可选地,所述多个操作函数存储在不相邻的存储位置中。
[0024] 可选地,所述多个操作函数包括Flash扇区擦除操作函数、Flash写操作操作函数;或,所述多个操作函数包括Flash配置寄存器解锁操作函数、Flash扇区擦除操作函数、Flash写操作操作函数。
[0025] 可选地,在执行所述多个操作函数中的一个或多个操作函数时,对所述一个或多个操作函数进行执行时间计时,若计时时间在预设范围以外,则进入异常处理程序。
[0026] 可选地,部分或全部相邻的操作函数之间增加冗余步骤和冗余步骤结果判断步骤;
[0027] 其中,所述冗余步骤,用于对预设数据进行预设运算,或对上一冗余步骤的计算结果进行预设运算;
[0028] 所述冗余步骤结果判断步骤,用于判断所述冗余步骤的数据运算结果是否正确,若结果不正确,则进入异常处理流程。
[0029] 可选地,在执行到前一操作函数时进行计数,并且在执行下一操作函数之前判断计数值是否等于预期计数值,若不等于,则进入异常处理流程。
[0030] 本申请的有益效果是:
[0031] 和现有技术相比,本申请提供了一种微控制器及防止微控制器Flash误擦写的方法,通过将Flash擦写流程的多个关键步骤拆分出来并放在不同的操作函数中,且前述不同的操作函数(多个操作函数)存储在不同的位置,本申请可以解决MCU的Flash误擦写的问题;通过Flash操作执行顺序检查、Flash操作执行时间检测等,同样可以解决当MCU受到某些干扰或者黑客攻击导致其程序计数器(PC)不按照既定流程跳转进而可能导致的关键程序和数据被误擦写或者恶意篡改的问题;通过Flash擦写流程插冗余步骤,可以解决外部干扰或者黑客攻击导致的MCU内部硬件对数据运算处理的过程和结果错误,进而可能导致的错误数据被写入Flash中,造成关键程序和数据被写入错误值或者被恶意篡改的问题。

附图说明

[0032] 图1为寄存器到寄存器的采样电路结构示意图;
[0033] 图2为图1中的采样电路受到干扰或黑客攻击导致采样错误的示意图;
[0034] 图3为MCU的程序计数器(PC)电路结构示意图;
[0035] 图4为本申请一实施方式提供的MCU的操作函数存储示意图;
[0036] 图5为本申请一实施方式提供的MCU的Flash操作流程的拆分示意图一;
[0037] 图6为本申请一实施方式提供的MCU的Flash操作流程的拆分示意图二;
[0038] 图7为本申请一实施方式提供的MCU的操作函数时间检查流程示意图;
[0039] 图8为本申请一实施方式提供的MCU的操作函数执行顺序检查示意图一;
[0040] 图9为本申请一实施方式提供的MCU的操作函数执行顺序检查示意图二;
[0041] 图10为本申请一实施方式提供的MCU的冗余步骤示意图;
[0042] 图11为本申请一实施方式提供的MCU的硬件电路示意图;
[0043] 图12为本申请一实施方式提供的防止微控制器Flash误擦写的流程图。

具体实施方式

[0044] 下面结合具体实施例进一步详细描述本申请的技术方案,但本申请的保护范围不局限于以下所述。
[0045] 当MCU受到干扰或者黑客攻击时,可能导致其内部的数字电路出现采样错误。
[0046] 图1示出了寄存器到寄存器的采样电路结构示意图。寄存器FF1的数据输出端Q与寄存器FF2的数据输入端D电连接。
[0047] 如图2展示了图1中的采样电路受到干扰或黑客攻击导致采样错误的示意图。图2中的A展示了正常工作时寄存器正确采样的时序图;图2中的B展示了外部干扰或攻击导致工作时钟部分脉冲缺失,进而导致寄存器数据采样错误的时序图;图2中的C展示了外部干扰或攻击导致工作时钟出现毛刺(glitch),进而导致寄存器数据采样错误的时序图;图2中的D展示了外部干扰或攻击导致数据抖动,进而导致寄存器数据采样错误的时序图。
[0048] 图3给出了MCU程序计数器(PC)电路结构示意图,和图1的简单寄存器采样电路相比,只是在上级寄存器和下级寄存器之间增加了组合逻辑。因此,前述的因干扰和攻击导致的各种数据采样错误,同样也可能发生在程序寄存器(PC)上。当程序计数器(PC)出现数据采样错误,会导致其不按照既定流程跳转,这会影响程序的执行顺序,就有可能导致程序执行时误跳转到Flash的擦写函数,造成关键程序和数据被误擦写或者恶意篡改。
[0049] 当上述因干扰或攻击导致的寄存器数据采样错误发生在MCU内数据运算处理或地址产生相关的逻辑电路上时,就可能导致错误的数据被写入Flash中,造成关键程序和数据被写入错误值或者被恶意篡改。
[0050] 针对上述问题,本申请提供一种微控制器(MCU),该微控制器内置Flash存储器或外置Flash存储器;
[0051] 内置Flash存储器或外置Flash存储器通过Flash擦写流程进行擦写;
[0052] 其中,Flash擦写流程的关键步骤被拆分到多个操作函数中,并分别存储在不同的存储位置中。
[0053] 本申请的微控制器,可以集成Flash存储器(内置),也可以配置外置的Flash存储器。微控制器根据Flash擦写流程对Flash存储器进行擦写,需要在微控制器中配置Flash控制器。该Flash控制器根据Flash擦写流程控制前述Flash存储器进行擦写。
[0054] 如图4,本实施方式中,把Flash擦写流程中的关键操作步骤拆分并放在几个操作函数中。这几个操作函数的存储位置是不同的。
[0055] 比如,把Flash擦写流程的关键操作拆分成1、2、3三步并分别放在存储位置是不同的操作函数1、2和3中。需要说明,这里不是将某个关键操作拆分成三步,而是将属于Flash擦写流程的多个关键操作拆分出来,形成多个操作函数。即关键操作1对应操作函数1,关键操作2对应操作函数2,以此类推。
[0056] 通过这样拆分和存储,即使MCU的程序计数器(PC)因干扰或攻击没有按照既定流程跳转而意外跳转到Flash擦写流程相关函数,也不可能执行完整的Flash擦写流程。因为Flash擦写流程关键操作被拆分成不同函数并存储在不同位置了,程序计数器的意外跳转只可能执行到其中的一个函数(如图4中操作函数2),而不会执行到其他函数(如操作函数1和操作函数3)。没有进行操作函数1中的必须步骤,直接执行操作函数2,其结果将无效,即无法执行完整的Flash擦写流程,因此在这种情况下不会出现误擦写Flash。
[0057] 需要说明,本申请前述的不同操作函数可以存储在Flash存储器中,也可以存在MCU上的其他存储器中(比如:静态随机访问存储器SRAM等)。
[0058] 一些实施方式中,前述多个操作函数存储在不相邻的存储位置中。如图4,操作函数1的存储空间与操作函数2的存储空间不相邻,操作函数2的存储空间与操作函数3的存储空间不相邻。即,操作函数1的结束地址与操作函数2的起始地址不相邻,操作函数2的结束地址与操作函数3的起始地址不相邻。
[0059] 操作函数1、2、3在存储单元(程序存储器、Flash存储器)中的存储位置不相邻,不同操作函数分散存储,可以进一步保证程序计数器的意外跳转只可能执行到其中的一个操作函数,而不会执行到其他后续操作函数。
[0060] 一些实施方式中,前述多个操作函数包括Flash扇区擦除函数、Flash写(编程)操作函数;或,所述多个操作函数包括Flash配置寄存器解锁、Flash扇区擦除、Flash写(编程)操作。
[0061] 如图5所示,Flash擦写流程包括Flash扇区擦除和Flash写操作两个关键步骤。此时,将这两个关键步骤分别拆分到两个操作函数中,即Flash扇区擦除函数、Flash写(编程)操作函数。
[0062] 在一些实施方式中,如图6所示,Flash擦写流程包括Flash配置寄存器解锁、Flash扇区擦除和Flash写操作三个关键步骤。此时,将这三个关键步骤拆分出来,形成单独的Flash配置寄存器解锁函数、Flash扇区擦除函数、Flash写操作函数这三个操作函数(各个操作函数的作用,后续将进行详细介绍)。
[0063] 当MCU受到某些干扰或者黑客攻击时,MCU的程序计数器(PC)可能会不按照既定流程跳转,可能跳过关键步骤中某些程序段的执行,导致关键步骤执行时间与正常情况下不同,具体将导致执行时间减少。也可能,跳转到其它一些执行时间较长的程序段进行执行,这又将导致执行时间延长。
[0064] 一些实施方式中,微控制器包括计时模块(可以为硬件计时器,也可以为软件计时器),用于对操作函数进行执行时间检查。执行时间检查,即对某个操作函数进行执行时间计时,判断计时时间是否满足一定要求。满足,则代表程序运行正常,继续进行下一步,否则,表示可能存在干扰或攻击,此时进行异常处理程序。本申请中,可以对前述多个操作函数的其中一个执行时间检查,也可以对多个操作函数中的某一些进行执行时间检查,还可以是对所有操作函数都进行前述时间检查。即,对操作函数的执行时间计时和判断并非必须的,更并非每一个操作函数都需要进行该流程。
[0065] 一些实施方式中,前述判断计时时间是否满足一定要求,指代判断某个操作函数的执行时间是否在预设范围以外,若是,则进入异常处理程序,否则擦写程序正常运行。
[0066] 如图7,本申请通过配置计时模块,对某一个操作函数(操作函数i)的执行时间进行计时,检查其执行时间是否位于合理的时间范围内。即,对于某一个操作函数而言,为其设置一个执行时间范围,例如[t1,t2]。若实际执行时间不位于这个范围,则认为该关键步骤(操作函数)的程序执行可能遇到了外部干扰或攻击,进入异常处理程序,不再继续后续的Flash擦写流程;如果该关键步骤程序执行时间在预设的范围内,则认为该步骤程序执行正常并继续后续步骤。
[0067] 采用此方式,可以解决前述的可能跳过关键步骤中某些程序段的执行,导致执行时间减少,或,跳转到其它一些执行时间较长的程序段进行执行,导致执行时间延长。
[0068] 一些实施方式中,前述判断计时时间是否满足一定要求,指代判断某个操作函数的执行时间是否超时。若是,则进入异常处理程序,否则擦写程序正常运行。此方式可解决前述跳转导致执行时间变长的问题。
[0069] 一些实施方式中,如图8,微控制器被配置为:在判断前一操作函数被执行后,才会执行下一操作函数。若在执行后一操作函数前,发现前一操作函数并未执行过,则将进行异常处理。
[0070] 当MCU受到某些干扰或者黑客攻击时,MCU的程序计数器(PC)可能会不按照既定流程跳转,程序不按既定顺序执行,有可能导致程序执行时误跳转到Flash的擦写函数,造成关键程序和数据被误擦写或者恶意篡改。
[0071] 程序执行存在一定的顺序,当Flash擦写流程的多个关键步骤被拆分成多个操作函数时,正常情况下多个操作函数会依据预定的顺序进行执行,才能完成Flash擦写任务,例如先对Flash配置寄存器解锁,再对Flash扇区擦除,擦除后再进行Flash写操作。在执行下一个操作函数之前,必须要保证其前一个操作函数被执行了才能进行下一个操作函数的执行,即对操作函数的执行顺序进行检查。采用此方式可以避免程序误跳转带来的误擦写问题。
[0072] 一些实施方式中,如图9,在执行到前一操作函数(操作函数i)时进行计数,并且在执行下一操作函数(操作函数i+1)之前判断计数值是否等于预期计数值(m,不同操作函数对应不同的预期计数值),若是,则可执行下一操作函数,否则进入异常处理流程。
[0073] 可以配置硬件的计数器或软件的计数器实现计数功能。本实施方式中,在执行某一操作函数(操作函数i)时(即开始执行操作函数i后,或执行完成后),计数器根据预设的规则(递增或递减)进行计数(例如,原来Counter=0,执行加1操作,Counter=1),在执行下一操作函数(操作函数i+1)前,需要判断计数值Counter是否等于预设的计数值(例如1),如果是,则表明上一操作函数(操作函数i)已经执行了(执行顺序正常),此时可以顺利进行下一操作函数(操作函数i+1)的执行。此时,Counter再执行加1,Counter=2,在执行操作函数i+2前,需要判断Counter是否等于预设的2,若是,表明操作函数i+2执行过了,则可以继续执行操作函数i+3。若某一次判断时,Counter不等于预设的计数值,则表明可能出现某个操作函数未执行的情况,此时需要进入异常处理流程。
[0074] 需要说明,在执行最后一个操作函数时,计数器即可以不进行计数操作了。因为后续没有其它的操作函数需要执行。
[0075] 在一些实施方式中,微控制器还被配置为:
[0076] 在所述Flash擦写流程的部分或全部相邻的操作函数之间增加冗余步骤,当检查出所述冗余步骤的数据运算结果不正确时,进入异常处理流程。
[0077] 如图10,本实施方式中,冗余步骤指代在操作函数之间插入的一些运算,该运算会产生运算结果,以根据此结果进行判断。运算结果可存储在指定的存储单元中。进行判断时,如果该结果与预期值相符,则继续执行后续步骤;如果该结果与预期值不符,则认为MCU受到干扰或攻击导致硬件异常,不再继续后续的步骤并进入异常处理程序。
[0078] 一些实施方式中,所述冗余步骤对预设数据进行预设运算,或,所述冗余步骤对上一冗余步骤的计算结果进行预设运算。
[0079] 冗余步骤对预设数据进行预设运算,可以包括对预设值进行CRC运算(Cyclic Redundancy Check,即循环冗余校核)。当然,冗余步骤内的数据运算,不仅限于CRC,可以是任意加/减/乘/除或逻辑运算等。
[0080] 而对上一冗余步骤的计算结果进行预设运算,例如,操作函数1执行完毕后,执行操作函数1和操作函数2之间的冗余步骤1,将结果1进行存储,并判断结果1是否等于预期值。若等于,则执行操作函数2,操作函数2执行完毕后,执行操作函数2与操作函数3之间的冗余步骤2,该冗余步骤2处理的数据是冗余步骤1的结果1。
[0081] 当MCU受到外部干扰或者黑客攻击时,可能影响MCU内部硬件对数据运算处理的过程和结果的正确性,可能导致错误的数据被写入Flash中,造成关键程序和数据被写入错误值或被恶意篡改。Flash擦写流程插冗余步骤中的数据运算过程,同样也会因为收到干扰或者攻击导致运算结果错误。对冗余步骤数据运算结果的检查,可以发现并及时停止后续的Flash擦写流程,从而防止Flash中关键程序和数据被写入错误值或被恶意篡改。
[0082] 本申请的第二方面提供一种防止微控制器Flash误擦写的方法,包括:
[0083] 将Flash擦写流程的关键步骤拆分到多个操作函数中;依次执行所述多个操作函数;其中,所述多个操作函数分别存储在不同的存储位置中。
[0084] 一些实施方式中,所述多个操作函数存储在不相邻的存储位置中。
[0085] 一些实施方式中,所述多个操作函数包括Flash扇区擦除操作函数、Flash写操作操作函数;或,所述多个操作函数包括Flash配置寄存器解锁操作函数、Flash扇区擦除操作函数、Flash写操作操作函数。
[0086] 一些实施方式中,在执行所述多个操作函数中的一个或多个操作函数时,对所述一个或多个操作函数进行执行时间计时,若计时时间在预设范围以外,则进入异常处理程序。
[0087] 一些实施方式中,部分或全部相邻的操作函数之间包括冗余步骤以及冗余步骤结果判断步骤;其中,所述冗余步骤,用于对预设数据进行预设运算,或对上一冗余步骤的计算结果进行特定运算;所述冗余步骤结果判断步骤,用于判断所述冗余步骤的数据运算结果是否正确。若结果不正确,则进入异常处理流程。
[0088] 一些实施方式中,在执行到前一操作函数时进行计数,并且在执行下一操作函数之前判断计数值是否等于预期计数值,若是,则执行下一步(程序正常执行),否则进入异常处理流程。
[0089] 上述第二方面的方法和前述第一方面的微控制器部分对应,这里不再进行赘述。
[0090] 下面结合图11‑图12对本申请的微控制器以及防止微控制器Flash误擦写的方法进行具体描述。
[0091] 图11为本申请一些实施方式提供的MCU的硬件电路示意图。该MCU包括:处理器(CPU)、Flash控制器;处理器(CPU)、Flash控制器通过总线进行通信。Flash控制器和Flash存储器(外置或内置)通过Flash读写接口进行通信。其中,Flash控制器包括配置寄存器锁、控制寄存器、地址寄存器、数据寄存器和Flash接口逻辑。图12展示了本申请一实施方式提供的防止微控制器Flash误擦写的流程图。
[0092] 一般Flash的写操作(编程),首先需要CPU对图11中Flash配置寄存器锁写入特定值来解锁,获得对控制寄存器、地址寄存器和数据寄存器的写入权限,然后需要配置Flash控制寄存器和地址寄存器对需要进行写操作的存储单元所在的扇区进行擦除,最后将待写入数据和待写入地址分别写入Flash数据寄存器和地址寄存器并配置Flash控制寄存器启动Flash存储单元的写操作。
[0093] 本具体实施例把Flash配置寄存器解锁、Flash扇区擦除和Flash写(编程)三个Flash擦写流程的关键步骤分别放在三个不同的函数中,且三个函数存在MCU的存储单元(Flash存储器或其他存储器如SRAM等)中三段位置不相邻的存储空间,如图6所示。
[0094] 在图12所示Flash擦写流程开始阶段,创建一个执行顺序计数器并初始化为0(需要注意,这里的计数器是软件计数器,但本申请中,实际上计数器也可以是硬件计数器)。当执行到Flash控制寄存器解锁函数时,执行顺序计数器加1,在执行Flash扇区擦除步骤前(若有冗余步骤,则在冗余步骤之前或者冗余步骤结果判断之后均可以)判断计数器值是否等于预设的1(判断1处),若是,表明Flash控制寄存器解锁这一步已经被执行了,执行顺序没有问题,此时,可以继续进行后面的步骤。否则,进入异常处理。同理,在判断3步骤处,检查该执行步骤计数器的值是否为2,如果为2则继续后面的步骤,否则,进入异常处理。
[0095] 在进入Flash扇区擦除步骤时,启动图11所示的硬件计时器开始计时(本申请中,该计时器也可以为软件计时器),直到扇区擦除步骤完成后清0该定时器。在此过程中,如果计时器计时得到的执行时间不在设定范围内,则认为扇区擦除操作异常并立即进入异常处理而不继续后续的Flash擦写操作。
[0096] 本实施例在上述Flash擦除主要操作中间插入冗余步骤1和冗余步骤2。其中,冗余步骤1:CPU对预存储在系统存储器指定存储区域A的数据做CRC运算并保存在系统存储器指定存储区域B。在图12所示判断2步骤处对存在存储区域B的结果和存在存储区域E的预期结果进行比对,如果相等,则继续后续步骤,否则,进入异常处理。冗余步骤2:CPU对预存储在系统存储器指定存储区域C的数据做CRC运算并保存在系统存储器指定存储区域D。在图12所示判断4步骤处对存在存储区域D的结果和存在存储区域F的预期结果进行比对,如果相等,则继续后续步骤,否则,进入异常处理。
[0097] 需要说明,本申请的判断某个操作函数的执行时间是否不在预设范围内,可以是只针对某一个或任意几个操作函数,也可以是所有操作函数。而本申请在操作函数之间插入冗余步骤,可以是在所有相邻的操作函数之间均插入冗余步骤(各冗余步骤并不一定是相同的运算,实际上可以相同,也可以不同),也可以是在某一个或某一些相邻的操作函数之间插入冗余步骤。另外,本申请中,在上一操作函数与下一函数之间,对顺序计数器的计数值的判断可以在冗余步骤之前,可以在冗余步骤结果判断之后,也可以在冗余步骤与冗余步骤结果判断之间。
[0098] 综上所述,本申请提出的微控制器及防止微控制器Flash误擦写的方法,通过Flash操作函数拆分并分散存储、Flash操作执行顺序检查、Flash操作执行时间检测等,可以解决当MCU受到某些干扰或者黑客攻击导致其程序计数器(PC)不按照既定流程跳转进而可能导致的关键程序和数据被误擦写或者恶意篡改的问题,通过Flash擦写流程插冗余步骤,可以解决外部干扰或者黑客攻击导致的MCU内部硬件对数据运算处理的过程和结果错误,进而可能导致的错误数据被写入Flash中,造成关键程序和数据被写入错误值或者被恶意篡改的问题。
[0099] 换句话说,本申请可大幅降低前述现有技术方案存在的当MCU遇到干扰或黑客攻击时,程序指针可能不按既定程序跳转或MCU内部硬件数据运算处理错误导致的Flash关键信息被误擦写或者恶意篡改的发生概率。
[0100] 以上所述仅是本申请的优选实施方式,应当理解本申请并非局限于本文所披露的形式,不应看作是对其他实施例的排除,而可用于各种其他组合、修改和环境,并能够在本文所述构想范围内,通过上述教导或相关领域的技术或知识进行改动。而本领域人员所进行的改动和变化不脱离本申请的精神和范围,则都应在本申请所附权利要求的保护范围。