OTP寄存器数据修正方法、装置、计算机设备和存储介质与流程

文档序号:18458107发布日期:2019-08-17 01:46阅读:809来源:国知局
OTP寄存器数据修正方法、装置、计算机设备和存储介质与流程

本申请涉及数据处理领域,特别是涉及一种otp寄存器数据修正方法、装置、计算机设备和存储介质。



背景技术:

otp(onetimeprogrammable,一次性可编程)寄存器属于单片机的一种存储器,程序烧入单片机后,将不可更改和清除。为了保证寄存器中存储数据的可靠及稳定性,通常会引入ecc(errorcorrectingcode,错误检查和纠正)算法,ecc是一种能够实现错误检查和纠正的技术。在嵌入式系统中,所有代码和系统数据被存储在flash芯片或otp寄存器中,flash芯片的特点是可多次擦写,而且掉电数据不会丢失。

而otp寄存器很特殊,只可以编程一次,编程后就不可修改,具体来说,即数据位1能被改成0,但0永远不能改成1。比如一个32位的otp寄存器,出厂的值是0xffffffff。如果将otp寄存器的值写成了0xfffffff0,那么最后4位再也不可能从0变成1,而其它数据位的1还可以改成0。通过ecc可以将写入数据计算出校验值,在数据写入的时候在数据后面跟着写入校验值数据,校验数据与otp具有相同的特性,只能将1变成0。在读取otp寄存器的数据时,程序读取的数据也是校验之后的数据。

传统的对otp寄存器中的存储数据,只能进行一次烧写,当测试过程中发现程序出错,则将整个单片机丢弃。或者通过分区形式管理otp寄存器的存储空间,将整个otp寄存器的存储空间分为a区、b区、c区等,比如本次烧写a区,当发现程序出错,则丢弃整个a区所用程序。再重新烧写b区,以此使用整个otp寄存器。即传统的方法对于otp寄存器中的数据烧写,具有一次性的限制,无法实现数据修正。



技术实现要素:

基于此,有必要针对上述技术问题,提供一种能够实现对otp寄存器中数据进行更改的otp寄存器数据修正方法、装置、计算机设备和存储介质。

一种otp寄存器数据修正方法,所述方法包括:

获取目标写入数据,通过ecc辅助工具计算得到所述目标写入数据对应的目标校验数据;

获取otp寄存器中当前地址存储的第一数据,通过所述ecc辅助工具计算得到所述第一数据对应的第一校验数据;

将所述目标校验数据中与所述第一校验数据中数据位为0对应的所有数据位置零,得到第二校验数据;

将目标写入数据中与所述第一数据中数据位为0对应的所有数据位置零,得到第二数据;

根据所述第二数据以及所述第二校验数据,采用ecc校验算法进行校验,得到输出数据;

当所述输出数据等于所述目标写入数据时,得到所述目标写入数据的数据地址为所述当前地址,并根据所述目标写入数据对所述当前地址存储的第一数据进行修正。

在一个实施例中,所述将所述目标校验数据中与所述第一校验数据中数据位为0对应的所有数据位置零之前,还包括:

计算所述目标写入数据中数据位为1且所述第一数据对应的数据位为0的数据位数量;

所述通过ecc辅助工具计算得到所述目标写入数据对应的目标校验数据,包括:

当所述数据位数量小于或等于预设的ecc校正错误数量时,通过ecc辅助工具计算得到所述目标写入数据对应的目标校验数据。

在一个实施例中,所述计算所述目标写入数据中数据位为1且所述第一数据对应的数据位为0的数据位数量之后,还包括:

当所述数据位数量大于预设ecc校正错误数量时,将所述当前地址存储的第一数据清零,并获取下一地址,将所述下一地址重新作为所述当前地址。

在一个实施例中,所述获取下一地址,将所述下一地址重新作为所述当前地址,包括:

获取下一地址,当所述下一地址为函数入口时,新增预设程序片段;

当新增预设程序片段后的下一地址为函数返回地址时,将处理后的下一地址重新作为所述当前地址。

在一个实施例中,所述将所述当前地址存储的第一数据清零,包括:通过对所述当前地址先后写入0x00000000和0x4000813的方式将所述当前地址存储的第一数据清零。

在一个实施例中,所述获取目标写入数据,包括:

根据输入的指令码获取目标写入数据,所述指令码为能跳转至所述otp寄存器中存储的数据0xffffffff对应的校验数据0x3f的所有非程序区指令对应的指令码。

