存储器控制器以及操作存储器控制器的方法与流程

文档序号:23343523发布日期:2020-12-18 16:42阅读:227来源:国知局
存储器控制器以及操作存储器控制器的方法与流程

相关申请的交叉引用

本申请要求于2019年6月18日向韩国知识产权局提交的申请号为10-2019-0072179的韩国专利申请的优先权,该韩国专利申请的全部公开内容通过引用并入本文。

本公开的各个实施例总体涉及一种电子装置,并且更特别地,涉及一种存储器控制器以及操作该存储器控制器的方法。



背景技术:

存储装置是在诸如计算机、智能电话或智能平板的主机装置的控制下存储数据的装置。存储装置的非限制性示例包括将数据存储在磁盘中的诸如硬盘驱动器(hdd)的装置以及将数据存储在半导体存储器特别是非易失性存储器装置中的诸如固态驱动器(ssd)或存储卡的装置。

存储装置可以包括存储数据的存储器装置和控制数据在存储器装置中的存储的存储器控制器。存储器装置可以被分类为易失性存储器装置和非易失性存储器装置。非易失性存储器装置的代表性示例包括只读存储器(rom)、可编程rom(prom)、电可编程rom(eprom)、电可擦除可编程rom(eeprom)、闪速存储器、相变随机存取存储器(pram)、磁性ram(mram)、电阻式ram(rram)以及铁电ram(fram)。



技术实现要素:

本公开的各个实施例涉及一种使不可校正错误能够得以校正的存储器控制器以及操作该存储器控制器的方法。

本公开的实施例可以提供一种用于控制存储数据的存储器装置的存储器控制器。该存储器控制器可以包括:位计数器,被配置成通过对响应于从主机接收的编程请求而待被编程在存储器装置中的地址处的主机数据中的位的数量进行计数来生成第一计数值;闪存转换层,被配置成生成第一页面信息,第一页面信息指示被编程的数据存储在存储器装置中的地址;附加数据生成器,被配置成基于第一计数值和第一页面信息生成判断数据;比较器,被配置成通过将判断数据与检测数据进行比较来生成比较信息,其中使用响应于从主机接收的读取请求从存储器装置读取的被编程的数据来生成检测数据;以及读取数据控制器,被配置成基于比较信息执行校正从存储器装置读取的被编程的数据中的错误的操作。

本公开的实施例可以提供一种操作存储器控制器的方法,该存储器控制器用于控制存储数据的存储器装置。该方法可以包括:从主机接收主机数据;通过对主机数据中包含的处于编程状态的位或处于擦除状态的位进行计数来生成第一计数值;生成第一页面信息,该第一页面信息指示存储器装置中包括的页面之中、待存储主机数据的页面的地址;基于第一计数值和第一页面信息生成判断数据;基于从存储器装置读取的被编程的数据生成检测数据;通过将判断数据与检测数据进行比较生成比较信息;以及基于比较信息执行校正从存储器装置读取的被编程的数据中的错误的操作。

附图说明

图1是示出根据本公开的实施例的存储装置的框图。

图2是示出根据本公开的实施例的图1的存储器控制器的配置以及数据的类型的示图。

图3是示出根据本公开的实施例的图1的存储器控制器的配置的示图。

图4是示出根据本公开的实施例的图1的存储器装置的结构的示图。

图5是示出根据本公开的实施例的存储块的示图。

图6a和图6b是示出根据本公开的实施例的数据的类型的示图。

图7a和图7b是示出根据本公开的实施例的图6a和图6b的数据的示例的示图。

图8a和图8b是示出根据本公开的实施例的校正不可校正错误的操作的示图。

图9是示出根据本公开的实施例的存储器控制器的操作的流程图。

图10是示出根据本公开的实施例的存储器控制器的操作的流程图。

图11是示出根据本公开的实施例的存储器控制器的操作的流程图。

图12是示出根据本公开的实施例的图1的存储器控制器的示图。

图13是示出使用根据本公开的实施例的存储装置的固态驱动器(ssd)系统的示例的框图。

具体实施方式

本说明书或申请中引入的本公开的实施例中的具体结构或功能描述仅用于描述本公开的实施例的目的。该描述不应被解释为将本公开涵盖的实施例限制为本说明书或申请中描述的实施例。

现在将基于实施例详细描述本公开。然而,本公开可以以许多不同的形式实现,并且不应被解释为仅限于本文阐述的实施例,而是应被解释为覆盖落入本公开的构思和技术范围内的修改方案、等同方案或替换方案。然而,这并不旨在将本公开限制为特定实践模式,并且将理解的是,不脱离本公开的精神和技术范围的所有修改方案、等同方案和替代方案都被涵盖在本公开中。

将理解的是,虽然术语“第一”和/或“第二”可以在本文中用于描述各种元件,但是这些元件不受这些术语限制。在本说明书中,这些术语仅用于将一个元件与另一元件区分开。例如,在不脱离本公开的教导的情况下,下面讨论的第一元件可以被称为第二元件,类似地,第二元件也可以被称为第一元件。

将理解的是,当元件被称为“联接”或“连接”到另一元件时,该元件可以直接联接或连接到其它元件,或者在二者之间可以存在中间元件。相反,应理解的是,当元件被称为“直接联接”或“直接连接”到另一元件时,不存在中间元件。解释元件之间的关系的诸如“在......之间”、“直接在......之间”、“与......邻近”或“直接与......邻近”的其它表达应以相同的方式来解释。

本文使用的术语仅用于描述特定实施例的目的,而不旨在限制。在本公开中,除非上下文另有明确指示,否则单数形式也旨在包括复数形式。将进一步理解的是,当在本说明书中使用时,术语“包括”、“包含”、“具有”等指明所陈述特征、数字、部件、步骤、操作、元件、组件和/或其组合的存在,但不排除一个或多个其它特征、数字、部件、步骤、操作、元件、组件和/或其组合的存在或添加。

除非另外定义,否则本文使用的包括技术术语和科学术语的所有术语具有与本公开所属领域的普通技术人员通常理解的含义相同的含义。将进一步理解的是,本文使用的术语应被理解为具有与其在本说明书的上下文和相关领域中的含义一致的含义,并且将不以理想化或过于形式化的意义来解释,除非本文如此明确地定义。

将省略对本领域普通技术人员公知的功能和结构的详细描述,以避免模糊本公开的主题。这旨在省略不必要的描述以使本公开的主题清楚。

现在将在下文中参照示出本公开的优选实施例的附图更充分地描述本公开的各个实施例,使得本领域普通技术人员可以容易地实行本公开的技术构思。

图1是示出根据本公开的实施例的存储装置的框图。

参照图1,存储装置50可以包括存储器装置100、存储器控制器200和缓冲存储器(未示出)。

存储装置50可以是在诸如作为非限制性示例的移动电话、智能电话、mp3播放器、膝上型计算机、台式计算机、游戏机、电视(tv)、平板pc或车载信息娱乐系统的主机300的控制下存储数据的装置。

根据作为与主机300通信的方案的主机接口,存储装置50可以被制造为各种类型的存储装置中的任意一种。例如,存储装置50可以被实施为诸如下列的各种类型的存储装置中的任意一种:例如,固态驱动器(ssd)、多媒体卡(mmc)、嵌入式mmc(emmc)、尺寸减小的mmc(rs-mmc)或微型mmc、安全数字卡(sd)、迷你sd或微型sd、通用串行总线(usb)存储装置、通用闪存(ufs)装置、个人计算机存储卡国际协会(pcmcia)卡型存储装置、外围组件互连(pci)卡型存储装置、高速pci(pci-e)卡型存储装置、紧凑型闪存(cf)卡、智能媒体卡和记忆棒。

存储装置50可以以各种类型的封装形式中的任意一种来制造。例如,存储装置50可以被制造为堆叠式封装(pop)、系统级封装(sip)、片上系统(soc)、多芯片封装(mcp)、板上芯片(cob)、晶圆级制造封装(wfp)和晶圆级堆叠封装(wsp)。

