本发明涉及存储管理领域,尤指一种位翻转检测方法及装置。
背景技术:
Nand-flash是闪存(flash)的一种,其中,Nand-flash作为一种存储设备,具有容量大、改写速度快、适用于存储大量数据等优点,因而在业界得到了越来越广泛的应用。
在使用Nand-flash内存的过程中,通常通过在系统对该Nand-flash内存的存储区域进行读操作的过程中,可以发现位翻转现象,也就是说,在读到发生位翻转区域时可以发现位翻转,接着可以通过错误检查和纠正(Error Correcting Code,简称ECC)算法对位翻转区域进行修复,其中,位翻转是指一个比特bit发生翻转或被报告翻转了。
上述现有技术是通过读操作来发现位翻转区域,然而,本领域技术人员在实现上述现有技术的过程中发现,若位翻转区域未及时发现,位翻转的位数超过一限值后,ECC算法将无法对该位翻转区域进行修复,从而导致闪存的可靠性较低。
技术实现要素:
为了解决上述技术问题,本发明提供了一种位翻转检测方法及装置,用以解决及时发现位翻转区域的问题。
为了达到本发明目的,本发明提供了一种位翻转检测方法,包括:
确定闪存分区的工作状态为空闲态,所述闪存设备包括至少一个闪存分 区;
对所述闪存分区进行分块扫描操作,用以确定所述闪存分区是否存在位翻转。
进一步的,所述确定闪存分区的工作状态为空闲态,包括以下任意一组或其组合:
确定闪存分区当前无用户访问;
确定当前CPU的第一使用率小于第一门限值,所述中央处理器CPU与所述闪存设备连接,用于对所述闪存设备进行控制操作;
确定当前内存的第二使用率小于第二门限值,所述内存与所述CPU连接。
进一步的,所述第一门限值为20%;所述第二门限值为50%。
进一步的,所述对所述存闪存分区进行分块扫描操作,包括:
向所述闪存设备发送分块读nanddump指令,所述分块读指令包括读取所述闪存分区的数据,用以确定所述闪存分区是否存在位翻转。
进一步的,所述对所述闪存分区进行分块扫描操作之后,还包括:
确定所述闪存分区存在位翻转区域;
将所述位翻转区域进行修复处理。
本发明提供了一种位翻转检测装置,包括:
确定模块,用于确定闪存分区的工作状态为空闲态,所述闪存设备包括至少一个闪存分区;
扫描模块,用于对所述闪存分区进行分块扫描操作,用以确定所述闪存分区是否存在位翻转。
进一步的,所述确定模块,具体用于执行以下任意一组或其组合:
确定闪存分区当前无用户访问;
确定当前中央处理器CPU的第一使用率小于第一门限值,所述CPU与所述闪存设备连接,用于对所述闪存设备进行控制操作;
确定当前内存的第二使用率小于第二门限值,所述内存与所述CPU连接。
进一步的,所述第一门限值为20%;所述第二门限值为50%。
进一步的,所述扫描模块,具体用于向所述闪存设备发送分块读nanddump指令,所述分块读指令包括读取所述闪存分区的数据,用以确定所述闪存分区是否存在位翻转。
进一步的,所述确定模块,还用于确定所述闪存分区存在位翻转区域;将所述位翻转区域进行修复处理。
在本实施例中,确定闪存分区的工作状态为空闲态,所述闪存设备包括至少一个闪存分区;对所述闪存分区进行分块扫描操作,用以确定所述闪存分区是否存在位翻转。实现了及时对闪存中位翻转区域的检测,从而提高了闪存的可靠性。
本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过在说明书、权利要求书以及附图中所特别指出的结构来实现和获得。
附图说明
附图用来提供对本发明技术方案的进一步理解,并且构成说明书的一部分,与本申请的实施例一起用于解释本发明的技术方案,并不构成对本发明技术方案的限制。
图1为本发明的位翻转检测方法一实施例的流程示意图;
图2为本发明的位翻转检测方法二实施例的流程示意图;
图3为本发明的位翻转检测装置一实施例的结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚明白,下文中将结合附图对本发明的实施例进行详细说明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互任意组合。
本发明实施例提供的位翻转检测方法具体应用于检测闪存,如Nand-flash 是否存在位翻转区域,其中,位翻转是指一个比特bit发生翻转或被报告翻转了。本实施例提供的位翻转检测实现方法可以通过位翻转检测装置执行,该位翻转检测装置可以单独设置,也可以设置在用于检测闪存是否位翻转的设备中,该设备可以为电脑或移动终端等,其中,该装置可以采用软/硬件实现。以下对位翻转检测方法及装置进行详细阐述。
图1为本发明的位翻转检测方法一实施例的流程示意图,如图1所示,本发明提供的位翻转检测方法适用于对闪存设备的该闪存分区进行读操作之前,该位翻转检测方法,包括:
步骤101、确定闪存分区的工作状态为空闲态。
在本实施例中,所述闪存设备包括至少一个闪存分区,所述闪存分区包括至少一个存储区域,所述存储区域的大小与擦除块的大小相同。举例来讲,NandFlash的数据是以比特bit的方式保存在存储单元(memory cell)中,一般来说,一个存储单元中只能存储一个bit。这些存储单元以8个bit或者16个bit为单位,连成比特线(bit line),形成所谓的字节(byte/word),这就是闪存的位宽。这些bit line会再组成页(page),页会组成块(block)。NandFlash以页为单位读写数据,以块为单位擦除数据。
举例来讲,对于确定闪存分区的工作状态为空闲态,包括以下任意一组或其组合:
确定闪存分区当前无用户访问;
确定当前CPU的第一使用率小于第一门限值,所述中央处理器CPU对所述闪存设备进行控制操作;
确定当前内存的第二使用率小于第二门限值,所述内存与所述CPU连接。
步骤102、对所述闪存分区进行分块扫描操作,用以确定所述闪存分区是否存在位翻转。
在本实施例中,确定闪存分区的工作状态为空闲态,闪存设备包括至少一个闪存分区;对所述闪存分区进行分块扫描操作,用以确定所述闪存分区是否存在位翻转。实现了及时对闪存中位翻转区域的检测,从而提高了闪存的可靠性。
需要说明的是,在上述实施例的基础上,所述第一门限值可以为20%;所述第二门限值可以为50%。
进一步的,在上述实施例的基础上,对所述闪存分区进行分块扫描操作,可以包括:
向所述闪存设备发送分块读nanddump指令,所述分块读指令包括读取所述闪存分区的数据,用以确定所述闪存分区是否存在位翻转。
更进一步的,在上述实施例的基础上,所述对所述闪存分区进行分块扫描操作之后,还包括:
确定所述闪存分区存在位翻转区域;
将所述位翻转区域进行修复处理。
图2为本发明的位翻转检测方法二实施例的流程示意图,如图2所示,该方法包括:
步骤201、确定闪存中闪存分区的数目,用以确定需要扫描的闪存分区数目。
步骤202、根据闪存中擦除块大小,确定每一闪存分区需要扫描的次数。
先以一个闪存分区作为当前闪存分区,进行步骤202。
举例来讲,将每一闪存分区的大小与擦除块大小相除,接着将相除结果取整后获得需要扫描的次数。
步骤203、获取内存当前的第二使用率;
步骤204、获取CPU当前的第一使用率;
步骤205、检查当前闪存分区是否有其他用户正在访问;
步骤206、确定闪存分区的工作状态为空闲态。
具体的,根据步骤203~205的结果,若确定闪存分区的工作状态为空闲态,则执行步骤207;若确定闪存分区的工作状态不为空闲态,则进入休眠状态,在第一预设时长,如24小时后自动从休眠状态恢复,执行步骤201。
举例来讲,对于确定闪存分区的工作状态为空闲态的实现方式,包括:
内存使用率小于50%,CPU使用率小于20%,且当前闪存分区没有用户 正在访问。
需要说明的是,若以上任意没有满足,则确定闪存分区的工作状态不为空闲态。
步骤207、对所述闪存分区进行分块扫描操作,用以确定所述闪存分区是否存在位翻转。
具体的,执行分块读nanddump命令读取闪存数据。该过程中如果发现位翻转问题,会由硬件自动进行修复。
步骤208、确定该闪存分区是否扫描完毕。
具体的,根据步骤202中获得该闪存分区扫描次数,确定该闪存分区是否扫描完毕,若未扫描完毕,则执行步骤203,即重复步骤203-步骤205。若扫描完毕,则执行步骤209。
步骤209、确定闪存设备的所有闪存分区是否扫描完毕。
具体的,若未扫描完毕,则将未扫描的闪存分区中的一个作为当前闪存分区,执行步骤202,若扫描完毕,进入休眠状态,在第二预设时长,如24小时后自动从休眠状态恢复,执行步骤201。
图3为本发明的位翻转检测装置一实施例的结构示意图,如图3所示,该位翻转检测装置,包括:确定模块31和扫描模块32。其中,
确定模块31,用于确定闪存分区的工作状态为空闲态,所述闪存设备包括至少一个闪存分区;
扫描模块32,用于对所述闪存分区进行分块扫描操作,用以确定所述闪存分区是否存在位翻转。
在本实施例中,确定闪存分区的工作状态为空闲态,闪存设备包括至少一个闪存分区;对所述闪存分区进行分块扫描操作,用以确定所述闪存分区是否存在位翻转。实现了及时对闪存中位翻转区域的检测,从而提高了闪存的可靠性。
在上述实施例的基础上,所述确定模块31,具体用于执行以下任意一组或其组合:
确定闪存分区当前无用户访问;
确定当前CPU的第一使用率小于第一门限值,所述中央处理器CPU与所述闪存设备连接,用于对所述闪存设备进行控制操作;
确定当前内存的第二使用率小于第二门限值,所述内存与所述CPU连接。
进一步的,在上述实施例的基础上,所述第一门限值为20%;所述第二门限值为50%。
进一步的,在上述实施例的基础上,所述扫描模块32,具体用于向所述闪存设备发送分块读nanddump指令,所述分块读指令包括读取所述闪存分区的数据,用以确定所述闪存分区是否存在位翻转。
进一步的,在上述实施例的基础上,所述确定模块31,还用于确定所述闪存分区存在位翻转区域;将所述位翻转区域进行修复处理。
本实施例,减小了因位翻转累积而带来的不可修复的错误,降低了数据或文件损坏的几率,提高了系统的可靠性,同时又不影响系统性能,本实施例中的系统包括内存、CPU和闪存。
虽然本发明所揭露的实施方式如上,但所述的内容仅为便于理解本发明而采用的实施方式,并非用以限定本发明。任何本发明所属领域内的技术人员,在不脱离本发明所揭露的精神和范围的前提下,可以在实施的形式及细节上进行任何的修改与变化,但本发明的专利保护范围,仍须以所附的权利要求书所界定的范围为准。