存储器控制器及其操作方法、存储器系统与流程

文档序号:30837998发布日期:2022-07-22 23:36阅读:117来源:国知局
存储器控制器及其操作方法、存储器系统与流程

1.本发明实施例涉及半导体技术领域,特别涉及一种存储器控制器及其操作方法、存储器系统。


背景技术:

2.根据存储器系统的存储单元阵列的结构配置,可以将存储器系统分为单存储面(plane)类型和多存储面类型。单存储面类型的存储器系统包括一个存储面;多存储面类型的存储器系统包括多个存储面。对于多存储面类型的存储器系统,可以采用多面编程(英文表达为multi-plane program)模式同时对存储器系统的两个或更多个存储面进行编程,以提高编程效率。
3.采用多面编程模式固然能提高编程效率,但不可避免的会存在邻面干扰(npd,neighbor plane disturb)的问题,例如,采用多面编程模式的情况下,如果一个存储面发生编程失败(psf,programming status failed),经常会在同时编程的其它多个存储面上发生编程失败。因此,亟待提供一种操作方法,在保证一定的编程效率的前提下,减小邻面干扰带来的不利影响。


技术实现要素:

4.为解决相关技术问题,本发明实施例提出一种存储器控制器及其操作方法、存储器系统。
5.第一方面,本发明实施例提供了一种存储器控制器;
6.所述存储器控制器被配置为:
7.接收第一指令;所述第一指令指示对一个存储芯片中的多个存储面中的第n条字线耦接的存储单元进行编程操作;所述n为正整数;
8.确定所述n小于等于第一预设值,且第一缓存器不满足预设条件;其中,所述第一缓存器用于备份待编程至每个存储面的第n条字线耦接的存储单元中的数据;
9.发出第二指令;所述第二指令指示采用单面编程(英文表达为single-plane program)的方式对所述多个存储面中每个存储面的第n条字线耦接的存储单元依次进行编程。
10.上述方案中,所述存储器控制器被配置为:
11.对单面编程过的多个存储面,确定所述多个存储面中第一存储面中第n条字线上的存储单元存在编程异常;
12.发出第三指令;所述第三指令指示采用存储面级别的独立冗余磁盘阵列的方式对所述第一存储面中编程异常的存储单元的数据进行恢复。
13.上述方案中,所述存储器控制器被配置为:
14.确定所述n大于第一预设值;和/或,所述第一缓存器满足预设条件;
15.发出第四指令;所述第四指令指示采用多面编程的方式对所述多个存储面中每个
存储面的第n条字线耦接的存储单元进行编程。
16.上述方案中,所述存储器控制器被配置为:
17.确定所述n小于等于第一预设值,且所述第一缓存器满足预设条件;
18.发出第五指令;所述第五指令指示将待编程至每个存储面的第n条字线耦接的存储单元中的数据备份至所述第一缓存器;
19.发出第六指令;所述第六指令指示采用多面编程的方式对所述多个存储面中每个储存面的第n条字线耦接的存储单元进行编程。
20.上述方案中,所述存储器控制器被配置为:
21.确定所述多个存储面中至少第一存储面中第n条字线耦接的存储单元存在编程异常;
22.发出第七指令,所述第七指令指示利用所述第一缓存器中的数据对编程异常的数据进行恢复。
23.上述方案中,所述存储器控制器被配置为:
24.确定所述第一存储面中第n-1条字线耦接的存储单元的数据存在异常;
25.发出第八指令;所述第八指令指示采用存储面级别的独立冗余磁盘阵列的方式对所述第一存储面中第n-1条字线耦接的存储单元的数据进行恢复。
26.上述方案中,所述第一缓存器设置在主机中或者设置在所述存储器控制器中。
27.上述方案中,第一缓存器设置在主机中,所述确定所述第一缓存器不满足预设条件包括:
28.获取所述第一缓存器的容量信息,根据所述容量信息确定所述第一缓存器不满足预设条件。
29.第二方面,本发明实施例提供了一种存储器系统,所述存储器系统包括:如上方案中任一项所述的存储器控制器以及与所述存储器控制器耦接的多个存储芯片;其中,
30.每个所述存储芯片包括多个存储面,每个所述存储面包括分别耦接到多个存储单元的多条字线。
31.上述方案中,所述存储芯片包括三维nand型存储器。
32.上述方案中,所述多个存储单元中的每个存储单元的存储位数包括一位或多位。
33.上述方案中,所述多个存储单元中的每个存储单元的存储位数包括三位。
34.第三方面,本发明实施例提供一种存储器控制器的操作方法,所述方法包括:
35.接收第一指令;所述第一指令指示对一个存储芯片中的多个存储面中的第n条字线耦接的存储单元进行编程操作;所述n为正整数;
36.确定所述n小于等于第一预设值,且第一缓存器不满足预设条件;其中,所述第一缓存器用于备份待编程至每个存储面的第n条字线耦接的存储单元中的数据;
37.发出第二指令;所述第二指令指示采用单面编程的方式对所述多个存储面中每个存储面的第n条字线耦接的存储单元依次进行编程。
38.上述方案中,所述方法还包括:
39.对单面编程过的多个存储面,确定所述多个存储面中第一存储面中第n条字线上的存储单元存在编程异常;
40.发出第三指令;所述第三指令指示采用存储面级别的独立冗余磁盘阵列的方式对
所述第一存储面中编程异常的存储单元的数据进行恢复。
41.上述方案中,所述方法还包括:
42.确定所述n大于第一预设值;和/或,所述第一缓存器满足预设条件;
43.发出第四指令;所述第四指令指示采用多面编程的方式对所述多个存储面中每个存储面的第n条字线耦接的存储单元进行编程。
44.上述方案中,所述方法还包括:
45.确定所述n小于等于第一预设值,且所述第一缓存器满足预设条件;
46.发出第五指令;所述第五指令指示将待编程至每个存储面的第n条字线耦接的存储单元中的数据备份至所述第一缓存器;
47.发出第六指令;所述第六指令指示采用多面编程的方式对所述多个存储面中每个储存面的第n条字线耦接的存储单元进行编程。
48.上述方案中,所述方法还包括:
49.确定所述多个存储面中至少第一存储面中第n条字线耦接的存储单元存在编程异常;
50.发出第七指令,所述第七指令指示利用所述第一缓存器中的数据对编程异常的数据进行恢复。
51.上述方案中,所述方法还包括:
52.确定所述第一存储面中第n-1条字线耦接的存储单元的数据存在异常;
53.发出第八指令;所述第八指令指示采用存储面级别的独立冗余磁盘阵列的方式对所述第一存储面中第n-1条字线耦接的存储单元的数据进行恢复。
54.上述方案中,所述第一缓存器设置在主机中或者设置在所述存储器控制器中。
55.上述方案中,所述第一缓存器设置在主机中,所述确定所述第一缓存器不满足预设条件包括:
56.获取所述第一缓存器的容量信息,根据所述容量信息确定所述第一缓存器不满足预设条件。
57.上述方案中,所述确定第一缓存器满足预设条件包括:
58.确定存在所述第一缓存器,且所述第一缓存器的存储空间大于等于第二预设值。
59.上述方案中,所述方法还包括:
60.在接收第一指令之前,获取所述第一预设值。
61.本发明实施例提供了一种存储器控制器及其操作方法、存储器系统,其中,所述存储器控制器被配置为:接收第一指令;所述第一指令指示对一个存储芯片中的多个存储面中的第n条字线耦接的存储单元进行编程操作;所述n为正整数;确定所述n小于等于第一预设值,且第一缓存器不满足预设条件;其中,所述第一缓存器用于备份待编程至每个存储面的第n条字线耦接的存储单元中的数据;发出第二指令;所述第二指令指示采用单面编程的方式对所述多个存储面中每个存储面的第n条字线耦接的存储单元依次进行编程。本发明实施例中,在确定n小于等于第一预设值,且第一缓存器不满足预设条件的情况下,采用单面编程的方式对多个存储面中每个存储面的第n条字线耦接的存储单元依次进行编程,这样可以避免单个存储面编程异常时对相邻的存储面的数据造成干扰,有利于实现对存储器系统的异常数据的有效恢复。
附图说明
62.图1为本发明实施例一存储器系统的存储单元串的电路图;
63.图2为本发明实施例一存储器系统出现数据异常时的位置划分示意图;
64.图3为本发明实施例一存储器控制器的操作方法的框架示意图;
65.图4为本发明实施例一存储器控制器的操作方法的实现流程示意图;
66.图5为本发明实施例一具有存储器系统的示例性系统的示意图;
67.图6a为本发明实施例一具有存储器系统的示例性存储器卡的示意图;
68.图6b为本发明实施例一具有存储器系统的示例性固态驱动器(ssd)的示意图;
69.图7为本发明实施例一包括存储器单元阵列和外围电路的示例性存储芯片的示意图;
70.图8为本发明实施例一示例性存储器控制器的示意图。
具体实施方式
71.下面将参照附图更详细地描述本发明公开的示例性实施方式。虽然附图中显示了本发明的示例性实施方式,然而应当理解,可以以各种形式实现本发明,而不应被这里阐述的具体实施方式所限制。相反,提供这些实施方式是为了能够更透彻地理解本发明,并且能够将本发明公开的范围完整的传达给本领域的技术人员。
72.在下文的描述中,给出了大量具体的细节以便提供对本发明更为彻底的理解。然而,对于本领域技术人员而言显而易见的是,本发明可以无需一个或多个这些细节而得以实施。在其他的例子中,为了避免与本发明发生混淆,对于本领域公知的一些技术特征未进行描述;即,这里不描述实际实施例的全部特征,不详细描述公知的功能和结构。
73.在附图中,为了清楚,层、区、元件的尺寸以及其相对尺寸可能被夸大。自始至终相同附图标记表示相同的元件。
74.应当明白,当元件或层被称为“在
……
上”、“与
……
相邻”、“连接到”或“耦合到”其它元件或层时,其可以直接地在其它元件或层上、与之相邻、连接或耦合到其它元件或层,或者可以存在居间的元件或层。相反,当元件被称为“直接在
……
上”、“与
……
直接相邻”、“直接连接到”或“直接耦合到”其它元件或层时,则不存在居间的元件或层。应当明白,尽管可使用术语第一、第二、第三等描述各种元件、部件、区、层和/或部分,这些元件、部件、区、层和/或部分不应当被这些术语限制。这些术语仅仅用来区分一个元件、部件、区、层或部分与另一个元件、部件、区、层或部分。因此,在不脱离本发明教导之下,下面讨论的第一元件、部件、区、层或部分可表示为第二元件、部件、区、层或部分。而当讨论的第二元件、部件、区、层或部分时,并不表明本发明必然存在第一元件、部件、区、层或部分。
75.空间关系术语例如“在
……
下”、“在
……
下面”、“下面的”、“在
……
之下”、“在
……
之上”、“上面的”等,在这里可为了方便描述而被使用从而描述图中所示的一个元件或特征与其它元件或特征的关系。应当明白,除了图中所示的取向以外,空间关系术语意图还包括使用和操作中的器件的不同取向。例如,如果附图中的器件翻转,然后,描述为“在其它元件下面”或“在其之下”或“在其下”元件或特征将取向为在其它元件或特征“上”。因此,示例性术语“在
……
下面”和“在
……
下”可包括上和下两个取向。器件可以另外地取向(旋转90度或其它取向)并且在此使用的空间描述语相应地被解释。
76.在此使用的术语的目的仅在于描述具体实施例并且不作为本发明的限制。在此使用时,单数形式的“一”、“一个”和“所述/该”也意图包括复数形式,除非上下文清楚指出另外的方式。还应明白术语“组成”和/或“包括”,当在该说明书中使用时,确定所述特征、整数、步骤、操作、元件和/或部件的存在,但不排除一个或更多其它的特征、整数、步骤、操作、元件、部件和/或组的存在或添加。在此使用时,术语“和/或”包括相关所列项目的任何及所有组合。
77.为了能够更加详尽地了解本发明实施例的特点与技术内容,下面结合附图对本发明实施例的实现进行详细阐述,所附附图仅供参考说明之用,并非用来限定本发明实施例。
78.本发明实施例中的存储芯片包括但不限于三维nand型存储器,为了便于理解,以三维nand型存储器为例进行说明。
79.存储器系统中的三维nand型存储器存在多种缺陷,有些缺陷可以在出厂时检测到,有些缺陷是在出厂后随着使用环境的变化而暴露出来的。实际应用中,三维nand型存储器的某些存储单元阵列中可能存在结构性薄弱点,这些结构性薄弱点可能需要较长的时间或较多次编程操作、擦除操作后才能发展并成为缺陷。例如,三维nand型存储器的存储单元阵列在编程和擦除循环过程中需要经受高压应力,三维nand型存储器的某些存储单元阵列中薄弱结构会在循环后发展为缺陷。
80.三维nand型存储器出现缺陷时,可能出现数据丢失的现象。如果缺陷为字线(wl,word line)短路,则整个wl对应的存储单元中的数据均可能被破坏。由于每个wl可以对应多个字符串的存储单元,基于此,可能出现大量数据丢失的现象,从而给存储器系统带来故障。这种类型的故障一般被定义为三维nand型存储器的可靠性故障,该故障在现场可能会进一步导致存储器系统的故障。
81.随着存储器系统的小型化发展,存储器系统中存储芯片的密度在增加,进而促使每个存储芯片中包括的存储面数量在增多。由于同一个存储芯片下的存储面数量越来越多,多个存储面之间存在资源共用的情况,例如,多个存储面共用一个行驱动器。因此,在执行编程操作的过程中,三维nand型存储器出现缺陷(例如某条字线短路)时,会出现电流泄露的问题,会导致这个存储面中与电流泄露相关的字线上的存储单元中存储的数据均发生丢失,同时,共用资源的存储面中存储的数据也会受到干扰,即发生邻面干扰。
82.为了更清楚描述本发明的技术方案,以下对存储器系统的组成先进行说明。
83.存储器系统包括多个存储芯片;每个存储芯片包括多个存储面,每个存储面包括分别耦接到多个存储单元的多条字线。在实际应用中,多个存储单元中的每个存储单元的存储位数可以包括一位或多位。
84.在每个存储单元的存储位数包括一位时,所述存储单元可以是单层单元(slc,single-level cell)。这里,每个存储单元可以存储一位数据,也就是只有0、1两种存储状态。此时,存储芯片的一个物理页对应一个逻辑存储页。
85.在每个存储单元的存储位数包括两位时,所述存储单元可以是两层单元(mlc,multi-level cell)。这里,每个存储单元可以存储两位数据,其存储状态有00,01,10,11四种。此时,存储芯片的一个物理页对应两个逻辑存储页,该两个逻辑存储页可以分为上位页(英文表达为upper page)和下位页(英文表达为lower page)。
86.在每个存储单元的存储位数包括三位时,所述存储单元可以是三层单元(tlc,
triple-level cell)。这里,每个存储单元可以存储三位数据,其存储状态有000、001、010、100、011、110、101、111八种。此时,存储芯片的一个物理页对应三个逻辑存储页,该三个逻辑存储页可以分为上位页、中位页(英文表达为middle page)和下位页。
87.在每个存储单元的存储位数包括四位时,所述存储单元可以是四层单元(qlc,quad-level cell)。这里,每个存储单元可以存储四位数据,其存储状态有0000、0001、0010、0100、1000、1100、1010、1001、0011、0101、0110、1101、1110、1011、0111、1111十六种。此时,存储芯片的一个物理页对应四个逻辑存储页,即上位页、中位页、第二下位页(英文表达为second lower page)和下位页。
88.示例性的,如表1至表4所示,存储器系统包括多个存储芯片,每个存储芯片包括4个存储面,即存储面0、存储面1、存储面2、存储面3;每个存储面包括多条字线,即字线1、字线2;每条字线耦接多个存储单元,将多个存储单元划分成多个存储组(string);每条字线对应多个存储组,即存储组0、存储组1、存储组2、存储组3、存储组4、存储组5。
89.以下根据实际情况列出了如表1-表3所示的三种受损数据分布情况,均以存储芯片为tlc类型的存储芯片为例进行说明。
90.表1示出了波及范围最小的情况(情况一),在对第2条字线(wl2)中的存储组2中的存储单元的上页、中页、下页执行从存储面0到存储面3的一次多面编程中,存储面0中的第2条字线(wl2)中的存储组2中的存储单元的上页、中页、下页发生编程状态失败。在这种情况下,存储面0中的第1条字线(wl1)中的存储组0至存储组5中的存储单元、存储面0中的第2条字线(wl2)中的存储组0至存储组2中的存储单元以及存储面1中的第2条字线(wl2)中的存储组2中的存储单元数据受损。由于tlc中一个存储组包含3个位(上页、中页、下页),每个存储面的wl包含六个存储组,因此受损的页数为(6+3+1)存储组*3页/存储组=30页。
91.表1
[0092][0093]
表2示出了波及范围中等的情况(情况二),在对第2条字线(wl2)中的存储组2中的存储单元的上页、中页、下页执行从存储面0到存储面3的一次多面编程中,存储面0中的第2条字线(wl2)中的存储组2中的存储单元的上页、中页、下页发生编程状态失败。在这种情况下,存储面0中的第1条字线(wl1)中的存储组0至存储组5中的存储单元、存储面0中的第2条字线(wl2)中的存储组0至存储组2中的存储单元以及存储面1至存储面3中的第2条字线(wl2)中的存储组2中的存储单元数据受损。tlc的情况下,受损的页数为(6+3+1+1+1)存储组*3页/存储组=36页。
[0094]
表2
[0095][0096]
表3示出了波及范围最大的情况(情况三),在对第2条字线(wl2)中的存储组2中的存储单元的上页、中页、下页执行从存储面0到存储面3的一次多面编程中,存储面0中的第2
条字线(wl2)中的存储组2中的存储单元的上页、中页、下页发生编程状态失败。在这种情况下,存储面0中的第1条字线(wl1)中的存储组0至存储组5中的存储单元、存储面0中的第2条字线(wl2)中的存储组0至存储组2中的存储单元以及存储面1至存储面3中的第2条字线(wl2)中的存储组0至存储组2中的存储单元数据受损。tlc的情况下,受损的页数为(6+3+3+3+3)存储组*3页/存储组=54页。
[0097]
表3
[0098][0099]
由上面的三种情况分析可知,在一个存储芯片包含4个存储面,每个存储面包含6个存储组,每个存储组包含3个页的存储芯片架构上,发生一次多面编程中产生邻面效应时,当多面编程时存储面0中的第2条字线(wl2)中的存储组2中的存储单元的上页、中页、下页发生编程状态失败,其在一个存储芯片上能够破坏的最大的页数为上述表3所示的情况,而当多面编程时存储面0中的第2条字线(wl2)中的存储组5中的存储单元的上页、中页、下页发生编程状态失败,如表4所示,一个存储芯片上能够破坏的最大的页数是(6+6+6+6+6)存储组*3页/存储组=90页。
[0100]
表4
[0101][0102]
存储器系统在编程操作中如果操作时序和电路稳定性存在问题可能造成数据出错,或者随着时间的推移,存储在存储器系统中的存储器芯片中的存储单元中的电荷的慢慢流逝的特点决定也可能会造成数据出错。
[0103]
在存储器系统中出现少量数据失效或者特定模式下的数据出错时,可以通过ecc编码校验的方式对少量失效数据进行纠错和恢复。ecc是可以用于存储器系统的差错检测和修正算法。目前三维nand存储器中数据恢复比较通用的方式是低密度奇偶校验码(ldpc,low density parity check code),其广义上也是一种ecc编码校验的方式,ldpc可以纠正不止一位错误,ldpc的纠错力度大概为200多位/4千字节,如果一个存储页大概为16千字节,那么ldpc能纠正一个存储页上大概上千位的出错。然而当一个存储页中出错的位数超过ldpc纠错的范围时,无法通过ldpc的方式对出错的数据进行恢复。
[0104]
在编程状态失败的情况下,当ecc编码校验的方式无法对失效数据进行纠错和恢复时,存储器系统中对于被破坏数据的恢复,传统上有重读(英文表达为read retry)和独立冗余磁盘阵列(raid,redundant arrays ofindependent disks)两种方法。重读的本质是一种纠错机制,当数据出现ecc不可纠正的读取错误时,通过尝试偏离正常阈值电压的方式找到最接近的阈值电压,试图正确读出数据。独立冗余磁盘阵列是一种把多块独立的硬盘(物理硬盘)按不同的方式组合起来形成一个硬盘组(逻辑硬盘),从而提供比单个硬盘更高的存储性能和提供数据备份技术,数据备份的功能是在用户数据一旦发生损坏后,利用备份信息可以使损坏数据得以恢复,从而保障了用户数据的安全性,在用户看起来,组成的
磁盘组就像是一个硬盘,用户可以对它进行分区,格式化等等,对磁盘阵列的操作与单个硬盘一模一样,不同的是,磁盘阵列的存储速度要比单个硬盘高很多,而且可以提供自动数据备份。
[0105]
对于以上如表1-表4示出的邻面干扰问题引起的数据破坏,重读完全无效,独立冗余磁盘阵列的方式又包括存储面级别的raid和芯片级别的raid,芯片级别的raid可以对邻面干扰问题引起的破坏数据进行恢复,但存储器系统的配置成本较高;而配置成本较低的存储面级别的raid的方式只能恢复一个存储面内的故障,如果多个存储面出现编程失败,存储面级别的raid将无法恢复数据。因此,邻面干扰问题的存在会引起被破坏的数据没法完全恢复而导致数据丢失的问题。
[0106]
针对上述问题,本发明实施例采用了如下技术方案来解决。
[0107]
本发明实施例提供一种存储器控制器,所述存储器控制器与多个存储芯片耦接,每个所述存储芯片包括多个存储面,每个所述存储面包括分别耦接到多个存储单元的多条字线;所述存储器控制器被配置为:
[0108]
接收第一指令;所述第一指令指示对一个存储芯片中的多个存储面中的第n条字线耦接的存储单元进行编程操作;所述n为正整数;
[0109]
确定所述n小于等于第一预设值,且第一缓存器不满足预设条件;其中,所述第一缓存器用于备份待编程至每个存储面的第n条字线耦接的存储单元中的数据;
[0110]
发出第二指令;所述第二指令指示采用单面编程的方式对所述多个存储面中每个存储面的第n条字线耦接的存储单元依次进行编程。
[0111]
这里,一个存储芯片中的存储面、字线、存储组的数量不限于表1至表4中所示出的,表1至表4中的存储面、字线、存储组的数量只是一种示例性的示范。实际应用中,每个存储面中的字线条数包括但不限于32、64、128等。
[0112]
图1示出了三维nand型存储器的存储单元串的电路图,存储单元串包括多个存储单元,每个存储单元串最顶部存储单元连接至顶部选择管,顶部选择管连接至位线,存储单元串最底部的存储单元连接至底部选择管。
[0113]
对于三维nand型存储器的编程过程而言,其一般的编程顺序为从离底部选择管最近的存储单元开始编程,自下而上至离顶部选择管最近的存储单元结束,即从与底部选择管相邻的存储单元向与顶部选择管相邻的存储单元依次编程,这个编程顺序可以称为典型编程顺序(英文表达为normal program sequence)或正向编程顺序。逆向编程顺序为从离顶部选择管最近的存储单元开始编程自上而下至离底部选择管最近的存储单元结束,即从与顶部选择管相邻的存储单元向与底部选择管相邻的存储单元依次编程。
[0114]
实际应用中,在对存储单元进行编程操作时,邻面效应一般发生在最开始的几个wl。当编程顺序为正向编程时,这里最开始的几个wl可以理解为离底部选择管最近的几个wl,当编程顺序为逆向编程时,这里最开始的几个wl可以理解为离顶部选择管最近的几个wl。可以理解的是,由于最开始编程的几个wl(即离底部选择管最近的几个wl或离顶部选择管最近的几个wl)在工艺上存在一些缺陷,使得更容易造成编程异常的问题。
[0115]
这里,第一预设值一般设定为5,但第一预设值不限于此,实际应用中可以根据具体情况进行设定。
[0116]
在一些实施例中,所述第一缓存器设置在主机中或者设置在所述存储器控制器
中。
[0117]
这里,当第一缓存器设置在主机中时,具体可以是主机高速缓冲存储器(hmb,host memory buffer)。hmb是主机在内存中专门划出一部分空间给ssd用,ssd可以把它当成自己的dram使用,由于hmb访问速度相对快,可以最大程度的减小性能损失,因此常用于备份缓存。
[0118]
当第一缓存器设置在存储器控制器时,第一存储器可以是在存储器控制器中专门设置的一块区域用于缓存数据,也可以是将存储器控制器的一部分dram作为第一缓存器。如图8所示,当第一缓存器设置在存储器控制器中时,所述第一缓存储器可以是随机访问存储器(ram,random access memory)802中的一部分,但不限于此。
[0119]
在一些实施例中,第一缓存器设置在主机中,所述确定所述第一缓存器不满足预设条件包括:
[0120]
获取所述第一缓存器的容量信息,根据所述容量信息确定所述第一缓存器不满足预设条件。
[0121]
在一些具体示例中,获取所述第一缓存器的容量信息具体可以是:存储器控制器在确定所述n小于等于第一预设值,且第一缓存器不满足预设条件后,可以先向主机发出需要获取主机中的第一缓存器的容量信息的指令,主机在接收到指令后再由主机向控制器发出第一缓存器的容量信息,存储器控制器接收主机所发出的第一缓存器的容量信息。
[0122]
在一些具体示例中,所述第一缓存器的容量信息也可以是包含在第一指令之中的。
[0123]
在一些实施例中,所述确定第一缓存器满足预设条件包括:
[0124]
确定存在所述第一缓存器,且所述第一缓存器的存储空间大于等于第二预设值。
[0125]
这里,以第一缓存器是hmb为例进行具体说明,假设当被编程的存储芯片是tlc的类型时,也就是每个存储单元的存储页数包括三页,如前述表4中所示的情况时,一个存储芯片中在第n条字线耦接的存储单元中被破坏的最大的页数为6存储组/存储面*3页/存储组*4存储面/存储芯片=72页/存储芯片,典型的一个页的大小为16kb,因此一个存储芯片的备份空间需求大小为72页/存储芯片*16kb/页=1152kb/存储芯片,而由于主机中通常只能提供16mb到32mb的hmb用于数据备份,从而主机中能同时备份的存储芯片数为16mb至32mb/1152kb/存储芯片=14至28存储芯片,也就是说在主机支持hmb时,考虑到编程可以在存储芯片级别并行进行的情况下,能支持同时对14至28个存储芯片的编程数据进行备份。也就是说hmb的存储空间是有限的,只能实现对于一定数量(如前述的14至28)个存储芯片的编程数据进行备份。
[0126]
可以理解的是,当主机中存在hmb,并且hmb的存储空间大于等于需要进行备份的存储空间时,即第一缓存器满足预设条件。而当主机中不存在hmb,或hmb的存储空间小于需要进行备份的存储空间时,即第一缓存器不满足预设条件。
[0127]
在一些实施例中,在接收第一指令之前,获取所述第一预设值。
[0128]
实际应用中,所述获取第一预设值可以是从存储器系统的寄存器中获取,这种获取第一预设值的方式需要提前在寄存器中对第一预设值进行设定,也可以从主机的指令中获取第一预设值,这种获取第一预设值的方式所获取的第一预设值是动态变化的,可以根据用户的需求随时进行变更。
[0129]
本发明实施例中,在n小于等于第一预设值时,也就是在对容易发生编程异常的第n条字线耦接的存储单元进行编程时,且第一缓存器不满足预设条件的情况下,采用单面编程的方式对所述多个存储面中每个存储面的第n条字线耦接的存储单元依次进行编程,这样使得当某一存储面发生编程异常时,不会对其它存储面的数据造成干扰。因此在对数据进行恢复时,只需要对存在编程异常的一个存储面的数据进行恢复,也就是说只需要对单个存储面的数据进行恢复,虽然单面编程比较耗时,但是由于只对容易发生编程异常的存储单元进行单面编程,数量相对来说较少,这样在减少邻面干扰的影响的情况下,又可以达到相对较高的编程效率。
[0130]
在一些实施例中,所述存储器控制器被配置为:
[0131]
对单面编程过的多个存储面,确定所述多个存储面中第一存储面中第n条字线上的存储单元存在编程异常;
[0132]
发出第三指令;所述第三指令指示采用存储面级别的独立冗余磁盘阵列的方式对所述第一存储面中编程异常的存储单元的数据进行恢复。
[0133]
可以理解的是,本发明实施例中在n小于等于第一预设值时,也就是在对容易发生编程异常的第n条字线耦接的存储单元进行编程时,且第一缓存器不满足预设条件的情况下,采用单面编程的方式对所述多个存储面中每个存储面的第n条字线耦接的存储单元依次进行编程,这样在异常数据只存在于单个存储面的情况下,由于存储面级别的独立冗余磁盘阵列的方式能够对一个存储面的数据进行恢复,因此,采用存储面级别的独立冗余磁盘阵列的方式就可以对上述情况下的异常数据实现完全的恢复。
[0134]
实际应用中,除了上述n小于等于第一预设值,且第一缓存器不满足预设条件的情况外,还包括n大于第一预设值;和/或,第一缓存器满足预设条件的情况。
[0135]
基于此,本发明实施例还提供了以下技术方案。
[0136]
在一些实施例中,所述存储器控制器被配置为:
[0137]
确定所述n大于第一预设值;和/或,所述第一缓存器满足预设条件;
[0138]
发出第四指令;所述第四指令指示采用多面编程的方式对所述多个存储面中每个存储面的第n条字线耦接的存储单元进行编程。
[0139]
这里,确定所述n大于第一预设值;和/或,所述第一缓存器满足预设条件,包括以下情况:
[0140]
一、n大于第一预设值,且第一缓存器满足预设条件;
[0141]
二、n大于第一预设值,且第一缓存器不满足预设条件;
[0142]
三、n小于等于第一预设值,且第一缓存器满足预设条件。
[0143]
可以理解的是,对于情况一和情况二,也就是当n大于第一预设值时,对第n条字线耦接的存储单元进行编程操作时发生编程异常的概率很低,或者基本不会发生异常,在这种情况下直接用多面编程的方式对第n条字线耦接的存储单元进行编程操作时基本不会发生邻面效应,即不会使得多个存储面中第n条字线耦接的存储单元的数据受到干扰,这样可以在保证数据编程正常的情况下提高编程效率。
[0144]
对于上述情况三,n小于等于第一预设值,且第一缓存器满足预设条件时,也就是对易发生编程异常的第n条字线耦接的存储单元进行编程操作时,当第一缓存器满足预设条件的情况下,对第n条字线耦接的存储单元采用多面编程的方式进行编程,这样如前述,
会对与编程异常的存储面相邻的存储面的数据也造成干扰,对于同一个存储芯片下的多个存储面同时发生了数据错误时,采用存储面级别的独立冗余磁盘阵列的方法无法恢复异常数据,因此,本发明实施例又提供了以下的技术方案。
[0145]
在一些实施例中,所述存储器控制器被配置为:
[0146]
确定所述n小于等于第一预设值,且所述第一缓存器满足预设条件;
[0147]
发出第五指令;所述第五指令指示将待编程至每个存储面的第n条字线耦接的存储单元中的数据备份至所述第一缓存器;
[0148]
发出第六指令;所述第六指令指示采用多面编程的方式对所述多个存储面中每个储存面的第n条字线耦接的存储单元进行编程。
[0149]
实际应用中,存储芯片中还可以存在第二缓存器;所述第二缓存器可以是页缓存器(pb,page buffer)。
[0150]
所述响应于所述第一指令,确定所述n小于等于第一预设值,且所述第一缓存器满足预设条件时,将待编程至每个存储面的第n条字线耦接的存储单元中的数据备份至所述第一缓存器;包括:
[0151]
响应于所述第一指令,确定所述n小于等于第一预设值,且所述第一缓存器满足预设条件时,将待编程至每个存储的第n条字线耦接的存储单元中的数据存储在所述第二缓存器中,再将第二缓存器的数据备份至所述第一缓存器中。
[0152]
在一些实施例中,所述存储器控制器被配置为:
[0153]
确定所述多个存储面中至少第一存储面中第n条字线耦接的存储单元存在编程异常;
[0154]
发出第七指令,所述第七指令指示利用所述第一缓存器中的数据对编程异常的数据进行恢复。
[0155]
这里,至少第一存储面可以理解为,由于n小于等于第一预设值,且所述第一缓存器满足预设条件时,采用多面编程的方式进行编程,当第一存储面中出现编程异常时,第n条字线上与第一存储面相邻的存储面也会受到干扰。
[0156]
可以理解的是,当n小于等于第一预设值,且所述第一缓存器满足预设条件时,先将待编程至每个存储面的第n条字线耦接的存储单元中的数据备份至所述第一缓存器,这样使得第一存储面中第n条字线耦接的存储单元存在编程异常时,可以利用备份至第一缓存器中的数据再次进行编程操作,使得数据不至于无法恢复,实现对至少第一存储面中第n条字线耦接的存储单元的数据的恢复。
[0157]
实际应用中,当第一存储面中第n条字线上的存储单元存在编程异常时,第一存储面中与第n条字线相邻的字线即第n-1条字线的存储单元的数据也会受到干扰,基于此,本发明实施例提出以下方案。
[0158]
在一些实施例中,所述存储器控制器被配置为:
[0159]
确定所述第一存储面中第n-1条字线耦接的存储单元的数据存在异常;
[0160]
发出第八指令;所述第八指令指示采用存储面级别的独立冗余磁盘阵列的方式对所述第一存储面中第n-1条字线耦接的存储单元的数据进行恢复。
[0161]
可以理解的是,多个存储面中,只有第一存储面中的第n-1条字线耦接的存储单元会受到干扰,因此对于第n-1条字线的存储单元的数据采用存储面级别的独立冗余磁盘阵
列的方式就可以实现数据恢复。
[0162]
本发明实施例中,如图2所示,将被破坏的存储组所在的位置分为三种:第一种是当前编程异常的存储组所对应的字线和临近的存储面,被称为位置一;第二种是当前编程异常的存储组编程异常的存储组所对应的wl和存储面,被称为位置二;第三种是当前编程异常的存储组所在的存储面和临近wl,被称为位置三。
[0163]
当n小于等于第一预设值,且第一缓存器不满足预设条件时,直接采用单面编程的方式对多个存储面中每个存储面的第n条字线耦接的存储单元依次进行编程,这样当位置二有编程异常时,可以避免位置一中的数据被破坏,再用存储面级别的独立冗余磁盘阵列的方式对位置二和位置三中被破坏的数据进行恢复。
[0164]
当n小于等于第一预设值,且第一缓存器满足预设条件时,提前先将待编程至每个存储面的第n条字线耦接的存储单元中的数据备份至第一缓存器,再采用多面编程的方式对多个存储面中每个存储面的第n条字线耦接的存储单元进行编程,当位置二有编程异常时,利用第一缓存器中的数据对位置一和位置二中的数据进行恢复,再通过存储面级别的独立冗余磁盘阵列的方式实现对位置三的数据恢复。
[0165]
当n大于第一预设值时,由于出现数据异常的可能性较小,或者可以认为不会发生异常,直接采用多面编程的方式对个存储面中每个存储面的第n条字线耦接的存储单元进行编程,编程结束后不需要对数据进行恢复。
[0166]
以下结合图3对本发明实施例的技术方案进一步理解,先获取所述第一预设值q,接收对第n条字线耦接的存储单元进行编程操作的第一指令,当满足主机支持hmb、hmb存储空间足够、n小于等于第一预设值q的情况下,将待编程至每个存储面的第n条字线耦接的存储单元中的数据备份至hmb,并采用多面编程的方式对所述多个存储面中每个存储面的第n条字线耦接的存储单元进行编程,当出现编程异常时,读取存储在hmb中的数据,对第n条字线耦接的存储单元数据进行恢复;当n大于第一预设值q的情况下,直接采用多面编程的方式对所述多个存储面中每个存储面的第n条字线耦接的存储单元进行编程;当主机不支持hmb或hmb存储空间不够,且n小于等于第一预设值q的情况时,采用单面编程的方式对所述多个存储面中每个存储面的第n条字线耦接的存储单元进行编程。
[0167]
本发明实施例中,在系统不支持hmb,或hmb的存储空间不够时,在对开始的几条字线耦接的存储单元进行编程时,采用单面编程的方式替代多面编程的方式对开始的几条字线耦接的存储单元进行编程,这样可以避免位置一上的数据的被破坏的情况。此时对于位置二和位置三,都只是发生在同一个存储面上,采用存储面级别的独立冗余磁盘阵列的方式就都可以恢复。这种替代方案的代价是单面编程比多面编程的编程性能差了理论上有3到4倍,所以对于开始的几个wl的编程会有性能抖动。但由于开始的wl不多,一般2到3个,那么对于比如有128层wl的存储芯片的架构,其占比在2%左右,性能的抖动在可以接受的范围内。
[0168]
本发明实施例在邻面效应只发生在开始的几个wl,其它wl发生邻面效应的可能性非常小的前提下,综合利用hmb备份数据、存储面级别的独立冗余磁盘阵列和可选的单面编程替代多面编程三种方案可以解决存储器系统存在的邻面干扰问题。第一方面,可以完全恢复邻面干扰导致的数据破坏,有效的避免由邻面干扰造成的数据丢失所带来的不好的用户体验;第二方面,比起用存储芯片级别的独立冗余磁盘阵列恢复方案,本发明实施例可以
一次性解决邻面干扰问题,不额外增加成本的同时,所用的恢复时间更少;第三方面,从性能的影响方面来看,能做到尽可能的性能止损,从而满足各种性能要求;第四方面,此综合方案相对比较灵活,能兼顾支持或者不支持hmb的主机平台;第五方面,本发明实施例提供的方案的实现所涉及的存储器系统的固件改动较小,相对较易实现的同时还有利于后期维护。
[0169]
本发明实施例提供了一种存储器控制器,所述存储器控制器被配置为:接收第一指令;所述第一指令指示对一个存储芯片中的多个存储面中的第n条字线耦接的存储单元进行编程操作;所述n为正整数;确定所述n小于等于第一预设值,且第一缓存器不满足预设条件;其中,所述第一缓存器用于备份待编程至每个存储面的第n条字线耦接的存储单元中的数据;发出第二指令;所述第二指令指示采用单面编程的方式对所述多个存储面中每个存储面的第n条字线耦接的存储单元依次进行编程。本发明实施例中,在确定n小于等于第一预设值,且第一缓存器不满足预设条件的情况下,采用单面编程的方式对多个存储面中每个存储面的第n条字线耦接的存储单元依次进行编程,这样可以避免单个存储面编程异常时对相邻的存储面的数据造成干扰,有利于实现对存储器系统的异常数据的有效恢复。
[0170]
基于上述存储器控制器,本发明实施例还提供了一种存储器控制器的操作方法,如图4所示,所述方法包括:
[0171]
步骤401:接收第一指令;所述第一指令指示对一个存储芯片中的多个存储面中的第n条字线耦接的存储单元进行编程操作;所述n为正整数;
[0172]
步骤402:响应于所述第一指令,确定所述n小于等于第一预设值,且第一缓存器不满足预设条件;其中,所述第一缓存器用于备份待编程至每个存储面的第n条字线耦接的存储单元中的数据
[0173]
步骤403:发出第二指令;所述第二指令指示采用单面编程的方式对所述多个存储面中每个存储面的第n条字线耦接的存储单元依次进行编程。
[0174]
实际应用中,第一指令可以通过主机发出,再通过主机与存储器控制器之间数据传输接口使得第一指令传输到存储器控制器。所述响应于第一指令可以是存储器控制器在接收第一指令后,响应第一指令,控制存储芯片中的外围电路采用单面编程的方式对所述多个存储面中每个存储面的第n条字线耦接的存储单元依次进行编程。以下实施例中所述的接收第一指令和响应于第一指令的执行主体都可以参考上述说明。
[0175]
在一些实施例中,所述方法还包括:
[0176]
对单面编程过的多个存储面,确定所述多个存储面中第一存储面中第n条字线上的存储单元存在编程异常;
[0177]
发出第三指令;所述第三指令指示采用存储面级别的独立冗余磁盘阵列的方式对所述第一存储面中编程异常的存储单元的数据进行恢复。
[0178]
在一些实施例中,所述方法还包括:
[0179]
确定所述n大于第一预设值;和/或,所述第一缓存器满足预设条件;
[0180]
发出第四指令;所述第四指令指示采用多面编程的方式对所述多个存储面中每个存储面的第n条字线耦接的存储单元进行编程。
[0181]
在一些实施例中,所述方法还包括:
[0182]
确定所述n小于等于第一预设值,且所述第一缓存器满足预设条件;
[0183]
发出第五指令;所述第五指令指示将待编程至每个存储面的第n条字线耦接的存储单元中的数据备份至所述第一缓存器;
[0184]
发出第六指令;所述第六指令指示采用多面编程的方式对所述多个存储面中每个储存面的第n条字线耦接的存储单元进行编程。
[0185]
在一些实施例中,所述方法还包括:
[0186]
确定所述多个存储面中至少第一存储面中第n条字线耦接的存储单元存在编程异常;
[0187]
发出第七指令,所述第七指令指示利用所述第一缓存器中的数据对编程异常的数据进行恢复。
[0188]
在一些实施例中,所述方法还包括:
[0189]
确定所述第一存储面中第n-1条字线耦接的存储单元的数据存在异常;
[0190]
发出第八指令;所述第八指令指示采用存储面级别的独立冗余磁盘阵列的方式对所述第一存储面中第n-1条字线耦接的存储单元的数据进行恢复。
[0191]
在一些实施例中,所述第一缓存器设置在主机中或者设置在所述存储器控制器中。
[0192]
在一些实施例中,所述存储器控制器被配置为:
[0193]
第一缓存器设置在主机中,所述确定所述第一缓存器不满足预设条件包括:
[0194]
获取所述第一缓存器的容量信息,根据所述容量信息确定所述第一缓存器不满足预设条件。
[0195]
在一些实施例中,所述确定第一缓存器满足预设条件包括:
[0196]
确定存在所述第一缓存器,且所述第一缓存器的存储空间大于等于第二预设值。
[0197]
在一些实施例中,所述方法还包括:
[0198]
在接收第一指令之前,获取所述第一预设值。
[0199]
基于上述存储器控制器,本发明实施例还提供了一种存储器系统,所述存储器系统包括:如上述实施例中任一项所述的存储器控制器以及与所述存储器控制器耦接的多个存储芯片;其中,
[0200]
每个所述存储芯片包括多个存储面,每个所述存储面包括分别耦接到多个存储单元的多条字线。
[0201]
在一些实施例中,所述存储芯片包括三维nand型存储器。
[0202]
在一些实施例中,所述多个存储单元中的每个存储单元的存储位数包括一位或多位。
[0203]
在一些实施例中,所述多个存储单元中的每个存储单元的存储位数包括三位。
[0204]
实际应用中,本发明实施例所述的存储器系统包括但不限于固态硬盘(ssd,solid state drives)。
[0205]
以下结合附图对所述存储器系统做进一步说明。
[0206]
如图5所示,系统500可以是移动电话、台式计算机、膝上型计算机、平板计算机、车辆计算机、游戏控制台、打印机、定位设备、可穿戴电子设备、智能传感器、虚拟现实(vr)设备、增强现实(ar)设备或者其中具有储存器的任何其他合适的电子设备,系统500可以包括主机504和存储器系统501,存储器系统501具有一个或多个存储芯片502和存储器控制器
503。主机504可以是电子设备的处理器(例如,中央处理单元(cpu))或者片上系统(soc)(例如,应用处理器(ap))。主机504可以被配置为将数据发送到存储芯片502或从存储芯片502接收数据。
[0207]
存储器控制器503和一个或多个存储芯片502可以集成到各种类型的存储设备中,例如,包括在相同封装(例如,通用闪存存储(ufs)封装或emmc封装)中。也就是说,存储器系统501可以实施并且封装到不同类型的终端电子产品中。在如图6a中所示的一个示例中,存储器控制器503和单个存储芯片502可以集成到存储器卡601中。存储器卡601可以包括pc卡(pcmcia,个人计算机存储器卡国际协会)、cf卡、智能媒体(sm)卡、存储器棒、多媒体卡(mmc、rs-mmc、mmcmicro)、sd卡(sd、minisd、microsd、sdhc)、ufs等。存储器卡601还可以包括将存储器卡601与主机耦合的存储器卡连接器602。在如图6b中所示的另一示例中,存储器控制器503和多个存储芯片502可以集成到ssd603中。ssd603还可以包括将ssd603与主机耦合的ssd连接器604。
[0208]
实际应用中,存储芯片502可以包括存储单元阵列709以及与存储单元阵列706耦接的外围电路。外围电路可以包括任何合适的模拟、数字以及混合信号电路,图7示出了一些示例性外围电路,外围电路包括页缓冲器/感测放大器701、列解码器/位线驱动器702、行解码器/字线驱动器703、电压发生器704、控制逻辑单元705、寄存器706、接口707和数据总线708。应当理解,在一些示例中,还可以包括图7中未示出的附加外围电路。
[0209]
存储器控制器503在存储器控制器503的内部具有存储部(例如后述的ram802),并且接收来自主机504的指示并控制存储芯片502。存储芯片502的控制包括与从主机504接收的指示无关的控制和基于从主机504接收的指示的控制。例如,存储器控制器503将由主机504指示写入的数据写入存储芯片502。另外,存储器控制器503从存储芯片502读出由主机504指示读出的数据并发送到主机504。
[0210]
图8示出了一些示例性存储器控制器503,存储器控制器503可以包括主机接口801、随机访问存储器802、只读存储器803、存储器接口804、ecc电路805以及整体控制部806。存储器控制器503例如作为硬件而包括中央处理单元(cpu,central processing unit)等处理器,由处理器执行存储于rom803且加载到ram802上的固件(程序),从而执行主机接口801、存储器接口804、ecc电路805以及整体控制部806的每个的功能的一部分或全部。主机接口801、ram802、rom803、存储器接口804、ecc电路805以及整体控制部806通过总线相互连接。
[0211]
ram802例如是易失性存储器。ram802是设置于存储器控制器503的内部的存储部一例。ram802暂时保持数据,具有作为缓冲器的功能。ram802所保持的数据包括从主机504接收的数据、要发送到主机504的数据、要写入存储芯片502的数据(写入数据)、从存储芯片502读出的数据(读出数据)、表示存储芯片502的状态且为了存储芯片502的控制而由整体控制部806参照的各种管理数据、以及固件。上述管理数据包括地址变换表、工作管理表t1以及调整值管理表t2。
[0212]
基于上述存储器控制器的操作方法,本发明实施例还提供了一种存储器系统的操作方法,所述存储器系统包括多个存储芯片以及与多个存储芯片耦接的存储器控制器,所述存储器系统的操作方法采用如上实施例中任一项所述的存储器控制器的操作方法。
[0213]
应理解,说明书通篇中提到的“一个实施例”或“一实施例”意味着与实施例有关的
特定特征、结构或特性包括在本发明的至少一个实施例中。因此,在整个说明书各处出现的“在一个实施例中”或“在一实施例中”未必一定指相同的实施例。此外,这些特定的特征、结构或特性可以任意适合的方式结合在一个或多个实施例中。应理解,在本发明的各种实施例中,上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本发明实施例的实施过程构成任何限定。上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
[0214]
本发明所提供的几个方法实施例中所揭露的方法,在不冲突的情况下可以任意组合,得到新的方法实施例。
[0215]
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1