固态存储装置的读取重试方法与流程

文档序号:20616396发布日期:2020-05-06 20:12阅读:320来源:国知局
固态存储装置的读取重试方法与流程

本发明是有关于一种固态存储装置的控制方法,且特别是有关于一种固态存储装置的读取重试方法。



背景技术:

众所周知,固态存储装置(solidstatestoragedevice,简称ssd)已经非常广泛的应用于各种电子产品,例如sd卡、笔记本电脑、服务器、数据中心等等。

一般来说,固态存储装置中包括一非易失性存储器(non-volatilememory)。当数据写入非易失性存储器后,一旦固态存储装置的电源被关闭,数据仍可保存在非易失性存储器中。

请参照图1a,其所示为现有固态存储装置示意图。固态存储装置10包括:控制电路130以及非易失性存储器110。其中,控制电路130中包括错误更正码电路(简称ecc电路)134。再者,固态存储装置10更包括读取表136。如图1a所示,固态存储装置10的读取表136设计于控制电路130中。当然,除了设计于控制电路130之外,固态存储装置10的读取表136也可以设计于非易失性存储器110中。

固态存储装置10经由一外部总线152连接至主机(host)150,其中外部总线152可为usb总线、sata总线、pcie总线、m.2总线或者u.2总线等等。

再者,控制电路130连接至非易失性存储器110,用以根据主机150所发出的写入命令进一步将主机150的写入数据存入非易失性存储器110,以及根据主机150所发出的读取命令由非易失性存储器110中取得读取数据,经由控制电路130传递至主机150。

非易失性存储器110包括多个晶粒(die)111~126,并组成容错式磁盘阵列(redundantarrayofindependentdisk,简称raid)用以提高数据的可靠度。再者,晶粒111~126可为与非门快闪存储器晶粒(nandflashdie)。

在具备raid功能的固态存储装置10中,多个晶粒111~126中的至少一个晶粒是用来存储同位数据(paritydata)。以使用最后一个晶粒126来存储同位数据为例,控制电路130会将主机150的写入数据分配为多笔子写入数据,并且将多笔子写入数据写入晶粒111~125中。同时,控制电路130会产生对应此多笔子写入数据的同位数据,并写入最后一个晶粒126中。

举例来说,假设非易失性存储器110中共有16个晶粒111~126,最后一个晶粒126用来存储同位数据,且固态存储装置10中所设定的条带化尺寸(stripesize)为160kbytes。当控制电路130接收了150kbytes的写入数据后,控制电路130会对150kbytes的写入数据进行raid运算并产生10kbytes的同位数据(paritydata)。此时,写入数据加上同位数据相当于条带化尺寸(stripesize)的160kbytes,而控制电路130会将其写入对应的晶粒111~126中。

当控制电路器130执行读取命令时,控制电路130可由晶粒111~125中取得15笔子写入数据。若此15笔子写入数据皆可通过ecc电路134解码成功,则可组成150kbytes的读取数据并传递至主机150。若其中一笔子写入数据无法通过ecc电路134解码成功,在具备raid功能的固态存储装置10中,控制电路130可选择通过raid恢复(raidrecovery)程序来恢复数据。即,控制电路130可通过其它14笔子写入数据以及其对应的同位数据来进行raid恢复运算,以还原该笔子写入数据。接着,还原后的该笔子写入数据再与其它14笔子写入数据组成150kbytes的读取数据并传递至主机150。

再者,每个晶粒111~126中包含多个存储单元(memorycell),而所有的存储单元可组成存储单元阵列。再者,存储单元阵列被划分成多个区块(block),每个区块再分成多个页(page)。

而根据每个存储单元所存储的数据量,可进一步区分为每个存储单元存储一位的单级存储单元(single-levelcell,简称slc存储单元)、每个存储单元存储二位的多级存储单元(multi-levelcell,简称mlc存储单元)、每个存储单元存储三位的三级存储单元(triple-levelcell,简称tlc存储单元)以及每个存储单元存储四位的四级存储单元(quad-levelcell,简称qlc存储单元)。因此,非易失性存储器110中的存储单元阵列可为slc存储单元阵列、mlc存储单元阵列、tlc存储单元阵列或者qlc存储单元阵列。