存储器装置100可以存储数据。存储器装置100响应于存储器控制器200的控制或在存储器控制器200的控制下操作。存储器装置100可以包括存储器单元阵列,该存储器单元阵列包括存储数据的多个存储器单元。存储器单元阵列可以包括多个存储块。每个存储块可以包括多个存储器单元,多个存储器单元可以构成多个页面。在实施例中,每个页面可以是将数据存储在存储器装置100中或读取存储器装置100中存储的数据的单元。存储块可以是擦除数据的单元。

在实施例中,存储器装置100可以采取诸如下列的许多可选形式:双倍数据速率同步动态随机存取存储器(ddrsdram)、低功率双倍数据速率第四代(lpddr4)sdram、图形双倍数据速率(gddr)sdram、低功率ddr(lpddr)sdram、rambus动态随机存取存储器(rdram)、nand闪速存储器、垂直nand闪速存储器、nor闪速存储器、电阻式ram(rram)、相变随机存取存储器(pram)、磁阻ram(mram)、铁电ram(fram)或自旋转移力矩ram(stt-ram)。在本说明书中,为了便于描述,描述将假设存储器装置100是nand闪速存储器。

存储器装置100可以以二维(2d)阵列结构或三维(3d)阵列结构来实施。在下文中,虽然将3d阵列结构作为实施例进行描述,但是本公开不限于此。本公开不仅可以应用于电荷存储层由导电浮栅(fg)形成的闪速存储器装置,而且还可以应用于电荷存储层由绝缘层形成的电荷撷取闪存(ctf)存储器装置。

在实施例中,存储器装置100可以以一个存储器单元中存储一个数据位的单层单元(slc)方式而操作。可选地,存储器装置100可以以一个存储器单元中存储至少两个数据位的方式而操作。例如,存储器装置100可以以一个存储器单元中存储两个数据位的多层单元(mlc)方式、一个存储器单元中存储三个数据位的三层单元(tlc)方式或一个存储器单元中存储四个数据位的四层单元(qlc)方式而操作。

存储器装置100可以从存储器控制器200接收命令和地址,并且可以访问由地址选择的存储器单元阵列的区域。也就是说,存储器装置100可以响应于命令对由地址选择的区域执行操作。作为示例,存储器装置100可以响应于接收的命令执行写入操作(即,编程操作)、读取操作或擦除操作。当接收到编程命令时,存储器装置100可以将数据编程到由地址选择的区域。当接收到读取命令时,存储器装置100可以从由地址选择的区域读取数据。当接收到擦除命令时,存储器装置100可以擦除存储在由地址选择的区域中的数据。

存储器控制器200可以包括位计数器210。位计数器210可以对从主机300接收的主机数据中或在读取操作期间从存储器装置100接收的读取数据中包含的1的数量进行计数。在另一实施例中,位计数器210可以对读取数据或主机数据中包含的0的数量进行计数。

位计数器210可以对数据中包含的1的数量进行计数,然后生成新数据。新数据可以被包括在判断数据或检测数据中。判断数据可以包括基于从主机300接收的主机数据而生成的数据。检测数据可以包括基于从存储器装置100接收的读取数据而生成的数据。

存储器控制器200可以包括闪存转换层(ftl)220。闪存转换层220可以存储并管理关于从主机300接收的逻辑块地址(lba)与物理块地址(pba)之间的映射的信息。也就是说,闪存转换层220可以将从主机300接收的逻辑块地址(lba)转换为物理块地址(pba)。当存储器控制器200从主机300接收编程请求或读取请求时,闪存转换层220可以使用从主机300接收的逻辑块地址(lba)来生成页面信息,该页面信息包括与逻辑块地址(lba)对应的物理块地址(pba)的映射信息。

存储器控制器200可以包括附加数据生成器230。附加数据生成器230可以生成附加数据。附加数据可以是存储在存储器装置100中的数据,并且可以包括主机数据和判断数据。主机数据可以包括待被编程到存储器装置100的数据,并且可以从主机300接收。可以基于从主机300接收的主机数据中包含的1的数量并且基于待编程主机数据的页面的索引或地址生成判断数据。在另一实施例中,可以基于从主机300接收的主机数据中包含的0的数量来生成判断数据。

在实施例中,主机数据可以存储在存储器装置100的用户区域中。判断数据可以存储在存储器装置100的备用区域中。

在实施例中,附加数据生成器230可以生成判断数据,然后可以存储判断数据。此后,在读取操作期间,附加数据生成器230可以输出判断数据以与基于从存储器装置100读取的数据而生成的检测数据进行比较。

存储器控制器200可以包括比较器240。比较器240可以将判断数据与检测数据进行比较。

在实施例中,判断数据可以包括当从主机300接收到编程请求时基于主机数据而生成的数据。也就是说,判断数据可以是通过将主机数据中包含的1的数量与基于指示待编程主机数据的位置的页面地址或索引来计算的数量求和而获得的值。

检测数据可以包括基于在读取操作期间从存储器装置100接收的读取数据而生成的数据。也就是说,检测数据可以是通过将读取数据中包含的1的数量与基于指示读取数据被读取的页面的位置的页面地址或索引来计算的数量求和而获得的值。

在实施例中,当不可校正错误出现时,比较器240可以将判断数据与检测数据进行比较。当判断数据与检测数据不相同时,比较器240可以生成包括关于判断数据与检测数据之间的差的信息的比较信息,并且可以传输比较信息。

存储器控制器200可以包括错误校正器260。错误校正器260可以校正从存储器装置100读取的数据中的错误。

例如,存储器控制器200可能接收到存储器装置100中的与主机数据不同的数据。也就是说,存储在存储器装置100中的或从存储器装置100读取的数据可能由于因温度改变或保留特性劣化引起的劣化而改变,或者可选地,可能由于读取操作中的干扰而读取改变的数据。在这种情况下,错误校正器260可以校正已经出现错误或已经检测到错误的数据中包含的错误。

然而,即使执行了错误校正器260的操作,也可能出现不可校正错误。当出现不可校正错误时,虽然常规技术将包括存储读取数据的页面的存储块作为坏块处理,但是本公开的实施例可以通过改变读取数据的位而不是整个块或页面来校正不可校正错误。

在实施例中,当确定已经出现不可校正错误时,错误校正器260可以将指示归因于不可校正错误的失败已经发生的信息输出到读取数据控制器250,并且读取数据控制器250可以控制读取数据,使得根据需要通过改变读取数据的位来校正不可校正错误。

读取数据控制器250可以控制从存储器装置100读取的数据。更具体地,当如上所述出现不可校正错误时,读取数据控制器250可以改变读取数据。也就是说,读取数据控制器250可以将读取数据中包含的“0”改变为“1”,或者将读取数据中包含的“1”改变为“0”。因此,读取数据控制器250可以控制读取数据,使得可以通过改变读取数据中包含的“0”或“1”来校正不可校正错误。读取数据控制器250可以将经校正的数据输出到主机300。

存储器控制器200可以控制存储装置50的整体操作。

当电力被施加到存储装置50时,存储器控制器200可以运行固件(fw)。在实施例中,当存储器装置100是闪速存储器装置100时,存储器控制器200可以运行诸如闪存转换层(ftl)的固件以控制主机300和存储器装置100之间的通信。

在实施例中,存储器控制器200可以从主机300接收数据和逻辑块地址(lba),并且可以将逻辑块地址(lba)转换为物理块地址(pba),该物理块地址(pba)指示存储器装置100的待存储数据的存储器单元的地址。进一步地,存储器控制器200可以将逻辑-物理地址映射表存储在缓冲存储器中,该逻辑-物理地址映射表配置逻辑块地址(lba)和物理块地址(pba)之间的映射关系。