一种otp寄存器数据修正装置,所述装置包括:

目标数据模块,用于获取目标写入数据,通过ecc辅助工具计算得到所述目标写入数据对应的目标校验数据;

当前地址模块,用于获取otp寄存器中当前地址存储的第一数据,通过所述ecc辅助工具计算得到所述第一数据对应的第一校验数据;

第一置零模块,用于将所述目标校验数据中与所述第一校验数据中数据位为0对应的所有数据位置零,得到第二校验数据;

第二置零模块,用于将目标写入数据中与所述第一数据中数据位为0对应的所有数据位置零,得到第二数据;

数据输出模块,用于根据所述第二数据以及所述第二校验数据,采用ecc校验算法进行校验,得到输出数据;

数据修正模块,用于当所述输出数据等于所述目标写入数据时,得到所述目标写入数据的数据地址为所述当前地址,并根据所述目标写入数据对所述当前地址存储的第一数据进行修正。

一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现以下步骤:

获取目标写入数据,通过ecc辅助工具计算得到所述目标写入数据对应的目标校验数据;

获取otp寄存器中当前地址存储的第一数据,通过所述ecc辅助工具计算得到所述第一数据对应的第一校验数据;

将所述目标校验数据中与所述第一校验数据中数据位为0对应的所有数据位置零,得到第二校验数据;

将目标写入数据中与所述第一数据中数据位为0对应的所有数据位置零,得到第二数据;

根据所述第二数据以及所述第二校验数据,采用ecc校验算法进行校验,得到输出数据;

当所述输出数据等于所述目标写入数据时,得到所述目标写入数据的数据地址为所述当前地址,并根据所述目标写入数据对所述当前地址存储的第一数据进行修正。

一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:

获取目标写入数据,通过ecc辅助工具计算得到所述目标写入数据对应的目标校验数据;

获取otp寄存器中当前地址存储的第一数据,通过所述ecc辅助工具计算得到所述第一数据对应的第一校验数据;

将所述目标校验数据中与所述第一校验数据中数据位为0对应的所有数据位置零,得到第二校验数据;

将目标写入数据中与所述第一数据中数据位为0对应的所有数据位置零,得到第二数据;

根据所述第二数据以及所述第二校验数据,采用ecc校验算法进行校验,得到输出数据;

当所述输出数据等于所述目标写入数据时,得到所述目标写入数据的数据地址为所述当前地址,并根据所述目标写入数据对所述当前地址存储的第一数据进行修正。

上述otp寄存器数据修正方法、装置、计算机设备和存储介质,通过获取目标写入数据,由ecc辅助工具计算得到目标写入数据对应的目标校验数据;获取otp寄存器中当前地址存储的第一数据,由ecc辅助工具计算得到第一数据对应的第一校验数据;将目标校验数据中与第一校验数据中数据位为0对应的所有数据位置零,得到第二校验数据;将目标写入数据中与第一数据中数据位为0对应的所有数据位置零,得到第二数据;根据第二数据以及第二校验数据,采用ecc校验算法进行校验,得到输出数据;当输出数据等于目标写入数据时,得到目标写入数据的数据地址为当前地址,并根据目标写入数据对当前地址存储的第一数据进行修正,由此实现了对otp寄存器中已写入数据的更改,以使单片机正常工作,这样可以提高单片机的利用率。

附图说明

图1为一个实施例中otp寄存器数据修正方法的应用场景图;

图2为一个实施例中otp寄存器数据修正方法的流程示意图;

图3为一个实施例中otp寄存器内部数据结构示意图;

图4为一个实施例中otp寄存器数据修正方法的流程示意图;

图5为一个实施例中电子产品调试设备的调试装置的结构框图;

图6为一个实施例中计算机设备的内部结构图。

具体实施方式

为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。

本申请提供的otp寄存器数据修正方法,可以应用于如图1所示的应用环境中。用户终端102通过网络与控制装置104进行通信,otp寄存器106通过有线或无线通信方式与控制装置104进行通信。用户可以通过用户终端输入目标写入数据,otp寄存器中存储有数据。控制装置获取目标写入数据,由ecc辅助工具计算得到目标写入数据对应的目标校验数据;获取otp寄存器中当前地址存储的第一数据,由ecc辅助工具计算得到第一数据对应的第一校验数据;将目标校验数据中与第一校验数据中数据位为0对应的所有数据位置零,得到第二校验数据;将目标写入数据中与第一数据中数据位为0对应的所有数据位置零,得到第二数据;根据第二数据以及第二校验数据,采用ecc校验算法进行校验,得到输出数据;当输出数据等于目标写入数据时,得到目标写入数据的数据地址为当前地址,并根据目标写入数据对当前地址存储的第一数据进行修正。其中,用户终端102可以但不限于是各种个人计算机、笔记本电脑、智能手机和平板电脑,控制装置104可以用独立的服务器或者是多个服务器组成的服务器集群来实现。