请参照图1b,其所示为tlc存储单元的存储状态示意图。tlc存储单元的一个存储单元可以根据载流子的注入量而呈现八个存储状态“erase”、“a”~“g”。在未注入载流子时,存储单元可视为存储状态“erase”,而随着载流子注入的量的增加,可再区分为其他七种存储状态“a”~“g”。举例来说,存储状态“g”的存储单元具有最高的临限电压电位,存储状态“erase”的存储单元具有最低的临限电压电位。再者,当存储单元经过抹除动作(eraseaction)之后,皆会恢复至未注入载流子的存储状态“erase”。

一般而言,于编程动作(programaction)时,若将多个存储单元编程为相同的存储状态时,并非每个存储单元的临限电压都会相同,而是会呈现一分布曲线(distributioncurve),且其分布曲线可对应至一中位临限电压。

由图1b可知,存储状态“erase”的中位临限电压为ver,存储状态“a”的中位临限电压为va、存储状态“b”的中位临限电压为vb、存储状态“c”的中位临限电压为vc、存储状态“d”的中位临限电压为vd,存储状态“e”的中位临限电压为ve、存储状态“f”的中位临限电压为vf、存储状态“g”的中位临限电压为vg。举例来说,在统计存储状态“a”的所有存储单元的临限电压后,中位临限电压va的存储单元数目最多。

如图1b所示,根据tlc存储单元中各个存储状态的分布曲线即可据以产生七个读取电压vra~vrg作为预设读取电压组(defaultreadvoltageset)。于读取动作(readaction)时,控制电路130即提供预设读取电压组至非易失性存储器110,以检测存储单元阵列109中tlc存储单元的存储状态。

如图1b所示,预设读取电压组vra~vrg是用来决定tlc存储单元存储状态的重要依据。举例来说,非易失性存储器110提供读取电压vrg至存储单元阵列109。临限电压大于读取电压vrg而无法被开启的存储单元即可被判定为存储状态“g”,而临限电压小于读取电压vrg而被开启的存储单元即被判定为不是存储状态“g”。换言之,运用预设读取电压组vra~vrg的七个读取电压即可判断出tlc存储单元的八种存储状态。

同理,运用预设读取电压组的三个读取电压即可判断出mlc存储单元的四种存储状态。而运用一个预设读取电压即可判断出slc存储单元的二种存储状态。

如图1c所示,其所示为tlc存储单元的存储状态偏移示意图。固态存储装置10在实际使用的时候会遇到各种不同的操作条件。例如编程失败(programfail)、读写温差过大(write/readtemperaturedifference)、重复读取(readdisturb)的情况。重复读取是指重复地对同一区块(block)内的页(page)进行读取,而当读取次数足够多时(例如上万次或更多),可能导致该区块内某特定的页内的存储单元的分布曲线会发生偏移(shift)、扭曲(distortion)。另外,当存储单元中的写入数据放置时间(dataretentiontime)过久(例如在40度c存储数据放置1个月以上)时,也可能会造成分布曲线偏移、扭曲。

上述的各种情况皆会造成存储单元阵列109中的存储单元的分布曲线偏移、扭曲,当分布曲线偏移、扭曲太过严重时,将会使ecc电路134无法成功地更正所有的错误位。

如图1c所示,当tlc存储单元的分布曲线偏移、扭曲后,存储状态“erase”的中位临限电压为ver′,存储状态“a”的中位临限电压为va’、存储状态“b”的中位临限电压为vb’、存储状态“c”的中位临限电压为vc’、存储状态“d”的中位临限电压为vd’,存储状态“e”的中位临限电压为ve’、存储状态“f”的中位临限电压为vf’、存储状态“g”的中位临限电压为vg’。

此时,利用预设读取电压组vra~vrg来决定tlc存储单元存储状态时,将会造成读取数据中的错误位(errorbits)增加,使ecc电路134无法成功地更正读取数据中所有的错误位,因而无法输出正确的读取数据至主机150。此时,控制电路130需要进入读取重试(readretry)。

请参照图1d,其所示为读取表示意图。读取表136中包括三个子读取表136a、136b与136c。举例来说,子读取表136a中记录了预设读取电压组rsd;子读取表136b中记录了n笔重试读取电压组rsb1~rsbn;子读取表136c中记录了m笔重试读取电压组rsc1~rscm。再者,子读取表136b与136c中的重试读取电压组rsb0~rsbn与rsc0~rscm用于读取重试流程中。