存储器控制器200可以响应于从主机300接收的请求来控制存储器装置100以执行编程操作、读取操作或擦除操作。例如,当从主机300与逻辑块地址一起接收到编程请求时,存储器控制器200可以将编程请求转换为编程命令,并且可以将编程命令、对应于逻辑块地址的物理块地址(pba)、以及待编程的数据提供至存储器装置100。当从主机300与逻辑块地址一起接收到读取请求时,存储器控制器200可以将读取请求转换为读取命令,选择对应于逻辑块地址的物理块地址,之后将读取命令和物理块地址(pba)提供至存储器装置100。当从主机300与逻辑块地址一起接收到擦除请求时,存储器控制器200可以将擦除请求转换为擦除命令,选择对应于逻辑块地址的物理块地址,之后将擦除命令和物理块地址(pba)提供至存储器装置100。

在实施例中,存储器控制器200可以在没有来自主机300的请求的情况下自主地生成编程命令、地址和数据,并且可以将编程命令、地址和数据传送至存储器装置100。例如,存储器控制器200可以将命令、地址和数据提供至存储器装置100,以执行诸如用于损耗均衡的编程操作和用于垃圾收集的编程操作的后台操作。

在实施例中,存储器控制器200可以控制主机300和缓冲存储器(未示出)之间的数据交换。可选地,存储器控制器200可以将用于控制存储器装置100的系统数据临时存储在缓冲存储器(未示出)中。例如,存储器控制器200可以将从主机300输入的数据临时存储在缓冲存储器中,然后可以将临时存储在缓冲存储器中的数据传送至存储器装置100。

在各个实施例中,缓冲存储器可以用作存储器控制器200的工作存储器或高速缓存存储器。缓冲存储器可以存储由存储器控制器200运行的代码或命令。可选地,缓冲存储器可以存储由存储器控制器200处理的数据。

在实施例中,缓冲存储器可以被实施为诸如双倍数据速率sdram(ddrsdram)、双倍数据速率第四代(ddr4)sdram、低功率双倍数据速率第四代(lpddr4)sdram、图形双倍数据速率(gddr)sdram、低功耗ddr(lpddr)sdram或rambusdram(rdram)的dram或者静态ram(sram)。

在一些实施例中,存储装置50不包括缓冲存储器。在这种情况下,存储装置50外部的其他易失性存储器装置可以用作缓冲存储器。

在实施例中,存储器控制器200可以控制至少两个存储器装置100。在这种情况下,存储器控制器200可以使用交织或交替方案控制存储器装置100,以提高操作性能。

通过非限制性示例的方式,主机300可以使用诸如下列的各种通信方法中的至少一种与存储装置50通信:通用串行总线(usb)、串行at附件(sata)、串列scsi(sas)、高速芯片间(hsic)、小型计算机系统接口(scsi)、外围组件互连(pci)、高速pci(pcie)、高速非易失性存储器(nvme)、通用闪存(ufs)、安全数字(sd)、多媒体卡(mmc)、嵌入式mmc(emmc)、双列直插式存储器模块(dimm)、寄存式dimm(rdimm)和低负载dimm(lrdimm)通信方法。

图2是示出根据本公开的实施例的图1的存储器控制器的配置的示图。

图2示出当从主机300接收到编程请求时存储器控制器200的操作。

参照图2,图2的存储器控制器200可以包括位计数器210、闪存转换层(ftl)220和附加数据生成器230。在图2的存储器控制器200中,为了便于描述,省略了比较器(例如,图1的240)和读取数据控制器(例如,图1的250)。

位计数器210可以从主机300接收主机数据host_data。主机数据host_data可以由“0”和“1”(即,0和1)组成。

主机数据host_data可以是待被编程到存储器装置100的数据。也就是说,主机数据host_data可以是与从主机300接收的编程请求对应的数据。因此,当存储器控制器200从主机300接收与编程请求和写入请求对应的主机数据host_data时,位计数器210从主机300接收主机数据host_data。

在实施例中,位计数器210可以对主机数据host_data中包含的1的数量进行计数。位计数器210可以通过对主机数据host_data中包含的1的数量进行计数来生成计数值count_val。附加数据生成器230可以使用由位计数器210使用主机数据host_data生成的计数值count_val生成判断数据jud_data。

闪存转换层220可以生成页面信息page_inf。页面信息page_inf可以基于待编程主机数据host_data的页面的地址,或者基于待编程主机数据host_data的页面的索引来生成。在实施例中,页面信息page_inf可以包括通过对待编程主机数据host_data的页面的地址或索引执行模运算而获得的值。模运算可以是当目标值除以参考值时计算余数的方法。

在实施例中,当存储器控制器200从主机300接收编程请求时,存储器控制器200可以从主机300与主机数据host_data一起接收逻辑块地址。存储器控制器200可以将对应于逻辑块地址(lba)的物理块地址(pba)输出到存储器装置100。此处,闪存转换层220可以通过形成逻辑块地址(lba)和物理块地址(pba)之间的映射关系来选择物理块地址(pba)。物理块地址(pba)可以是存储块的地址或页面的地址。

也就是说,当存储器控制器200从主机300接收编程请求时,闪存转换层220可以将页面信息page_inf输出到附加数据生成器230,同时还将与待编程主机数据host_data的位置对应的存储块或页面的地址输出到存储器装置100,该页面信息page_inf包括通过对存储块或页面的地址(与待编程主机数据host_data的位置对应的地址)执行模运算而获得的值。

附加数据生成器230可以生成附加数据add_data。附加数据add_data可以包含主机数据host_data和判断数据jud_data。

在实施例中,附加数据生成器230可以从主机300接收主机数据host_data。主机数据host_data可以是待被编程到存储器装置100的数据。附加数据生成器230可以生成包含主机数据host_data的附加数据add_data。附加数据add_data中包含的数据段之中的主机数据host_data可以是存储在存储器装置100的用户区域中的数据。

在实施例中,附加数据生成器230可以从位计数器210接收计数值count_val,并且从闪存转换层220接收页面信息page_inf。附加数据生成器230可以基于计数值count_val和页面信息page_inf生成判断数据jud_data。也就是说,附加数据生成器230可以生成包含判断数据jud_data的附加数据add_data。附加数据add_data中包含的判断数据jud_data可以存储在附加数据生成器230和/或存储器装置100的备用区域中。因此,也可以从附加数据生成器230和/或存储器装置100接收判断数据jud_data。

例如,存储器装置100的存储器单元阵列中包括的多个存储块中的每一个可以被划分为存储数据的用户区域和备用区域。备用区域可以存储与存储在用户区域中的数据有关的数据,或者当不足以确保用户区域时,备用区域可以代替用户区域。当与存储在用户区域中的数据有关的数据被存储在备用区域中时,与存储在用户区域中的数据的位置或大小有关的数据也可以被存储在备用区域中。因此,在本公开涵盖的实施例中,可以将各种类型的数据存储在备用区域中。

因此,在本公开的实施例中,主机数据host_data可以存储在存储器装置100的用户区域中,并且判断数据jud_data可以存储在存储器装置100的备用区域中。

因此,附加数据生成器230可以生成包含主机数据host_data和判断数据jud_data的附加数据add_data,并且可以将所生成的附加数据add_data输出到存储器装置100。基于从存储器控制器200接收的附加数据add_data,存储器装置100可以将包含在附加数据add_data中的主机数据host_data编程到存储器单元阵列的用户区域,并且将判断数据jud_data编程到存储器单元阵列的备用区域。当附加数据生成器230存储判断数据jud_data时,判断数据jud_data可以不存储在存储器单元阵列的备用区域中。

图3是示出根据本公开的实施例的图1的存储器控制器的配置的示图。

图3示出示例中的存储器控制器200的操作,在该示例中,从主机(例如,图2的主机300)接收读取请求,存储器装置100执行读取操作,并且作为执行读取操作的结果出现不可校正错误。

参照图3,图3的存储器控制器200可以包括位计数器210、附加数据生成器230、比较器240、读取数据控制器250和错误校正器260。在图3的存储器控制器200中,为了便于描述,省略闪存转换层。