在一个实施例中,如图2所示,提供了一种otp寄存器数据修正方法,以该方法应用于图1中的控制装置为例进行说明,包括以下步骤:

步骤202,获取目标写入数据,通过ecc辅助工具计算得到目标写入数据对应的目标校验数据。

用户在测试时发现写入otp寄存器的程序数据出错时,可以通过用户终端输入目标写入数据。ecc辅助工具用于计算写入数据的ecc校验码,校验码生成算法具体可以是:ecc校验每次对256字节的数据进行操作,包含列校验和行校验。对每个待校验的bit位求异或,若结果为0,则表明含有偶数个1;若结果为1,则表明含有奇数个1。otp寄存器内部数据存储示意图如图3所示,比如程序数据1、2、3、4是需要烧写的程序数据,烧写后otp寄存器的物理数据实际上也等于程序数据1、2、3、4,在实际数据烧写时,不止烧写程序数据,还同时将程序数据对应的ecc冗余数据写入otp寄存器。数据读取的时候是将程序数据及ecc冗余数据一起取出,但由于单片机无法获取ecc冗余数据,因此通过otp寄存器内部的ecc校验纠正后的程序数据为最终读取到的数据。

步骤204,获取otp寄存器中当前地址存储的第一数据,通过ecc辅助工具计算得到第一数据对应的第一校验数据。

步骤206,将目标校验数据中与第一校验数据中数据位为0对应的所有数据位置零,得到第二校验数据。

比如,otp寄存器中当前地址存储的第一数据为0x12345678,第一校验数据为0x16;目标写入数据为0x20345678,目标校验数据为0x10。将目标校验数据0x10(对应的二进制为00010000)与第一校验数据0x16(对应的二进制为00010110)中数据位为0对应的所有数据位置零,即得到二进制数据00010000,因而第二校验数据为0x10。

步骤208,将目标写入数据中与第一数据中数据位为0对应的所有数据位置零,得到第二数据。

比如,otp寄存器中当前地址存储的第一数据为0x12345678,第一校验数据为0x16;目标写入数据为0x20345678,目标校验数据为0x10。将目标写入数据0x20345678(对应的二进制为00100000001101000101011001111000)与第一数据0x12345678(对应的二进制为00100000001101000101011001111000)中数据位为0对应的所有数据位置零,从而可以得到二进制数据为00000000001101000101011001111000,即第二数据为0x00345678。

步骤210,根据第二数据以及第二校验数据,采用ecc校验算法进行校验,得到输出数据。

比如,otp寄存器中当前地址存储的第一数据为0x12345678,第一校验数据为0x16;目标写入数据为0x20345678,目标校验数据为0x10。经过处理之后得到第二校验数据0x10,第二数据0x00345678。根据第二数据0x00345678以及第二校验数据0x10,采用ecc校验算法进行校验,计算得到输出数据为0x20345678。

步骤212,当输出数据等于目标写入数据时,得到目标写入数据的数据地址为当前地址,并根据目标写入数据对当前地址存储的第一数据进行修正。

比如,otp寄存器中当前地址存储的第一数据为0x12345678,第一校验数据为0x16;目标写入数据为0x20345678,目标校验数据为0x10;经过处理之后得到第二校验数据0x10,第二数据0x00345678。根据第二数据0x00345678以及第二校验数据0x10,采用ecc校验算法进行校验,计算得到输出数据为0x20345678。此时,输出数据0x20345678等于目标写入数据0x20345678,即得到目标写入数据的数据地址为当前地址,并根据目标写入数据对当前地址存储的第一数据进行修正,由otp寄存器当前地址中存储的数据由0x12345678更改为0x20345678。