请参照图2,其所示为现有固态存储装置的读取动作流程图。当控制电路130收到主机150所发出的读取命令时,控制电路130开始读取动作。

首先,控制电路130进行正常读取(normalread)程序(步骤s210)。于正常读取程序(步骤s210)时,控制电路130提供子读取表136a中的预设读取电压组rsd至非易失性存储器110,以对非易失性存储器110中的指定读取区块进行数据读取,以取得读取数据并进行错误更正。当ecc电路134可更正读取数据中的错误位(errorbits)时,控制电路130可将正确的读取数据传递至主机150。此时,控制电路130确认读取成功(步骤s212)。反之,当ecc电路134无法更正读取数据中的错误位时,则确认未读取成功(步骤s212),且控制电路130进入正常读取重试流程(normalreadretry)。

于进行正常读取重试流程时,控制电路130会依序进行读取电压偏移解码(readlevelshiftread)程序(步骤s220)、读取电压校正(readlevelcalibration)程序(步骤s230)、raid恢复(raidrecovery)程序(步骤s240)、软件解码(softdecode)程序(步骤s250)。

由图2可知,在进行读取重试流程的过程,当控制电路130进行任一个程序而读取成功(步骤s222、步骤s232、步骤s242、步骤s252)时,控制电路130即不再进行后续的程序,并将正确的读取数据传递至主机150。另外,如果控制电路130进行上述所有程序后皆无法读取成功,控制电路130会回复读取失败(步骤s260)至主机150。以下详细说明。

请参照图3a,其所示为读取电压偏移解码程序流程图。于进行读取电压偏移解码程序(步骤s220)时,控制电路130会将读取表136中子重试表136b的重试读取电压组依序提供至非易失性存储器110用以获得正确的读取数据。

首先,设定x=1(步骤s320),并提供重试读取电压组rsbx至非易失性存储器110(步骤s321)。当重试读取电压组rsbx提供至非易失性存储器110后,控制电路130利用ecc电路134中的硬件解码来更正非易失性存储器110回传的读取数据中的错误位。当读取数据中的错误位可以被更正时,即可获得正确的读取数据(步骤s322),并确认读取成功(步骤s325)。

反之,于无法获得正确的读取数据时(步骤s322),控制电路130判断是否x等于n(步骤s323)。当x不等于n时,将x增加1(步骤s324)并回到步骤s321。当x等于n时,代表最后一笔重试读取电压组rsbn仍无法成功获得正确的读取数据,因此控制电路130确认未读取成功(步骤s326)。

由以上的说明可知,控制电路130的子读取表136b中存储n笔重试读取电压组rsb1~rsbn。只要控制电路130利用其中的一个重试读取电压组而能够获得正确的读取数据时,即代表读取成功(步骤s325)。反之,如果控制电路130提供了全部的n笔重试读取电压组rsb1~rsbn至非易失性存储器110后仍无法获得正确的读取数据时,即代表未读取成功(步骤s326)。

当确认未读取成功(步骤s326)时,如图2所示,控制电路130接着依序进入正常读取重试流程中的下一个程序,即读取电压校正程序(步骤s230)。

请参照图3b,其所示为读取电压校正程序流程图。于进行校正程序(步骤s230)时,控制电路130会由子读取表136b中选定一重试读取电压组rsby作为初始电压组(步骤s330)。接着,控制电路130将重试读取电压组rsby校正为最佳重试读取电压组rsby’(步骤s331)。一般来说,在进行校正程序时,控制电路130会将重试读取电压组rsby中的读取电压vra~vrg进行微调后,即获得最佳重试读取电压组rsby’。

接着,控制电路130将最佳重试读取电压组rsby’提供至非易失性存储器110(步骤s332)。接着,控制电路130利用ecc电路134来更正非易失性存储器110回传的读取数据中的错误位。当读取数据中的错误位可以被更正时,即可获得正确的读取数据(步骤s333),并确认读取成功(步骤s334)。反之,当读取数据中的错误位无法被更正时,即表示未获得正确的读取数据(步骤s333),并确认未读取成功(步骤s335)。

当确认未读取成功(步骤s335)时,如图2所示,控制电路130接着依序进入正常读取重试流程中的下一个程序,即raid恢复程序(步骤s240)。