在实施例中,可能读取与主机数据不同(即,与图2的host_data不同)的数据。也就是说,虽然响应于从主机(例如,图2的主机300)接收的编程请求,主机数据已经被编程到存储器装置100,但是在读取存储在存储器装置100中的数据的进程中,存储在存储器装置100中的数据可能改变,或者相应数据可能被修改。在这种情况下,虽然主机数据被编程到了存储器装置100,但是可能读取与原始编程的主机数据不同的数据。

详细地,存储在存储器装置100中的数据可能由于因存储装置(例如,图1的存储装置50)的温度改变或保留特性劣化引起的劣化而改变。也就是说,虽然从主机(例如,图2的主机300)接收的主机数据被存储在存储器装置100中,但是存储的数据可能发生改变,使得存储的数据与由主机300提供的原始主机数据不同。在这种示例中,当响应于来自主机的读取请求而读取存储在存储器装置100中的数据时,读取的数据可能与原始存储在存储器装置100中的主机数据不同。

在另一示例中,存储在存储器装置100中的数据由于读取操作引起的干扰也被改变,使得随后可能读取与原始存储的主机数据不同的数据。

当响应于来自主机的读取请求而读取与原始编程的主机数据不同的数据时,可能出现错误。存储器控制器200可以执行操作以校正被检索的主机数据中的错误。

更具体地,错误校正器260可以从存储器装置100接收读取数据read_data。然而,如上所述,读取数据read_data可能是与主机数据不同的数据。也就是说,虽然从主机(例如,图2的主机300)接收的主机数据已经被存储在存储器装置100中,但是当从存储器装置100读取时,可能获得不同的数据。在这种情况下,错误校正器260可以校正读取数据read_data中的错误。

即使在错误校正器260已经执行错误校正操作之后,也并非可以校正读取数据中的所有错误。当读取数据中的至少一个错误仍未校正时,错误校正器260可以生成不可校正错误信息(即,不可校正错误校正码信息)uecc_inf,并且将不可校正错误信息uecc_inf输出至读取数据控制器250。

在出现不可校正错误的情况下,存储器控制器200可以将存储相应数据的存储块作为坏块处理。

然而,本公开提出在避免将存储读取数据read_data的存储块作为坏块处理的同时校正不可校正错误的方法。

在实施例中,位计数器210可以从存储器装置100接收读取数据read_data。读取数据read_data可以是通过响应于从主机(例如,图2的主机300)接收的读取请求来读取存储在存储器装置100中的数据而获得的数据。读取数据read_data可以由多个“0”和“1”组成。

位计数器210可以通过将对读取数据read_data中包含的1的数量进行计数而生成的计数值与对读取数据read_data被读取的页面的地址或索引执行模运算而获得的值求和来生成检测数据det_data。检测数据det_data可以是与判断数据jud_data进行比较的值。模运算可以是当目标值除以参考值时计算余数的方法。

比较器240可以从位计数器210接收检测数据det_data,并且从附加数据生成器230接收判断数据jud_data。检测数据det_data可以包括基于对读取数据read_data中包含的1的数量进行计数而生成的计数值与对读取数据被读取的页面的地址或索引执行模运算而获得的值来生成的数据。判断数据jud_data可以包括基于从主机(例如,图2的主机300)接收的主机数据与对待执行编程操作的页面的地址或索引执行模运算而获得的值来生成的数据。

在实施例中,当判断数据jud_data存储在存储器装置100的备用区域中时,可以从存储器装置100接收判断数据jud_data。也就是说,因为判断数据jud_data可以存储在附加数据生成器230和/或存储器装置100中,因此可以从附加数据生成器230和/或存储器装置100接收判断数据jud_data。

在实施例中,比较器240可以将判断数据jud_data与检测数据det_data进行比较。

详细地,当判断数据jud_data与检测数据det_data相同时,可以确定主机数据与读取数据read_data匹配,因此比较器240不生成比较信息com_inf。相反,当判断数据jud_data与检测数据det_data不相同时,可以确定主机数据与读取数据read_data不匹配,因此比较器240可以生成比较信息com_inf。

比较信息com_inf可以包含关于判断数据jud_data中包含的值与检测数据det_data中包含的值之间的差的信息。比较器240可以生成比较信息com_inf,并且将比较信息com_inf输出到读取数据控制器250。

读取数据控制器250可以从比较器240接收比较信息com_inf。比较信息com_inf可以指示对应于从主机(例如,图2的主机300)接收的编程请求的主机数据与对应于从主机(例如,图2的主机300)接收的读取请求的读取数据read_data不匹配。接收到比较信息com_inf,读取数据控制器250可以执行校正不可校正错误的操作。

进一步地,读取数据控制器250可以从错误校正器260接收不可校正错误信息uecc_inf。当错误未被校正时或者当错误校正不完全时,可以从错误校正器260输出不可校正错误信息uecc_inf。如果从错误校正器260接收到不可校正错误信息uecc_inf,则读取数据控制器250可以执行校正不可校正错误的操作。

因此,当从比较器240接收到比较信息com_inf时或者当从错误校正器260接收到不可校正错误信息uecc_inf时,读取数据控制器250可以执行校正不可校正错误的操作。

在实施例中,读取数据控制器250可以接收比较信息com_inf和/或不可校正错误信息uecc_inf,并且可以将读取数据read_data中包含的“0”逐位改变为“1”,直到读取数据read_data中的错误被校正为止。

图4是示出根据本公开的实施例的图1的存储器装置的结构的示图。

参照图4,存储器装置100可以包括存储器单元阵列110、外围电路120和控制逻辑130。

存储器单元阵列110包括多个存储块blk1至blkz。多个存储块blk1至blkz通过行线rl联接到行解码器121。存储块blk1至blkz中的每一个可以通过位线bl1至bln联接到页面缓冲器组123。存储块blk1至blkz中的每一个可以包括多个存储器单元。在实施例中,多个存储器单元可以是非易失性存储器单元。联接到相同字线的存储器单元可以被定义为单个页面。因此,单个存储块可以包括多个页面。

行线rl可以包括至少一个源极选择线、多个字线和至少一个漏极选择线。

存储器单元阵列110中包括的存储器单元中的每一个可以被实施为能够存储一个数据位的单层单元(slc)、能够存储两个数据位的多层单元(mlc)、能够存储三个数据位的三层单元(tlc)或能够存储四个数据位的四层单元(qlc)。

外围电路120可以在控制逻辑130的控制下对存储器单元阵列110的被选择的区域执行编程操作、读取操作或擦除操作。外围电路120可以驱动存储器单元阵列110。例如,外围电路120可以在控制逻辑130的控制下将各种操作电压施加到行线rl和位线bl1至bln,或使所施加的电压放电。

外围电路120可以包括行解码器121、电压生成器122、页面缓冲器组123、列解码器124、输入/输出电路125和感测电路126。

行解码器121通过行线rl联接到存储器单元阵列110。行线rl可以包括至少一个源极选择线、多个字线和至少一个漏极选择线。在实施例中,字线可以包括普通字线和虚设字线。在实施例中,行线rl可以进一步包括管道选择线。

行解码器121可以解码从控制逻辑130接收的行地址addr。行解码器121根据经解码的地址,选择存储块blk1至blkz中的至少一个。进一步地,行解码器121可以根据经解码的地址来选择被选择的存储块的至少一个字线wl,使得由电压生成器122生成的电压被施加到至少一个字线wl。

例如,在编程操作期间,行解码器121可以将编程电压施加到被选择的字线,并且将电平低于编程电压的电平的编程通过电压施加到未被选择的字线。在编程验证操作期间,行解码器121可以将验证电压施加到被选择的字线,并且将高于验证电压的验证通过电压施加到未被选择的字线。在读取操作期间,行解码器121可以将读取电压施加到被选择的字线,并且将高于读取电压的读取通过电压施加到未被选择的字线。

