本发明涉及SSD固态硬盘检测,特别是一种固态硬盘、读错误检测装置及读不可纠错误原因的检测方法。
背景技术:
::首先介绍与NANDFlash读数据错误相关的两个基本特性:1)DataRetention:数据保持,NANDFlash上的数据是由保存在每个存储单元的浮动栅极中的电子数决定的,但是浮动栅极中的电子会发生逃逸;时间越长、温度越高、块的擦除次数越大,从浮动栅极中逃逸的电子数就越多,NANDFlash数据保持能力越弱,最终导致数据错误;2)ReadDisturb:读干扰,由于NANDFlashBlock的物理结构,在对Block内某一FlashPage进行读取时,需要对其他FlashPage施加正向导通电压;虽然导通电压小于编程电压,但仍然会使少量电子进入浮动栅极,导致这些未被读取的FlashPage中的电子数增多;读取次数越多,未被读取的FlashPage中增加的电子数越多,最终导致数据错误。由于NANDFlash的数据错误是不可避免的,因此SSD都有纠错模块用于纠正从NANDFlash所读取数据中的错误;但是纠错算法的纠错能力是有限的,当数据中的错误超过纠错算法极限时,错误将不可恢复(UNC,UncorrectableError)。在目前主流的采用MLC或TLCNANDFlash的SSD中,纠错算法都采用LDPC,并支持多个纠错等级:纠错等级越低,校验数据越少、可纠错误越少;纠错等级越高,冗余数据越多、可纠错误越多。在具体实现时,随着NANDFlash的磨损加重(擦除次数越大),采用的纠错等级越高。目前市面上的SSD主控在发生读FlashPage不可纠错误时,直接将FlashPage标记为坏页,在此后读写业务中不再使用该Page。但是该FlashPage并不是物理上的损坏,而是Flash本身特性导致。因此,直接将发生读不可纠错误的FlashPage标为坏页将导致本身可用的FlashPage不再使用,从而导致SSD容量减小、寿命缩短。本发明中用到的缩写解释如下:SSD:SolidStateDrive,固态硬盘;SSDController:SSD主控,用于接收、调度、执行主机命令,管理主机逻辑地址到NANDFlash物理地址映射,完成垃圾回收、巡检、磨损均衡等NANDFlash管理算法和擦失败、编程失败等NANDFlash异常处理等功能;NANDFlash:SSD的存储介质,由多个block组成,每个block包含一定数量的page,必须以block为单位进行擦除操作,以page为单位进行编程、读取操作,在进行编程前必须先擦除;根据一个存储单元所存储的bit数不同,NANDFlash分为SLC(SingleLevelCell,一个单元存储一个bit)、MLC(MultiLevelCell,一个单元存储两个bit)、TLC(TripleLevelCell,一个单元存储三个bit)。ReadDisturb:读干扰,NANDFlash的基本特性之一,在读取FlashPage时由于对同一block内其他FlashPage施加了导通电压而导致少量电子进入存储单元的浮动栅极,在读取次数达到一定数量后造成FlashPage存储数据错误;DataRetention:数据保持,NANDFlash基本特性之一,存储在NANDFlash存储单元浮动栅极中的电子逃逸导致其中存储电子减少,时间越长、温度越高、颗粒磨损越严重,电子逃逸越快,NANDFlash数据保持能力越弱,最终导致FlashPage存储数据错误;LDPC:LowDensityParityCheck,低密度奇偶校验编码,一种常用的数据编码及纠错算法。技术实现要素:本发明所要解决的技术问题是,针对现有技术不足,提供一种固态硬盘、读错误检测装置及读不可纠错误原因的检测方法。为解决上述技术问题,本发明所采用的技术方案是:一种固态硬盘,包括SSD控制器、多个与所述SSD控制器双向通信的NANDFlash;其特征在于,所述SSD控制器包括:LDPCEncoder:用于在向NANDFlash写数据时,CPU控制其按照指定的纠错级别对写入数据进行编码、加入校验数据;LDPCDecoder:用于在从NANDFlash读数据时,对读数据进行解码、去除校验数据并纠正读数据中的错误bit,同时向CPU报告本次纠错的迭代次数和比特翻转数;如果发生不可纠读错误时,向CPU报告UNC错误;SoftReadOffset模块:用于当LDPCDecoder向CPU报告UNC错误后,CPU通过调整读参考电压从NANDFlash读取原始数据并转化为在相应参考电压下的概率信息,然后再经过LDPCDecoder进行软解码纠错;如果UNC错误仍然不可纠,继续调整读参考电压再进行原始数据读取、转化和LDPC软解码纠错,直到达到最大软解码纠错次数为止(LDPC解码分为硬解码和软解码,硬解码即直接对从NANDFlash中读出的数据进行解码纠错,软解码即在调整读NANDFlash时的参考电压后再读取数据,并将所读取的数据转化为该数据是否正确的概率信息,然后再将概率信息和所读出的数据交由LDPC进行软解码纠错;软解码的纠错能力高于硬解码,因此一般硬解码纠错失败后再进行软解码,而软解码所需要的数据概率信息则依赖softreadoffset调整NANDFlash读参考电压、读取数据);读干扰管理模块:用于以FlashBlock为单位统计每个Block的读取次数与数据错误信息,确定是否是读干扰导致读UNC错误,且在Block被回收擦除完成后清零;FlashBlock最优读参考电压自适应跟踪模块:用于在每个FlashBlock擦写次数每增加一定值后则对该FlashBlock步进调整读参考电压,成对地读取FlashBlock内每一存储单元行线上的各个FlashPage(对MLC为LowerPage,对TLC为LowerPage、MiddlePage、UpperPage)、并根据阈值电压的分布确定出Block最优读参考电压,当发生不可纠读错误时、数据保持(DataRetention)检测模块即可根据Block的当前最优读参考电压与自适应跟踪的最优读参考电压差值确定不可纠读错误是否由Flash数据保持特性导致;FlashBlock状态管理模块:用于记录每个FlashBlock的擦写次数(ProgramEraseCount)、当前使用的LDPC纠错级别和最优读参考电压,记录FlashBlock是否为坏块。对应上述固态硬盘,本发明还提供了一种NANDFlash读错误检测装置,包括主机和上述SSD固态硬盘;所述主机用于向所述SSD控制器下发读、写等数据命令。相应的,利用上述检测装置检测读UNC错误原因的方法包括:读干扰检查:如果检测到不可纠读错误(UncorrectableReadError)为读干扰导致,则回收这个发生读不可纠错误的FlashBlock内数据、擦除该block并用于新的数据读写,检测结束;数据保持检查:如果检测到读不可纠错误为DataRetention导致,则回收这个发生读不可纠错误的FlashBlock内的有效数据、擦除该block并用于新的数据读写,检测结束;LDPC纠错级别调整:如果导致读不可纠错误的原因不是读干扰和数据保持,则进入LDPC纠错级别调整;首先将这个发生读不可纠错误的FlashBlock内的有效数据进行回收,然后将该Block的LDPC纠错等级加1,并对其进行读写测试、统计读发生的错误数以确定该等级是否适用于当前Block;如果LDPC纠错等级不适合该Block则继续提高LDPC纠错等级、进行读写测试,直到找到适合该Block的纠错等级并记录在FlashBlock状态管理模块中;如果最大的LDPC纠错等级也不适合该Block,则在FlashBlock状态管理中将该Block标记为坏块。所述读干扰检查由读干扰管理模块完成,具体实现过程为:所述读干扰管理模块维护一张以Block为索引的表,表中记录每个Block的读取次数和读错误数据;如果在发生不可纠读错误(UncorrectableReadError)时,该读取次数和读错误数据超过阈值L(L大于等于10),则确定为读干扰导致读不可纠错误。所述数据保持检查的确定过程包括(以MLCNANDFlash为例):在block编程完成且擦除次数达到一定值(1000的整数倍)后,重新计算该block的最优参考电压Vref_A、Vref_B、Vref_C;在进行数据Retention检查时重新计算该block的最优参考电压Vref_A’、Vref_B’、Vref_C’;如果Vref_A’、Vref_B’、Vref_C’对应与Vref_A、Vref_B、Vref_C的差值均超过阈值M(M大于等于10mv),则确定导致不可纠读错误的原因为数据保持。LDPC纠错级别调整的步骤包括:1)搬移block内有效数据;2)在有效数据搬移完成后,擦除block用于后续的读写测试;3)判断block当前的纠错等级是否已经达到最大等级;如果当前纠错等级已经达到最大等级,则直接将block标记为坏块而不再使用;如果未达到最大等级,则将纠错等级提高一级;4)对block按照page顺序依次写入随机数据;5)对block按照page顺序依次读取数据;在读取过程中统计LDPCDecoder上报的纠错迭代次数和SoftReadRetry次数;6)判断LDPCDecoder迭代次数是否超过阈值N(N小于等于50);如果LDPCDecoder迭代次数超过阈值,则返回步骤2)再进行下一轮测试;判断SoftReadOffset次数是否超过阈值S(S小于等于50);如果SoftReadOffset次数超过阈值,则返回步骤2)再进行下一轮测试;如果LDPCDecoder迭代次数和SoftReadOffset次数均小于阈值,则说明纠错等级适用于该block,因此将block擦除用于后续的数据读写。与现有技术相比,本发明所具有的有益效果为:本发明提供了一种对NANDFlash读不可纠错误的原因检测和处理方法,根据导致不可纠读错误的不同原因选择不同的处理策略,从而保证了FlashPage的使用寿命最大化、进而提高SSD的使用寿命。附图说明图1为NANDFlash读错误原因检测涉及模块;图2为NANDFlash读不可纠错误原因检测与后处理整体流程;图3为NANDFlashDataRetention阈值电压漂移示意图;图4为LDPC纠错级别调整流程。具体实施方式如图1,本发明所涉及的系统模块包括:HOST:主机,固态硬盘的使用者,通过SATA或PCIE接口与盘片连接,向盘片下发读写等数据命令和其他管理命令;SSD:固态硬盘,主要由SSD控制器和存储介质NANDFlash组成;Controller:SSD控制器,主机和NANDFlash之间的桥梁,负责调度、执行主机命令并转化为NANDFlash的读写命令;此外,控制器还负责NANDFlash的垃圾回收、巡检、均衡等NANDFlash管理算法和读、写、擦错误异常处理;NANDFlash:固态硬盘的存储介质,具有非易失、高存储密度等特点;CPU:控制器内部的控制、管理单元,负责读写调度、地址转换、NANDFlash读、写、管理等功能;LDPCEncoder&LDPCDecoder:固态硬盘中的一种NANDFlash数据错误纠错模块,在向NANDFlash写数据时LDPCEncoder负责对写入数据进行编码、加入校验数据;在从NANDFlash读数据时LDPCDecoder负责对读数据进行解码、去除校验数据并纠正读数据中的错误bit,同时向CPU报告本次纠错的迭代次数和比特翻转数;如果发生不可纠错误时,向CPU报告UNC错误;SoftReadOffset:软件读偏移,当LDPCDecoder向CPU报告UNC错误后,CPU通过ReadOffset调整NANDFlash读参考电压从Flash读取原始数据并转化为在相应参考电压下的概率信息,然后再经过LDPCDecoder进行软解码纠错;如果错误仍然不可纠,则继续调整参考电压再进行原始数据读取、转化和LDPCDecoder软解码,直到达到最大纠错次数为止;BlockRDCManagement:读干扰管理模块,以block为单位统计其读取次数与数据错误信息,在该block被回收擦除完成后清零;BlockOptimalReadVoltageAdaptiveTrack:block最优读参考电压自适应跟踪模块,该模块根据步进值调整读参考电压成对地读取block内每一个WordLine上的FlashPage(SLC只读一个page,MLC读取LowerPage、UpperPage,TLC读取LowerPage、MiddlePage、UpperPage),再根据不同类型颗粒的阈值电压(SLC两个阈值电压、MLC四个阈值电压、TLC八个阈值电压)的分布规律确定出block最优读参考电压;数据保持检测模块可根据最优参考电压的漂移确定读不可纠错误是否是由数据保持特性导致。BlockStateManagement:NANDFlash块状态管理模块,用于记录每个FlashBlock的擦写次数(ProgramEraseCount)、当前使用的LDPC纠错级别和最优读参考电压、是否为坏块等信息。其中最优读参考电压自适应模块可根据擦写次数确定是否启动最优自适应电压计算、并将计算出的最优参考电压记录在该模块中,LDPC纠错等级用于在向NANDFlash写数据时指定编码级别、在从NANDFlash读数据时指定解码级别,如果某个块达到LDPC最大纠错级别仍然发生读不可纠错误则在块状态管理模块中将其标记为坏块、在后续的数据读写中不使用该block。如图2所示,在LDPCDecoder向CPU报告UNC错误后,CPU获取发生UNC的NANDFlash地址再分别进行如下检查:1)ReadDisturb检查:如果检测到读不可纠错误(ReadUncorrectableError)为读干扰导致,则回收这个发生读不可纠错误的Block内有效数据、擦除该block并用于新的数据读写,检测结束;2)DataRetention检查:如果检测到读不可纠错误(ReadUncorrectableError)为DataRetention导致,则回收这个发生读不可纠错误的Block内有效数据、擦除该block并用于新的数据读写,检测结束;3)LDPC纠错级别调整:如果导致读不可纠错误(ReadUncorrectableError)的原因不是读干扰和DataRetention,则进入LDPC纠错级别调整;首先将这个发生读不可纠错误的FlashBlock内的有效数据进行回收,然后将该Block的LDPC纠错等级加1,并对其进行读写测试、统计读发生的错误数以确定该等级是否适用于当前Block;如果该LDPC纠错等级不适合该Block则继续提高LDPC纠错等级、进行读写测试,直到找到适合该Block的纠错等级并记录在FlashBlock状态管理模块中;如果最大的LDPC纠错等级也不适合该Block,则在FlashBlock状态管理中将该Block标记为坏块;4.3ReadDisturb检查读干扰检查主要由BlockRDCMangement模块完成,该模块维护了一张以block为索引的表,表中记录每个block的读取次数和读错误数据(每次读取时的比特翻转数累加值);如果在发生UNC时,读次数和读错误数据超过阈值,则确定为读干扰导致UNC。4.4DataRetention检查DataRetention为NANDFlash存储单元的浮动栅极中的电子逃逸产生,当逃逸电子数达到一定数量将导致阈值电压(即最优读参考电压)分布向左漂移;而在读取NANDFlash数据时采用漂移之前的参考电压将导致数据错误,当错误超过LDPC纠错极限时发生UNC,如图3所示。本发明中,在block编程完成且擦除次数达到一定值(擦除次数每增加1000)后则重新计算该block的最优参考电压Vref_A、Vref_B、Vref_C(以MLC为例);当DataRetention达到一定程度时由于阈值电压漂移,在读取该block内数据时如果仍然采用Vref_A、Vref_B、Vref_C将导致数据错误并发生UNC;在进行DataRetention检查时重新计算该block的最优参考电压Vref_A’、Vref_B’、Vref_C’;如果Vref_A’、Vref_B’、Vref_C’与Vref_A、Vref_B、Vref_C的差值超过阈值,则确定导致UNC的原因为DataRetention。在本发明中LDPC纠错算法支持8级纠错,纠错级别越高、单位数据内可纠正的错误越多。对NANDFlash而言,随着磨损的增加、PE次数逐渐增大、数据错误越多,因此需要根据各个block的磨损程度选择适合的LDPC纠错等级。当读FlashPage发生不可纠错误时,如果不是ReadDisturb或DataRetention导致,则可能是当前的LDPC纠错等级已经不能满足该block当前磨损程度下的纠错能力需求,因此将LDPC纠错等级提高到适当等级,该block即可再次用于数据读写。LDPC纠错级别调整流程如图4所。LDPC纠错等级调整流程如下:1)搬移block内有效数据;由于LDPC纠错等级调整需要对block进行不同等级下的读写测试,因此需要先将block内的有效数据进行搬移;2)擦除block;在有效数据搬移完成后,擦除block用于后续的读写测试;3)判断block当前的纠错等级是否已经达到最大等级;如果当前纠错等级已经达到最大等级,则直接将block标记为坏块而不再使用;如果未达到最大等级,则将纠错等级提高一级;4)对block按照page顺序依次写入随机数据;5)对block按照page顺序依次读取数据;在读取过程中统计LDPCDecoder上报的纠错迭代次数和SoftLDPCReadRetry次数;6)判断LDPCDecoder迭代次数是否超过阈值;如果LDPCDecoder迭代次数超过阈值,则返回步骤2再进行下一轮测试;7)判断SoftLDPCReadRetry次数是否超过阈值;如果SoftLDPCReadRetry次数超过阈值,则返回步骤2再进行下一轮测试;8)擦除block;如果LDPCDecoder迭代次数和SoftLDPCReadRetry次数均小于阈值,则说明纠错等级适用于该block,因此将block擦除用于后续的数据读写。当前第1页1 2 3 当前第1页1 2 3