请参照图3c,其所示为raid恢复程序流程图。于进行raid恢复程序(步骤s240)时,控制电路130利用同位数据来进行raid恢复运算(步骤s340)。举例来说,在正常读取程序(步骤s210)中,控制电路130可由非易失性存储器110中的晶粒111~125分别取得读取数据,而当晶粒111~125中的其中一个读取数据无法通过ecc电路134解码成功时,则确认未读取成功(步骤s212),且控制电路130进入读取重试。当读取重试进行到raid恢复程序(步骤s240)时,假设晶粒111中的读取数据无法通过ecc电路134解码成功,则控制电路130可利用其他晶粒112~125中的读取数据以及晶粒126中的同位数据来进行raid恢复运算(步骤s340),以还原晶粒111中的读取数据。当读取数据可通过raid恢复运算还原时,即可获得正确的读取数据(步骤s341),并确认读取成功(步骤s342)。反之,当读取数据无法通过raid恢复运算还原时,即表示未获得正确的读取数据(步骤s341),并确认未读取成功(步骤s343)。

当确认未读取成功(步骤s343)时,如图2所示,控制电路130接着依序进入正常读取重试流程中的下一个程序,即软件解码程序(步骤s250)。

请参照图3d,其所示为软件解码程序流程图。于进行软件解码程序(步骤s250)时,控制电路130会将读取表136中子重试表136c的重试读取电压组rsc1~rscm依序提供至非易失性存储器110用以获得正确的读取数据。

首先,设定x=1(步骤s350)。接着,控制电路130将重试读取电压组rscx提供至非易失性存储器110以获得硬件信息(hardinformation)与软件信息(softinformation)(步骤s351)。举例来说,非易失性存储器110根据重试读取电压组rscx产生硬件信息与软件信息提供给ecc电路134的软件解码做为解码的迭代运算(iterativeoperation)依据。当在正常读取程序(步骤s210)中使用预设读取电压组rsd所得到的读取数据中的错误位可被ecc电路134的软件解码更正时,即可获得正确的读取数据(步骤s352),并确认读取成功(步骤s355)。

反之,于无法获得正确的读取数据时(步骤s352),控制电路130判断是否x等于m(步骤s353)。当x不等于m时,将x增加1(步骤s354)并回到步骤s351。当x等于m时,代表利用最后一笔重试读取电压组rscm所得到的硬件信息与软件信息仍无法让ecc电路134的软件解码成功更正读取数据中的错误位,而无法成功获得正确的读取数据,因此控制电路130确认未读取成功(步骤s356)。

根据图2的读取动作流程图可知,现有固态存储装置10在进入读取重试流程后,必须依照固定的顺序来进行读取电压偏移解码程序(步骤s220)、读取电压校正程序(步骤s230)、raid恢复程序(步骤s240)与软件解码程序(步骤s250)。再者,子读取表136b运用于电压偏移解码程序(步骤s220)与读取电压校正程序(步骤s230),而子读取表136c运用于软件解码程序(步骤s250)。

明显地,由于控制电路130进行的程序很多,固态存储装置10在读取重试时,可能耗费相当长的时间,才能获得正确的读取数据,使得固态存储装置10的读取延迟时间(latencytime)大幅地增加。

或者,固态存储装置10在读取重试时,可能发生读取时间过久而造成超时(timeout)的情形而无法读取成功。



技术实现要素:

本发明有关于一种固态存储装置的读取重试方法,该固态存储装置连接至一主机,且该固态存储装置包括一非易失性存储器,该读取重试方法包括下列步骤:判断该非易失性存储器中的一指定读取区块是否遭遇到一特定失败模式;于确认该指定读取区块遭遇到该特定失败模式时,进行对应该特定失败模式的一失败模式读取重试流程;于该失败模式读取重试流程可获得一正确读取数据时,将该正确读取数据传递至该主机;以及于该失败模式读取重试流程无法获得该正确读取数据时,回复该主机发生一读取失败。

一种固态存储装置的读取重试方法,该固态存储装置连接至一主机,且该固态存储装置包括一非易失性存储器,该读取重试方法包括下列步骤:判断该非易失性存储器中的一指定读取区块是否遭遇一编程失败;于确认该指定读取区块遭遇到该编程失败时,进行一容错式磁盘阵列恢复程序;于该容错式磁盘阵列恢复程序可获得一正确读取数据时,将该正确读取数据传递至该主机;以及于该容错式磁盘阵列恢复程序无法获得该正确读取数据时,回复该主机发生一读取失败。

以下结合附图和具体实施例对本发明进行详细描述,但不作为对本发明的限定。