在实施例中,基于存储块执行存储器装置100的擦除操作。在擦除操作期间,行解码器121可以根据经解码的地址选择一个存储块。在擦除操作期间,行解码器121可以将接地电压施加到联接到被选择的存储块的字线。

电压生成器122可以在控制逻辑130的控制下操作。电压生成器122可以使用被提供至存储器装置100的外部电源电压来生成多个电压。详细地,电压生成器122可以响应于操作信号opsig生成用于编程操作、读取操作和擦除操作的各种操作电压vop。例如,电压生成器122可以在控制逻辑130的控制下生成编程电压、验证电压、通过电压、读取电压、擦除电压等。

在实施例中,电压生成器122可以通过调节外部电源电压来生成内部电源电压。由电压生成器122生成的内部电源电压用作存储器装置100的操作电压。

在实施例中,电压生成器122可以使用外部电源电压或内部电源电压来生成多个电压。

例如,电压生成器122可以包括用于接收内部电源电压的多个泵浦电容器,并且在控制逻辑130的控制下通过选择性地启用多个泵浦电容器来生成多个电压。

所生成的电压可以通过行解码器121被供应至存储器单元阵列110。

页面缓冲器组123包括第一至第n页面缓冲器pb1至pbn。第一至第n页面缓冲器pb1至pbn通过第一至第n位线bl1至bln联接到存储器单元阵列110。第一至第n页面缓冲器pb1至pbn在控制逻辑130的控制下操作。详细地,第一至第n页面缓冲器pb1至pbn可以响应于页面缓冲器控制信号pbsignals操作。例如,在读取或验证操作期间,第一至第n页面缓冲器pb1至pbn可以临时存储通过第一至第n位线bl1至bln接收的数据,或者可以感测位线bl1至bln的电压或电流。

详细地,在编程操作期间,当编程电压被施加到被选择的字线时,第一至第n页面缓冲器pb1至pbn可以通过第一至第n位线bl1至bln将通过输入/输出电路125接收的数据data传输到被选择的存储器单元。可以基于所接收的数据data来对被选择的页面中的存储器单元进行编程。在编程验证操作期间,第一至第n页面缓冲器pb1至pbn可以通过感测通过第一至第n位线bl1至bln接收的电压或电流从被选择的存储器单元读取页面数据。

在读取操作期间,第一至第n页面缓冲器pb1至pbn可以通过第一至第n位线bl1至bln从被选择的页面中的存储器单元读取数据data,并且可以在列解码器124的控制下将读取数据data输出到输入/输出电路125。

在擦除操作期间,第一至第n页面缓冲器pb1至pbn可以允许第一至第n位线bl1至bln浮置,或者可以将擦除电压施加至第一至第n位线bl1至bln。

列解码器124可以响应于列地址cadd在输入/输出电路125和页面缓冲器组123之间传输数据。例如,列解码器124可以通过数据线dl与第一至第n页面缓冲器pb1至pbn交换数据,或者可以通过列线cl与输入/输出电路125交换数据。

输入/输出电路125可以将从以上参照图1描述的存储器控制器(例如,图1的200)接收的命令cmd和地址addr传输至控制逻辑130,或者可以与列解码器124交换数据data。

在读取操作或验证操作期间,感测电路126可以响应于使能位vrybit而生成参考电流,并且可以将从页面缓冲器组123接收的感测电压vpb与由参考电流产生的参考电压进行比较,然后输出通过信号pass或失败信号fail。

控制逻辑130可以通过响应于命令cmd和地址addr输出操作信号opsig、行地址radd、页面缓冲器控制信号pbsignals、使能位vrybit和列地址cadd来控制外围电路120。另外,控制逻辑130可以响应于通过信号pass或失败信号fail确定验证操作是已经通过还是已经失败。

根据存储在每个存储器单元中的数据,可以将存储器单元阵列110中包括的存储器单元编程为多个编程状态中的任意一个。根据待存储的数据,可以将相应存储器单元的目标编程状态确定为多个编程状态中的任意一个。

图5是示出根据本公开的实施例的存储块的示图。

参照图4和图5,图5是示出图4的存储器单元阵列(例如,图4的存储器单元阵列110)中包括的多个存储块blk1至blkz中的任意一个存储块blka的电路图。

存储块blka可以联接到彼此并联联接的第一选择线、字线和第二选择线。例如,字线可以彼此并联联接在第一选择线和第二选择线之间。此处,第一选择线可以是源极选择线ssl,第二选择线可以是漏极选择线dsl。

详细地,存储块blka可以包括联接在位线bl1至bln与源极线sl之间的多个串。位线bl1至bln可以分别联接到串,并且源极线sl可以共同联接到串。因为可以对串进行同样地配置,所以将作为示例详细描述联接到第一位线bl1的串st。

串st可以包括彼此串联联接在源极线sl和第一位线bl1之间的源极选择晶体管sst、多个存储器单元f1至f16以及漏极选择晶体管dst。单个串st可以包括至少一个源极选择晶体管sst、存储器单元f1至f16以及至少一个漏极选择晶体管dst。图5中所示的存储器单元f1至f16的数量并不受限制,并且本公开涵盖了每个串st中包括更多数量的存储器单元的其他实施例。

源极选择晶体管sst的源极可以联接到源极线sl,并且漏极选择晶体管dst的漏极可以联接到第一位线bl1。存储器单元f1至f16可以串联联接在源极选择晶体管sst和漏极选择晶体管dst之间。包括在不同串中的源极选择晶体管的栅极可以联接到源极选择线ssl,包括在不同串中的漏极选择晶体管的栅极可以联接到漏极选择线dsl,并且存储器单元f1至f16的栅极可以分别联接到多个字线wl1至wl16。包括在不同串中的存储器单元之中、联接到相同字线的一组存储器单元可以被称为“物理页面:ppg”。因此,存储块blka可以包括与字线wl1至wl16的数量相同数量的物理页面。

一个存储器单元可以存储一个数据位。该单元通常被称为“单层单元:slc”。此处,一个物理页面ppg可以存储对应于一个逻辑页面lpg的数据。对应于一个逻辑页面lpg的数据可以包括与包括在一个物理页面ppg中的存储器单元的数量相同数量的数据位。可选地,一个存储器单元可以存储两个或更多个数据位。该单元通常被称为“多层单元:mlc”。此处,一个物理页面ppg可以存储对应于两个或更多个逻辑页面lpg的数据。

一个存储器单元中存储两个或更多个数据位的存储器单元被称为“多层单元”。然而,近来,随着一个存储器单元中存储的数据位的数量增加,多层单元(mlc)可以表示存储两个数据位的存储器单元,存储三个数据位的存储器单元被称为“三层单元(tlc)”,存储四个数据位的存储器单元被称为“四层单元(qlc)”。另外,已经开发了存储多个数据位的存储器单元方案,并且本文公开的实施例可以用在存储两个或更多个数据位的存储器系统中。

在实施例中,存储块中的每一个可以具有三维(3d)结构。存储块中的每一个可以包括堆叠在衬底上的多个存储器单元。例如,多个存储器单元布置在+x方向、+y方向和+z方向上。

图6a和图6b是示出根据本公开的实施例的数据的示图。

参照图6a和图6b,图6a示出从主机(例如,图2的主机300)接收的主机数据host_data以及基于主机数据host_data生成的判断数据jud_data。主机数据host_data和判断数据jud_data都可以包含在附加数据(例如,图2的add_data)中。图6b示出从存储器装置接收的读取数据read_data以及基于读取数据read_data生成的检测数据det_data。

参照图6a,存储器控制器200可以从主机与编程请求一起接收主机数据host_data。可以响应于编程请求将主机数据host_data编程到存储器装置100。主机数据host_data可以由多个“0”和“1”组成。

