本申请要求2008年12月1 8日提交的美国临时专利申请No.61/138,575、2008年12月23日提交的美国临时专利申请No.61/140,147和2009年4月6日提交的美国专利申请No.12/418,892的优先权,在此通过引用包括其全部内容。
具体实施方式
环形拓扑的系统的示例在下列美国专利申请中描述:2008年8月21日公开的公开号为No.2008/0201548 A1、名称为“SYSTEM HAVING ONEOR MORE MEMORY DEVICES”的美国专利申请,2008年2月28日公开的公开号为No.2008/0049505 A1、名称为“SCALABLE MEMORYSYSTEM”的美国专利申请和2008年2月28日公开的公开号为No.2008/0052449 A1、名称为“MODULAR COMMAND STRUCTURE FORMEMORY AND MEMORY SYSTEM”的美国专利申请。对于下面的说明书中的各处,会参考某一示例命令、地址和数据格式、协议、内部设备结构、总线事务等,本领域的普通技术人员可以理解参考上述专利文件快速获得进一步的示例细节。
现在参考图1A和1B。根据一些示例实施例,命令包始于控制器,并且在环上以点到点的方式传输遍及每个存储器设备直到最终回到该控制器。参考图1A,其是接收并行时钟信号的示例系统的框图,而图1B是接收源同步时钟信号的与图1A相同的系统的框图。时钟信号可以是单端时钟信号或差分时钟对。
在图1A中,系统20包括具有至少一个输出端口Sout和输入端口Sin的存储器控制器22,和串联的存储器设备24、26、28和30,由此在系统的控制器设备和存储器设备之间存在串行互连的配置。虽然在图1A中没有明确地标记,但每个存储器设备具有Sin输入端口和Sout输出端口。输入和输出端口包括将存储器设备连接到为其一部分的系统的一个或多个物理引脚或连接。在一些实例中,该存储器设备是闪速存储器设备。图1A的当前示例包括4个存储器设备,但是替代的示例可以包括单个存储器设备,或任意合适数量的存储器设备。因此,如果当存储器设备24连接到控制器22的Sout时其为存储器系统20的第一设备,则当存储器设备30连接到存储器控制器22的Sin时其为第N个或者最后一个设备,其中N为大于零的整数。存储器设备26到28则为第一个和最后一个存储器设备之间中间的串联的存储器设备。每个存储器设备可以在系统的上电启动时采用独特的标识(ID)号或设备地址(DA),使得它们可被单独寻址。数个共同拥有的美国专利申请描述了用于为系统中串联的存储器设备产生和分配设备地址的方法。参见,例如公开号为No.2007/0233917 A1、名称为“APPARATUS AND METHOD FOR ESTABLISHING DEVICEIDENTIFIERS FOR SERIALLY INTERCONNECTED DEVICES”的美国专利申请和公开号为No.2008/0080492 A1、名称为“PACKET BASED IDGENERATION FOR SERIALLY INTERCONNECTED DEVICES”的美国专利申请。
因为除了链中的第一个和最后一个存储器设备,一个存储器设备的数据输入被连接到前一个存储器设备的数据输出,由此形成串联的系统组织,所以存储器设备24至30(图1A)被认为是串联。存储器控制器22的信道包括由连接到导线的不同引脚或相同引脚提供的数据、地址、控制信息。图1A的示例包括一个信道,其中该一个信道包括Sout端口和对应的Sin端口。然而,存储器控制器22可以包括任意适合数量的信道,用于适应不同的存储器设备链。在图1A的示例中,存储器控制器22提供时钟信号CK,其被并行连接到所有的存储器设备。
在常规操作中,存储器控制器22通过其Sout端口发出命令,其包括操作码(op码)、设备地址、用于读或编程的可选择的地址信息、和用于寄存器编程的可选择的数据。可以以串行位流命令包来发出命令,其中该包可以被逻辑地细分为预定尺寸的段。每段可以是例如大小1字节。位流为随时间提供的位的序列或者一系列位。第一存储器设备24通过其输入端口Sin接收命令,该输入端口比较设备地址和其所分配的地址。如果地址匹配,则存储器设备24执行该命令。命令通过存储器24的输出端口Sout被传递至下一个存储器设备26,其中重复相同的过程。最后,具有匹配的设备地址的存储器设备,称为所选择的存储器设备,将执行由该命令所指定的操作。如果该命令是读数据命令,所选择的存储器设备将通过其输出端口Sout(未标记)输出读数据,其被串行传递通过居间的存储器设备,直到到达存储器控制器22的Sin端口。由于命令和数据以串行位来提供,所以每一存储器设备使用时钟以用于按时钟输入/按时钟输出串行位并且用于同步内部存储器设备操作。系统20中的所有的存储器设备都使用此时钟。
因为根据图1A的系统中所使用的时钟频率相对低,可以使用无端(unterminated)的全摆幅CMOS信令水平,以提供稳健的数据通信。如本领域的普通技术人员所公知的,这也被称为低压晶体管-晶体管逻辑(LVTTL)信令。
可以由图1B的系统获得图1A的系统20上的进一步的性能改进。图1B的系统40类似于图1A的系统20(例如,在图1A中,在系统的控制器设备和半导体存储器设备之间存在串行互连配置),除了时钟信号CK从前一个设备串行地提供给每一个存储器设备,而不是必须从存储器控制器42提供。每个存储器设备44、46、48和50可以在其时钟输入端口接收源同步时钟并且经由其时钟输出端口将该源同步时钟转送至系统中的下一个设备。在系统40的一些示例中,时钟信号CK从一个存储器设备经由短信号线传递至另一个。在这样的情况下,不会出现和并行时钟分布方案(例如由多个设备装载)有关的时钟性能问题,并且CK可以在高频率运行。因此,系统40可以以比图1A的系统20更高的速度操作。例如,高速收发器逻辑(HSTL)信令可以被用来提供高性能数据通信。在HSTL信令格式中,每个存储器设备可以接收用于确定到来的数据信号的逻辑状态的参考电压。另一个类似的信令格式是残余连续终结逻辑(SSTL)信令格式。因此,系统20和40的存储器设备中的数据和时钟输入电路彼此不同地构成。对于本领域的普通技术人员,HSTL和SSTL信令格式都是公知的。
现在,为了提供图1B中所示类型系统的更具体示例,将参考图2A。在图2A中,系统100包括存储器控制器102和四个存储器设备104、106、108和110。存储器控制器102并行提供控制信号到存储器设备。这些信号包括芯片使能信号CE#、复位信号RST#。在使用CE#的一个示例中,当CE#处于低逻辑电平时,启用设备。在多个先前所考虑的设备中,一旦闪速存储器设备开始编程或者擦除操作,CE#可以被撤销,或者被驱至高逻辑电平。但是在一个示例实施例中,被撤销的CE#会使将被停用的串行存储器设备的Sin至Sout的通信停用。由于串行存储器设备被连接在环中,停用任意的设备切断了围绕环的通信,并且存储器控制器变得不能与存储器系统中的所有存储器设备通信。结果是,CE#是至所有串行存储器设备的公共信号,并且被用于将整个存储器设置为低功率状态。在使用RST#的一个示例中,当RST#处于低逻辑电平时,存储器设备被设置为复位模式。在复位模式中,允许功率稳定,并且通过初始化所有有限状态机并将所有配置和状态寄存器复位到其缺省状态来让设备做好操作准备。存储器控制器102包括用于提供互补的时钟信号CK和CK#的时钟输出端口CKO#和CKO,和用于接收来自系统的最后一个存储器设备的互补的时钟信号的时钟输入端口CKI#和CKI。每个存储器设备可以包括诸如DLL或PLL的时钟合成器,用于产生所接收的时钟的相位。一定的相位可被用于将时钟边沿集中在输入数据有效窗口内以确保可靠的操作。图2A中的每个存储器设备具有用于将互补的时钟信号传递至下一存储器设备的时钟输入端口的时钟输出端口CKO#和CKO,和用于从存储器控制器102或前一个存储器设备接收互补的时钟信号的时钟输入端口CKI和CKI#。最后一个存储器设备110将时钟信号提供回存储器控制器102。
存储器控制器102的信道包括数据输出端口Sout、数据输入端口Sin,命令选通输入CSI、命令选通输出CSO、数据选通输入DSI和数据选通输出DSO。依据存储器控制器的特性,输出端口Sout和输入端口Sin可以是一位宽度或者n位宽度,其中n为正整数。例如,如果n为1,则在时钟的八个数据锁存边沿之后接收一个字节的数据。数据锁存时钟边沿可以是上升时钟边沿,例如在单数据速率(SDR)操作中;或是时钟的上升沿和下降沿二者,例如在双数据速率(DDR)操作中。如果n为2,则在时钟的四个锁存边沿之后接收到一个字节的数据。如果n为4,则在时钟的两个锁存边沿之后接收一个字节的数据。对于任意宽度的Sout和Sin,存储器设备可以被静态配置或者动态配置。因此,在n大于1的配置中,存储器控制器以并行位流来提供数据。CSI用于控制或启用出现在输入端口Sin上的锁存命令数据,并且具有一脉冲持续时间用于当命令出现在数据输入端口Sin时限定时间(delimiting the time)。更具体地,命令数据将具有多个时钟周期的持续时间,并且CSI信号的脉冲持续时间将具有相应的持续时间。DSI用于启用所选择的存储器设备的输出端口Sout缓冲器以输出读数据,并且具有一脉冲持续时间用于限定从存储器设备数据输出端口Sout提供的读数据,使得存储器控制器能够控制读处理中的数据量。
由于图2A的当前所述的实施例旨在用于高速操作,所以使用了高速信令格式,诸如HSTL信令格式。因此,提供参考电压VREF到每个存储器设备,其被每个存储器设备使用以确定在Sin、CSI和DSI输入端口接收的信号的逻辑电平。参考电压VREF可以例如由印刷电路板上的另一个电路产生,并且基于HSTL信号的电压摆幅中点设置为预定的电压电平。
在图2A的实施例的使用中,每个存储器设备位于印刷电路板上,使得环中的一个设备上的Sout输出端口引脚和下一个设备的Sin输入端口引脚之间的距离和信号轨迹长度被最小化。可替代地,可以在封装模块的系统(SIP)中收集四个存储器设备,这进一步最小化信号轨道长度。存储器控制器102和存储器设备104至110串联,以形成环形拓扑结构,意味着最后一个存储器设备110提供其输出返回存储器控制器102。因此,本领域的普通技术人员可以理解存储器设备110和存储器控制器102之间的距离可以以简单的方法最小化。
在图2B中,系统150包括存储器控制器152和存储器设备154、156、158和160。存储器控制器152可以被设计为提供与图2A中所示存储器控制器102的功能类似的功能,除了时钟信号是被并行提供的,因此,每个存储器设备的时钟输出端口CKO#和CKO不存在或未连接。而且图2A的系统与图2B的系统相比较,数据和选通信号的信令格式不同。例如,图2B的系统的信令格式可以是全摆幅无端的LVTTL信令格式。与较低时钟频率联合使用的LVTTL信令不使用参考电压VREF。仅用于图2B的系统中的存储器设备不需要VREF输入。如果存在VREF输入,这是因为它们也可以根据确实需要VREF的高速信令规范来通信。在这样的情况中,出于方便VREF被设置为电压电平,而不是信令中点,或者用于指示正在使用LVTTL信令。例如,对于这样的设备,VREF可以被设置为VDD或VSS以指示LVTTL信令和根据图2B的网络组织,与根据图2A的HSTL信令和网络配置相对。
根据示例实施例,图2A的存储器设备104、106、108和110和图2B的存储器设备154、156、158和160可以是具有被设计用于与其它存储器设备串行互连的输入/输出接口的任意类型的存储器设备。根据当前所述的实施例,图2A和2B的存储器设备可以相同,并且由于它们将具有能够以LVTTL输入信号或HSTL输入信号操作的输入和输出缓冲器电路,因此在两个系统中都可操作。本领域的普通技术人员可以理解,存储器设备可以包括输入和输出缓冲器电路,用于以与LVTTL或HSTL信号不同的其它类型的信号格式操作。
如所描述的,先前图中所示的每个系统包括一个或多个存储器设备,并且根据示例实施例,图3是示例存储器设备200的图,该存储器设备200可被提供在任意一个前面所述的系统中。该新的存储器设备200具有存储体202,在至少一些示例中其是具有多个(n个)可擦除块的NAND闪速单元阵列结构。每个可擦除块被细分为多个(m个)可编程页面。每个页面包括(j+k)字节。该页面被进一步分为在其中存储数据的j字节数据存储区,以及通常用于错误管理功能的分开的k字节区。每个页面包括,例如,2112字节,其中2048字节将用于数据存储,64字节将用于错误管理功能。如上所述存储体202由页面进行存取。虽然图3示出了单个存储体202,但存储器设备200可包括多个存储体202。
命令寄存器214从控制器经由I/O(输入/输出)电路213接收用于存取存储体202的命令。所接收的命令进入命令寄存器214,并且保持在那里直到执行。控制逻辑电路216将该命令转换为能够对存储体202执行的形式。该命令总地由芯片的外部封装上的不同引脚确定为有效而进入存储器设备200,其中不同的引脚可被用于表示不同的命令。例如,该命令可包括读、编程、擦除、寄存器读和寄存器写。关于寄存器写,在存储器设备200的一个示例中,可以能够处理5字节寄存器写命令包,该5字节寄存器写命令包包括:用于ID的一个字节、用于命令的一个字节和作为有效载荷的剩余字节。
以页面为基础执行读和编程命令,而以块为基础执行擦除命令。同样,在存储器设备200的多个示例中,设备的各个引脚中每个与一个选通端口、一个数据端口或者先前参考图2A和图2B描述的其它端口相关联。在存储器设备200的数据引脚和内部部件之间示出I/O电路213,在存储器设备200的其它引脚和内部部件之间示出芯片接口电路215。
当命令寄存器214经由I/O电路213接收读或者编程命令时,和该命令相关的存储体202中的页面的地址由I/O电路213提供给地址缓冲和锁存器218。然后,地址信息被从地址缓冲和锁存器218提供给控制和预解码器206、感应放大器(S/A)和数据寄存器204和行解码器208,用于存取由地址指示的页面。关于读操作,数据寄存器204接收完整的页面,然后将该完整的页面提供给I/O电路213(更具体地,其被提供给I/O电路213的未被明确地示出的下述子部件:I/O缓冲和锁存器、然后给输出驱动器)用于从存储器设备200输出。
地址缓冲和锁存器218确定该地址所位于的页面并且将对应于该页面的行地址提供给行解码器208。激活对应的行。数据寄存器和S/A 204读出(sense)该页面并且将该数据从页面传输到数据寄存器204。一旦已经将数据从整个页面传输到数据寄存器,该数据从该设备经由I/O电路213顺序读出。
编程命令也基于页面处理。命令寄存器214经由I/O电路213接收编程命令,地址缓冲器218经由I/O电路213接收附随的地址。I/O电路213接收输入数据,用于传输到数据寄存器204。一旦所有的输入数据都到数据寄存器204中,用该输入数据对将存储该输入数据的页面进行编程。
基于块处理擦除命令。命令寄存器214经由I/O电路213接收擦除命令,地址缓冲器218经由I/O电路213接收块地址。
所示存储器设备200还可选地包括ECC管理器217。ECC管理器217根据下面接下来较详细描述的示例实施例启用错误检测和纠正。图中,ECC管理器与控制逻辑电路216通信;但是在替代的示例中,ECC管理器可包括允许它直接作用于其它所示部件上的电路和逻辑电路,其它所示部件例如一个或多个地址缓冲和锁存器218以及命令寄存器214。本领域的普通技术人员可以理解存在各种公知电路,通过其可以将包从存储器设备200的输入提供到ECC管理器217。
所示存储器设备200还包括一个或多个状态寄存器249(许多类型的传统状态寄存器对本领域的普通技术人员是公知的)。在控制逻辑电路216的控制下,状态寄存器可提供旨在用于系统的控制器的状态类型的信息,并且通常以不干扰通过I/O电路213通信的其它信息和数据的形式提供该信息。在一个示例中,在状态寄存器249存储的信息可经由存储器设备上的一个或多个专用引脚而被特定地递送出去。在这点上,可在状态寄存器249和I/O电路213之间提供有可选的ECC发生器251,以帮助进行该过程。
如所述,在图1A、1B、2A和2B中所示的每个系统包括存储器控制器,在图4中示出了适合的示例存储器控制器310的框图。
参考图4,所示新的闪速控制器310包括中央处理单元(CPU)312;以及具有例如随机存取存储器(RAM)316和只读存储器(ROM)318的存储器314。本领域的普通技术人员可以理解,闪速控制器310可被配置为片上系统、系统级封装或者多芯片。同样,所示闪速控制器310包括闪速命令引擎322、纠错码(ECC)管理器324和闪速设备接口326。在多个示例中,闪速设备接口可包括在图2A中所示的存储器控制器端口或在图2B中所示的存储器控制器端口,而且(如与关于存储器设备的描述相类似的)这些中的每个都可以与存储器控制器310的各自的引脚相关联。为了方便描述,在图4中没有明确地示出闪速控制器310的所有引脚,这些引脚被表示为所标记的闪速设备接口326。
仍参考图4,所示闪速控制器310包括主机接口控制器332和主机接口334。CPU312、存储器314、闪速命令引擎322和主机接口控制器332通过公用总线330连接。主机接口334用于通过总线、连接链路、接口等(例如,高技术配置(ATA)、并行ATA(PATA)、串行ATA(SATA)、通用串行总线(USB)、PCI快速接口(PCIe))连接到外部设备。主机接口334由主机接口控制器332控制。所示示例的CPU312运行存储在ROM318中的指令,且所处理数据存储在RAM316中。闪速命令引擎322解释命令,且闪速控制器310通过闪速设备接口326控制闪速设备的操作。此外,在一些示例中,闪速命令引擎322产生去往存储器设备(memorydevice-destined)的包。ECC管理器324在诸如产生编程数据错误码和检查读取数据错误码和纠正读取数据及其它可能功能中产生纠错码(ECC)来确认某些命令被成功且完整地执行。ECC管理器根据下面接下来较详细描述的示例实施例启用错误检测和纠正。
现在,如果在命令包中发生传输错误,用于处理错误的一种方法是控制器310通过比较所接收的包和原始传输的包来检测错误。和总线拓扑相比,这是环形拓扑的有用特征,在总线拓扑中不存在控制器检测存储器设备是否正确接收命令的固有机制。但是,即使在环形拓扑中具有该错误检测方法,在错误被检测出来后才纠正错误也太晚了。例如,如果命令包是编程或者擦除命令,且错误发生在一个地址位(任意一个设备地址,块地址或者页面地址),当控制器检测到错误时编程或擦除操作可能已经开始了,当错的地址被重写或擦除,数据可能不可挽回地丢失了。另一种潜在不可恢复的错误是当非编程或非擦除命令作为编程或擦除命令而被错误地接收。一般来说,错误的读命令不是问题,这是由于控制器只要请求另外的读操作并放弃不希望的数据就可以了。
一般来说,和写入存储器阵列或从存储器阵列读出的数据中的错误相比,人们更关心命令中的错误。存在许多用于在数据中嵌入错误检测和纠正码的方案。一些数据较重要且可以具有较健壮的纠错方案,这些方案一般具有较高的开销和较大的性能影响。系统设计者能够确定所需的稳健度水平。至少一些示例实施例所解决的问题涉及命令、地址和寄存器写字段中的错误。这些错误不能通过读和写数据中的错误检测和纠正码来解决。可能发生许多形式的命令、地址和寄存器写错误。一般来说,无意的读不是问题,这是由于在无意的读中,数据可被忽略,且控制器310可重发命令。对忙的存储体的页面读就会被忽略掉。错误可能发生在环中目标设备之前或者该设备之后的某处。下面的表1详细描述了依赖于位置的错误的影响
表1:可能的重大单个位错误情况
参考图3和4,可检查目标设备200是否有错误如果检测到错误则中止命令。根据至少一个示例实施例,每个去往存储器设备的命令包还附加了另外的错误码字节,该去往存储器设备的命令包由闪速命令引擎322来产生。在一些实施例中,目标设备截短该包以节省该环中的能量。截短读包,或命令和编程数据的组合包的数据部分不存在问题。但是,包的命令部分加上该另外的错误码字节不应该由环中的设备截取,使得控制器310能够检查整个包的错误。如果检测到错误,则控制器310能够读存储器设备的设备状态寄存器249,来确定环中的设备是否也检测到错误以及该命令是否已被执行。根据一些示例,目标设备将基于所接收的命令字节计算错误码并且将结果与所接收的错误码字节相比较,该目标设备是对应于包的第一字节中设备ID字段的设备200。如果存在区别,则将不执行该命令,并且在状态寄存器249中设置传输错误标记。替代地,如果错误码支持纠错,设备200将纠正该错误并且执行该命令。对于错误检测码,存在许多设想的可能性,例如,循环冗余码(CRC)、博斯-乔赫里-霍克文黑姆(BCH-Bose-Chaudhuri-Hocquenghem)码、里德所罗门(RS-Reed-Solomon)码;但是根据至少一个示例实施例,使用了海明码,其允许识别单个位的错误的位置,能够检测所有的双位错误。下面的表2详细描述了具有附加的错误码字节的示例的7字节命令包的位。
|
位7 |
位6 |
位5 |
位4 |
位3 |
位2 |
位1 |
位0 |
字节0 |
D12 |
D11 |
D10 |
D9 |
D7 |
D6 |
D5 |
D3 |
字节1 |
D21 |
D20 |
D19 |
D18 |
D17 |
D15 |
D14 |
D13 |
字节2 |
D29 |
D28 |
D27 |
D26 |
D25 |
D24 |
D23 |
D22 |
字节3 |
D38 |
D37 |
D36 |
D35 |
D34 |
D33 |
D31 |
D30 |
字节4 |
D46 |
D45 |
D44 |
D43 |
D42 |
D41 |
D40 |
D39 |
字节5 |
D54 |
D53 |
D52 |
D51 |
D50 |
D49 |
D48 |
D47 |
字节6 |
D62 |
D61 |
D60 |
D59 |
D58 |
D57 |
D56 |
D55 |
字节7 |
P0 |
P64 |
P32 |
P16 |
P8 |
P4 |
P2 |
P1 |
D0-D62-数据有效载荷位
P0-P64-奇偶校验位
表2:具有附加的错误码字节的示例的7字节命令包
由于知道单个位的错误的位置,所以可纠正单个位错误。此外,可以检测双位错误,但不能纠正。此类代码被称为单错纠正、双错检测(SECDED)码。
因此,海明码提供了单个位的错误纠正和双位检测。表2示出的7字节有效载荷可以覆盖先前提到的美国公开专利申请No.2008/0049505 A1和2008/0052449 A1的所有教导。然而,8位海明码足以覆盖15字节有效载荷,允许未来扩展到更大的可能的命令设置。对于小于7字节的命令包,不存在的数据位可被假设为零。如图5所示来计算奇偶校验位。
如果对于所接收的数据有效载荷位所计算的奇偶校验位与所接收的奇偶校验位不同,则该不同指出存在错误的数据位。例如,如果D3被错误地接收,所计算的奇偶校验位P0、P1和P2将与所接收的奇偶校验位不同。如果7位二进制字中在各自的奇偶校验位P64、P32、P16、P8、P4、P2、P1不同时具有“1”,在它们相同时具有“0”,即该7位二进制字0、0、0、0、0、1、1指出单个位错误发生在D3。如果在有效载荷中存在单个错误,则P0总不同。如果在字中存在单个“1”(即仅一个所计算的奇偶校验位与所接收的奇偶校验位不同),其指示奇偶校验位中的错误。如果所计算的奇偶校验位P0与所接收的P0相同,且其它奇偶校验位中至少一位不同,则在包中存在双错误,其不能被纠正。
根据一些示例实施例,状态寄存器249(图3)包括用于指示发生命令包错误的附加位。
在一个示例中,具有点到点环形拓扑的系统的一个或多个存储器设备的每一个是包括4个体的存储器设备。在这样的示例中,存在状态寄存器的完全占用的字节,对于每个存储体其包括准备好(ready)/忙标记和成功/失败标记。因此,如下面的表3所示,增加附加的字节:
|
位7 |
位6 |
位5 |
位4 |
位3 |
位2 |
位1 |
位0 |
字节0 |
P/F3 |
R/B3 |
P/F2 |
R/B2 |
P/F1 |
R/B1 |
P/F0 |
R/B0 |
字节1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
ERR |
R/Bn-用于存储体n的准备好/忙标志(“0”-准备好,“1”-忙)
P/Fn-用于存储体n的成功/失败标志(“0”-成功,“1”-失败)
ERR-命令包错误标志(“0”-无错,“1”-检测到错误且未执行命令)
表3:根据示例实施例的状态寄存器定义,和支持命令包失败标志的状态寄存器定义
用于上述示例实施例的ERR标志是持续(persistent)的。其将保持“1”直到接收到读状态寄存器命令,之后其将被清零。
如果设备支持单个位纠错,可以使用下面表4中所示的状态寄存器格式:
|
位7 |
位6 |
位5 |
位4 |
位3 |
位2 |
位1 |
位0 |
字节0 |
P/F3 |
R/B3 |
P/F2 |
R/B2 |
P/F1 |
R/B1 |
P/F0 |
R/B0 |
字节1 |
0 |
0 |
0 |
0 |
0 |
0 |
ERR2 |
ERR1 |
R/Bn-用于存储体n的准备好/忙标志(“0”-准备,“1”-忙)
P/Fn-用于存储体n的成功/失败标志(“0”-成功,“1”-失败)
ERR1-命令包单个位错误标志(“0”-无错,“1”-检测出并纠正了单个位错误)
ERR2-命令包双位错误标志(“0”-无错或单个位错误,“1”-检测到双位错误且未执行命令)
表4:根据另一示例实施例的状态寄存器定义,支持命令包失败标志和单个位纠错的状态寄存器定义
可以理解,上述状态寄存器的实施细节会在不同示例存储器中改变,。例如,对于具有少于4个存储体的那些存储器,使用单字节状态寄存器为一种设想的可能。同样,特别是对于具有多于4个存储体的存储器,使用多于2字节状态寄存器为一种设想的可能。另外,直到接收到状态读命令,状态位可以不变,或者在接收到任意随后有效命令时可以被清零。
根据至少一个示例实施例,控制器310(图4)可以通过如在存储器设备中一样来重新计算奇偶校验位或者通过仅将所传输的命令包的每个字与所接收的包的每个字相比较来确定已经发生了命令包错误。后者的方法和前者的方法的不同在于后者的方法可以识别多位错误。如果检测到错误,控制器310应确定错误是在目标设备之前还是之后发生。控制器310将发出状态寄存器读命令到目标设备200(图3)以读状态寄存器249。替代地,在设备地址字段错误的情况下,控制器310应发出状态寄存器读命令到错误地认为其是该命令包的预期接收者的设备(此后被称为错误寻址设备)以确定错误标志的状态。
图6以流程图的形式示出了根据示例实施例的方法500。最初,在动作501,在命令包在环中循环之后控制器接收到该命令包,且控制器在动作503检查错误。如果不存在错误,则无需再采用与所示方法有关的动作;但是如果至少存在一个错误,则进行动作504。
在动作504,确定在ID字段是否发生错误。如果在ID字段没有发生错误,则进行动作509(之后会在此说明书中描述动作509)。如果在ID字段发生错误,则进行动作506。在动作506,控制器310(图4)将状态读命令发到错误寻址设备,其及时地使错误寻址设备的状态寄存器被读取,并且将状态寄存器的持续错误位指示清零。接下来,在动作507,控制器接收错误寻址设备字节。
动作507之后是动作509。在动作509,读取目标设备的寄存器,并且如在下一个动作510中所示的,控制器310(图4)从环中的最后的设备接收目标设备的错误字节(例如,先前表3中所示的“字节1”)。该动作将目标设备中的持续错误位指示清零。在一些示例中,经由闪速设备接口326将该错误字节提供给ECC管理器324。接下来,在动作520,ECC管理器324确定错误字节的ERR位是“0”还是“1”。如果ERR位是“0”,意味着目标设备正确地接收了该命令,而且该错误发生在环中目标设备之后的某处。在这种情况下,无需重发该命令。如果ERR位是“1”,意味着错误发生在目标设备之前的某处。在这种情况下,重发该命令(动作530)。本领域的普通技术人员可以理解,闪速命令引擎322在CPU312的指令下可导致对该命令的重发。
在一些示例实施例中,环中的每个设备对命令包检查错误,并且恰当地设置错误标记。然后,控制器310(图4)检查环中的每个设备的状态寄存器249(图3),来确定在哪一点发生了错误以及目标设备是否接收和执行了该命令。另外的方法将使用广播状态读命令,而不是将单个的状态寄存器命令发送到环中的每个设备。与先前提及的美国公开专利申请No.2008/0049505 A1相一致,存在专用设备地址,例如“11111111”,其被认为是广播设备地址。在广播设备地址的情况下,无需与本地装置ID的常规比较。
图7是示出根据示例实施例一广播状态读命令的操作的时序图。在时序图中,用例如信号图示D0、Q0/D1、Q1/D2表示多个设备,以提供关于在环中多个设备中通信的广播状态读命令的性质的清楚说明性的细节。
根据图7所示示例实施例,设备0在D0接收2字节广播读状态命令,其被描绘为CSIO信号。几个时钟周期后,其接收数据选通信号DSI0,该信号DSI0指示状态寄存器的内容将在Q0上输出。设备0将输出数据选通DSO0延长一个时钟周期,并且在DSO0选通的所延长部分指示的时隙内在Q0上输出2字节状态寄存器数据。这样,数据选通脉冲的长度随环中的每个设备而增加,以提供来自环中的每个设备的一组(burst)状态信息。该命令对于当所有设备检查命令包的错误时确定环中哪里发生了命令包的错误是有用的。这在常规操作中用于检查在不同存储器设备中同时发生的若干读、编程和擦除操作的状态也是有用的。
已经描述了每个设备具有等长的2字节状态寄存器的广播状态读操作。该技术也可用于具有不同状态寄存器长度的设备。在环初始化时,控制器读每个设备的设备信息寄存器并且确定每个设备的状态寄存器的长度。在广播寄存器读操作期间,每个设备不管其状态寄存器信息的长度多长,还在脉冲串上附加了该状态寄存器信息,并延长了输出数据选通以包括该附加的信息。在接收整串的状态信息时,控制器知道每个设备期望的字节数量,并且可以分割该信息。
如所述的支持错误检测和/或纠正的存储器设备可编程使得该该错误检测和/或纠正被禁用。例如,在复位时,存储器设备可以禁止错误检测和纠正。如果控制器希望采用错误检测和/或纠正,其可例如在每个存储器设备的控制寄存器中写一个或多个位,来启动这些功能。如果控制器禁止这些功能,每个命令包尾部附加的奇偶校验位可被清除来节省一个总线时隙,或者可被载入将被该存储器设备忽略的空数据。这样,低成本系统并非必须支持错误纠正和/或检测,但是除了那些要求命令包错误检测和/或纠正的系统之外,普通存储器设备可用于低成本系统。
在一些示例中,提供了类似于先前所描述方案的错误检测和纠正方案,这应用于读和写数据。在此附加方案的具体实施方式中,对与命令包所采用的相同的奇偶校验检查逻辑电路可用于节约芯片面积和复杂度。下面的表5详细描述了具有命令奇偶校验字节和数据奇偶校验字节的示例写数据包。
字节0 |
设备ID |
字节1 |
命令 |
字节2 |
列地址 |
字节3 |
列地址 |
字节4 |
命令奇偶校验 |
字节5 |
写数据 |
字节6 |
写数据 |
字节7 |
写数据 |
字节8 |
写数据奇偶校验 |
表5:具有命令奇偶校验字节和数据奇偶校验字节的示例写数据包
在表5的示例中,字节0至4包括命令部分,且功能如前面所述。可大至整个页面大小的任意数量的写数据字节可以在该命令部分之后。该包中的最后的字节是写数据字节所需要的写数据奇偶校验字节。如果使用前面所描述的相同SECDED海明码,将仅提供覆盖达到15字节的单错纠正。在15字节之后,奇偶校验公式(equation)就绕回了且不再实现单个位的错误纠正。替代地,可以选择用于大数据包的具有较好错误覆盖的更稳健的CRC码。在状态寄存器中可提供用于命令和数据的分开的错误检测位。
关于读数据奇偶校验位,可以以类似方式实现。在读来自内部存储器阵列的数据时,存储器设备计算奇偶校验字节以附加在读数据包的尾部。控制器通过控制数据选通信号的长度来确定要读取的字节数。当存储器设备检测到终止读数据组的数据选通信号的下降沿,该存储器设备输出累积的奇偶校验字节。在接收读数据时,控制器执行同样的奇偶校验计算并且将结果与所接收的、附加在读数据组的尾部的奇偶校验字节相比较以确定是否存在位错误。对于寄存器读命令,例如状态寄存器读命令,由于用户没有办法在寄存器数据上叠加纠错码,所以这是尤其有用的。对于从存储器阵列读数据和往存储器阵列写数据,用户可选择合适的错误检测码来与数据存储在一起。
虽然这里示出和描述的关于系统的一些示例实施例具有点到点的环形拓扑,由于在系统的控制器设备和系统的多个半导体存储器设备之间存在串行互连配置,所以可以理解对于例如其特征在于多点系统的其他类型的系统还存在一些替代的示例实施例。
还可以有其他变化。例如,在类似于先前结合表3和4描述的4存储体存储器设备示例的另一个示例中,具有点到点环形拓扑的系统的一个或多个存储器设备的每一个是包括桥接设备和4个分立的存储器设备的复合存储器。(关于所构想的复合存储器的进一步细节,参考名称为“AComposite Memory Having a Bridging Device for Connecting DiscreteMemory Devices to a System”的美国专利申请No.12/401,963,通过引用将其全部内容包含在此。)在这样的示例中,状态寄存器可以在桥接设备内。
数个示例实施例可被应用于任意适合的固态存储器系统,例如,包括NAND闪速EEPROM设备、NOR闪速EEPROM设备、AND闪速EEPROM设备、DiNOR闪速EEPROM设备、串行闪速EEPROM设备、DRAM设备、SRAM设备、铁电RAM设备、磁性RAM设备、相变RAM设备或这些设备的任意组合的固态存储器系统。这些技术还可应用于在环形或者其它互连拓扑上通信的存储器和非存储器设备,无论是组织为单总线主控和多从设备或者多总线主控配置。
可以理解,当这里称元件“连接”或者“耦合”到另外的元件,其可以是直接连接或者耦合到其它元件或者存在中间元件。相反地,当这里称元件“直接连接”或者“直接耦合”到另外的元件,则不存在中间元件。用于描述元件间关系的其它词语也以类似方式解释(即,“在......之间”对“直接在......之间”、“相邻”对“直接相邻”等)。
能够对所描述的实施例进行一定的适应性改变和修改。因此,上面所讨论的实施例应被认为是说明性的而非限制性的。