附图说明

图1a为现有固态存储装置示意图。

图1b为tlc存储单元的存储状态示意图。

图1c为tlc存储单元的存储状态偏移示意图。

图1d为读取表示意图。

图2为现有固态存储装置的读取动作流程图。

图3a为读取电压偏移解码程序流程图。

图3b为读取电压校正程序流程图。

图3c为raid恢复程序流程图。

图3d为软件解码程序流程图。

图4a为本发明固态存储装置示意图。

图4b为本发明固态存储装置的读取表示意图。

图4c为本发明固态存储装置的读取动作流程示意图。

图5为编程失败模式读取重试流程图。

图6为读写温度差过大失败模式读取重试流程图。

图7为数据保存失败模式读取重试流程图。

图8为重复读取失败模式读取重试流程图。

具体实施方式

下面结合附图对本发明的结构原理和工作原理作具体的描述:

本发明提出一种固态存储装置的读取重试方法。本发明的固态存储装置可针对非易失性存储器的特性,适当地调整读取重试的流程。因此,可有效地缩短读取重试的时间,并避免超时(timeout)的情形发生。

请参照图4a,其所示为本发明固态存储装置示意图。固态存储装置40包括:控制电路430以及非易失性存储器110。其中,非易失性存储器110包括多个晶粒(die)111~126,并组成容错式磁盘阵列。

再者,控制电路430中包括ecc电路134与失败模式判断模块(failuremodejudgemodule)406。另外,固态存储装置40还包括读取表436。如图4a所示,固态存储装置40的读取表436设计于控制电路430中。当然,除了设计于控制电路430之外,固态存储装置40的读取表436也可以设计于非易失性存储器110中。

在固态存储装置40中,控制电路430连接至非易失性存储器110,用以根据主机150所发出的写入命令进一步将主机150的写入数据存入非易失性存储器110,以及根据主机150所发出的读取命令由非易失性存储器110中取得读取数据,经由控制电路430传递至主机150。

根据本发明的实施例,控制电路430的失败模式判断模块406,可以判断非易失性存储器110中的指定读取区块所遭遇到的失败模式。而控制电路430可以根据失败模式来适当地调整读取重试的流程,并根据失败模式提供对应的失败模式读取重试流程。如此,将可有效地缩短读取重试的时间,并避免超时(timeout)的情形发生。再者,上述的失败模式例如:编程失败(programfail)模式、读写温差过大失败(write/readtemperaturedifferencefail)模式、重复读取失败(readdisturbfail)模式或者数据保存失败(dataretentionfail)模式。

请参照图4b,其所示为本发明固态存储装置的读取表示意图。读取表436中包括三个子读取表436a、436b与436c。举例来说,子读取表436a中记录了预设读取电压组rsd;子读取表436b中记录了n笔重试读取电压组rsb1~rsbn;子读取表436c中记录了m笔重试读取电压组rsc1~rscm。

根据本发明的实施例,子读取表436b中的n笔重试读取电压组rsb1~rsbn更被选择运用于对应的失败模式f1~f3。如图4b所示,f1可代表读写温差过大失败模式、f2可代表重复读取失败模式、f3可代表数据保存失败模式。举例来说,子读取表436b中的重试读取电压组rsb1、rsb3、rsb6、rsb9...共k1个重试读取电压组被选择运用于读写温差过大失败模式(f1);重试读取电压组rsb2、rsb5、rsb6...共k2个重试读取电压组被选择运用于重复读取失败模式(f2);重试读取电压组rsb3、rsb8、rsbn...共k3个重试读取电压组被选择运用于数据保存失败模式(f3)。其中,k1≤n,k2≤n,k3≤n。

在本发明实施例中,对应各失败模式的重试读取电压组是由子读取表436b中取出特定的几组重试读取电压。此外,子读取表436b中对应各失败模式f1~f3的重试读取电压组可重新排序而具有不同的次序。换句话说,对应各失败模式的重试读取电压组可由子读取表436b中取出特定的几组重试读取电压,并重新排序。

在本发明实施例中,控制电路430在正常操作时,失败模式判断模块406可根据非易失性存储器110中的指定读取区块的读写状况来判断非易失性存储器110中的指定读取区块所遭遇到的失败模式。此外,控制电路430可针对至少一种失败模式设定对应的失败模式读取重试流程。