在实施例中,可以基于主机数据host_data来生成判断数据jud_data。判断数据jud_data可以包含通过将计数值和第二值求和而获得的第一值,该计数值通过对主机数据host_data中包含的1的数量进行计数而生成,该第二值通过对待存储主机数据host_data的页面的地址或索引执行模运算而获得。也就是说,第二值可以是通过将页面的地址或索引转换为数值而获得的值。进一步地,模运算可以是当与页面的地址或索引相关的目标值除以参考值时计算余数的方法。例如,如果对应于地址或索引的目标值为“30”并且参考值为“4”,则模运算的结果为“2”。判断数据jud_data可以用于确定主机数据host_data是否与读取数据read_data匹配。

在实施例中,主机数据host_data可以存储在存储器装置的用户区域中。用户区域可以是存储器装置中存储待编程的数据的区域,而不是备用区域。即,用户区域可以是存储待编程的数据的区域,而备用区域是存储诸如元数据的其他数据的区域。因此,附加数据中包含的主机数据host_data可以存储在用户区域中,并且判断数据jud_data可以存储在备用区域中。存储在备用区域中的数据不会被改变或修改。

参照图6b,读取数据read_data可以是响应于来自主机的读取请求而从存储器装置读取的数据。读取数据read_data可以由多个“0”和“1”组成。

在实施例中,可以使用读取数据read_data来生成检测数据det_data。检测数据det_data可以包含通过将计数值和第二值求和而获得的第一值,该计数值通过对读取数据read_data中包含的1的数量进行计数而获得,该第二值通过对读取数据read_data被读取的页面的地址或索引执行模运算而获得。也就是说,第二值可以是通过将页面的地址或索引转换为数值而获得的值。进一步地,检测数据det_data可以是用于确定读取数据read_data是否与主机数据host_data匹配的数据。

在实施例中,读取数据read_data可以从存储器装置(例如,图3的存储器装置100)接收,并且可以被传输到存储器控制器(例如,图3的存储器控制器200)中的位计数器(例如,图3的位计数器210)。位计数器可以对读取数据read_data中包含的1的数量进行计数。由位计数器生成的计数值可以被包括在检测数据det_data中。

图7a和图7b是示出根据本公开的实施例的图6a和图6b的数据的示例的示图。

参照图7a和图7b,图7a示出包含主机数据host_data和判断数据jud_data的附加数据(例如,图2的add_data)的示例。图7b示出从存储器装置(例如,图3的存储器装置100)接收的读取数据read_data以及基于读取数据read_data生成的检测数据det_data的示例。

在图7a中,通过对待编程主机数据host_data的页面的索引或地址执行模运算而获得第一值。在图7b中,通过对数据被读取的页面的索引或地址执行模运算而获得第二值。在示例中,第一值和第二值均为“5”。

在图7a中,可以看出,从主机(例如,图2的主机300)接收的主机数据是“110101100”。也就是说,存储器控制器(例如,图2的存储器控制器200)可以从主机接收主机数据host_data“110101100”,并将主机数据输出到存储器装置(例如,图2的存储器装置100),并且存储器装置可以对主机数据“110101100”进行编程。

在实施例中,可以基于从主机接收的主机数据host_data“110101100”来生成判断数据jud_data。例如,因为主机数据host_data“110101100”中包含的1的数量是5,并且通过对待编程主机数据host_data的页面的索引或地址执行模运算而获得的第一值也是5,所以判断数据jud_data可以是“10”,“10”是主机数据host_data中包含的1的数量与通过对待编程主机数据host_data的页面的索引或地址执行模运算而获得的第一值的和。

在实施例中,主机数据“110101100”可以被编程到存储器装置的用户区域,并且判断数据jud_data可以被编程到备用区域。在另一实施例中,判断数据jud_data可以存储在图2的存储器控制器200中包括的附加数据生成器230中。

在图7b中,从存储器装置读取的读取数据read_data可以是“000101100”。也就是说,存储器控制器可以将与从主机接收的读取请求对应的读取命令输出到存储器装置,并且存储器装置可以响应于读取命令将作为存储在存储器装置中的数据的“000101100”输出到存储器控制器。

在实施例中,可以基于从存储器装置接收的读取数据read_data“000101100”来生成检测数据det_data。例如,因为读取数据read_data“000101100”中包含的1的数量是3,并且通过对读取数据被读取的页面的索引或地址执行模运算而获得的第二值是5,所以检测数据det_data可以是“8”,“8”是读取数据read_data中包含的1的数量与通过对读取数据read_data被读取的页面的索引或地址执行模运算而获得的值的和。

在实施例中,读取数据read_data“000101100”可以被传输到存储器控制器的位计数器,并且位计数器可以对读取数据read_data中包含的1的数量进行计数。位计数器可以使用1的总数量和通过对读取数据被读取的页面的索引或地址执行模运算而获得的值生成检测数据det_data。

当从存储器装置读取数据时,可以对读取数据read_data执行错误校正操作。例如,当作为由存储器控制器执行错误校正操作的结果,确定不可以错误校正时,可以将判断数据jud_data与检测数据det_data进行比较。

在实施例中,因为判断数据jud_data为“10”而检测数据det_data为“8”,所以判断数据jud_data与检测数据det_data不相同。因为判断数据jud_data和检测数据det_data彼此不相同,所以存储器控制器可以执行校正不可校正错误的操作。更具体地,存储器控制器中包括的读取数据控制器可以执行校正不可校正错误的操作。

下面将参照图8a和图8b详细地描述校正错误的操作。

图8a和图8b是示出根据本公开的实施例的校正不可校正错误的操作的示图。

参照图8a和图8b。图8a和图8b示出当运行与来自主机(例如,图1的主机300)的读取请求对应的读取命令并且读取数据中的错误被确定为不可校正错误时的改变的数据。在示例中,读取数据(例如,图7b的read_data)可以被改变为图8a的读取数据,然后被改变为图8b的读取数据。

参照图8a,读取数据控制器(例如,图1的读取数据控制器250)可以将图7b中的读取数据read_data“000101100”改变为图8a的第一读取数据read_data1。读取数据控制器(例如,图1的250)可以将读取数据中包含的“0”逐位改变为“1”,直到所有错误被校正为止。此处,当错误校正器(例如,图1的错误校正器260)确定读取数据中的错误为不可校正错误时,可以执行读取数据控制器的操作。也就是说,当读取数据控制器从比较器(例如,图1的比较器240)接收比较信息com_inf并且从错误校正器(例如,图1的错误校正器260)接收不可校正错误信息uecc_inf时,读取数据控制器可以一次一位地将读取数据中包含的“0”改变为“1”,直到错误被校正为止。

在实施例中,读取数据控制器可以确定在起始位置处读取数据read_data中是否包含“0”。因此,读取数据控制器可以生成在读取数据read_data的起始位置处的“0”被改变为“1”的第一读取数据read_data1。也就是说,第一读取数据read_data1可以是如图8a所示的“100101100”。

存储器控制器可以基于由读取数据控制器生成的第一读取数据read_data1来确定是否已经校正错误。然而,因为第一读取数据read_data1与主机数据(例如,图7a的host_data)不匹配,所以尚未校正错误。

参照图8b,读取数据控制器可以将图8a中的第一读取数据read_data1“100101100”改变为第二读取数据read_data2。读取数据控制器可以将第一读取数据read_data1中的第一个“0”改变为“1”。

在实施例中,读取数据控制器可以确定“0”是否在第一读取数据read_data1的起始位置处。如果否,则读取数据控制器可以生成第一读取数据read_data1中的下一个“0”被改变为“1”的第二读取数据read_data2。也就是说,第二读取数据read_data2可以是“110101100”。

存储器控制器可以基于由读取数据控制器生成的第二读取数据read_data2来确定是否已经校正错误。因为第二读取数据read_data2与主机数据(例如,图7a的host_data)匹配,所以已经校正不可校正错误。

因此,根据本公开的实施例,即使仅在读取数据中包含的一些位中出现不可校正错误,也可以校正数据位。

