读取闪存数据的方法、装置以及固态驱动器
技术领域
本发明涉及固态硬盘应用领域,尤其涉及一种读取闪存数据的方法、装置以及固态驱动器。
背景技术
闪存通过在存储单元中保持电荷量来存储信息。存储单元中的电荷量决定了存储单元的读出电压。在读取闪存数据时,比较存储单元的读出电压与阈值电压来识别存储单元所存储的信息。但是由于存储单元的电荷量受存储单元的质量、寿命、时间等多种因素的影响,导致存储单元的读出电压发生变化,进而导致从存储单元读取的数据存在一些偏差,无法正确体现当初向存储单元写入的信息。阈值电压可包括用于读操作的读阈值与用于写操作的写阈值。
现有技术中采用一些手段来预防或应对因存储单元的电荷量变化而导致读取的数据无法正确体现写入的数据的问题,例如,在美国专利US9070454B1中,根据存储单元的擦写次数、保持时间等因素计算阈值电压(从存储单元中读取数据或向存储单元中写入数据时使用的阈值电压或判决电压),并使用计算出的阈值电压向存储单元写入数据。
在闪存芯片中,还提供了“读重做”(Read-Retry)技术或命令。通过为读操作指示不同的参数,来选择读操作时所使用的阈值电压。通过具有不同阈值电压的读操作,从存储单元读出的数据会有不同的结果。有些结果具有较低的比特错误率(Bit Error Ratio,错误码与传输的总码数的百分比),而有些结果具有较高的比特错误率。结合使用ECC(ErrorCorrection Code,错误校正码)技术,具有较低的比特错误率的读取结果被ECC技术纠正的几率较高。从而通过尝试不同参数的读重做技术,来应对读操作中遇到的错误。
存储介质上通常按页来存储和读取数据,而按块来擦除数据。通常,块包含多个页,存储介质上的页(称为物理页)具有固定的尺寸,例如17664字节,当然,物理页也可以具有其他的尺寸。在读出或写入数据时,一般为每个页的所有存储单元设置相同的阈值电压。
现有技术中存在对最佳阈值电压的搜索技术,以寻找具有最低比特错误率的阈值电压,并利用最佳阈值电压读出数据。有多种方式实现对最低阈值电压的搜索,例如,下面列出的确定最佳阈值电压的方法:
第一种,在读操作时指示不同的阈值电压参数,并利用ECC或参考数据(已知的被写入数据)识别每一个阈值电压参数读取结果的比特错误率;比较不同阈值电压参数对应的不同的比特错误率,获得具有较低比特错误率的阈值电压作为最佳阈值电压。
第二种,分别获取闪存页中具有“1”状态与“0”状态的存储单元的读出电压分布,并搜索不同的阈值电压,获取每一个阈值电压所对应的比特错误率,并找到对于特定的读取电压分布,读取结果中比特错误率最低的阈值电压作为最佳阈值电压。图1A为现有技术中的阈值电压-数值曲线图,参看图1A,钟形线P1是具有“1”状态的存储单元的读出电压分布,钟形线P0是具有“0”状态的存储单元的读出电压分布,当使用阈值电压Vt2时,在阈值电压Vt2右侧的具有“1”状态的存储单元被误读并成为错误比特。类似地,当使用阈值电压Vt1时,在阈值电压Vt1左侧的具有“0”状态的存储单元被误读并成为错误比特。比较多个阈值电压对应的错误比特的数量,选择错误比特的数量最小的阈值电压作为最佳阈值电压。或者,从读出电压分布中,确定最佳阈值电压(例如,选择Vt,使得钟形线P1在Vt右侧部分的面积与钟形线P0在Vt左侧部分的面积之和最小)。Vt3的含义与Vt2类似,在此不再做赘述。
第三种,一些闪存芯片中提供了搜索最佳阈值电压的命令,并可以从闪存芯片中获取最佳阈值电压的值或者指示最佳阈值电压的标识/索引。
第四种,对同一物理页施加多个读重做命令,识别每一个读重做命令读取结果的比特错误率,来搜索最佳阈值电压或指示最佳阈值电压的标识/索引。
图1B是可用于实施本发明的固态存储设备的框图。固态存储设备102同主机相耦合,用于为主机提供存储能力。主机同固态存储设备102之间可通过多种方式相耦合,耦合方式包括但不限于通过例如SATA(Serial Advanced Technology Attachment,串行高级技术附件)、SCSI(Small Computer System Interface,小型计算机系统接口)、SAS(SerialAttached SCSI,串行连接SCSI)、IDE(Integrated Drive Electronics,集成驱动器电子)、USB(Universal Serial Bus,通用串行总线)、PCIE(Peripheral Component InterconnectExpress,PCIe,高速外围组件互联)、NVMe(NVM Express,高速非易失存储)、以太网、光纤通道、无线通信网络等连接主机与固态存储设备102。主机可以是能够通过上述方式同存储设备相通信的信息处理设备,例如,个人计算机、平板电脑、服务器、便携式计算机、网络交换机、路由器、蜂窝电话、个人数字助理等。存储设备102包括接口103、控制部件104、一个或多个NVM芯片105以及DRAM(Dynamic Random Access Memory,动态随机访问存储器)110。
NAND闪存、相变存储器、FeRAM(Ferroelectric RAM,铁电存储器)、MRAM(MagneticRandom Access Memory,磁阻存储器)、RRAM(Resistive Random Access Memory,阻变存储器)等是常见的NVM。
接口103可适配于通过例如SATA、IDE、USB、PCIE、NVMe、SAS、以太网、光纤通道等方式与主机交换数据。
控制部件104用于控制在接口103、NVM芯片105以及固件存储器110之间的数据传输,还用于存储管理、主机逻辑地址到闪存物理地址映射、擦除均衡、坏块管理等。控制部件104可通过软件、硬件、固件或其组合的多种方式实现,例如,控制部件104可以是FPGA(Field-programmable gate array,现场可编程门阵列)、ASIC(Application SpecificIntegrated Circuit,应用专用集成电路)或者其组合的形式;控制部件104也可以包括处理器或者控制器,在处理器或控制器中执行软件来操纵控制部件104的硬件来处理IO(Input/Output)命令;控制部件104还可以耦合到DRAM 110,并可访问DRAM 110的数据;在DRAM可存储FTL表和/或缓存的IO命令的数据。
控制部件104包括闪存接口控制器(或称为闪存通道控制器),闪存接口控制器耦合到NVM芯片105,并以遵循NVM芯片105的接口协议的方式向NVM芯片105发出命令,以操作NVM芯片105,并接收从NVM芯片105输出的命令执行结果。NVM芯片105的接口协议包括“Toggle”、“ONFI”等公知的接口协议或标准。
存储器目标(Target)是NAND闪存封装内的共享芯片使能信号(CE,Chip Enable)的一个或多个逻辑单元(Logic Unit)。每个逻辑单元具有逻辑单元号(LUN,Logic UnitNumber)。NAND闪存封装内可包括一个或多个管芯(Die)。典型地,逻辑单元对应于单一的管芯。逻辑单元可包括多个平面(Plane)。逻辑单元内的多个平面可以并行存取,而NAND闪存芯片内的多个逻辑单元可以彼此独立地执行命令和报告状态。
在固态存储设备中,利用FTL(Flash Translation Layer,闪存转换层)来维护从逻辑地址到物理地址的映射信息。逻辑地址构成了操作系统等上层软件所感知到的固态存储设备的存储空间。物理地址是用于访问固态存储设备的物理存储单元的地址。在现有技术中还可利用中间地址形态实施地址映射。例如将逻辑地址映射为中间地址,进而将中间地址进一步映射为物理地址。
存储了从逻辑地址到物理地址的映射信息的表结构被称为FTL表。FTL表是固态存储设备中的重要元数据。通常FTL表的数据项记录了固态存储设备中以数据页为单位的地址映射关系。
FTL表包括多个FTL表条目(或称表项)。在一个例子,每个FTL表条目中记录了一个逻辑页地址与一个物理页的对应关系。在另一个例子中,每个FTL表条目中记录了连续的多个逻辑页地址与连续的多个物理页的对应关系。在又一个例子中,每个FTL表条目中记录了逻辑块地址与物理块地址的对应关系。在依然又一个例子中,FTL表中记录逻辑块地址与物理块地址的映射关系,和/或逻辑页地址与物理页地址的映射关系。
发明内容
然而,搜索最佳阈值电压的方法虽然可以降低比特错误率,使得读取闪存数据的正确率得到提升,但是却导致较长的读取延迟。
本发明的目的在于提供一种读取闪存数据的方法、装置以及固态驱动器,用于在利用最佳阈值电压的读取闪存数据时,保持存储系统的低读取延迟。
为达到上述目的,本发明采用如下技术方案:
本发明的第一方面提供一种读取闪存数据的方法,其中,读取闪存数据的方法包括:响应于收到读命令,读取闪存中的数据;若读取的数据中存在不可纠正的错误,则获取用于读操作的最佳阈值电压,并与所读取数据的物理地址相关联的记录读操作最佳阈值电压或者指示最佳阈值电压的索引/标识。
结合本发明的第一方面,在第一种可能的实现方式中,若使用用于读操作的最佳阈值电压读取的数据不存在不可纠正的错误,才与所读取数据的物理地址相关联的记录读操作最佳阈值电压或者指示最佳阈值电压的索引/标识。
结合本发明的第一方面,在第二种可能的实现方式中,用于读操作的最佳阈值电压是使所读取的数据具有最低错误比特率的阈值电压。
结合本发明的第一方面、第一方面的第一种至第二种可能的实现方式之一,在第三种可能的实现方式中,所述物理地址是页地址、字线地址、块地址或大块地址。
结合本发明的第一方面,在第四种可能的实现方式中,获取用于读操作的最佳阈值电压包括:向闪存发出搜索最佳阈值电压的命令,接收闪存输出的最佳阈值电压或指示最佳阈值电压的索引/标识。所述读取闪存数据的方法还包括:向闪存发出以用于读操作的最佳阈值电压读取数据的命令。
结合本发明的第一方面,在第五种可能的实现方式中,获取用于读操作的最佳阈值电压包括:向闪存发出搜索具有最低比特错误率的阈值电压的命令,接收闪存输出的最佳阈值电压或指示最佳阈值电压的索引/标识。所述读取闪存数据的方法还包括:向闪存发出以用于读操作的最佳阈值电压读取数据的命令。
结合本发明的第一方面,在第六种可能的实现方式中,获取用于读操作的最佳阈值电压包括:向闪存发出多个读重做命令,获取并记录具有最低比特错误率的读取结果所对应的读重做命令的索引/标识。所述读取闪存数据的方法还包括:向闪存发出以所记录的索引/标识对应的读重做命令。
结合本发明的第一方面的第四种至第六种实现方式之一,在第七种可能的实现方式中,读取闪存数据的方法还包括:若向闪存发出以用于读操作的最佳阈值电压读取数据的命令,所读取的数据中存在不可纠正的错误,再次获取用于读操作的最佳阈值电压。
结合本发明的第一方面,在第八种可能的实现方式中,读取闪存数据的方法还包括:当读取闪存中的数据时,使用所记录的同所读取的物理地址相关联的最佳阈值电压或指示最佳阈值电压的索引/标识读取数据。
结合本发明的第一方面,在第九种可能的实现方式中,读取闪存数据的方法还包括:响应于读取闪存中的数据时出现不可纠正的错误,获取所记录的同所读取的物理地址相关联的最佳阈值电压或指示最佳阈值电压的索引/标识,使用所获取的最佳阈值电压或指示最佳阈值电压的索引/标识读取闪存中的数据。
结合本发明的第一方面、第一方面的第一种至第九中可能的实现方式之一,在第十种可能的实现方式中,在FTL表的表项中记录逻辑地址与物理地址以及与物理地址相关联的用于读操作的最佳阈值电压或者指示最佳阈值电压的索引/标识。
结合本发明的第一方面的第十种可能的实现方式,在第十一种可能的实现方式中,读取闪存数据的方法还包括:当读取闪存中的数据时,响应于收到读命令,从FTL表中获取要访问的物理地址,以及对应的最佳阈值电压或者指示最佳阈值电压的索引/标识,向闪存发出以用于读操作的最佳阈值电压读取数据的命令。
结合本发明的第一方面的第十一种可能的实现方式,在第十二种可能的实现方式中,若用FTL表的表项中记录的最佳阈值电压或者指示最佳阈值电压的索引/标识读取的数据存在不可纠正的错误,再次获取用于读操作的最佳阈值电压,并将新的最佳阈值电压或者指示最佳阈值电压的索引/标识记录在FTL表的表项中。
结合本发明的第一方面、第一方面的第一种至第九中可能的实现方式之一,在第十三种可能的实现方式中,在阈值电压表的表项中记录物理地址与相关联的用于读操作的最佳阈值电压或者指示最佳阈值电压的索引/标识的对应关系。
结合本发明的第一方面的第十三种可能的实现方式,在第十四种可能的实现方式中,响应于收到读命令,若从阈值电压表中没有找到与该物理地址相关联的记录,使用普通读命令从闪存中读取数据。
结合本发明的第一方面的第十三种可能的实现方式,在第十五种可能的实现方式中,读取闪存数据的方法还包括:响应于收到读命令,从阈值电压表中获取要访问的物理地址,以及相关联的用于读操作的最佳阈值电压或者指示最佳阈值电压的索引/标识,向闪存发出以用于读操作的最佳阈值电压读取数据的命令。
结合本发明的第一方面的第十五种可能的实现方式,在第十六种可能的实现方式中,若用阈值电压表的表项中记录的用于读操作的最佳阈值电压或者指示最佳阈值电压的索引/标识读取的数据存在不可纠正的错误,再次获取用于读操作的最佳阈值电压,并将新的最佳阈值电压或者指示最佳阈值电压的索引/标识记录在阈值电压表的表项中。
结合本发明的第一方面的第十三种至第十六种可能的实现方式之一,在第十七种可能的实现方式中,由物理地址的散列结果获得物理地址对应的最佳阈值电压或者指示最佳阈值电压的索引/标识在阈值电压表中的存储位置。
结合本发明的第一方面、第一方面的第一种至第十七种可能的实现方式之一,在第十八种可能的实现方式中,读取闪存数据的方法还包括:响应于更新第一物理地址对应的最佳阈值电压或者指示最佳阈值电压的索引/标识,获取同第一物理地址共享字线的第二物理地址,并将最佳阈值电压或者指示最佳阈值电压的索引/标识与第二物理地址相关联的记录。
结合本发明的第一方面的第十八种可能的实现方式,在第十九种可能的实现方式中,响应于收到读命令,从阈值电压表中获取与所读取的物理地址所在的字线相对应的最佳阈值电压或者指示最佳阈值电压的索引/标识,向闪存发出以用于最佳阈值电压读取数据的命令。
结合本发明的第一方面的第十九种可能的实现方式,在第二十种可能的实现方式中,使用阈值电压表中与所读取的物理地址所在的字线相对应的最佳阈值电压或者指示最佳阈值电压的索引/标识读取数据失败后,再次获取用于读操作的最佳阈值电压。
结合本发明的第一方面、第一方面的第一种至第二十种可能的实现方式之一,在第二十一种可能的实现方式中,读取闪存数据的方法还包括:当对闪存进行擦除操作时,清除同被擦除的闪存地址相对应的最佳阈值电压或者指示最佳阈值电压的索引/标识。
结合本发明的第一方面、第一方面的第一种至第二十一种可能的实现方式之一,在第二十二种可能的实现方式中,在内存或NVM中记录最佳阈值电压,或者指示最佳阈值电压的索引/标识。
本发明的第二方面提供一种读取闪存数据的方法,读取闪存数据的方法包括:响应于收到读命令,读取闪存中的数据;若读取的数据中存在不可纠正的错误,获取所记录的同所读取的物理地址相关联的阈值电压或指示最佳阈值电压的索引/标识,使用所获取的阈值电压或指示最佳阈值电压的索引/标识读取闪存中的数据。
本发明的第三方面提供一种读取闪存数据的装置,读取闪存数据的装置包括:响应模块,用于响应于收到读命令,读取闪存中的数据;第一获取模块,当读取的数据中存在不可纠正的错误时,获取用于读操作的最佳阈值电压,并与所读取数据的物理地址相关联的记录读操作最佳阈值电压或者指示最佳阈值电压的索引/标识。
结合本发明的第三方面,在第一种可能的实现方式中,读取闪存数据的装置还包括:记录模块,用于当使用用于读操作的最佳阈值电压读取的数据不存在不可纠正的错误时,才与所读取数据的物理地址相关联的记录读操作最佳阈值电压或者指示最佳阈值电压的索引/标识。
结合本发明的第三方面,在第二种可能的实现方式中,第一获取模块包括:第一搜索单元,用于向闪存发出搜索最佳阈值电压的命令,并接收闪存输出的最佳阈值电压或指示最佳阈值电压的索引/标识。所述读取闪存数据的装置还包括:读取模块,用于向闪存发出以用于读操作的最佳阈值电压读取数据的命令。
结合本发明的第三方面,在第三种可能的实现方式中,第一获取模块包括:第二搜索单元,用于向闪存发出搜索具有最低比特错误率的阈值电压的命令,并接收闪存输出的最佳阈值电压或指示最佳阈值电压的索引/标识。所述读取闪存数据的装置还包括:读取模块,用于向闪存发出以用于读操作的最佳阈值电压读取数据的命令。
结合本发明的第三方面,在第四种可能的实现方式中,第一获取模块包括:读重做单元,用于向闪存发出多个读重做命令,获取并记录具有最低比特错误率的读取结果所对应的读重做命令的索引/标识。所述读取闪存数据的装置还包括:读重做模块,用于向闪存发出以所记录的索引/标识对应的读重做命令。
结合本发明的第三方面的第二种至第四种可能的实现方式之一,在第五种可能的实现方式中,读取闪存数据的装置还包括:第二获取模块,当向闪存发出以用于读操作的最佳阈值电压读取数据的命令,所读取的数据中存在不可纠正的错误时,再次获取用于读操作的最佳阈值电压。
结合本发明的第三方面、第三方面的第一种至第五种可能的实现方式之一,在第六种可能的实现方式中,读取闪存数据的装置还包括FTL记录模块,用于在FTL表的表项中记录逻辑地址与物理地址以及与物理地址相关联的用于读操作的最佳阈值电压或者指示最佳阈值电压的索引/标识。
结合本发明的第三方面的第六种可能的实现方式,在第七种可能的实现方式中,读取闪存数据的装置还包括:第一FTL获取模块,用于当读取闪存中的数据时,响应于收到读命令,从FTL表中获取要访问的物理地址,以及对应的最佳阈值电压或者指示最佳阈值电压的索引/标识,向闪存发出以用于读操作的最佳阈值电压读取数据的命令。
结合本发明的第三方面的第七种可能的实现方式,在第八种可能的实现方式中,读取闪存数据的装置还包括:第二FTL获取模块,当用FTL表的表项中记录的最佳阈值电压或者指示最佳阈值电压的索引/标识读取的数据存在不可纠正的错误,再次获取用于读操作的最佳阈值电压,并将新的最佳阈值电压或者指示最佳阈值电压的索引/标识记录在FTL表的表项中。
结合本发明的第三方面、第三方面的第一种至第五种可能的实现方式之一,在第九种可能的实现方式中,读取闪存数据的装置还包括:阈值电压表记录模块,用于在阈值电压表的表项中记录物理地址与相关联的用于读操作的最佳阈值电压或者指示最佳阈值电压的索引/标识的对应关系。
结合本发明的第三方面的第九种可能的实现方式,在第十种可能的实现方式中,读取闪存数据的装置还包括:阈值电压普通读取模块,用于响应于收到读命令,若从阈值电压表中没有找到与该物理电压相关联的记录,使用普通读命令从闪存中读取数据。
结合本发明的第三方面的第九种可能的实现方式,在第十一种可能的实现方式中,读取闪存数据的装置还包括:阈值电压第一获取模块,用于响应于收到读命令,从阈值电压表中获取要访问的物理地址,以及相关联的用于读操作的最佳阈值电压或者指示最佳阈值电压的索引/标识,向闪存发出以用于读操作的最佳阈值电压读取数据的命令。
结合本发明的第三方面的第十一种可能的实现方式,在第十二种可能的实现方式中,读取闪存数据的装置还包括:阈值电压第二获取模块,用于当用阈值电压表的表项中记录的用于读操作的最佳阈值电压或者指示最佳阈值电压的索引/标识读取的数据存在不可纠正的错误时,再次获取用于读操作的最佳阈值电压,并将新的最佳阈值电压或者指示最佳阈值电压的索引/标识记录在阈值电压表的表项中。
结合本发明的第三方面的第九种至第十二种可能的实现方式之一,在第十三种可能的实现方式中,读取闪存数据的装置还包括:物理地址存储模块,用于获取物理地址对应的最佳阈值电压或者指示最佳阈值电压的索引/标识在阈值电压表中的存储位置。
结合本发明的第三方面、第三方面的第一种至第十三种可能的实现方式之一,在第十四种可能的实现方式中,读取闪存数据的装置还包括:物理地址响应模块,用于响应于更新第一物理地址对应的最佳阈值电压或者指示最佳阈值电压的索引/标识,获取同第一物理地址共享字线的第二物理地址,并将最佳阈值电压或者指示最佳阈值电压的索引/标识与第二物理地址相关联的记录。
结合本发明的第三方面的第十四种可能的实现方式,在第十五种可能的实现方式中,读取闪存数据的装置还包括:物理地址第一获取模块,用于响应于收到读命令,从阈值电压表中获取与所读取的物理地址所在的字线相对应的最佳阈值电压或者指示最佳阈值电压的索引/标识,向闪存发出以用于最佳阈值电压读取数据的命令。
结合本发明的第三方面的第十五种可能的实现方式,在第十六种可能的实现方式中,读取闪存数据的装置还包括:物理地址第二获取模块,用于使用阈值电压表中与所读取的物理地址所在的字线相对应的最佳阈值电压或者指示最佳阈值电压的索引/标识读取数据失败后,再次获取用于读操作的最佳阈值电压。
结合本发明的第三方面、第三方面的第一种至第十六种可能的实现方式之一,在第十七种可能的实现方式中,读取闪存数据的装置还包括:擦除模块,用于当对闪存进行擦除操作时,清除同被擦除的闪存地址相对应的最佳阈值电压或者指示最佳阈值电压的索引/标识。
结合本发明的第三方面、第三方面的第一种至第十七种可能的实现方式之一,在第十八种可能的实现方式中,读取闪存数据的装置还包括:存储模块,用于在内存或NVM中存储最佳阈值电压,或者指示最佳阈值电压的索引/标识。
本发明的第四方面提供一种读取闪存数据的装置,读取闪存数据的装置包括:响应模块,用于响应于收到读命令,读取闪存中的数据;获取模块,用于当读取的数据中存在不可纠正的错误,获取所记录的同所读取的物理地址相关联的阈值电压或指示最佳阈值电压的索引/标识,使用所获取的阈值电压或指示最佳阈值电压的索引/标识读取闪存中的数据。
本发明的第五方面提供一种固态驱动器,固态驱动器包括:一个或者多个处理器,存储器以及闪存;在所述存储器中存储有程序,当所述程序被所述一个或者多个处理器执行时,所述程序使所述固态驱动器执行本发明的第一方面所述的读取闪存数据的方法。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1A为现有技术中的阈值电压-数值曲线图;
图1B为存储设备的框图;
图2A为根据本发明实施例的读取闪存数据的方法的流程图;
图2B为根据本发明又一实施例的读取闪存数据的方法的流程图;
图3为根据本发明又一实施例的读取闪存数据的方法的流程图;
图4为根据本发明又一实施例的读取闪存数据的方法的流程图;
图5为根据本发明实施例的FTL表;
图6A为根据本发明又一实施例的FTL表;
图6B为根据本发明实施例的阈值电压表;
图7为根据本发明另一实施例的大块的示意图;
图8A为根据本发明另一实施例的FTL表;
图8B为根据本发明另一实施例的阈值电压表。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明的实施例可以在存储设备的控制器(例如,控制部件)中由软件或硬件实施。
实施例一
图2A为根据本发明实施例读取闪存数据的方法的流程图。如图2A所示,响应于收到读命令,读取闪存中的数据(210)。若读出的数据中存在不可纠正的错误(例如,读出数据中的错误比特数量超过了ECC的纠错能力)时(220),通过存储介质来搜索最佳阈值电压(230)。
在一个例子中,向闪存发出搜索最佳阈值电压的命令,搜索最佳阈值电压的执行结果可以是输出以最佳阈值电压读取的数据,或者最佳阈值电压值,又或者指示最佳阈值电压的索引/标识。其中,当搜索最佳阈值电压的命令的执行结果是输出以最佳阈值电压读取的数据时,进一步向闪存发出读最佳阈值电压的命令,以获得最佳阈值电压,又或者指示最佳阈值电压的索引/标识。另外,可选地,记录所获取的最佳阈值电压或指示最佳阈值电压的索引/标识(240),用于当再次在读数数据中遇到不可纠正错误时,直接使用最佳阈值电压来读取数据,而无需再次执行搜索最佳阈值电压的过程。示例性地,存储设备的控制模块104(参看图1B)可将最佳阈值电压或指示最佳阈值电压的索引/标识记录在内存或NVM(Non-Volatile Memory,非易失存储器)中。
在另一个例子中,若闪存不支持搜索最佳阈值电压的命令,当读出的数据存在不可纠正的错误时,向闪存发出多个读重做命令,并识别具有最低比特错误率读取结果所对应的读重做命令,记录该读重做命令的索引/标识或阈值电压。
图2B为根据本发明又一实施例的读取闪存数据的方法的流程图。参看图2B,利用已经记录的最佳阈值电压来加快错误处理过程。响应于收到读取命令,从闪存中读取数据时(260),若读出数据中存在不可纠正的错误(270),获取所记录的最佳阈值电压或者指示最佳阈值电压的索引或标识(280),指示闪存以最佳阈值电压或者指示最佳阈值电压的索引或标识来读取数据(290)。
在图2B所指出的实施例中,在处理不可纠正的错误时,无需搜索所有可用的阈值电压,而直接利用所记录的最佳阈值电压,在大多数情况下能够降低错误处理过程所需的时间。
进一步地,若使用所记录的最佳阈值电压从闪存中读出的数据依然存在不可纠正错误,再次使用常规的错误校正策略(例如,向闪存发出搜索最佳阈值电压的命令,或者向闪存发出多个读重做命令)。
另外,若对闪存实施了擦除操作,则相应地清除所记录的最佳阈值电压或者指示最佳阈值电压的索引或标识。
实施例二
图3为根据本发明又一实施例的读取闪存数据的方法的流程图。参见图3,当从闪存中读出数据(310),若读出的数据中存在不可纠正的错误时(320),获取所记录的最佳阈值电压(330),并指示闪存以最佳阈值电压或者指示最佳阈值电压的索引/标识来读取数据(340)。
接下来,判断以最佳阈值电压读取数据是否依然出错(例如,读取结果存在不可纠正的错误)(350)。若读取结果未出错(不存在不可纠正的错误),读取数据操作完成。若以最佳阈值电压读取数据依然出错,通过闪存来搜索最佳阈值电压(360)。在一个例子中,向闪存发出搜索最佳阈值电压的命令,以用最佳阈值电压读取数据,或者向闪存发出搜索新的最佳阈值电压的命令,以从闪存获取新的最佳阈值电压或指示新的最佳阈值电压的索引/标识,并再次向闪存发出读取命令,指示闪存以最佳阈值电压读取数据。记录所获取的新的最佳阈值电压或指示新的最佳阈值电压的索引/标识(370),用于当再次在读取数据中遇到不可纠正的错误时,直接使用新的最佳阈值电压来读取数据,而无需再次执行搜索最佳阈值电压的过程。
在另一个例子中,若闪存不支持搜索最佳阈值电压的命令,当读出数据存在不可纠正的错误时,向闪存发出多个读重做命令,并识别具有最低错误比特数量的读取结果所对应的读重做命令,记录该读重做命令的阈值电压或指示该阈值电压的索引/标识。
实施例三
图4为根据本发明又一实施例的读取闪存数据的方法的流程图。参见图4,利用已经记录的最佳阈值电压来加快错误处理过程。响应于收到读命令,从闪存中读取数据时,直接使用已经记录的最佳阈值电压读取数据(410)。例如,获取所记录的最佳阈值电压或者指示最佳阈值电压的索引/标识,指示闪存以最佳阈值电压或者指示最佳阈值电压的索引/标识来读取数据。
在此实施例中,直接使用已经记录的最佳阈值电压读取数据,在大多数情况下能够降低错误处理过程所需的时间。为获得所记录的最佳阈值电压,作为举例,在FTL(FlashTranslation Layer,闪存转换层)表中记录最佳阈值电压,在处理读命令时,从FTL表中获取要访问的物理地址,同时获得最佳阈值电压,当然也可用其他方式记录最佳阈值电压。
进一步地,若使用所记录的最佳阈值电压从闪存中读出的数据依然存在不可纠正的错误(420),则通过闪存来搜索最佳阈值电压(430),以及记录所获取的最佳阈值电压或指示最佳阈值电压的索引/标识(440),用于当再次在读取数据中遇到不可纠正错误时,直接使用最佳阈值电压来读取数据,而无需再次执行搜索最佳阈值电压的过程。
图5为根据本发明实施例的FTL表。FTL表包括多个条目。图5中,表格的1行指示FTL表的一个条目。每个条目记录与逻辑地址(510)对应的物理地址(512)以及最佳阈值电压(514)。响应于收到读命令,从FTL表中获取与读命令要访问的逻辑地址(例如,LBA 0)对应的物理地址(PBA 4),以及获取物理地址PBA 4所对应的最佳阈值电压Vth 4。并在向物理地址PBA 4发出读命令时,指示使用最佳阈值电压Vth 4读取闪存中的数据。
进一步地,若使用最佳阈值电压Vth 4读物理地址PBA 4失败(例如,读取结果中存在不可纠正的错误),通过闪存搜索新的最佳阈值电压(例如,Vth4’),以及在FTL表将最佳阈值电压Vth 4更新为新的最佳阈值电压Vth 4’(例如,记录所获取的新的最佳阈值电压Vth 4’或指示新的最佳阈值电压的索引/标识)。
本图5所示的实施例中,将最佳阈值电压存储在FTL表中。由于每次都要访问FTL表以获取物理地址,因此可在获取物理地址的同时获取最佳阈值电压,而无需引入额外的存储介质访问延迟。需要注意的是,图5中的“Vth 0”表示常规阈值电压,指示可使用普通读命令来从闪存中读取数据。也就是说,使用常规阈值电压读取闪存中的数据,而无需在读命令中指示最佳阈值电压。
继续参见图5,响应于收到读命令,从FTL表中获取与读命令要访问的逻辑地址(例如,LBA 4)对应的物理地址(PBA 15),以及获取物理地址PBA 15所对应的最佳阈值电压Vth0(常规阈值电压),并向物理地址PBA 15发出读命令时,使用指示常规阈值电压的普通读命令。
本实施例中使用普通读命(由阈值电压Vth 0所指示)读物理地址PBA 15失败(例如,读取结果中存在不可纠正的错误),通过闪存来搜索新的最佳阈值电压(例如,Vth 5),以及在FTL表中将对应物理地址PBA 15的最佳阈值电压Vth 0更新为新的最佳阈值电压Vth5(例如记录所获取的新的最佳阈值电压Vth 5或指示新的最佳阈值电压的索引/标识)
进一步地,响应于将对应物理地址PBA15的最佳阈值电压更新为Vth5,依据PBA 15与PBA 13属于闪存的相同字线,将FTL表中与物理地址PBA 13相关联的最佳阈值电压也更新为Vth5。从而在接下来读取物理地址PBA 13或者逻辑地址LBA 5时,能够获取并使用最佳阈值电压Vth 5。
依然进一步地,当对闪存执行擦除操作时,也从FTL表中删除与被擦除的闪存块相关的物理地址的最佳阈值电压,例如,将最佳阈值电压设置为Vth 0。
图6A为根据本发明又一实施例的FTL表,而图6B为根据本发明又一实施例的阈值电压表。FTL表包括多个条目。图6A中,表格的1行指示FTL表的一个条目。每个条目记录与逻辑地址(610)对应的物理地址(620)。与图5所示的FTL表不同,图6A中的FTL表,记录与逻辑地址相对应的物理地址,而不提供与物理地址对应的阈值电压。
如图6A与6B所示,不在FTL表中存储最佳阈值电压,而是使用单独的阈值电压表(图6B)来存储最佳阈值电压。图6B的阈值电压表中的每条记录,均指示了与物理地址(650)对应的最佳阈值电压(660)。物理地址字段不是必须出现在阈值电压表中,而可由物理地址的散列结果获得物理地址对应的最佳阈值电压或者指示最佳阈值电压的索引/标识在阈值电压表中的存储位置。可选地,为节省存储资源,在阈值电压表中,仅记录不同于常规阈值电压的最佳阈值电压。
响应于读命令,从图6A的FTL表中获取与读命令要访问的逻辑地址(例如,LBA 2)对应的物理地址(PBA 9),在向物理地址PBA 9发出读命令时,使用指示常规阈值电压的普通读命令。
进一步地,响应于从物理地址PBA 9读取数据时出错(例如,读取结果存在不可纠正的错误),则访问图6B所示的阈值电压表,获取与物理地址PBA 9相对应的最佳阈值电压Vth 9,并使用最佳阈值电压Vth 9向物理地址PBA 9发出读命令。
更进一步地,继续参见图6B,若使用最佳阈值电压Vth 9访问物理地址PBA 9的结果中依然存在不可纠正的错误,则通过闪存来搜索用于物理地址PBA 9的新的最佳阈值电压(例如,得到Vth 9’),并将新的最佳阈值电压Vth 9’与物理地址PBA 9相关联地记录在阈值电压表中。
作为另一个例子,使用普通读命令访问物理地址PBA 9失败后,访问阈值电压表,没有找到与物理地址PBA 9相关联的记录时,则通过闪存来搜索用于物理地址PBA 9的最佳阈值电压(例如,得到Vth 9’),并将新的最佳阈值电压Vth 9’与物理地址PBA 9相关联地记录在阈值电压表中。
进一步地,在更新物理地址PBA 9对应的新的最佳阈值电压Vth 9’后,还获取与物理地址PBA 9共享相同字线的其他物理地址(例如,PBA 7与PBA 8),并将新的最佳阈值电压Vth 9’与物理地址PBA 9共享相同字线的其他物理地址PBA 7/PBA 8相关联地记录在阈值电压表中。
依然进一步地,当对闪存执行擦除操作时,也从阈值电压表中删除与被擦除的闪存块相关的物理地址的记录。
可选地,阈值电压表中的每条记录指示了与字线对应的最佳阈值电压。响应于从物理地址(例如,PBA9)读取数据时出错(例如,读取结果中存在不可纠正的错误),访问阈值电压表,获取与物理地址PBA9所在的字线相对应的最佳阈值电压Vth 9,并使用最佳阈值电压Vth 9向物理地址PBA 9发出读命令。进一步地,若使用最佳阈值电压Vth 9访问物理地址PBA9的结果依然失败,通过闪存来搜索用于物理地址PBA 9所在字线的新的最佳阈值电压(例如,得到Vth 9’),并将新的最佳阈值电压Vth 9’与物理地址PBA 9所在的字线相关联地记录在阈值电压表中。依然可选地,阈值电压表中的每条记录指示了与字线组或子字线组对应的最佳阈值电压。字线组包括在闪存芯片的管芯内空间上相邻的多条字线。由于在空间上相邻,因而字线组内的多条字线具有相同或相似的最佳阈值电压。子字线组包括在闪存芯片的管芯内空间上相邻的多条字线的每条上处于相同位置的一个或多个物理页。
图7是根据本发明另一实施例的大块的示意图。固态存储设备中包括多个NVM芯片。作为举例,在每16个逻辑单元(LUN)上构造大块。每个大块包括16个物理块,来自16个逻辑单元(LUN)的每一个。在图7所示的例子中,大块0包括来自16个逻辑单元(LUN)的每个的物理块0,而大块1包括来自每个逻辑单元(LUN)的物理块1。也可以有多种其他方式来构造大块。在大块中包括多个页条带。
本实施例中,存储设备中以大块为单位执行擦除或垃圾回收操作。图8A为根据本发明另一实施例的FTL表。如图8A所示,在FTL表中,每个条目记录了逻辑地址(810)与物理地址(820)的对应关系。物理地址的部分指示大块,而另一部分指示物理页地址,例如,由“PBA 1-4”所指示的物理地址位于大块1中,而由“PBA 2-6”指示的物理地址位于大块2中。图8B为根据本发明另一实施例的阈值电压表。如图8B所示,在最佳阈值表中,为每个大块(830)提供与其对应的最佳阈值电压(840)。大块号字段(830)不是必须出现在阈值电压表中,而可由大块号的散列结果获得大块对应的最佳阈值电压在阈值电压表中的存储位置。可选地,为节省存储资源,阈值电压表中,仅记录不同于常规阈值电压的最佳阈值电压。
响应于读命令,从图8A的FTL表中获取与读命令要访问的逻辑地址(例如,LBA 3)对应的物理地址(PBA 4-10)。在向物理地址PBA 4-10发出读命令时,使用指示常规阈值电压的普通读命令。
响应于从物理地址PBA 4-10读取数据时出错(读取结果中存在不可纠正的错误),访问阈值电压表,如图8B所示,获取与物理地址PBA 4-10所在大块(大块4)相对应的最佳阈值电压Vth 10,并使用最佳阈值电压Vth 10向物理地址PBA 4-10发出读命令。进一步地,若使用最佳阈值电压Vth 10访问物理地址PBA 4-10的结果依然失败,通过闪存来搜索用于物理地址PBA 4-10的新的最佳阈值电压(例如,得到Vth 10’),并将新的最佳阈值电压Vth10’与大块4相关联地记录在阈值电压表中。
作为另一个例子,使用普通读命令访问物理地址PBA 4-10失败后,访问阈值电压表,没有找到与物理地址PBA 4-10所在大块(大块4)相关联的记录。则通过闪存来搜索用于物理地址PBA 4-10的最佳阈值电压(例如,得到Vth 10’),并将新的最佳阈值电压Vth 10’与物理地址PBA 4-10所在的大块4相关联地记录在阈值电压表中。
依然进一步地,当对闪存执行擦除操作时,也从阈值电压表中删除与被擦除的大块相关的记录。
在依然另一个例子中,在最佳阈值电压表的每个记录中,提供闪存块与最佳阈值电压的对应关系。在访问物理地址时,从最佳阈值电压表中获得与物理地址所在的闪存块相关联的最佳阈值电压。
根据本发明实施例的FTL表和/或最佳阈值电压表,可存储在DRAM 110(参看图1B)或控制部件104内部的存储器中。控制部件104访问DRAM 110来维护FTL表和/或最佳阈值电压表。控制部件104控制根据本发明实施例的方法的执行。可选的,控制部件104包括CPU,在CPU中执行软件来操纵控制部件104的硬件来执行根据本发明实施例的方法。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。