在本发明实施例中,在进入读取重试流程时,控制电路430会先判断非易失性存储器110中的指定读取区块所遭遇到的失败模式,并据以决定是否进行对应该失败模式的失败模式读取重试流程。请参照图4c,其所示为本发明固态存储装置的读取动作流程示意图。

首先,当控制电路430收到主机150所发出的读取命令时,控制电路430进行正常读取程序(步骤s210)。于正常读取程序(步骤s210)时,控制电路430提供读取表436中子读取表436a的预设读取电压组rsd至非易失性存储器110,以对非易失性存储器110中的指定读取区块进行数据读取,以取得读取数据并进行错误更正。当ecc电路134可更正读取数据中的错误位(errorbits)时,控制电路430可将正确的读取数据传递至主机150。此时,控制电路430确认读取成功(步骤s212)。反之,当ecc电路134无法更正读取数据中的错误位时,则确认未读取成功(步骤s212),且控制电路130进入读取重试流程。

于进行读取重试流程时,控制电路430先判断非易失性存储器110中的指定读取区块所遭遇到的失败模式。当指定读取区块遭遇到特定失败模式(步骤s410)时,控制电路430进行对应于该特定失败模式的失败模式读取重试流程(步骤s411)。其中,上述的特定失败模式可为:编程失败模式、读写温差过大失败模式、重复读取失败模式以及数据保存失败模式其中之一。

举例来说,当控制电路430确认遭遇到编程失败模式时,控制电路430即进行编程失败模式读取重试流程。当控制电路430确认遭遇到读写温差过大失败模式时,控制电路430即进行读写温差过大失败模式读取重试流程。当控制电路430确认遭遇到重复读取失败模式时,控制电路430即进行重复读取失败模式读取重试流程。当控制电路430确认遭遇到数据保存失败模式时,控制电路430即进行数据保存失败模式读取重试流程。

再者,控制电路430进行对应于该特定失败模式的失败模式读取重试流程(步骤s411)而获得正确的读取数据时,控制电路430确认读取成功(步骤s412),并将正确的读取数据传送至主机150。反之,如果控制电路430无法获得正确的读取数据时,控制电路430无法确认读取成功(步骤s412),则控制电路430会回复读取失败(步骤s413)至主机150。

另外,当指定读取区块并非遭遇到特定失败模式(步骤s410)时,则控制电路430进行正常读取重试流程(normalreadretry)(步骤s414)。其中,正常读取重试流程可为图2中步骤s220~步骤s260的正常读取重试流程。举例来说,如果控制电路430确认指定读取区块并非遭遇到编程失败、读写温差过大失败、重复读取失败以及数据保存失败其中之一时,则控制电路430即进行正常读取重试流程(步骤s414)。

由以上的说明可知,当控制电路430进行对应于特定失败模式的失败模式读取重试流程(步骤s411)且无法获得正确的读取数据时,控制电路430会直接回复读取失败(步骤s413)至主机150,而不继续进行其他程序。

在一实施例中,控制电路430可针对多种失败模式设定其对应的失败模式读取重试流程。再者,控制电路430的失败模式判断模块406可对多个特定失败模式进行优先顺序的排序,并依序进行判断。举例来说,失败模式判断模块406判断多个特定失败模式的优先顺序可为编程失败、读写温差过大失败、重复读取失败以及数据保存失败。

请参照图5,其所示为编程失败模式读取重试流程图。当控制电路430确认非易失性记忆110中的指定读取区块遭遇到编程失败模式时,控制电路430即进行编程失败模式读取重试流程。此时,控制电路430进行raid恢复程序(步骤s510)。换句话说,对应于编程失败的失败模式读取重试流程为raid恢复程序。再者,当raid恢复程序可获得正确的读取数据(步骤s512)时,则确认读取成功(步骤s516)。反之,当读取数据无法通过raid恢复运算还原时,即表示未获得正确的读取数据。此时,控制电路430确认未读取成功(步骤s514)。

相同地,于raid恢复程序(步骤s510)中,控制电路430利用同位数据来进行raid恢复运算。举例来说,假设晶粒111中的读取数据无法通过ecc电路134解码成功,则控制电路430可利用其他晶粒112~125中的读取数据以及晶粒126中的同位数据来进行raid恢复运算,以还原晶粒111中的读取数据。当读取数据可通过raid恢复运算还原时,即可获得正确的读取数据(步骤s512),并确认读取成功(步骤s516)。反之,当读取数据无法通过raid恢复运算还原时,即表示未读取成功(步骤s514)。