图9是示出根据本公开的实施例的存储器控制器的操作的流程图。

参照图9,在步骤901中,存储器控制器可以从主机接收主机数据。可以与编程请求一起接收主机数据。主机数据可以是待被编程到存储器装置的数据。因此,存储器控制器可以将与编程请求对应的编程命令以及主机数据输出到存储器装置,并且存储器装置可以响应于该编程命令对主机数据进行编程。主机数据可以由“0”和“1”组成。

在步骤s903中,存储器控制器可以通过对主机数据中包含的1的数量进行计数来生成计数值。主机数据可以由“0”和“1”组成,并且存储器控制器可以仅对主机数据中的1的数量进行计数。在另一实施例中,存储器控制器可以通过对主机数据中包含的0的数量进行计数来生成计数值。存储器控制器可以基于计数值生成附加数据。

步骤s905中,存储器控制器(具体地,附加数据生成器)可以接收关于待存储主机数据的页面的信息。待存储主机数据的页面可以是与物理地址对应的页面,该物理地址由从主机接收的逻辑地址转换而来。

在实施例中,页面信息可以包含通过对待存储主机数据的页面的地址或索引执行模运算而获得的值。也就是说,待基于页面信息生成的判断数据可以确保与通过对待存储主机数据的页面的地址或索引执行模运算而获得的值一样大的值。换言之,判断数据可以是比通过执行模运算而获得的值更大的值。此处,通过执行模运算而获得的值可以通过将页面的地址或索引转换为数值并将该数值除以参考值来获得。

在步骤s907中,存储器控制器可以基于计数值和页面信息来生成判断数据。判断数据可以是用于在读取操作期间确定主机数据是否与读取数据匹配的数据。可以基于从主机接收的主机数据中包含的1的数量以及待编程主机数据的页面的索引或地址生成判断数据。在实施例中,可以基于主机数据中包含的0的数量以及待编程主机数据的页面的索引或地址生成判断数据。

在步骤s909中,存储器控制器可以输出主机数据和判断数据。为了运行对应于来自主机的编程请求的编程命令,存储器控制器可以将主机数据和判断数据与对应于该编程请求的编程命令一起输出。也就是说,主机数据可以是编程数据。主机数据可以被编程到存储器装置的用户区域。判断数据可以被编程到存储器装置的备用区域。

图10是示出根据本公开的实施例的存储器控制器的操作的流程图。

图10是示出在主机数据和判断数据已经被编程到存储器装置之后执行与从主机接收的读取请求对应的读取操作的情况的流程图。

在步骤s1001中,存储器控制器可以响应于从主机接收的读取请求从存储器装置接收读取数据。读取数据可以是当存储器装置运行与从主机接收的读取请求对应的读取命令时从存储器装置读取的数据。当从存储器装置读取数据时,在步骤s1003中,存储器控制器可以对读取数据执行错误校正操作。

从存储器装置接收的数据可能包括错误。也就是说,可能读取与编程到存储器装置的数据不同的数据。详细地,可能在编程进程或读取进程期间改变从主机接收的主机数据。

在实施例中,存储器控制器可能通过读取操作接收与主机数据不同的数据。因此,可以对读取数据执行错误校正操作。可以使用博斯-查德胡里-霍昆格姆(bch)码或低密度奇偶校验(ldpc)码执行错误校正操作。而且,错误校正操作可以是读取重试操作。

在步骤s1005中,存储器控制器可以确定读取数据中是否已经出现不可校正错误。也就是说,即使存储器控制器已经对读取数据执行错误校正操作,也可能未校正错误。当尚未校正错误时,可能出现不可校正错误。

当没有出现不可校正错误时,在步骤s1007,存储器控制器可以将经校正的读取数据输出到主机。当已经出现不可校正错误时,在步骤s1009中,存储器控制器可以将存储在存储器装置中或存储器控制器中的判断数据与基于从存储器装置接收的读取数据而生成的检测数据进行比较。可以基于主机数据以及待存储主机数据的页面的索引或地址生成判断数据。可以基于从存储器装置读取的读取数据以及读取数据被读取的页面的索引或地址来生成检测数据。

在步骤s1011中,存储器控制器可以基于判断数据和检测数据来生成比较信息。详细地,当判断数据与检测数据相同时,可以不生成比较信息。当判断数据与检测数据不相同时,可以生成比较信息。比较信息可以具有包括判断数据和检测数据之间的差的信息。

在实施例中,比较信息可以包括主机数据中包含的1的数量和读取数据中包含的1的数量之间的差。因此,存储器控制器可以基于比较信息执行校正不可校正错误的操作。

图11是示出根据本公开的实施例的存储器控制器的操作的流程图。

参照图11,在步骤s1011中,存储器控制器可以基于判断数据和检测数据来生成比较信息。

在步骤s1103中,存储器控制器可以基于比较信息确定读取数据中待被改变为“1”的0的数量。例如,当比较信息中包括的判断数据和检测数据之间的差为“2”时,存储器控制器可以将读取数据中待被改变的0的数量设置为“2”。当存储器控制器设置读取数据中待被改变为“1”的0的数量时,在步骤s1105中,可以将读取数据中包含的“0”改变为“1”。

在步骤s1107中,可以确定改变的读取数据中的错误是否已经被校正。当改变的读取数据中的错误被校正时,在步骤s1111中,存储器控制器可以将经校正的读取数据输出到主机。相反,当改变的读取数据中的错误未被校正时,在步骤s1109中,存储器控制器可以确定已经改变为“1”的0的数量是否已经达到预设数量。预设数量可以是已经基于比较信息设置的、待被改变为“1”的0的数量。

在实施例中,当已经改变为“1”的0的数量已经达到预设数量时,可以将相应数据作为错误不可校正数据进行处理。然而,当已经改变为“1”的0的数量尚未达到预设数量时,存储器控制器可以在步骤s1105中将读取数据中包含的一个“0”改变为“1”,并且可以在步骤s1107中确定是否已经校正改变的读取数据中的所有错误。如果尚未校正改变的读取数据中的错误,则存储器控制器可以在步骤s1105中将读取数据中的“0”改变为“1”,直到已经改变为“1”的0的数量已经达到预设数量为止。

图12是示出根据本公开的实施例的图1的存储器控制器的示图。

存储器控制器1000联接到主机和存储器装置。响应于从主机接收的请求,存储器控制器1000可以访问存储器装置。例如,存储器控制器1000可以被配置成控制存储器装置的写入操作、读取操作、擦除操作和后台操作。存储器控制器1000可以提供存储器装置和主机之间的接口。存储器控制器1000可以运行固件来控制存储器装置。

参照图12,存储器控制器1000可以包括处理器1010、存储器缓冲器1020、错误校正器(错误校正码:ecc)1030、主机接口1040、缓冲器控制电路1050、存储器接口1060和总线1070。

总线1070可以在存储器控制器1000的组件之间提供通道。

处理器1010可以控制存储器控制器1000的整体操作,并且可以执行逻辑操作。处理器1010可以通过主机接口1040与外部主机通信,并且还通过存储器接口1060与存储器装置通信。进一步地,处理器1010可以通过缓冲器控制电路1050与存储器缓冲器1020通信。处理器1010可以通过使用存储器缓冲器1020作为工作存储器、高速缓存存储器或缓冲存储器来控制存储装置的操作。

处理器1010可以执行闪存转换层(ftl)的功能。处理器1010可以通过闪存转换层(ftl)将由主机提供的逻辑块地址(lba)转换为物理块地址(pba)。闪存转换层(ftl)可以接收lba,并且使用映射表将lba转换为pba。通过闪存转换层(ftl)执行的地址映射方法的示例可以包括根据映射单元的各种方法。代表性地址映射方法包括页面映射方法、块映射方法以及混合映射方法。

处理器1010可以将从主机接收的数据随机化。例如,处理器1010可以使用随机化种子将从主机接收的数据随机化。经随机化的数据可以作为待存储的数据被提供至存储器装置,并且可以被编程在存储器单元阵列中。