上述otp寄存器数据修正方法,通过获取目标写入数据,由ecc辅助工具计算得到目标写入数据对应的目标校验数据;获取otp寄存器中当前地址存储的第一数据,由ecc辅助工具计算得到第一数据对应的第一校验数据;将目标校验数据中与第一校验数据中数据位为0对应的所有数据位置零,得到第二校验数据;将目标写入数据中与第一数据中数据位为0对应的所有数据位置零,得到第二数据;根据第二数据以及第二校验数据,采用ecc校验算法进行校验,计算得到输出数据;当输出数据等于目标写入数据时,得到目标写入数据的数据地址为当前地址,并根据目标写入数据对当前地址存储的第一数据进行修正,由此实现了对otp寄存器中已写入数据的更改,以使单片机正常工作,这样可以提高单片机的利用率。

在一个实施例中,如图4所示,将目标校验数据中与第一校验数据中数据位为0对应的所有数据位置零之前,还包括:步骤404,计算目标写入数据中数据位为1且第一数据对应的数据位为0的数据位数量;通过ecc辅助工具计算得到目标写入数据对应的目标校验数据,包括:步骤406,当数据位数量小于或等于预设的ecc校正错误数量时,通过ecc辅助工具计算得到目标写入数据对应的目标校验数据。如果目标写入数据中数据位为1且第一数据对应的数据位为0的数据位数量,小于或等于ecc校验算法所能校正错误数,即可以对otp寄存器当前地址存储的数据进行数据更改,那么通过ecc辅助工具计算得到目标写入数据对应的目标校验数据。通过设置判断条件,可以有效减少无效计算,加快处理速度。

在一个实施例中,计算目标写入数据中数据位为1且第一数据对应的数据位为0的数据位数量之后,还包括:当数据位数量大于预设ecc校正错误数量时,将当前地址存储的第一数据清零,并获取下一地址,将下一地址重新作为当前地址。如果目标写入数据中数据位为1且第一数据对应的数据位为0的数据位数量,大于ecc校验算法所能校正错误数,即无法对otp寄存器当前地址存储的数据进行数据更改,那么将当前地址存储的第一数据清零,并获取下一地址,将下一地址作为更新的当前地址,重新进行判断。

在一个实施例中,获取下一地址,将下一地址重新作为当前地址,包括:获取下一地址,当下一地址为函数入口时,新增预设程序片段;当新增预设程序片段后获取到的下一地址为函数返回地址时,将下一地址重新作为当前地址。当无法对otp寄存器当前地址存储的数据进行数据更改时,将获取到的下一地址作为更新的当前地址时,需判断下一地址是否为函数入口。如果是函数入口,则需要新增程序片段,在新增的程序片段中加入条件判断,判断依据为函数返回地址。在新增的程序片段中需要保证被清零处的函数正常运行,同时将错误程序修复,在这些操作后再跳回后续正常程序处,继续执行后续程序。

在一个实施例中,将当前地址存储的第一数据清零,包括:通过对当前地址先后写入0x00000000和0x4000813的方式将当前地址存储的第一数据清零。将otp寄存器当前地址存储的所有数据清零的方法具体可以是:按照正常烧写数据至32位otp寄存器的方法,第一次烧写0x00000000,目的是清除otp寄存器存储区的所有数据。第二次烧写0x4000813,目的是清除otp校验寄存器中存储的校验数据,从而可以保证任何otp寄存器通过这两步操作后读取出来的数据均为0。

在一个实施例中,获取目标写入数据,包括:根据输入的指令码获取目标写入数据,指令码为能跳转至otp寄存器中存储的数据0xffffffff对应的校验数据0x3f的所有非程序区指令对应的指令码。目标写入数据具体可以是根据跳转至目标地址otp存储数据为0xffffffff,对应校验数据为0x3f的所有非程序区的指令对应的指令码得到,所以目标写入数据可以有很多选择,可以通过工具轮循搜索匹配。

在一个实施例中,数据如表1所示,获取otp寄存器中当前地址的存储数据indata1。通过ecc辅助工具计算出otp寄存器中当前地址存储的校验数据ecc1(如表1中index=2时,otp当前地址存储的数据是0x12345678,校验数据是0x16),对比目标写入数据indata2(比如index=2时,需要写入数据是0x20345678)。计算目标写入数据数据位为1同时对应otp寄存器中存储数据的数据位为0的数目err_cnt0,如果err_cnt0大于ecc算法所能校正错误数err_m,则otp寄存器当前地址存储的数据不能修改为目标写入数据,将otp寄存器当前地址存储的所有数据清零,获取下一地址存储的数据继续刚才的操作。如果err_cnt0小于或等于ecc算法所能校正错误数err_m,则通过ecc辅助工具计算需要写入数据的校验数据ecc2。将ecc2中ecc1中数据位等于0的所有数据位置0,得到ecc_3。将目标写入数据indata2中当前otp寄存器中存储数据indata1等于0的所有数据位置0,得到indata3。由indata3及ecc3共同组成两次烧写后模拟出最终otp寄存器对应的存储数据,以及indata3校验数据ecc3。通过ecc检验算法计算出indata3与ecc3校验出来的数据outdata4,如果outdata4等于indata2,则找到可以修改的数据地址为当前地址(index=2),目标写入数据为indata2。