请参照图6,其所示为读写温度差过大失败模式读取重试流程图。当控制电路430确认非易失性记忆110中的指定读取区块遭遇到读写温差过大失败模式时,控制电路即进行读写温度差过大失败模式读取重试流程。

首先,控制电路430会根据指定读取区块的抹除次数(erasecount)来判断后续所进行的程序。一般来说,当指定读取区块的抹除次数较高时,代表指定读取区块中存储单元的特性较差。反之,当指定读取区块的抹除次数较低时,代表指定读取区块中存储单元的特性尚佳。

因此,当指定读取区块抹除次数未大于一临限值(步骤s611)时,控制电路430进行读取电压偏移解码程序(步骤s621)。于进行读取电压偏移解码程序(步骤s621)时,控制电路430会将读取表436的子读取表436b中对应至读写温差过大失败模式的重试读取电压组依序提供至非易失性存储器110用以获得正确的读取数据。

举例来说,读取表436中子读取表436b内存储k1笔重试读取电压组对应至读写温差过大失败模式f1。因此,只要控制电路430提供k1笔重试读取电压组中的任一个重试读取电压组至非易失性存储器110,并使得控制电路430利用ecc电路134中的硬件解码可以更正非易失性存储器110回传的读取数据中的错误位,则控制电路430获得正确的读取数据(步骤s622)并确认读取成功(步骤s627)。反之,当k1笔重试读取电压组皆提供至非易失性存储器110仍无法获得正确的读取数据(步骤s622)时,控制电路430继续进行读取电压校正程序(步骤s623)。

于进行读取电压校正程序(步骤s623)时,控制电路430会由子读取表436b中对应至读写温差过大失败模式f1的k1笔重试读取电压组选定一重试读取电压组作为初始电压组。接着,控制电路430将初始电压组校正为最佳重试读取电压组后,将最佳重试读取电压组提供至非易失性存储器110。当控制电路430利用ecc电路134可以更正非易失性存储器110回传的读取数据中的错误位,则控制电路430获得正确的读取数据(步骤s624)并即确认读取成功(步骤s627)。反之,控制电路430确认无法获得正确的读取数据(步骤s624)时,控制电路430继续进行软件解码程序(步骤s625)。

于进行软件解码程序(步骤s625)时,控制电路430会将读取表436中子重试表436c的重试读取电压组依序提供至非易失性存储器110用以获得正确的读取数据。举例来说,子读取表436c中存储m笔重试读取电压组rsc1~rscm。控制电路430提供一个重试读取电压组至非易失性存储器110可获得硬件信息与软件信息。当ecc电路134的软件解码可利用任一个硬件信息与软件信息来更正读取数据中的错误位时,控制电路430获得正确的读取数据(步骤s626)并确认读取成功(步骤s627)。反之,控制电路430确认无法获得正确的读取数据(步骤s626)时,控制电路430确认未读取成功(步骤s628)。

另外,当读取区块抹除次数大于该临限值(步骤s611)时,控制电路430进行读取电压校正程序(步骤s612)与软件解码程序(步骤s614)。再者,步骤s612~步骤s615其运作流程相同于步骤s623~s626。此处不再赘述。

根据以上的说明,当非易失性记忆110中的指定读取区块遭遇到读写温差过大失败时,控制电路430会根据指定读取区块的抹除次数来决定后续所进行的程序。

请参照图7,其所示为数据保存失败模式读取重试流程图。当控制电路430确认非易失性记忆110中的指定读取区块遭遇到数据保存失败模式时,控制电路430即进行数据保存失败模式读取重试流程。

在数据保存失败模式读取重试流程中,控制电路430会进行读取电压偏移解码程序(步骤s711)、读取电压校正程序(步骤s713)与软件解码程序(步骤s715)。

于进行读取电压偏移解码程序(步骤s711)时,控制电路430会将读取表436的子读取表436b中对应至数据保存失败模式的重试读取电压组依序提供至非易失性存储器110用以获得正确的读取数据。