在读取操作期间,处理器1010可以将从存储器装置接收的数据去随机化。例如,处理器1010可以使用去随机化种子将从存储器装置接收的数据去随机化。经去随机化的数据可以被输出至主机。

处理器1010可以从主机接收待被编程到存储器装置的主机数据,并且可以基于主机数据输出判断数据。判断数据可以是通过将主机数据中包含的1的数量与对待编程主机数据的页面的索引或地址执行模运算而获得的值求和而获得的值。

处理器1010可以在读取操作期间从存储器装置接收读取数据,并且可以基于读取数据输出检测数据。检测数据可以是通过将读取数据中包含的1的数量与对执行读取操作的页面的索引或地址执行模运算而获得的值求和而获得的值。

当即使错误校正器1030对读取数据执行错误校正也未校正错误时,处理器1010可以将判断数据与检测数据进行比较,并且可以确定待被改变为“1”的“0”的数量。处理器1010可以基于判断数据和检测数据执行校正不可校正错误的操作。

处理器1010可以运行软件或固件以执行随机化操作或去随机化操作。

在实施例中,处理器1010可以运行软件或固件以执行随机化操作和去随机化操作。

存储器缓冲器1020可以用作处理器1010的工作存储器、高速缓存存储器或缓冲存储器。存储器缓冲器1020可以存储由处理器1010运行的代码和命令。存储器装置1020可以存储由处理器1010处理的数据。存储器缓冲器1020可以包括静态ram(sram)或动态ram(dram)。

错误校正器1030可以执行错误校正。错误校正器1030可以基于待通过存储器接口1060被写入到存储器装置的数据执行错误校正码(ecc)编码。经ecc编码的数据可以通过存储器接口1060被传输至存储器装置。错误校正器1030可以基于通过存储器接口1060从存储器装置接收的数据执行ecc解码。在示例中,错误校正器1030可以作为存储器接口1060的组件被包括在存储器接口1060中。

主机接口1040可以在处理器1010的控制下与外部主机通信。通过非限制性示例的方式,主机接口1040可以使用诸如下列的各种通信方法中的至少一种执行通信:通用串行总线(usb)、串行at附件(sata)、串列scsi(sas)、高速芯片间(hsic)、小型计算机系统接口(scsi)、外围组件互连(pci)、高速pci(pcie)、高速非易失性存储器(nvme)、通用闪存(ufs)、安全数字(sd)、多媒体卡(mmc)、嵌入式mmc(emmc)、双列直插式存储器模块(dimm)、寄存式dimm(rdimm)和低负载dimm(lrdimm)通信方法。

缓冲器控制电路1050可以在处理器1010的控制下控制存储器缓冲器1020。

存储器接口1060可以在处理器1010的控制下与存储器装置通信。存储器接口1060可以通过通道将命令、地址和数据传送到存储器装置/从存储器装置接收命令、地址和数据。

在实施例中,存储器控制器1000不包括存储器缓冲器1020和缓冲器控制电路1050。

在实施例中,处理器1010可以使用代码来控制存储器控制器1000的操作。处理器1010可以从存储器控制器1000中设置的非易失性存储器装置(例如,rom)加载代码。在实施例中,处理器1010可以通过存储器接口1060从存储器装置加载代码。

在实施例中,存储器控制器1000的总线1070可以被划分为控制总线和数据总线。数据总线可以被配置为在存储器控制器1000中传送数据,并且控制总线可以被配置为在存储器控制器1000中传送诸如命令或地址的控制信息。数据总线和控制总线可以彼此隔离,并且可以既不相互干扰也不相互影响。数据总线可以联接到主机接口1040、缓冲器控制电路1050、错误校正器1030和存储器接口1060。控制总线可以联接到主机接口1040、处理器1010、缓冲器控制电路1050、存储器缓冲器1020和存储器接口1060。

图13是示出应用了根据本公开的实施例的存储装置的固态驱动器(ssd)系统的示例的框图。

参照图13,ssd系统3000可以包括主机3100和ssd3200。ssd3200可以通过信号连接器3001与主机3100交换信号sig,并且可以通过电源连接器3002接收电力pwr。ssd3200可以包括ssd控制器3210、多个闪速存储器3221至322n、辅助电源3230和缓冲存储器3240。

在实施例中,ssd控制器3210可以执行上面参照图1描述的存储器控制器200的功能。

ssd控制器3210可以响应于从主机3100接收的信号sig来控制多个闪速存储器3221至322n。在实施例中,信号sig可以是基于主机3100与ssd3200的接口的信号。例如,信号sig可以是由诸如下列的各种接口中的至少一种定义的信号:通用串行总线(usb)、多媒体卡(mmc)、嵌入式mmc(emmc)、外围组件互连(pci)、高速pci(pci-e)、高级技术附件(ata)、串行ata(sata)、并行ata(pata)、小型计算机系统接口(scsi)、增强型小型磁盘接口(esdi)、电子集成驱动器(ide)、火线、通用闪存(ufs)、wi-fi、蓝牙或高速非易失性存储器(nvme)接口。

ssd控制器3210可以将从主机3100接收的请求转换为在ssd系统3000中可用的命令,并且可以输出该命令。例如,当从主机3100接收到刷新请求时,ssd控制器3210可以将刷新请求转换为刷新命令,并且可以将刷新命令输出到闪速存储器3221至322n。可选地,即使未从主机3100接收到刷新请求,ssd控制器3210也可以在后台操作期间以预设间隔输出刷新命令。

当即使ssd控制器3210对从多个闪速存储器3221至322n读取的数据执行错误校正也未校正错误时,ssd控制器3210可以基于从主机3100接收的主机数据和读取数据确定读取数据中待被改变为“1”的0的数量。ssd控制器3210可以基于主机数据和读取数据执行校正不可校正错误的操作。

辅助电源3230可以通过电源连接器3002联接到主机3100。来自主机3100的电力pwr可以被供应给辅助电源3230,从而可以对辅助电源3230充电。当来自主机3100的电力供应未平稳执行时,辅助电源3230可以供应ssd3200的电力。在实施例中,辅助电源3230可以位于ssd3200内部或位于ssd3200外部。例如,辅助电源3230可以设置在主板中,并且可以向ssd3200供应辅助电力。

缓冲存储器3240用作ssd3200的缓冲存储器。例如,缓冲存储器3240可以临时存储从主机3100接收的数据或从多个闪速存储器3221至322n接收的数据,或者可以临时存储闪速存储器3221至322n的元数据(例如,映射表)。例如,缓冲存储器3240可以包括诸如dram、sdram、ddrsdram、lpddrsdram和gram的易失性存储器,或诸如fram、reram、stt-mram和pram的非易失性存储器。

根据本公开,提供一种使不可校正错误能够得以校正的存储器控制器以及一种操作该存储器控制器的方法。

虽然出于说明性目的已经公开了本公开的示例性实施例,但是本领域普通技术人员将理解,在不脱离本公开的范围和精神的情况下,可以进行各种修改、添加和替换。因此,本公开的范围可以由所附权利要求和权利要求的等同方案来限定,而不是由前面的描述来限定。

在以上讨论的实施例中,可选择性地执行或跳过任何给定步骤。另外,每个实施例中的步骤可能需要不总是按照给定次序顺序地执行,并且可以随机地执行。进一步地,本说明书和附图中公开的实施例旨在帮助本领域普通技术人员更清楚地理解本公开,而不是旨在限制本公开的范围。换言之,本公开所属领域的普通技术人员将能够容易地理解,基于本公开的技术范围可以进行各种修改。

已经参照附图描述了本公开的实施例,并且在说明书中使用的特定术语或词语应根据本公开的精神来解释,而不限制本公开的主题。应理解的是,本文描述的基本发明构思的许多变化和修改仍将落入所附权利要求及其等同方案所限定的本公开的精神和范围内。

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