表1

应该理解的是,虽然图2、4的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图2、4中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。

在一个实施例中,如图5所示,提供了一种otp寄存器数据修正装置,包括:目标数据模块502、当前地址模块504、第一置零模块506、第二置零模块508、数据输出模块510和数据修正模块512。其中,目标数据模块,用于获取目标写入数据,通过ecc辅助工具计算得到目标写入数据对应的目标校验数据;当前地址模块,用于获取otp寄存器中当前地址存储的第一数据,通过ecc辅助工具计算得到第一数据对应的第一校验数据;第一置零模块,用于将目标校验数据中与第一校验数据中数据位为0对应的所有数据位置零,得到第二校验数据;第二置零模块,用于将目标写入数据中与第一数据中数据位为0对应的所有数据位置零,得到第二数据;数据输出模块,用于根据第二数据以及第二校验数据,采用ecc校验算法进行校验,得到输出数据;数据修正模块,用于当输出数据等于目标写入数据时,得到目标写入数据的数据地址为当前地址,并根据目标写入数据对当前地址存储的第一数据进行修正。

在一个实施例中,第一置零模块之前还包括:数量统计模块,用于计算目标写入数据中数据位为1且第一数据对应的数据位为0的数据位数量;目标数据模块用于当数据位数量小于或等于预设的ecc校正错误数量时,通过ecc辅助工具计算得到目标写入数据对应的目标校验数据。

在一个实施例中,数量统计模块之后还包括清零模块,用于当数据位数量大于预设ecc校正错误数量时,将当前地址存储的第一数据清零,并获取下一地址,将下一地址重新作为当前地址。

在一个实施例中,清零模块还用于获取下一地址,当下一地址为函数入口地址时,新增预设程序片段;当新增预设程序片段后获取到的下一地址为函数返回地址时,将下一地址重新作为当前地址。

在一个实施例中,清零模块还用于通过对当前地址先后写入0x00000000和0x4000813的方式将当前地址存储的第一数据清零。

在一个实施例中,目标数据模块还用于根据输入的指令码获取目标写入数据,指令码为能跳转至otp寄存器中存储的数据0xffffffff对应的校验数据0x3f的所有非程序区指令对应的指令码。

关于otp寄存器数据修正装置的具体限定可以参见上文中对于otp寄存器数据修正方法的限定,在此不再赘述。上述otp寄存器数据修正装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。

在一个实施例中,提供了一种计算机设备,该计算机设备可以是终端,其内部结构图可以如图6所示。该计算机设备包括通过系统总线连接的处理器、存储器、网络接口、显示屏和输入装置。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统和计算机程序。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种otp寄存器数据修正方法。该计算机设备的显示屏可以是液晶显示屏或者电子墨水显示屏,该计算机设备的输入装置可以是显示屏上覆盖的触摸层,也可以是计算机设备外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。

本领域技术人员可以理解,图6中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。

在一个实施例中,提供了一种计算机设备,包括存储器和处理器,该存储器存储有计算机程序,该处理器执行计算机程序时实现任一实施例中otp寄存器数据修正方法的步骤。

在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现任一实施例中otp寄存器数据修正方法的步骤。

本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(rom)、可编程rom(prom)、电可编程rom(eprom)、电可擦除可编程rom(eeprom)或闪存。易失性存储器可包括随机存取存储器(ram)或者外部高速缓冲存储器。作为说明而非局限,ram以多种形式可得,诸如静态ram(sram)、动态ram(dram)、同步dram(sdram)、双数据率sdram(ddrsdram)、增强型sdram(esdram)、同步链路(synchlink)dram(sldram)、存储器总线(rambus)直接ram(rdram)、直接存储器总线动态ram(drdram)、以及存储器总线动态ram(rdram)等。

以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。

以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。

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