举例来说,读取表436中子读取表436b内存储k3笔重试读取电压组对应至数据保存失败模式f3。因此,只要控制电路430提供k3笔重试读取电压组中的任一个重试读取电压组至非易失性存储器110,并使得控制电路430利用ecc电路134中的硬件解码可以更正非易失性存储器110回传的读取数据中的错误位,则控制电路430获得正确的读取数据(步骤s712)并确认读取成功(步骤s717)。反之,当k3笔重试读取电压组皆提供至非易失性存储器110仍无法获得正确的读取数据(步骤s712)时,控制电路430继续进行读取电压校正程序(步骤s713)。

于进行读取电压校正程序(步骤s713)时,控制电路430会由子读取表436b中的k3笔重试读取电压组选定一重试读取电压组作为初始电压组。接着,控制电路430将初始电压组校正为最佳重试读取电压组后,将最佳重试读取电压组提供至非易失性存储器110。当控制电路430利用ecc电路134可以更正非易失性存储器110回传的读取数据中的错误位,则控制电路430获得正确的读取数据(步骤s714)并即确认读取成功(步骤s717)。反之,控制电路430确认无法获得正确的读取数据(步骤s714)时,控制电路430继续进行软件解码程序(步骤s715)。

再者,步骤s715~步骤s718其运作流程相同于图6中的步骤s625~s628。此处不再赘述。

请参照图8,其所示为重复读取失败模式读取重试流程图。当控制电路430确认非易失性记忆110中的指定读取区块遭遇到重复读取失败模式时,控制电路430即进行重复读取失败模式读取重试流程。

在重复读取失败模式读取重试流程中,控制电路430会进行读取电压偏移解码程序(步骤s811)、读取电压校正程序(步骤s813)、raid恢复程序(步骤s815)与软件解码程序(步骤s817)。

于进行读取电压偏移解码程序(步骤s811)时,控制电路430会将读取表436的子读取表436b中对应至重复读取失败模式的重试读取电压组依序提供至非易失性存储器110用以获得正确的读取数据。

举例来说,读取表436中子读取表436b内存储k2笔重试读取电压组对应至重复读取失败模式f2。因此,只要控制电路430提供k2笔重试读取电压组中的任一个重试读取电压组至非易失性存储器110,并使得控制电路430利用ecc电路134中的硬件解码可以更正非易失性存储器110回传的读取数据中的错误位,则控制电路430获得正确的读取数据(步骤s812)并确认读取成功(步骤s819)。反之,当k2笔重试读取电压组皆提供至非易失性存储器110仍无法获得正确的读取数据(步骤s812)时,控制电路430继续进行读取电压校正程序(步骤s813)。

于进行读取电压校正程序(步骤s813)时,控制电路430会由子读取表436b中的k2笔重试读取电压组选定一重试读取电压组作为初始电压组。接着,控制电路430将初始电压组校正为最佳重试读取电压组后,将最佳重试读取电压组提供至非易失性存储器110。当控制电路430利用ecc电路134可以更正非易失性存储器110回传的读取数据中的错误位,则控制电路430获得正确的读取数据(步骤s814)并即确认读取成功(步骤s819)。反之,控制电路430确认无法获得正确的读取数据(步骤s814)时,控制电路430继续进行raid恢复程序(步骤s815)。基本上,raid恢复程序(步骤s815)相同于图5的raid恢复程序(步骤s510),此处不再赘述。

另外,进行完raid恢复程序(步骤s815)后,控制电路430确认无法获得正确的读取数据(步骤s816)时,控制电路430继续进行软件解码程序(步骤s817)。软件解码程序(步骤s715)。再者,步骤s817~步骤s820其运作流程相同于图6中的步骤s625~s628。此处不再赘述。

由以上的说明可知,本发明提出一种固态存储装置的读取重试方法。本发明的固态存储装置可对至少一种失败模式设定对应的失败模式读取重试流程,进而可针对非易失性存储器中的指定读取区块所遭遇的失败模式,适当地调整读取重试的流程。再者,本发明的固态存储装置可于子读取表中设定对应至特定失败模式的重试读取电压组及/或次序,由于子读取表中对应至特定失败模式的重试读取电压组数目较少及/或具有对应的次序,因此进行对应特定失败模式的读取电压偏移解码程序时可有效地缩短读取重试的时间,并避免超时(timeout)的情形发生。

当然,本发明还可有其它多种实施例,在不背离本发明精神及其实质的情况下,熟悉本领域的技术人员当可根据本发明作出各种相应的改变和变形,但这些相应的改变和变形都应属于本发明所附的权利要求的保护范围。

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