[go: up one dir, main page]

CN102473126A - 提供闪存系统中的读状态和空闲块管理信息的控制器和方法 - Google Patents

提供闪存系统中的读状态和空闲块管理信息的控制器和方法 Download PDF

Info

Publication number
CN102473126A
CN102473126A CN2010800358558A CN201080035855A CN102473126A CN 102473126 A CN102473126 A CN 102473126A CN 2010800358558 A CN2010800358558 A CN 2010800358558A CN 201080035855 A CN201080035855 A CN 201080035855A CN 102473126 A CN102473126 A CN 102473126A
Authority
CN
China
Prior art keywords
controller
data
host
memory device
interface
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN2010800358558A
Other languages
English (en)
Inventor
R.D.塞林格
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
SanDisk Corp
Original Assignee
SanDisk Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by SanDisk Corp filed Critical SanDisk Corp
Publication of CN102473126A publication Critical patent/CN102473126A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0238Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
    • G06F12/0246Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C29/00Checking stores for correct operation ; Subsequent repair; Testing stores during standby or offline operation
    • G11C29/70Masking faults in memories by using spares or by reconfiguring
    • G11C29/76Masking faults in memories by using spares or by reconfiguring using address translation or modifications
    • G11C29/765Masking faults in memories by using spares or by reconfiguring using address translation or modifications in solid state disks
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C29/00Checking stores for correct operation ; Subsequent repair; Testing stores during standby or offline operation
    • G11C29/70Masking faults in memories by using spares or by reconfiguring
    • G11C29/78Masking faults in memories by using spares or by reconfiguring using programmable devices
    • G11C29/80Masking faults in memories by using spares or by reconfiguring using programmable devices with improved layout
    • G11C29/816Masking faults in memories by using spares or by reconfiguring using programmable devices with improved layout for an application-specific layout
    • G11C29/82Masking faults in memories by using spares or by reconfiguring using programmable devices with improved layout for an application-specific layout for EEPROMs
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C29/00Checking stores for correct operation ; Subsequent repair; Testing stores during standby or offline operation
    • G11C29/04Detection or location of defective memory elements, e.g. cell constructio details, timing of test signals
    • G11C2029/0411Online error correction

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Quality & Reliability (AREA)
  • Techniques For Improving Reliability Of Storages (AREA)
  • Read Only Memory (AREA)

Abstract

本文描述的实施例提供了用于提供闪存系统中的状态和空闲块管理信息以及用于与主机协作地管理空闲块分配的控制器和方法。在一个实施例中,控制器从主机接收命令,从闪存取回数据,并且针对错误分析取回的数据,并将状态信息传输到主机,其中该状态信息包括基于错误分析的结果的信息,比如读错误。或者,控制器存储状态信息并向主机传输标识关于错误的状态信息在存储器中可获得的错误指示符。在另一实施例中,控制器可重新选择地被初始化为多个空闲块管理模式之一,其中在分割管理模式下,控制器可以要求主机返回对主机可用的额外的块。

Description

提供闪存系统中的读状态和空闲块管理信息的控制器和方法
技术领域
背景技术
NAND闪存器件通常由诸如个人计算机的主机用来存储数据。在许多架构中,NAND控制器用于促进主机和NAND闪存器件之间的通信。在一些控制器架构中,NAND控制器使用NAND接口与NAND闪存器件交互,并且使用标准的非NAND接口、比如USB或者SATA与主机交互。在这样的系统中,主机可以产生纠错码(error correction code,ECC)以针对传输错误以及存储错误进行保护。或者,控制器可以产生ECC,主机可以产生错误检测码(error detection code,EDC)来保护数据免于可能在主机和控制器之间的非NAND接口上发生的传输错误。“NAND Flash Memory Controller Exporting aNAND Interface”的美国专利号11/326,336(公开为美国专利公开号US2007/0074093)公开了向主机输出NAND接口的控制器,其通过参考合并于此。以此方式,控制器向主机输出由标准NAND闪存器件输出到主机的相同类型的接口。该控制器还可以用于产生ECC以保护要被存储在NAND闪存器件中的数据或者向已经受主机产生的ECC保护的数据提供另外的保护。
发明内容
以下所述的实施例提供了用于提供闪存系统中的状态和空闲块管理信息以及用于与主机协作来管理空闲块分配的控制器和方法。在一个实施例中,控制器从主机接收命令,从闪存取回数据,并且针对错误分析取回的数据,并将状态信息传输到主机,其中该状态信息包括基于错误分析的结果的信息,比如读错误。或者,控制器存储状态信息并向主机传输标识关于错误的状态信息在存储器中可获得的错误指示符。在另一实施例中,控制器可重新选择地被初始化为多个空闲块管理模式之一,其中在分割管理模式下,控制器可以要求主机返回对主机可用的额外的块。
公开了其他实施例,这些实施例的每个可以单独使用或者组合在一起使用。现在将参考附图描述各实施例。
附图说明
图1是包括控制器、主机和一个或多个闪存器件的实施例的系统的框图。
图2A、2B和2C是实施例的控制器和闪存器件的不同布置的框图。
图3是实施例的示例控制器的框图。
图4是用于向闪存器件写数据以及从闪存器件读数据的实施例的控制器的框图。
图5是使用实施例的控制器在闪存器件中写数据的方法的流程图。
图6是使用实施例的控制器从闪存器件读数据的方法的流程图。
图7例示被配置用于提供读状态和空闲块管理控制的实施例的控制器布置。
图8A、8B、8C和8D是可以由图7的控制器产生的数据消息格式的例子。
图9是可用于在图8C的数据消息格式中使用的数据字段的实施例。
图10是用于使用图7的控制器向主机提供状态信息的实施例的方法的流程图。
图11是例示使用图7的控制器管理空闲块的一个实施例的流程图。
图12A和12B是示例闪存器件内的好的、坏的以及空闲块区域的例示。
图13A-D是实施例的示例控制器的框图。
具体实施方式
介绍
以下实施例针对闪存控制器以及使用其的方法。在一个实施例中,提供了用于在主机中的主机控制器和闪存器件之间接口的控制器和方法。在另一实施例中,公开了使用纠错码检测经过NAND接口的传输错误的控制器和方法。在另一实施例中,公开了用于提供读状态和空闲块管理信息的控制器和方法。应该注意,这些实施例中的任意一个可以单独或以各种组合使用。在转向这些以及其他实施例之前,提供示例控制器架构的一般概况以及NAND接口和NAND接口协议的讨论。
示例的控制器架构
现在转向附图,图1是其中控制器100通过第一接口125与(具有主机控制器121的)主机120通信并通过一个或多个第二接口135与一个或多个闪存器件130通信的实施例的系统。(第二接口135的数量可以与闪存器件130的数量相匹配,或者第二接口135的数量可以多于或少于闪存器件130的数量(例如单个第二接口135可以支持多个闪存器件)。)如在此使用的,短语“与……通信”意味着直接与之通信或者通过一个或多个组件——其可能有或者可能没有在此示出或描述——间接与之通信。
“主机”是能够直接地或者通过在此指出或未指出的一个或多个组件间接地通过控制器100存取一个或多个闪存器件130的任意实体。主机可以呈现任何适当的形式,比如但不限于个人计算机、移动电话、游戏设备、个人数字助理(PDA)、电子邮件/文本传信(messaging)设备、数字相机、数字媒体(例如MP3)播放器、GPS导航设备、个人导航系统(PND)、移动互联网设备(MID)以及TV系统。取决于应用,主机120可以呈现硬件设备、软件应用或者硬件和软件的组合的形式。
“闪存器件”指包含多个闪存单元以及用于在闪存单元内存储数据的任意所需的控制电路的器件。在一个实施例中,闪存单元是NAND存储器单元,尽管可以使用其他存储其技术,比如无源元件阵列,包括一次可编程存储器元件和/或可重写存储器元件。(应该注意,在这些实施例中,非NAND闪存器件仍可以使用NAND接口和/或NAND命令和协议。)无源元件阵列的一个例子是三维存储器阵列。如在此使用的,三维存储器阵列指的包括在单个硅基板上彼此垂直地堆叠的多层存储器单元的存储器阵列。以此方式,三维存储器阵列是单片集成电路结构,而不是彼此紧密靠近地封装或晶片接合的多个集成电路。尽管三维存储器阵列是优选的,但是替代地,存储器阵列可以采取二维(平面)阵列的形式。通过参考合并于此的以下专利文献描述三维存储器阵列的适当配置,其中三维存储器阵列被配置为多级,在各级之间共享字线和/或位线:美国专利号6,034,882、6,185,122、6,420,215、6,631,085和7,081,377。此外,闪存器件130可以是单个存储器晶片或者多个存储器晶片。因而,权利要求中使用的短语“闪存器件”可以指仅一个闪存器件或者多于一个闪存器件。
如图1中所示,控制器100还包括控制模块140,用于控制控制器100的操作以及基于从主机120接收的命令(例如读、写、擦除等)和地址进行存储器操作。如在此使用的,“模块”可以包括硬件、软件、固件或其任意组合。例如,“模块”可以采取的形式的例子包括但不限于微处理器或处理器以及存储由(微)处理器执行的计算机可读程序代码(例如软件或固件)的计算机可读介质、逻辑门、开关、专用集成电路(ASIC)、可编程逻辑控制器和嵌入的微控制器中的一个或多个。(以下部分提供了“模块”可以采取的各种形式的例子。)如图1中所示,控制器100可以包括一个或多个另外的模块150,用于提供其他功能性,包括但不限于数据加扰、列替换、(经由安全区)处理写异常中止和/或编程故障、读清洗(scrubbing)、磨损均衡、坏块和/或空闲块管理、纠错码(ECC)功能性、错误检测码(EDC)功能性、状态功能性、加密功能性、错误恢复和地址映射(例如逻辑到物理块的映射)。以下部分提供了关于这些功能的更多细节以及其他功能的另外的例子。
尽管控制器100和闪存器件130在图1中被示出为两个单独的框,但是应该理解,控制器100和闪存器件130可以按任何适当的方式布置。图2A、2B和2C是例示控制器和闪存器件的不同布置的框图。在图2A中,控制器200和闪存器件230被包装在不同的包装260、270中。在此实施例中,晶片间接口可以在控制器200和闪存器件230之间接口。如在此使用的,“晶片间接口”(例如晶片间NAND接口)可操作以在存在于不同晶片上的电子电路的两个不同的单元之间接口(例如以提供所需的物理和逻辑构造用于不同单元的电子电路例如使用一个或多个专门的协议彼此通信)。因此,晶片间接口包括用于在存在于分离的晶片上的电子电路的两个不同单元之间接口所需的物理元件(例如垫、输出、输入驱动器等)。
在图2B中,控制器200和闪存器件230两者均存在于公共的多芯片包装280内。在此实施例中,晶片间接口可以在制造于在公共的多芯片包装280中包装的两个不同的晶片上的控制器200和闪存器件230之间接口。在图2C中,控制器200和闪存器件230被集成在相同的晶片290上。作为另一替换,控制器200和/或闪存器件230可以被制造在两个不同的晶片上,其中这两个晶片之一或两者根本不具有包装。例如,在许多应用中,由于需要节约空间,存储器晶片被安装在电路板上而根本没有包装。
应该注意,在这些布置的每个中,控制器200物理上与主机分离地布置。这允许控制器200和闪存器件230被认为是单独的电路单元,其可以用在各种主机中。
如上参考图1所述,控制器100使用第一接口125与主机120通信,并使用第二接口135与闪存器件130通信。通常,第一和第二接口125、135可以采取任何适当的形式。但是,在将在以下结合图3描述的当前优选的实施例中,第一和第二接口125、135两者是使用NAND接口协议的NAND接口。在转向图3之前,以下部分提供了对NAND接口和NAND接口协议的一般讨论。
NAND接口和NAND接口协议
NAND接口协议用于使用例如数据线和诸如ALE(地址锁存启用)、CLE(命令锁存启用)和WE#(写启用)的控制信号来协调NAND闪存器件和主机之间的命令和数据传送。即使措辞“NAND接口协议”目前为止在形式上还未被标准化主体标准化,但是NAND闪存器件的制造商全部都遵循支持NAND闪存功能性的基本子集的非常类似的协议。这样做使得在其电子产品内使用NAND器件的消费者可以使用来自任意制造商的NAND器件而无需调整其硬件或软件用于与专门厂商的器件一起工作。应该注意,即使提供了超过该功能性基本子集的额外功能性的NAND厂商也至少某种程度上确保提供基本功能性以便提供与其他厂商使用的协议的兼容性。
如果给出的器件(例如控制器、闪存器件、主机等)包括支持NAND接口协议所需的元件(例如硬件、软件、固件或其任意组合)(例如用于使用NAND接口协议与另一器件交互),则给出的器件被描述为包括、包含或具有“NAND接口”。(如在此使用的,措辞“接口”可以指单个接口或者多个接口。因而,权利要求中的措辞“接口”可以指仅一个接口或者多于一个接口。)在本申请中,措辞“NAND接口协议”(或者简称的“NAND接口”)指发起设备和响应设备之间的接口协议,其一般遵循主机和NAND闪存器件之间的用于基本的读、写和擦除操作的协议,即使其并不完全与所有定时参数兼容或者关于NAND器件支持的其他命令并不完全兼容,或者包含NAND器件不支持的另外的命令。NAND接口协议的一个适当的例子是使用在功能性上等效于用于读(操作码00H)、写(操作码80H)和擦除(操作码60H)的当与Toshiba TC58NVG1S3B NAND器件(或者Toshiba TC58NVG2D4B NAND器件)接口时使用的字节的序列的传送的字节的序列,并且还使用在功能性上等效于以上NAND器件的CLE、ALE、CE、WE和RE信号的控制信号的接口协议。
要注意,NAND接口协议不对称,在于主机——不是闪存器件——发起通过NAND接口的交互。此外,给定的器件(例如控制器)的接口(例如NAND接口或者与另一协议相关联的接口)可以是“主机侧接口”(例如给定的器件被适配为使用主机侧交口与主机交互)或者给定器件的接口可以是“闪存器件侧接口”(例如给定器件被适配为使用闪存器件侧接口与闪存器件交互)。措辞“闪存器件侧接口”、“快闪器件侧接口”和“快闪侧接口”在此可互换地使用。
这些措辞(即“主机侧接口”和“快闪器件侧接口”)不应与措辞“主机类型接口”和“快闪类型接口”混淆,在此术语上使用它们来在两侧的NAND接口协议之间区分,因为此协议不是对称的。此外,因为发起交互的是主机,我们注意到如果给定器件包括实现主机侧的NAND接口协议(即用于呈现NAND主机和发起NAND协议交互)所需的硬件和/或软件,则该器件被描述为具有“主机类型接口”。类似地,因为快闪器件不发起交互,我们注意到如果给定器件包括用于实现快闪侧NAND协议(即用于呈现NAND快闪器件)所需的硬件和/或软件,则该器件被描述为具有“快闪类型接口”。
通常,主机类型接口(即,担当主机的角色的接口)是“快闪器件侧接口”(即它们与快闪器件或者与模拟快闪器件的硬件交互),而“快闪器件类型接口”(即担当快闪器件的角色的接口)通常是“主机侧接口”(即,它们与主机或者与模拟主机的硬件交互)。
由于NAND器件的复杂性,在电子系统中“NAND控制器”可以用于控制NAND器件的使用。能够直接由主机而没有中间的NAND控制器来操作和使用NAND器件;但是,这样的架构存在许多缺点。首先,主机需要单独操纵NAND器件的控制信号的每一个(例如CLE或者ALE),这对主机来说是麻烦和耗时的。其次,对纠错码(ECC)的支持为主机带来负担。至少因为这些原因,“无控制器”架构通常相对缓慢和低效。
在一些传统的控制器架构中,NAND控制器使用NAND接口与闪存器件交互并使用标准的非NAND接口、比如USB或者SATA与主机交互。也就是说,在这些传统的控制器架构中,NAND控制器不向主机输出NAND接口。确实,这样预期是合理的,因为不具有内置NAND支持性并且为此目的需要外部控制器的主机处理器通常不具有NAND接口,并且不能直接连接到输出NAND接口的设备,因此没有使用具有主机侧NAND接口的控制器。另一方面,具有内置的NAND支持性的处理器通常还包括内置的NAND控制器,并且可以直接连接到NAND器件,因此无需外部NAND控制器。
通过参考合并于此的“NAND Flash Memory Controller Exporting a NANDInterface”的美国专利号11/326,336(公开为美国专利公开号US2007/0074093)公开了新的类型的NAND控制器,其特征在于其向主机侧输出的接口是NAND接口的事实。以此方式,NAND接口向主机输出由标准NAND闪存器件输出的相同类型的接口。优选该控制器还具有在闪存器件侧的NAND接口,其中该控制器对于NAND闪存器件担当主机的角色,并且对于主机担当NAND器件的角色。
输出NAND接口的示例NAND闪存控制器
回到附图,图3是实施例的示例控制器200的框图。如图3所示,控制器300包括控制模块340,用于控制控制器300的操作,以及可选地包括一个或多个另外的模块350,用于提供其他功能。其他功能的例子包括但不限于数据加扰、列替换、(经由安全区)处理写异常中止和/或编程故障、读清洗、磨损均衡、坏块和/或空闲块管理、纠错码(ECC)功能性、错误检测码(EDC)功能性、状态功能性、加密功能性、错误恢复和地址映射(例如逻辑到物理块的映射)。以下段落描述了这些功能中的一些,并且此文档稍后的部分描述其他这些功能。
“数据加扰”或“加扰”是输入位序列到输出位序列的可逆变换,使得输出位序列的每位是输入位序列和辅助位序列的几位的函数。存储在闪存器件中的数据可以被加扰以便通过创建更随机化的数据样式而减少依赖于数据样式的敏感性、干扰影响或错误。可以在以下专利文献:美国专利申请号11/808,906、12/209,697、12/251,820、12/165,141和11/876,789以及PCT申请号PCT/US08/88625中找到关于数据加扰的更多信息。
“列替换”指映射或替换整个坏的列、列的部分或甚至个别单元的各种实现方式。可以在美国专利号7,379,330和7,447,066中找到适当类型的列替换技术。
在向闪存器件写数据时存在几个潜在的问题,其中在数据试图被写到的位置之外逻辑或物理上相邻的数据可能损坏。一个例子是如下时刻,向存储器的一个区域(例如单元、页或块)的写失败,并且某些周围的存储器的内容可能损坏。这被称为“编程故障”或者“编程干扰”。已知为“写异常中止(write abort)”的类似的效果是当写操作被过早地终止时,例如当非预期地断电时。在这两种情况下,存在可以用于积极主动地将数据从“有风险区”复制到“安全区”以处理写异常中止和编程故障的算法,如美国专利号6,988,175中所述。
“读清洗”或者更普遍地“清洗”指刷新和校正存储在闪存器件中的数据以补偿干扰的技术。清洗操作需要读在可能已经面临潜在干扰信号的区域中的数据和如果此数据被确定为已经被干扰进行某些校正的动作。在美国专利号7,012,835、7,224,607和7,477,547中进一步描述了读清洗。
闪存器件可能被不均匀地写入,并且“磨损均衡”指试图使存储器在其使用期限间被写入的次数均匀的技术。在美国专利号6,230,233和6,594,183中描述了示例的磨损均衡技术。
通常,以多余数量(比定义的最小容量更大)的块制造闪存器件。在工厂测试期间或者在器件的使用期间,某些块可能被发现是“坏的”或者“有缺陷的”,意味着它们不能正确地存储数据并需要被替换。类似地,可能存在多余的“好的”块(比定义的最小容量更大),它们可以被用作“空闲的”,直到另一块故障或者变为有缺陷。保持跟踪这些额外的块分别被称为坏块管理和空闲块管理。可以在美国专利号7,171,536中找到关于坏块和空闲块管理的更多信息。
如上所述,在此文档中稍后提供关于这些不同的功能模块以及它们在示例的控制器架构中如何使用的另外的信息。
回到附图,还如图3所示,控制器300包括一个或多个闪存器件侧NAND接口335,用于与一个或多个NAND快闪器件330(例如1-8个存储器晶片)接口。此外,注意到,闪存器件侧NAND接口335也是主机类型NAND接口(即,其被适配为发起经过NAND接口的交互并向NAND快闪器件330呈现主机)。控制器300还包括主机侧NAND接口325,用于接口到支持NAND接口协议的(具有主机控制器321的)主机320。该主机侧NAND接口325也是闪存类型NAND接口(例如,控制器300被适配为向主机320呈现NAND闪存存储器件)。NAND接口的例子包括但不限于开放NAND快闪接口(ONFI)、触发(toggle)模式(TM)和高性能闪存接口,比如在美国专利号7,366,029中描述的,其通过参考合并于此。控制器300可选地可以包括一个或多个另外的主机侧接口,用于将控制器300接口到使用非NAND接口比如SD、USB、SATA或MMC接口的主机。此外,接口325、335可以使用相同或不同的NAND接口协议。
应该注意,控制器300和闪存器件330可以用在任何期望的系统环境中。例如,在一个实现方式中,以一个或多个控制器300/闪存器件330单元制造的产品用在固态驱动器(SSD)中。作为另一例子,控制器300可以用在使用南桥控制器以接口到闪存器件的OEM设计中。
存在使用向主机输出NAND接口的NAND闪存控制器的几个优点。为了理解这些优点,首先考虑当前控制器架构的实际情况。现今,存在两种类型的NAND接口:“原始”接口和“管理的”接口。利用原始接口,基本存储器面临像读、编程、和擦除的基本命令,,并且期望外部控制器提供诸如ECC、缺陷管理和快闪翻译的存储器管理功能。利用管理的接口,通过一些较高级的接口,管理诸如扇区/页/块或文件的逻辑项,并且控制器管理存储器管理功能。
但是,“管理”NAND所需的固件集可以被划分为两类。第一类是主要管理主机接口、对象(以及读/修改/写序列)和缓存的普通快闪软件。这被称为“主机管理”层。第二类是进行例如ECC、数据加扰和具体的错误恢复和错误阻止技术、像积极主动的读清洗和复制下页块以防止由于写异常中止、电力故障和写错误引起的数据丢失的快闪专门的管理功能性。这被称为“器件管理”层。
第一类软件相对稳定,并且可以由各个公司、包括OS厂商、芯片集和控制器厂商以及嵌入式器件厂商来提供。通常,假设存在可能想要在其设计中使用快闪的M个具体系统/OS/ASIC。第二集合是各个公司潜在私有的,甚至是专用于某些存储器设计和某些代存储器的。通常,假设存在N个不同的存储器专用设计点。现今,这对快闪管理是要么全有要么全无(all-or-nothing)的方法——购买原始NAND或者管理的NAND。这也意味着解决方案必需将M个系统和主机管理环境之一与N个存储器器件管理环境之一合并。通常,这意味着(1)具有第二种知识的快闪厂商必需提供所有层的解决方案,包括ASIC控制器和主机接口软件,并对M个不同的主机机会进行M个不同的设计,或者(2)任何独立的ASIC和固件公司少有机会不进行N个不同的设计来定制其对具体存储器设计的解决方案,或者(3)两个公司需要一起工作,潜在地暴露了有价值的商业秘密以及IP和/或为每个存储器设计实现不同的解决方案。如果M个不同的主机解决方案需要被修改以接受任何新的存储器设计,这还可能产生进入市场时间延迟,或者反之亦然。
通过使用向主机输出NAND接口的NAND闪存控制器,提供了新的逻辑接口,该新的逻辑接口使用诸如遗留异步、ONFI或TM的现有物理NAND接口和命令来创建在原始或者物理NAND以上的并且在逻辑或者管理的NAND之下的新的逻辑接口,在主机控制器中不需要ECC地来创建“虚拟的”原始NAND存储器,并且禁用主机ECC(因为主机需要0ECC来保护NAND存储器)。此新的逻辑接口还可以提供例如“低于”此接口级的数据加扰、清洗、干扰、安全区处理、磨损均衡和坏块管理(以仅暴露好的块)。
此不同的逻辑接口提供了超过标准快闪接口或者管理的NAND接口(包括ONFI块抽象化(BA)或者Toshiba LBA)的几个优点。例如,可能随着存储器类型和存储器代(例如NAND相对3D(或NOR)以及5Xnm相对4Xnm相对3Xnm)而变化的存储器专用功能的分离允许不同量的ECC、对于错误阻止和校正方案的厂商唯一和存储器唯一的方案,比如处理干扰和安全区,并允许厂商唯一的算法以在控制器和固件中保留“秘密”。另外,在此逻辑接口级,技术(和厂商)之间存在更多的共同性,这使得更迅速进入市场。此外,这允许更接近于1∶1命令操作,意味着相对管理的NAND或者其他更高级接口的改进和更可预测的性能。
存在与此控制器架构相关的另外的优点。例如,允许存储器技术相对于主机和系统的其他部分的独立的开发、测试和演进。还可以允许下一代存储器的更容易和更快速的部署,因为支持那些存储器的改变更加本地化。此外,允许存储器制造商保护用于管理原始快闪的秘密算法。此外,可以将页管理与文件系统和/或其他逻辑映射集成。因此,与标准外部接口(电和命令集)组合,此架构使得在一代代更透明的原始快闪中更容易地进行设计。
由于使用此架构,至少存在一个其他的附属收益——控制器300仅呈现为在外部接口上的单个电负荷并驱动MCP内部的原始快闪。这允许潜在地更大的系统容量而不用增加快闪信道的数量、更高速外部接口(因为更少负荷)以及对原始快闪器件的更高速内部接口(因为非常紧密地控制的内部设计(基板连接)是可能的)。
与此实施例的控制器相关的另一优点是,其可以用于通过使用潜在地处于不同速度的不同主机和存储器总线来提供“分割总线”架构(即,主机和控制器之间的总线可以不同于控制器和闪存器件之间的总线)。(如在此使用的,“总线”是具有相同接口的多个器件(例如芯片或晶片)的电连接。例如,点对点连接是两个设备之间的总线,但是大多数接口标准支持使多个设备连接到相同的电总线。)在可能潜在地具有数百个闪存器件的固态驱动器(SSD)中尤其需要这样架构。在传统的SSD架构中,当前的解决方案是将N个正常的闪存器件包装在多芯片包装(MCP)中,但是这仍然在总线上产生了N个负荷,产生了N倍的电容和电感。总线上的负荷越多,其工作得越慢。例如,一个当前的架构可以支持以1-4个器件的80MHz的操作,但是仅可以支持以8-16个器件的40MHz操作。这与期望的——如果使用更多器件,则速度更高——相反。此外,更多器件意味着需要主机和存储器MCP之间的更大的物理分离。例如,如果使用16个包装,则在任意的拓扑(topology)(例如总线或星形(或任意末端(stub))拓扑)中将延伸相对大的物理距离(例如几英寸)。这还降低了任意电接口的潜在性能。因此,为了获得例如300MHz的传输(忽略总线宽度),可以使用四条快速总线或者八条慢速总线。但是,快速总线每个仅可以支持四个闪存器件,即总共16个器件,这对于现今的大多数SSD是不够的。如果总线运行得更快,则可以降低接口连接(管脚和模拟接口)的数量以及潜在地主机中的寄存器(register)和逻辑的量。
因为此实施例中的控制器300将主机和原始闪存器件之间的互连分割为单独的主机侧接口和快闪侧接口,其之间具有缓冲器,因此主机总线具有更少的负荷,并且可以2到4倍更快地运行。此外,因为存储器总线是MCP内部的,因此由于短距离以及涉及的有限的负荷,其可以具有更低的功率、更高速度和更低电压。此外,两个总线可以以不同的频率和不同的宽度运行(例如一侧可以使用8位总线,另一侧可以使用16位总线)。
尽管一些架构可能插入标准收发器以对这些总线去耦合,但是此实施例的控制器300可以使用缓冲并且可以以不同的速度运行这些接口。这允许控制器300还匹配两个不同速度的总线,例如以140MB/秒运行的快闪侧接口总线以及以132或者166MB/秒运行的ONFI总线。传统的总线收发器设计将需要选取两个总线中较低者并在此例子中以132MB/秒运行,而此实施例的控制器300可以通过以166MB/秒运行ONFI而实现140MB/秒,并且基本具有空闲时段。因此,此实施例的控制器300以潜在更低的成本和/或更低功率提供了更高性能以及不同产品之间的接口灵活性(例如,不同速度和宽度的主机和存储器总线、在典型系统中的主机上的更少负荷(这使能更迅速的操作和存储器总线带宽与主机接口的集合),以及具有接口翻译的主机和存储器侧的不同接口)。
如上所述,单个控制器还可以具有与闪存器件的多个快闪侧接口335,这还使能够在原始闪存器件之间的进一步并行化以及到控制器的传输,这允许快闪侧接口比主机侧接口325更慢地(以及更快地)运行。单个控制器还可以具有可以连接到不同主机控制器接口的多个主机侧接口,以允许在访问闪存器件时的更大并行化、共享控制器或者更好地匹配快闪侧接口的速度(由于上述原因,其可以比主机侧接口更快)。
向主机输入NAND接口的另一优点涉及分布式控制器架构的使用。现今,闪存器件通常以单级控制器实现。在大的固态驱动器(SSD)中,可能存在数十甚至数百个快闪器件。在高性能器件中,可能希望具有在尽可能多的这些快闪器件中进行的并行操作,这可能受到功率限制。现今存在600MB/秒的接口规范,并且其仍在增加。达到此级别的性能需要非常快速的控制器、存储器和ECC模块。现今,构建高性能控制器具有一个或少量ECC模块以及一个或两个微处理器来处理存储器器件管理。因为这些功能中的一些非常本地化到存储器器件本身,比如ECC,因此利用此实施例的控制器300,可以利用双层(two-tiered)网络的器件。具体地,主机320可以管理主机接口和逻辑内容的高级映射,并且由于控制器300和主机320的并行执行以及处理在不同存储器320上并行的不同操作的多个控制器300的并行执行,一个或多个控制器300可以管理一个或多个原始NAND闪存器件以提供存储器器件功能(例如ECC)的本地管理以及在执行这些功能时的并行化。与SSD中的在一处进行存储器器件管理功能的传统控制器相反,通过将这些功能分割为两层,此架构可以以两种方式利用并行性能(例如在主机和从属之间以及在许多从属之间)。这实现更高的整体性能级别(例如600MB/秒)而无需设计可以处理该速率的单个ECC模块或者微处理器。
此架构的另一优点是,可以开发对原始存储器的更高级的抽象化,使得系统开发者不需要了解存储器的错误恢复或者低级细节,比如ECC和数据加扰,因为控制器300除了处理诸如读、擦除和编程干扰以及安全区的存储器专门功能之外,还可以用于进行那些功能。此级别的支持在此称为“校正的”快闪,因为其逻辑上在原始快闪和管理的NAND之间。另一方面,在逻辑级别的页或者块管理意义上,此架构不完全是管理的存储器,并且可能需要主机提供页和块的逻辑到物理映射。但是,控制器300仍然可以向主机及其固件呈现一些闪存管理限制,比如:仅可以编程整页,必需在块中按顺序对页写入,在整个块必需被擦除之前页仅可被写入一次。物理块的用于确保其近似均匀地被使用的磨损均衡也可以由控制器300进行,但是,主机320可以负责提供此功能。此外,控制器300优选为主机320呈现到NAND的页和块中的整页读和写操作。逻辑页尺寸和块尺寸的特性将很可能与基本的NAND相同(除非支持部分页操作)。原始NAND中的每个物理页中的空闲区域的大多数将由控制器300使用用于ECC及其元数据。控制器300可以提供更少量的空闲字节,使用的系统可以利用其用于元数据管理。
与检测经过NAND接口的传输错误有关的实施例
参考图3,在数据从主机320通过到主机侧NAND接口325的NAND接口总线发送到控制器300时可能发生传输错误。因为在控制器300内产生并校验ECC,所以没有ECC保护通过主机侧NAND接口325传输的数据。现在将结合图4讨论此问题以及提出的解决方案。
图4是用于向一个或多个闪存器件430写数据以及从其读数据的实施例的控制器400的框图。如图4所示,此实施例中的控制器400包括:第一NAND接口425,被配置为使用NAND接口协议在控制器400和(具有主机控制器421的)主机420之间传送数据;以及第二NAND接口435,被配置为使用NAND接口协议在控制器400以及一个或多个闪存器件430之间传送数据。如上所述,每个接口425、435使用的NAND接口协议可以是相同的协议或者可以是不同的协议。还如上所述,控制器400和闪存器件430可以被包装在不同的包装中,可以都存在于共同的多芯片包装中,或者可以被集成在相同的晶片上。此外,在一个实施例中,主机420进行逻辑到物理映射,使得主机420通过第一NAND接口425为控制器400提供物理地址以及对该物理地址的读或写的命令。
在此实施例中,控制器400包括:控制器模块440,用于控制控制器400的操作;错误检测码(EDC)模块450(例如ECC编码器/解码器);以及纠错码(ECC)模块460(例如ECC编码器/解码器)。EDC模块450可操作以基于输入的数据产生错误检测码,并且ECC模块460可操作以基于输入的数据产生纠错码。在此实施例中,控制模块440被配置为使用ECC码来校正错误(例如控制器模块440的部分是ECC校正引擎)。在此上下文中使用的数据可以包括要被存储或取回的正常数据页以及头部、元数据或者用于存储由主机420或者控制器400计算的地址、标志或者数据的空闲字段。而错误检测码允许检测至少一个错误但不校正,纠错码允许检测并校正至少一个错误。可以被检测和/或校正的错误的数量取决于所使用的错误检测码方案和纠错码方案的类型。适当类型的错误检测码方案包括但不限于一个或多个字节校验和、纵向冗余校验(LRC)、循环冗余校验(CRC)或者8b/10b码。适当类型的纠错码方案包括但不限于汉明码和里德-所罗门码。
图5和6是例示此实施例中的控制器400如何分别用在写和读操作中的流程图500、600。首先转向图5的流程图500,控制器400通过第一NAND接口425从主机420接收写命令、数据以及与该数据相关联的错误检测码(动作510)。(因为主机420不一定知道其正向控制器发出命令的事实,可以假设其正与其能够处理的类型的标准NAND闪存器件相接口。)可以在数据之前、之后或者与数据混合地发送错误检测码,在一个实施例中,错误检测码是包含该数据的数据分组的头部(例如8-16空闲字节)的部分。如上所述,错误检测码允许检测但不校正数据中的至少一个错误。接下来,EDC模块450基于该数据产生错误检测码,控制模块440将产生的错误检测码与从主机420接收的错误检测码相比较(动作520)。基于此比较,控制模块440确定产生的错误检测码是否与从主机420接收的错误检测码相匹配(动作530)。如果产生的错误检测码与从主机420接收的错误检测码不匹配,则控制模块440向主机420发送指示在数据从主机420向控制器400的传输中出现错误的信号(动作540)。然后主机420可以向控制器400重新发送该数据。但是,如果产生的错误检测码与从主机420接收的错误检测码相匹配,则以ECC模块460基于该数据产生纠错码来继续写处理(动作550)。如上所述,纠错码允许检测并校正数据中的至少一个错误。然后控制模块440通过第二NAND接口435将该数据和纠错码存储在闪存器件430中。此外,根据NAND接口协议发出命令,包括命令字节、地址字节、头部字节和包含主机的数据字节和由ECC模块460产生的相应ECC位的数据字节。以此方式,闪存器件430甚至不一定知道它们正经由控制器400间接地而不是直接从主机420接收信息。
现在转向图6,流程图600例示控制器400如何用在读操作中。如图6所示,控制器400从主机420接收读命令(动作610)。控制器400然后从闪存器件430读取数据和与该数据相关联的纠错码(动作620)。如上所述,纠错码允许检测并校正数据中的至少一个错误。接下来,ECC模块460基于该数据产生纠错码,并且控制模块440(例如使用ECC校正引擎)将产生的纠错码与从闪存器件430接收的纠错码相比较(动作630)。基于该比较,控制模块440确定产生的纠错码是否与从闪存器件430接收的纠错码相匹配(动作640)。如果产生的纠错码不与从闪存器件430接收的纠错码相匹配,则控制模块440尝试校正数据中的错误(动作650)。(如上所述,取决于使用的ECC方案,控制模块440可能能够校正一个或多于一个检测的错误或者控制模块可以使用其他手段来尝试校正错误。)如果校正不成功,可以向主机420发送指示发生存储错误的信号。但是,如果产生的纠错码与从闪存器件430接收的纠错码相匹配,则以EDC模块450基于该数据产生错误检测码来继续读处理(动作660)。如上所述,错误检测码允许检测但不校正数据中的至少一个错误。然后控制模块440向主机420发送该数据和错误检测码(动作670)。主机420然后将基于该数据以及可选地基于头部产生其自己的错误检测码,并将其与从控制器420接收的错误检测码相比较。如果各码不匹配,则主机420将知道发生传输错误,并且可以向控制器400发送重新发送数据的信号。
从这些流程图500、600可以看出,此实施例针对在数据通过第一NAND接口425正在主机420和控制器400之间发送时可能发生的传输错误进行保护。在一些控制器架构中,在写操作中,主机产生ECC并向控制器发送该ECC和数据,控制器将该ECC和数据两者存储在闪存器件中。类似地,在读操作中,控制器从闪存器件取回数据和ECC并将该数据和ECC发送给主机。在这些架构中,ECC不仅用于针对存储器器件错误进行保护,而且还用于针对在主机和控制器之间的接口传输错误进行保护。但是,在此实施例中,产生ECC以将其与数据存储在闪存器件430中的是控制器400——不是主机420。关于写通过使主机420产生EDC并使控制器400校验EDC并关于读通过使控制器400产生EDC并使主机420校验EDC,此实施例提供了针对通过第一NAND接口425的传输错误的保护,即使主机420不产生ECC用于存储,像在传统的控制器架构中那样。此外,尽管在提供对主机的非NAND接口(例如USB)的某些现有控制器架构中使用使主机产生EDC并使控制器校验该EDC然后产生ECC的处理,但是此实施例可以用在诸如图3和4中所示的、其中主机和控制器使用NAND协议通过NAND接口通信的控制器架构中。此外,一些现有的主机接口协议(尤其是诸如SATA、SAS、FC和PCIe的串行接口)提供了可以用于检测传输错误的某种基于(per)分组的CRC,并且此信息可以经过主机420并附于数据分组以及用于类似目的。但是,经过外部接口(比如SATA)的数据传送可能具有与经过第一NAND接口发送到控制器400的页不同的传输长度,并且可能需要进行适当的调整。
在以上,由主机420和由EDC模块450计算的EDC还可以是比由ECC模块450使用的ECC更简单形式的ECC。例如,通过第一NAND接口425使用的ECC仅需要检测或校正传输错误,而通过第二NAND接口435使用的ECC优选用于检测并校正NAND存储错误,这可能需要更长或者更复杂的ECC。
与提供闪存系统中的读状态和空闲块管理信息有关的实施例
返回附图,图7是实施例的控制器700的例示,其包括控制模块740、纠错码(ECC)模块750、状态模块760和空闲块管理模块770。控制器700可以分别经由第一和第二接口725、735与(具有主机控制器721的)主机720和闪存器件730通信。第一和第二接口725、735可以采取任何适当的形式,在一个实施例中是NAND接口,如以上结合图3所述。但是可以使用其他非NAND类型接口,比如但不限于USB和SATA。另外,控制器700可以被置于上述的物理布置的任意一个中,例如在还包含一个或多个闪存晶片的存储器系统中包装的单独的晶片上、与主机和闪存独立地包装等等。
控制器模块740可以被配置用于控制控制器700的操作并基于从主机720接收的命令(例如读、写、擦除等等)和地址进行存储器操作。ECC模块750用在确定在处理从闪存中的存储器的块取回或者向其发送的数据时是否发生诸如读或写错误的错误的处理中。控制器700可以被配置为应用多个纠错码(ECC)算法中的任意算法以检测读错误并在具体纠错码算法的能力内对于某些检测的错误进行矫正。控制器700处理纠错码的应用以便主机720通过第一接口725接收根据该错误校正算法处理的数据而不是必须在主机处进行错误校正。(或者,可以在除了ECC之外还使用或者代替ECC使用其他错误恢复技术的错误处理模块来替换ECC模块750。在这样的替换中,控制器700仍将校正数据,以便通过第一接口725发送的数据不需要主机720的进一步错误处理(例如计算单个错误码或者以电压偏移重新读取)。)相反,在写操作期间,控制器700处理错误编码数据并通过第二接口735传送ECC码和数据用于存储在闪存器件730上。
状态模块760与ECC模块750协作以为主机720提供与闪存器件730上的特定操作的状态有关的数据。例如,状态模块760可以检查控制器700中的错误分析行为并基于是否已经检测到、已经校正读错误或者读错误是否不可校正来准备关于读错误信息的状态信息。由于主机、控制器和闪存布置,其中在数据从闪存器件730取回时在主机720将通常不处理数据的错误分析或者校正,所以主机720将不具有读操作的状态的细节。状态模块760允许跟踪此信息并将其呈现给主机720,以便主机720可以在如何或者在哪里向存储器发送或请求数据方面进行任何期望的调整。主机720也可以使用此状态来触发一些其它积极主动或预防性操作,诸如磨损均衡、数据重定位或读清洗。
状态模块760可以按几种格式之一将状态信息呈现给主机720。在状态模块正准备用于传输给主机720的读状态信息的情况下,读状态可以附加于从闪存取回的数据,如图8A和8C中所示。(应该注意,这些图中示出的字段可以按任意顺序出现。)图8A例示其中从闪存取回的数据在由控制器700进行的错误分析处理之后被置于具有头部802、数据有效负荷部分804和状态位806的消息中的数据传送格式800,其可以被填充(pad)到两个或更多字节(因而,权利要求中所使用的“位”可以指单个位或者一位或多位,比如一个或多个字节)。此状态位806可以是由主机720使用的二进制的成功或失败指示。状态位806将不一定要在读错误的类型或程度之间区分,但是将向主机720提供警告其已经遇到某种形式的错误的标志。或者,状态位可以是用于携带与在主机720中或者由控制器700维持的查找表中的错误消息相关联的编码的值的单个字段。图8B类似于图8A,但是状态位806’被包括作为头部802’的部分,其通常将在读时被控制器700填充,而没有单独的状态位字段。
或者,如图8C中可见,数据传送格式808可以包括头部810、数据有效负荷部分812和状态部分814,状态部分814具有在状态部分814中的多个字段816中布置的一位或多位。在图8C的布置中,可以传送关于读错误的状态上的更多详细信息,并且主机720可以获得该更多详细信息。在状态消息的一个实现方式中,可以仅将读错误信息提供给主机720。在其他实现方式中,状态信息可以被布置为传送由控制模块740检测到的并且由控制器700的状态模块760格式化的读、写和擦除错误信息中的一个或多个。在其他实施例中,状态部分814的字段816可以还或者替换地呈现与空闲块管理有关的数据。关于由控制器700的空闲块管理模块770从事或者报告的空闲块管理行为的细节在以下部分中提供。图8C的多字段实施例提供了用于要报告的与存储器操作相关联的错误的组合的机制。图8D类似于图8C,但是状态字段814’是头部810’的部分,并且可以类似地由多个字段816’组成。
在另一实施例中,读的成功/失败的结果可以在状态寄存器或者扩展的状态寄存器中在保留的或者厂商唯一的字段之一中指示。但是,在对忙状态的轮询之外,主机控制器现今可能不是一定要查找状态寄存器或者扩展的状态寄存器中的读错误。响应于编程或擦除命令通过第二接口735报告编程和擦除错误(这是来自原始NAND器件的标准错误报告),并且此信息可以被返回给主机。对这种错误的通常响应是分配新的块,从具有错误的块复制当前有效的数据页,以及使任意元数据指示其现在是有效块,然后将具有错误的现有块标记为坏的。在一个实施例中,控制器可以指示编程或擦除故障并将其留给主机控制器来进行以上复制和元数据管理。在另一实施例中,控制器可以进行这些操作并在控制器内管理坏的块。在此情况下,除了发生了错误或者控制器可以指示其采取了此校正的动作,这对主机控制器可以是完全透明的(例如,主机可以像已经发生了软错误那样对其记录)。因此,总言之,这些位可以指示:发生了主机必须管理的错误,发生了控制器管理的错误(并且主机仅仅被通知),或者错误可以由控制器处理并且对主机隐藏。
用信号通知(signal)错误的替换方式、比如单个状态位806或者806’、具有多个字段816或816’的状态部分814或814’、或者经由状态寄存器或者扩展的状态寄存器中的位将统称为“错误信号”。在另一实施例中,除了这些错误信号中的一个或多个之外,控制器700可以被配置为与错误信号中的一个或多个的使用组合地将详细的状态信息存储在已知的位置中。例如,响应于接收到错误信号中的一个或多个,控制器700的状态模块760可以将详细的状态信息(例如读状态数据)存储在闪存器件730上的或者控制器700中的主机可以访问的预定位置中。因此,状态位或字段可以不传送任何更多的信息,而仅传送指示如果主机想要关于状态(例如读错误)的另外细节则更多信息对主机可用的标志。此外,由该位或字段标记的额外的状态信息可以被存储在由控制器700跟踪的位置中,主机可以通过向控制器700发送一般命令来访问该位置以取回状态信息,而不是主机需要知道该位置并取回状态信息。
如果使用图8A的附加单个位的状态消息格式,其中该位代表错误检测的成功或失败的裸赋值(bare assertion)的情况下,该位可以被实现为对于诸如可从开放NAND快闪接口工作组获得的ONFI 2.0的可用接口协议的扩展读格式中的厂商专用位的部分。如上所述也可以使用多位状态信息或者单个或多个位信息格式,向主机720警告在状态模块使之被存储的位置处的更多详细信息。
图9示出状态字段900的一个可能的布置,该状态字段可以置于图8A-8D的实施例中的位置806、806’、814、814’中,或者存储在其中主机720可以在状态可用性的通知之后请求进一步的信息或者从控制器700取回信息的实施例中的控制器700或者闪存器件730中。状态字段900可以包括指示读操作的成功或失败的字段902、提供关于是否进行了诸如ECC校正的校正的信息的字段904、以及标记是否存在“硬”ECC故障(即数据丢失)的字段906。除了读状态信息之外,状态字段900还可以包括表示控制器700是否检测到编程或擦除错误的一个或多个字段908。如以下进一步讨论的,还可以包括关于空闲块管理的状态信息,比如请求块复制和重新映射的字段910、要求主机返回新的空闲块的字段912以及向主机720指示已经存在对闪存器件730中的有缺陷块的尝试的操作的字段914。可以布置一个或多个另外的字段916用于处理可能为具体应用所需的其他状态信息。例如,这样的字段916可以指示软错误(即通过ECC校正的错误)的数量。
图10例示可在控制器700上操作用于向主机720提供读状态信息的实施例的方法的流程图1000。控制器700首先从主机720接收读命令(动作1002)。为了读数据,控制器700向闪存器件730发出读命令(动作1004),闪存器件730将数据页与纠错码通过第二接口735返回到控制器700(动作1006)。控制器700的ECC模块760进行对取回的数据的错误分析(动作1008)。错误分析或处理可以是纠错码算法或者其他错误校正机制。如果使用ECC算法,则控制器700计算从闪存器件730取回的数据的ECC字节并将计算的ECC字节与先前存储的并与数据一起取回的ECC字节相比较。如果计算的ECC字节和取回的ECC字节不匹配,则控制器700标识错误(动作1010)。如果计算的ECC和存储的ECC之间的差可由控制器700校正,则控制器700将在通过第一接口725传送之前完全校正数据,并将该错误标识为“软”或可校正错误。或者,如果该错误足够严重使得ECC算法或其他错误恢复过程不能补偿该错误,则控制器700将标识硬错误,用于以信号通知已经发生数据丢失。然后从闪存器件730读取的校正的数据通过第一接口725被发送到主机720,状态信息附在诸如以上讨论的数据消息格式800、800’、808、808’之一的数据消息格式中(动作1012)。
参考提供读状态错误的方法、在图10中例示的实施例,可以仅在由控制器700读取和分析的每页信息的结束时计算并提供读状态错误,以便多页的流(streaming)不被打断,并且哪些页可能包含错误也是清楚的。另外,在另一实施例中,构思控制器700可以从闪存器件730读数据并在数据到来时并在闪存的完整页已被处理之前计算ECC。例如,如果如果页大小是8千字节(KB),则控制器700可以以2KB的片段计算ECC,每个片段包括少于一页,以便在进行该页的每部分之后,可以对于表示该页的该部分的信息校验或校正ECC。在一个或多个2KB的片段已经从闪存器件730传送到控制器700之后,在对于该页的最后的数据已经从闪存传送到控制器之前,控制器700可以同时开始通过第一接口725传送错误校正后的数据。
好块、坏块和空闲块管理实施例
再参考图9,如上所述,状态字段900可以包括对于处理管理可能在闪存的使用寿命期间发展的坏的(有缺陷的)块所需的空闲块有用的、与空闲块管理有关的信息,例如字段910-914。如图7所示,在控制器700中可以包括空闲块管理模块770以按几种方式之一工作。取决于采用的特定空闲块管理模式,可以利用一个或多个字段的信息,比如示例的字段910-914。
通常,以多余数量(比定义的最小容量大)的块制造闪存器件。在工厂测试期间或者器件的使用期间,某些块可能被发现为“坏的”或者“有缺陷的”,意味着它们不能用于正确地存储数据并且需要被替换。类似地,可能存在多余的“好的”块(比定义的最小容量大),其可以被用作“空闲的”,直到另一块故障或者变得有缺陷。保持跟踪这些额外的块分别被称为坏块管理和空闲块管理。将在以下段落中更详细地描述这些概念,其涉及图12A和12B中所示的示例闪存器件1200的块。
图12A示出以总共1000个块的存储器的示例设计并制造的器件的块的物理视图。在此图中,按物理顺序示出各块,每个白色的块1210表示闪存器件中独立的块(仅示出了1000个块中的几个)。每个黑色的块1220表示在制造时有缺陷的块(在此例子中它们随机地分布)。图12B示出相同部分1200的抽象视图,其中各个好的和坏的块被示出为分组在一起(并且不是按物理顺序)。对于诸如1200的部分的示例厂商数据单(sheet)可以指示可以依赖它而在其寿命终点时具有至少900个好的块,如1230中所示。对于我们具体的示例闪存器件1200,有950个好的(白色)块(未全部示出)和50个坏的(黑色)块(未全部示出)。(在制造或者初始测试时的)50个坏的块被示出为逻辑上分组在一起为1260。
继续我们的例子,数据单还可以指出不多于10个块在其规定的寿命期间可能故障,因此这些被示出为“最小空闲”1240。因此,器件1200在制造时必需具有最少910个好的块(否则工厂将不会出厂这样的器件,因为其将不符合数据单)。其他40个好的(白色)块(950个好的块和910个保证的好的块之间的差)被认为是“额外空闲”块,并且被示出为1240。可能未必依赖于额外空闲的数量,并且理论上其可以在90(如果没有坏块,尽管这是非常少见的)和0(表明90个坏块,这刚刚满足数据单的要求)之间变化。最小空闲和额外空闲也统称为“空闲块”。
通常,主机将直接利用原始闪存来处理空闲块管理。例如,标准主机可以具有其自己的控制器,其扫描闪存中的所有块以查找具体签名来确定哪些块是可用的块以及哪些块是不可用的、也称为有缺陷或者“坏的”块。因此,如果诸如上述的闪存器件730以及如图1200中详细示出的闪存被制造为具有1000个存储器块,则主机控制器通常将分析所有1000个块并标识好的和坏的块。通常的主机控制器然后可以使用所有的(此例子中的)940个好的块或其子集并保留10个块作为空闲块用于当当前可用的块变坏时替换当前可用的块。还可以使用其找到的任意额外的空闲(好的)块(例如在此例子中的40个)。利用具有如图7中所述的空闲块管理模块770的控制器700,可以由控制器700的空闲块管理模块700来接管通常由主机处理的空闲块管理的不同方面。
在一个实现方式中,空闲块管理模块770可以选择性地被配置为按三种空闲块管理操作模式之一而工作:(1)未被管理模式,其中控制器700不提供空闲块的管理,并且主机720自己扫描块的缺陷;(2)完全管理的空闲块管理模式,其中控制器700仅为主机720提供N个好的逻辑块,其中N是数据单参数,并且可以在闪存上可用的参数页中读出;以及(3)分割空闲块管理模式,其中主机可以使用额外的空闲块,但是控制器700可以请求主机释放这些额外的块中的一些以当控制器的空闲块供给落到期望水平以下时由控制器700使用。
尽管控制器可以在仍处于装配了单独的主机720、控制器700和闪存器件730的制造装备处时被主机720初始化,或者甚至被预先初始化用于由专门的原始设备制造商(OEM)使用,但是控制器700中的空闲块管理模块770可重配置以在已经选择了不同的空闲块管理模式之后改变空闲块管理模式。
参考图11的流程图1100,在控制器700中的空闲块管理模块的初始化之后,即在OEM处的原始初始化之后或者在重设先前选择的模式之后,控制器700接收标识期望的操作模式的选择命令(动作1102)。如果该选择命令指示已经选取了未被管理的空闲块管理模式(动作1104),则空闲块管理模块770允许主机720直接扫描闪存器件730以标识可使用的和坏的块(动作1106)。在未被管理模式中,还阻止控制器100止管理空闲块使用。而是,当空闲块管理模块770标识指示坏块的错误(比如不可校正的ECC故障(字段906)或者编程或擦除故障(字段908))时,控制器还可以使用适当的状态字段、比如字段910(图9)通知主机700特定块需要复制和重新映射。(字段908也可以是两个字段——一个字段用于编程失败,另一字段用于擦除失败,或者它们可以组合在一个字段中。)
尽管在未被管理的空闲块管理模式中空闲块管理可以完全留给主机720,但是控制器700仍可以对一些空闲块进行扫描并保持它们对主机720不可见以用于错误恢复。换句话说,使用具有最大1000个块的闪存的图12中的例子,数据单还可以示出最少保证的块的数量为900以及最大保证的块的数量为990。如果在我们的具体部分中好块的实际数量是950,则如果控制器700在主机扫描好块之前隐藏10个块用于其自己使用,则主机720将仅发现940个好块。因为控制器700知道其正在隐藏哪些块,控制器700可以通过虚假地指示隐藏的块是坏块来向主机720隐藏好块。例如,如果控制器700决定隐藏块X,则当主机读取块X时,其可以将任意数据与缺陷块标志一起返回。同样,关于来自主机的对块X的任意擦除或编程请求,控制器可以通知擦除或编程错误。
关于空闲块管理的第二模式(动作1108),在完全管理模式中,空闲块管理模块780进行闪存器件730中的块的所有扫描以标识好块并仅将N个好块提供给主机控制器,其中N是在保证数量的可用块的闪存的参数页中可读的数据单参数(动作1110,1112)。然后控制器700仅允许主机对N个好块操作。控制器700将任意额外的好块保持为其可以用于错误处理的空闲块(动作1114)。再次参考以上图12中所述的具有1000个块的假定闪存,N可以是900,其中控制器700将把所有额外的50个可用的块保持作为空闲块,并且主机720不具有对这些空闲块的访问,直到响应于当前好的块变坏而由空闲块管理模块780将它们投入使用。
上述的第三空闲块管理模式,即分割管理,允许关于额外块1250(即在数据单上的保证数量以上的块减去原始保留为空闲的块)的使用的在控制器700和主机720之间的协作。可以使得这些额外的空闲块可用于主机720来优化主机操作。在分割管理技术的一个实施例中,如果以分割块管理的命令来初始化空闲块管理(动作1116),则控制器700的空闲块管理模块770扫描闪存器件730以寻找好块和坏块并保留好块中的一些作为空闲块,比如五个,用于错误恢复(动作1118)。控制器700可能发现所有好块并仅向主机“示出”好块。
例如,控制器700可以读取闪存器件730的参数页并确定在具体闪存中有多少剩余的好块。闪存器件类的产品数据单可以报告可能的好块的最小和最大数量(例如900-990)。因此,再次参考具有1000个可能的块的假定闪存的以上例子,其中950个块被空闲块管理模块770扫描并被发现实际可用,如果控制器700保留这些好块中的5个作为空闲块,则其将向主机720报告945个好块(动作1120)。因此,主机720将不知道5个其他的好块存在。控制器700可以将好块重新映射到去除了坏块的紧凑逻辑地址范围(例如,好块的地址依次被重新映射为0-N)(动作1122)。如果主机720试图对大于N的地址进行读、编程或擦除操作,则控制器700将报告错误。使用图9的数据字段900作为例子,可以由空闲块管理模块770在字段914中附上数据来报告此错误,以便当主机尝试到控制其规定的范围之外时主机720相信其正寻址有缺陷的块。
在分割管理模式的替换实施例中,空闲块管理模块780可以不扫描闪存器件730中的所有块,而是简单地扫描并保留仅一组好块以为其自己保持为空闲块并允许主机扫描所有块以确定哪些是好的以及哪些有缺陷。在分割管理模式的此替换实现方式中,当主机720试图对空闲块管理模块770已经将其标识为空闲块的块之一进行读、编程或擦除操作时,控制器700将指示块中有缺陷或者记录错误。例如,控制器700可以在用于标记缺陷块的适当字节中插入缺陷标志,或者其可以占据在读状态中的诸如图9中的“试图对有缺陷的块操作”字段914的字段。主机720然后将为其目的而使用所有其他可用块,包括超过参数页中保证的数量的那些块。
无论采用分割块管理技术的哪个版本,主机720通常都将能够为其自己的利益而使用超出最少量的任意额外空闲块,例如以改进性能或者耐用性,这两者主机720不能依赖于超过该最少数量的块。因此,在此例子中,主机将具有45个可以使用的额外块(总共950个可用,减去5个保留的,相对于数据单上的保证的最少量900)。
利用分割管理模式,当控制器700遇到需要空闲块的错误时,比如编程或擦除错误,空闲块管理模块770使用其空闲块之一来替换新发现的有缺陷的块。在此例子中,空闲块将是如上所述被保留的五个块之一。在使用该空闲块之后,空闲块管理模块780将具有少于其通常维持的最少数量的空闲块(即5个),并将通知主机其需要另一空闲块(动作1124)。从控制器700的空闲块管理模块780提供给主机720的通知可以经由与取回的数据一起返回的状态值中的字段。例如,在图9中,可以在字段912中传送请求返回额外块用作空闲块的标志。在此例子中,主机720将需要返回其先前能够使用但是超过了其有权访问的保证的最小数量的45个额外块之一。主机720可以通过利用设置特征(Set Feature)命令向专用地址或者偏移写信息或者通过使用以地址块作为其地址字段的厂商唯一命令来向控制器700指示哪个块正被返回以用作空闲块。
在分割管理模式中,超过一类存储器的数据单保证的最少量的额外块将在主机720可以使用但是可以稍后被召回作为空闲块的额外块以及立即被保留用于控制器700的空闲块之间“分割”。这不同于未被管理模式和完全管理模式,在该未被管理模式中,控制器700不能要求返回任何额外块,并且具有其可以使用的固定数量的空闲块,在该完全管理模式中,所有额外块由控制器700使用并且对主机729不可用。空闲块管理的具有完全或部分(分割)控制器管理的模式的灵活性可以通过降低主机控制器所需的复杂性而提供优于典型的主机管理或者空闲块信息的优点。
尽管已经在图7-9的例子中描述了读状态的具体例子,但是状态模块可以用于确定和从控制器向主机传送写(也称为“编程”)或擦除错误以及使用正常的错误状态位。另外,控制器还可以可选地在错误状态中使用保留的或者厂商唯一字段以指示额外的状态是可用的。在接收到这些错误指示符(读状态错误、正常写或擦除错误或者额外状态可用字段)的任意一个时,主机可以读取此额外状态信息,其一个例子在图9中示出。ONFI 2.0中的现有状态寄存器寄存器字段中的位2、3、或4可以用于用信号通知额外状态。另外,尽管状态信息和空闲块管理示出为相同消息格式的部分,但是在其他实施例中控制器可以被配置为仅提供状态信息或者空闲块管理信息之一。
已经描述了用于与闪存一起使用的改进的独立的控制器,其可以处理错误分析和错误校正、与主机协作地在几种模式之一中管理用于错误恢复的与空闲块有关的通信、并在主机访问的消息字段中提供与读命令或者写和擦除错误有关的状态信息。在此公开的方法和控制器允许与主机分离的控制器的行为(其可以允许主机控制器具有更简化的设计),以及允许可以在闪存中与主机一起使用的离散的控制器的定制的架构,同时为主机提供与控制器的行为有关的信息,以便可以实现各个级别的控制器和主机协作以及优化。
示例的NAND闪存控制器实施例
此部分讨论示例的控制器架构并提供关于上述各种功能模块的一些的更多细节。如上所述,“模块”可以按任何适当的方式实现,比如以硬件、软件/固件或者其组合,并且“模块”的功能性可以由单个组件进行或者在控制器中的几个组件之间分布。
现在回到附图,图13A是图3的NAND控制器300的当前优选的实现方式的图。应该理解,这些附图中示出的组件的任意一个可以被实现为硬件、软件/固件或者其组合。在此实现方式中,图3中的第一NAND接口325由主机接口模块(“HIM”)3010实现。HIM 3010是支持“主机侧接口”作为“快闪器件类型接口”的逻辑的集合。HIM 3010包括先进先出(“FIFO”)模块3080、控制单元3090、循环冗余校验(“CRC”)模块3100(尽管可以使用另一类型的错误检测码(“EDC”)模块)、命令寄存器3110、地址寄存器3120和主机直接存储器访问(“HDMA”)单元3130.在此实施例中,HIM 3010采取ONFI HIM的形式。如将在以下更详细讨论的,一些HIM从主机控制器接收对于跨越了几页的相对大量的数据的高级请求,并且NAND控制器确定满足该请求需要哪些动作。相反,ONFI HIM从主机控制器接收几个更小尺寸(例如对于单独的页)的请求,因此要求ONFI HIM同时处理多个(例如八个)读和写请求。
回到图13A,图3的第二NAND接口335在此由快闪接口模块(“FIM”)3020实现。在当前的实施例中,FIM 3020被实现为将“器件侧接口”创建为“主机侧接口”的逻辑和低级可编程序列器的集合。在此实施例中,FIM 3020包括命令寄存器3140、地址寄存器3150、ECC编码模块3160、ECC解码模块3170、数据扰码器3180和数据解扰器3190。
处理器3040在NAND控制器300内部,该处理器3040具有本地ROM、代码RAM和数据RAM。中央总线3030连接处理器3040、HIM 3010、FIM 3020和以下描述的其他模块,并且用于在示出的不同模块之间传送数据。此双向总线3030可以是具有与每个内部组件的实际连接的电总线或者结合ARC微处理器使用的高级高速总线(“AHB”),其使用互连矩阵逻辑上连接各个模块。中央总线3030可以传输数据、控制信号或者这两者。NAND控制器300还包括:缓冲器RAM(“BRAM”)3050,其用于暂时存储正被读或写的数据页;ECC校正引擎3060,用于校正错误。NAND控制器300还包括加密模块3070,用于进行加密/解密功能。
NAND控制器300可以进一步包括列替换模块,其在此由FIM序列器、处理器3040中的固件或者优选在位于FIM 302中的小量逻辑和表中实现。列替换模块允许闪存器件330(图3)包含关于坏列位置的信息。坏列地址信息被包含在闪存器件330中并在任何读或写操作之前由固件扫描。在固件扫描闪存器件330之后,其建立要由列替换模块使用的具有坏列位置的坏列地址表。关于快闪写操作,列替换模块对于在坏列地址表中检测到的地址插入数据(0xFFFF)。关于快闪读操作,来自坏列地址的数据将被丢弃。
利用现在概括地描述的NAND控制器300的组件,现在将给出NAND控制器300的示例写和读操作。首先转向写操作,HIM 3010中的FIFO 3080担当对于来自主机控制器的到来的写命令、地址和数据的缓冲器,并将那些要素与系统卡域同步。CRC模块3100校验到来的信息以确定是否出现任何传输错误。(CRC模块3100是以上所述的EDC模块的例子。)CRC模块产生或校验错误检测码以校验传输错误,作为首尾相接(end-to-end)数据保护方案的部分。如果没检测到错误,控制单元3090对自FIFO 3080接收的命令解码并将其存储在命令寄存器3110中,并且还将地址存储在地址寄存器3120中。从主机控制器接收的数据经过HDMAAHB接口3130经由中央总线3030发送到BRAM 3050。控制单元3090向处理器3040发送中断,响应于中断,处理器3040从命令寄存器3080和地址寄存器3120读取命令,并且基于该命令,在FIM 3020中建立数据路径,并将该命令存储在FIM的命令寄存器3140中。处理器3040还将来自NAND接口325的地址翻译为内部NAND地址,并将其存储在FIM的地址寄存器3150中。如果要进行逻辑到物理地址转换,处理器3040可以使用映射表来创建正确的物理地址。处理器3040可以进行下述的一个或多个另外的功能。处理器3040然后建立从BRAM 3050到FIM3020的数据传送。
FIM 3020从地址寄存器3150取值并根据NAND接口335的标准对其格式化。在BRAM 3050中存储的数据被发送到加密模块3070用于加密,然后经过数据扰码器3180而发送。数据扰码器3180对数据加扰并将数据输出到FIM的ECC编码器3160,该ECC编码器3160产生要与该数据一起存储的ECC奇偶校验位。该数据和ECC位然后通过第二NAND接口与写命令一起被传送到闪存器件用于存储。作为在写期间可能发生的另外的功能的例子,如果启用了对写异常中止或者编程故障的保护并且如果该写请求针对较高(upper)页地址,则处理器3040可以通过第二NAND接口向闪存器件发送对于相应的较低(lower)页的读命令,然后发送编程命令以通过将其写回到闪存器件330中的另一位置中而将其复制到安全区(空闲便笺区)。如果在写上页时发生错误,则仍可从安全区读回下页并且错误被校正。(这是以上所述的用于经由安全区处理写异常中止和/或编程故障的例子。)
现在转向读操作,HIM 3010从主机控制器接收读命令,并且处理器3040读取该命令和逻辑地址。如果要进行逻辑到物理地址转换,则处理器3040中的固件可以使用映射表来创建正确的物理地址。(这是以上讨论的地址映射模块的例子。)然后该固件将该物理地址经过第二NAND接口335发送到闪存器件330。在读访问之后,数据通过NAND接口传送、解码并用于产生用于错误校正的检验子(syndrome)数据、被数据解扰器3190解扰、然后通过中央总线3030发送到BRAM 3050。ECC校正引擎3060用于对于存储在BRAM 3050中的数据校正可以使用ECC校正的任意错误。因为可以计算ECC并将其存储在物理页的部分中,因此处理器3040可以在页的每个部分被接收或者校正时被中断或者所有数据被传送时被中断一次。然后加密模块3070对数据进行解密操作。以上描述的定时是灵活的,这是因为第一NAND接口325和第二NAND接口335可以以不同速度工作,并且固件可以使用存储并转发技术或者速度匹配缓冲来传送数据。当数据被发送回主机控制器时,其通过HIM 3010发送,并且传输CRC通过第一NAND接口325被发送回到主机以校验传输错误。
如上所述,除了处理从主机控制器发送的命令之外,处理器3040可以与主机发送的任何具体命令不同步或者独立地进行一个或多个另外的功能。例如,如果ECC校正引擎3060检测到可校正的软错误,则ECC校正引擎3060可以校正该软错误并且还中断处理器3040以记录页位置,以便在稍后的时间点相应的块可以被读清洗。处理器3040可以进行的其他示例的后台任务是磨损均衡和坏块以及空闲块的映射,如下所述。
再次转向附图,图13B是示出实施例的NAND控制器的更详细的视图的框图。如图13A所示的控制器那样,此实施例中的控制器包含ONFI HIM 3200和FIM 3260,它们可以通过中央总线(在此是用于数据路径的高级微控制器总线架构(“AMBA”)高性能总线(“AHB”)多层矩阵总线3270以及用于命令路径的高级外围总线(“APB”)3330)通信。ONFI HIM 3200和FIM 3260可以与处理器中的任意一个相关联。例如,ONFI HIM 3260可以与运行在MRAM 3290中存储的ARC代码的(具有内置的缓存3285的)ARC600微处理器3280相关联。通常,ARC6003280用于服务于来自ONFI HIM 3200的中断,并管理建立的数据路径以及将信息传送到快闪控制RISC 3250。快闪控制RISC 3250是可以与FIM 3260一起使用并且通常通过向FIM 3260中的各种组件产生微控制代码来处理设置FIM 3260的功能。更具体地,快闪控制RISC 3250设置FIM 3260中的快闪直接存储器存取(“FDMA”)模块3440,其与AHB总线3270通信并产生AHB总线协议命令以从DRAM 3220读取数据。快闪控制RISC 3250还设置EDC模块3450,其包含ECC编码器和解码器。MRAM 3240存储用于运行快闪控制RISC 3250的代码。
此实施例中的NAND控制器还包含存储用于使控制器在引导之后运行的指令代码的ROM 3210。NAND控制器的另外的组件包括DRAM 3220、ECC校正引擎3230、加密模块3300、APB桥3310、中断控制器3320和时钟/复位管理模块3340。
加密模块3300根据高级加密标准(AES)使用128、192或者256位密钥对数据的128位的块进行加密和解密。对于写操作,在从主机接收到数据并通过ONFI HIM将其发送到BRAM 3050(图13A)之后,ARC600处理器3280创建具有加密操作的定义的参数的控制块。然后加密模块3300进行加密操作并将得到的数据存储到BRAM 3050,并中断ARC600处理器3280以指示数据已就绪。对于读操作,在ECC引擎完成BRAM 3050中的错误校正之后,ARC600处理器3280创建具有解密操作的定义的参数的控制块。然后加密模块3300进行解密操作并将得到的数据存储到BRAM 3050并中断ARC600处理器3280以指示数据已就绪。
现在更详细地转向ONFI HIM 3220和FIM 3260,ONFI HIM 3220包括ONFI接口3350,其以异步模式或者源同步模式工作,这是ONFI标准的部分。(异步(或者“async”)模式是当对于写用WE#信号以及对于读用RE#信号锁存数据时。源同步(或者“源(src)sync”)是当选通脉冲(DQS)与数据一起转发以指示何时应该锁存数据时。)ONFI HIM3200还包含命令FIFO3360、数据FIFO 3370、数据控制器3380、寄存器配置模块3400、主机直接存储器存取(“HDMA”)模块3380和CRC模块3415,它们如以上结合图13所述那样起作用。ONFI HIM 3200还包含APB接口3390和AHB端口3420,分别用于与APB总线3330和AHB总线3270通信。FIM 3260包括:EDC模块3450,其包括EDC编码器和EDC解码器;快闪协议序列器(“FPS”)3430,其基于快闪控制RISC 3250或者ARC600微处理器3280提供的微控制代码产生对于NAND总线的命令;FDMA 3440;数据扰码器/解扰器3470以及NAND接口3460。
扰码器/解扰器3470在快闪写传送(加扰)和快闪读传送(解扰)期间进行各数据的变换。存储在闪存器件330中的数据可以被加扰以便通过创建更随机化的数据样式来降低依赖于数据样式的灵敏性、干扰影响或者错误。通过以跨越存储器器件330中的页的移位(shifting)样式加扰数据,可以显著改进存储器的可靠性。扰码器/解扰器3470在飞行中(on the fly)处理数据并且由使用寄存器存取的ARC600处理器3280或者快闪控制RISC 3250配置。在加扰之后进行ECC校验位产生。在解扰之前进行ECC错误检测,但是在解扰之后进行校正。
此实施例中的NAND控制器总体地通过如上关于图13A所述地处理写和读操作。例如,对于写操作,命令FIFO 3360和数据FIFO 3370存储到来的写命令和数据,并且CRC模块3415校验到来的信息以确定是否存在任何传输错误。如果没有检测到错误,则数据控制器3380解码从命令FIFO 3360接收的命令,并将其存储在寄存器配置模块3400中的命令寄存器中。从主机控制器接收的地址被存储在寄存器配置模块3400中的地址寄存器中。从主机控制器接收的数据经过HDMA 3410发送到DRAM 3220。然后数据控制器3380向ARC6003280或者快闪控制RISC 3250发送中断,其从命令寄存器读取命令,从地址寄存器读取地址,并向快闪控制RISC 3250传递控制以设置FIM3260开始从DRAM 3220读取数据并进行ECC和数据加扰操作,其结果被发送到闪存器件330用于存储。ARC600微处理器3280和/或FIM 3260可以进行另外的操作。例如,FIM 3260可以进行列替换,并且可以使用ARC 600微处理器3280与FIM 3260一起进行以下操作:坏块和空闲块管理、安全区、读清洗和磨损均衡。以下更详细地描述这些操作。
对于读操作,当接收到读命令时,ONFI HIM 3200向ARC600微处理器3280发送中断。ARC600微处理器3280然后将该命令和地址信息传递到快闪控制RISC 3250,这设置FPS 3430产生对NAND闪存器件330的读命令。一旦数据已准备好被从NAND闪存器件330读取,FPS 3430就开始向NAND总线发送读命令。读取的数据经过NAND接口单元3460到达数据解扰器3470,然后经过EDC模块3450,其产生用于ECC校正的检验子位。然后数据和检验子位经过FDMA 3440并被存储在DRAM 3220中。快闪控制RISC3250然后设置ECC校正引擎3230以校正任何错误。加密模块3300在此时可以解密数据。ARC600微处理器3280然后接收中断并在ONFI HIM 3200中对寄存器配置模块3400编程以陈述数据已准备好被从DRAM 3220读取。基于此信息,ONFI HIM 3200从DRAM 3220读取数据并将其存储在数据FIFO3370中。ONFI HIM 3200然后向主机控制器发送就绪信号以用信号通知数据已准备好被读取。
如上所述,不像其他HIM,ONFI HIM从主机控制器接收几个更小尺寸的(例如对于各个页的)请求,因此要求ONFI HIM同时处理多个(例如八个)读和写请求。以此方式,在ONFI HIM和主机控制器之间存在比与其他HIM之间更多的双向通信。与此通信中增加的频率一起,出现了用于处理多个读和写请求的更多并行处理。
图13C和13D例示分别对于读和写操作的ONFI HIM的逻辑操作。首先转向图13C,此实施例的ONFI HIM 3480通过ONFI总线3490接收来自主机控制器的读命令。ONFI HIM 3480可以以异步或者源同步模式工作,并且将读命令经由信号复用器3500、3530传送到命令FIFO 3540。(分别使用异步和ONFI源同步组件3510、3520,ONFI HIM 3480可以用在异步模式或者源同步模式中。)ONFI HIM 3480还将从主机控制器接收的地址存储在逻辑单元号(“LUN”)地址FIFO 3550中。(此实施例中的NAND控制器支持多个逻辑单元,它们被当作可通过LUN地址寻址的独立的实体。)命令和地址从FIFO3540、3550被读到命令和数据控制器3560中,其将这些项同步。命令和数据控制器3560然后向系统寄存器控制器3570发送中断,该系统寄存器控制器产生对ARC600微控制器的中断。ARC600微控制器然后从系统寄存器控制器3570中的寄存器读取LUN地址,并且从闪存器件读取数据的处理如上所述。当所有读取的数据被写到DRAM时,ARC600微处理器对系统寄存器控制器3570中的寄存器编程以通知ONFI HIM 3480数据已准备好被读取。然后ONFI HIM 3480使用读请求控制单元通过HDMA 3580读取数据。读取的数据被存储在读数据FIFO 3590中,其对于每个LUN 3595被分区。一旦完成此操作,就绪指示符就被存储在状态寄存器中,并且数据流传输(stream)到主机控制器。
现在转向图13D,在写操作中,经过ONFI 3410总线从主机控制器接收写命令。ONFI HIM 3400将该写命令经由信号复用器3420、3450传送到命令FIFO 3460。(分别使用异步和ONFI源同步组件3430、3440,ONFI HIM 3400可以用在异步模式和源同步模式中。)ONFI HIM3400还将从主机控制器接收的地址存储在逻辑单元号(“LUN”)地址FIFO 3470中。从主机控制器接收的数据被存储在写数据FIFO 3520中。命令和地址从FIFO 3460、3470被读到命令和数据控制器3480中,该命令和数据控制器3480将这些项同步。然后命令和数据控制器3480向系统寄存器控制器3490发送中断,该系统寄存器控制器3490产生对ARC600微控制器的中断。ARC600微控制器然后从系统寄存器控制器3490中的寄存器读取LUN地址,并且从写操作设置控制器的处理如上所述。HDMA 3530具有与AHB总线3550通信的AHB端口3540,并且向DRAM发送数据。CRC模块3545校验数据中的传输错误。一旦数据已被存储在闪存器件330中并且闪存器件330指示就绪并且编程操作的状态是成功或者失败,就绪指示符就被存储在系统寄存器控制器3490中的状态寄存器中,指示ONFI HIM 3400对于来自主机控制器的另一命令已经准备好。
返回图13A,NAND控制器300还可以处理编程失败和擦除失败。在附连到快闪接口模块3020(下文称FIM)的NAND闪存器件330被编程时,NAND存储器器件330向NAND控制器300(或者可选地通过主机接口模块3010(其后称为HIM)向ONFI主机)报告编程操作的成功或者失败。由于NAND单元中的缺陷或者由于NAND单元关于擦除和编程循环具有的有限耐久性,NAND存储器器件330在存储器的预期使用寿命内可能经历一些数量的编程失败。
当编程页操作未成功完成时,NAND存储器器件330将向控制器300返回FAIL(失败)状态。控制器处理器3040(图13A)或者快闪协议序列器(图13B)验证每个编程页操作的成功或者失败。通常,任何单个编程页操作的失败将致使处理器3040(或者可选地ONFI主机)将整个NAND块(其可能包含多页)当作是有缺陷的。缺陷块将被停止使用。通常,控制器300将把未成功编程的数据以及在缺陷块中的之前页中的任意数据复制到另一替换块(空闲块)。控制器300可以使用FIM 3020、数据解扰器3190和ECC解码器3170以及如需要时应用ECC校正将之前页读到BRAM 3050中。然后以正常方式使用FIM 3020将数据写到替换块。
编程失败的一个方面是编程一页的失败可能破坏先前编程的另一页中的数据。通常,这对于以共享存储器阵列内的字线的较高和较低逻辑页物理地组织的MLC NAND存储器将是可能的。通常的使用将是将数据编程到下页中并将随后的数据编程到上页中。防止当在字线上编程上页时发生编程失败时丢失下页中的数据的一个方法是在编程上页之前读取下页数据。下页数据可以被读到控制器BRAM 3050中并且可以另外被编程到非易失向闪存器件330中的便笺区(有时称为“安全区”)中。因此保留在BRAM 3050或者安全区中的数据可以被保护不因编程失败而丢失,并且将可用于被复制到替换块,特别是在在NAND存储器器件330的下页中数据被破坏并且不能再成功读取的情况下。
一些NAND失败模式可能类似地破坏存储器阵列的其他区域中的、比如相邻字线上的数据是可能的。将其他潜在易受影响的数据读到控制器BRAM3050中和/或将该数据保存到便笺区或安全区中的此方法还可以用于在这些情况下保护数据。
在附连到FIM 3020的NAND闪存器件330被擦除时,NAND存储器器件330向NAND控制器300(或者可选地通过HIM 3010向ONFI主机)报告块擦除操作的成功或失败。当擦除操作未成功完成时,NAND存储器器件330将向控制器300返回FAIL(失败)状态。控制器处理器3040或者快闪协议序列器3430中的电路验证每个擦除操作的成功或失败。通常,任何擦除操作的失败将导致处理器3040(或者ONFI主机)将整个NAND块当作是有缺陷的。缺陷块将被停止使用并且使用空闲块替换它。
NAND控制器300还可以处理闪存器件内的编程干扰、擦除干扰和读干扰。
内部NAND编程操作有可能影响或者干扰存储器阵列的其他区域,在试图读取那些其他区域时导致错误。防止编程干扰带来失败的一个方法是与编程操作结合地对潜在易受影响的区域进行读或者“读清洗”操作,以便在它们变为不可校正或者不可恢复的错误之前检测干扰影响。一旦(在读清洗操作期间通过高的软错误率)检测到干扰情况,控制器处理器3040(或者外部ONFI主机)就可以将该数据复制到闪存器件330中的另一区域。
内部NAND擦除操作可能影响或者干扰存储器阵列的其他区域,当试图读取那些其他区域时导致错误。防止擦除干扰带来失败的一个方法是与擦除操作结合地对潜在地易受影响的区域进行读或者“读清洗”操作,以便在它们变为不可校正或者不可恢复的错误之前检测干扰影响。一旦检测到干扰情况,控制器处理器3040(或者外部ONFI主机)就可以将该数据复制到闪存器件330中的另一区域。
内部NAND读操作有可能影响或者干扰存储器阵列的其他区域,当试图读取那些其他区域时导致错误。干扰影响有时可以通过许多读操作累积。防止编程干扰带来失败的一个方法是与读操作结合地对潜在地易受影响的区域进行读或者“读清洗”操作,以便在它们变为不可校正或者不可恢复的错误之前检测干扰影响。一旦检测到干扰情况,控制器处理器3040(或者外部ONFI主机)就可以将该数据复制到闪存器件330中的另一区域。
现在参考图13A,NAND控制器300按以下方式处理读错误。通常,通过FIM 3020编程到NAND存储器器件330中的数据附加了错误检测码或者纠错码并且将其与该数据一起存储在NAND阵列中。控制器300使用ECC编码器3160用于此功能。当这样的数据从快闪阵列读到BRAM 3050时,ECC解码器3170根据该数据重新产生ECC码并将其与在数据被编程到快闪中时附加于该数据的ECC码相比较。如果该数据与过去写入的数据一致,则ECC电路指示不存在数据错误。如果检测到读取的数据中的一些差别,并且该差别足够小而在ECC校正能力内,则读取的数据(通常被包含在BRAM 3050中)被ECC校正引擎3060“校正”或者修改以将其恢复到原始值,如由处理器3040所控制的。如果数据错误超出ECC校正能力,则发生“不可校正的”读错误。通常,不可校正的读错误将导致当读取时错误状态被返回到主机接口。
防止不可校正的读错误或者当检测到错误时恢复的一个方法是控制器300(或者外部ONFI主机)重试读操作。此重试可以使用偏移的余量(margin)级或者其他机制来降低数据内的错误,可能消除错误或者将错误的数量减少到在ECC校正能力内的程度。
可选地,当恢复读错误时,或者如果恢复数据所需的ECC校正的量达到或者超过某个阈值,可以将数据重写到相同的或者另一个块以便将数据恢复到无错或者改善的情况。可选地可以认为原始的数据位置是有缺陷的,在此情况下,可以将其标记为有缺陷并停止使用。
再次参考图13A,NAND控制器300还可以处理写异常中止。写异常中止是在编程或擦除操作在进行中时,针对控制器300和NAND存储器器件330的电力的非预期丢失。电力的丢失可以导致NAND存储器器件330中的未完成的编程或擦除情况,这可能导致不可校正的读错误。在某些情况下,比如MLC NAND的情况下,共享字线的其他页(例如下页)可能被字线的上页上的异常编程操作而破坏,这非常像上述的编程失败情况。
存在减少或消除写异常中止错误或者最小化其影响的几种方法。一种方法是使用低电压检测电路以通知处理器3040电力已经中断。处理器3040然后可以允许当前的编程或擦除操作完成但是不允许新操作开始。理想地,当前操作将具有足够的时间以足够的电力来完成。
一种可能结合低电压检测方法使用的替换方法是向电源电路添加电容或者电池(或者某个替换的电源)以扩展可用于完成编程或擦除操作的电力。
另一方法是提供类似于以上所述的便笺“安全区”。可以在开始上页编程之前,读取存在于在上页编程期间可能易受影响的下页中的任何“旧的”数据并将其保存在安全区中。这将提供在电力丢失事件的情况下对先前编程的数据的保护。在一些实现方式中,可能可以接受不能读取在写异常中止情形下被破坏的数据,但是其他可能不相关的更旧的数据必须得到保护。
另一方法是当控制器被上电时搜索潜在的写异常中止错误。如果发现可以被确定(或假设)为写异常中止的结果的错误,则可以丢弃该错误数据。在此情形下,控制器300有效地回复(revert back)到先前数据,中断操作就像未发生一样。
再次参考图13A,NAND控制器300还可以对存储器进行磨损均衡。磨损均衡是通过比否则由于正常快闪管理算法而发生的情形更均匀地在所有物理块之间分布块使用来增加整体产品耐久性和寿命。这通过强迫“冷”块转移到空闲块池,其进而将用于主机数据更新,并且同时将未被主机更新的来自“冷”块的数据移动到“热”块来进行。此交换(swap)将导致混合“热”和“冷”块。该交换可以随机地或者循环地进行,选择用于交换的块,或者基于热计数(编程-擦除循环的数量)分析来选择它们。该交换可以周期地进行,比如每100个块的周期,通常由系统参数校准来在整体系统性能和块使用的平均之间平衡以在磨损和性能开销之间平衡。
示例的高级序列是:
1.调度磨损均衡操作
2.通过热计数分析或者随机或者循环地标识“热”和“冷”块。
2.将来自所选“冷”块的数据复制到空闲块池中的所选的“热”空闲块。
4.将“冷”块释放到空闲块池。结果,空闲块池被冷块而不是热块占据。
可以跳过一些操作,像基于分析的块选择。如果检测到块磨损分布是均匀的,则还可以跳过磨损均衡操作。
磨损均衡操作和热计数管理由处理器3040在固件中进行,以便主机控制器121(图3)将不知道这些常规(housekeeping)快闪块均衡操作。
参考图13A,控制器300还可以在检测到读干扰时实现对闪存器件330的读清洗。对于闪存器件330内的NAND存储器阵列的一个区域的读操作可能影响或干扰存储器阵列的其他区域,导致单元从一个状态移动到另一状态,并最终当试图读取先前存储到那些其他区域的数据时导致位错误。此干扰影响可以通过许多读操作累积,最终导致可能超过系统的数据校正能力的位错误数量。超过系统校正能力的错误被称为不可校正的错误。防止编程干扰带来失败的一个方法是对潜在易受影响的区域进行读或者“清洗”操作,以便在它们变为不可校正或者不可恢复的错误之前检测干扰影响。一旦检测到干扰情况(通常通过检测到关于读取的数据存在许多错误位),处理器3040可以通常通过将数据复制到NAND存储器阵列的另一区域来将该数据移动到存储器中另一区域以便“刷新”它。
读清洗复制通常在主机读操作、即内部系统读操作的过程期间在读取的块中或者通过调度的读清洗扫描由ECC校正引擎3060(图13A)发现的可校正的ECC错误触发。系统读操作是闪存系统读取存储在NAND快闪中的固件、参数或者映射信息所需的操作。读清洗扫描是读取块中的所有数据以确定其中包含的任意数据是否已经被干扰。通常在主机读或者系统读操作的过程期间当块已经部分地读取时选择块用于读清洗扫描,但是也可以使用其他标准来选择块,比如随机地或者经由通过存储器的块的确定性排序。因为读清洗扫描操作花费时间并且影响数据的吞吐量,因此系统可以通过使用随机选择、计数器或者其他机制仅周期地或者偶尔地选择块用于读清洗扫描。调度的频率可以被校准为在系统性能需要以及在数据变为不可校正之前检测被干扰的数据所需的频率之间平衡。在检测到具有在预定阈值以上的一些数量的错误位的可校正错误时,并对该块调度读清洗复制。
读清洗复制是如下方法,通过该方法,从被干扰的块读数据并在校正具有可校正的ECC错误的所有数据之后写到另一块。然后原始块可以被返回到公共空闲块池并最终被擦除并以其他数据来写。读清洗扫描和读清洗复制调度将由处理器3040在固件中在NAND控制器300中进行,以便主机控制器121将不知道这些常规的快闪块均衡操作。
结论
意图将以上详细描述理解为对本发明可以采取的所选形式的例示比而不是对本发明的限定。仅以下权利要求包括其等效物意图定义本发明的范围。此外,以下权利要求中的一些可以陈述组件可操作以进行某个功能或者被配置用于某个任务。应该注意,这些不死限制性的限定。还应该注意,权利要求中列出的动作可以按任意顺序进行——不是一定要按它们被列出的顺序。

Claims (28)

1.一种管理闪存器件的方法,该方法包括:
在与主机和闪存器件通信的控制器中进行:
从主机接收读命令;
响应于接收到该读命令,从该闪存器件取回数据;
对取回的数据进行错误分析;以及
将读状态传输到主机,其中该读状态包括基于错误分析的结果的状态信息。
2.如权利要求1的方法,其中进行错误分析包括产生关于取回的数据的纠错码,并将产生的纠错码与从闪存器件取回的存储的纠错码相比较。
3.如权利要求1的方法,其中传输读状态包括当向主机发送取回的数据时,将仅单个一位状态字段与取回的数据一起传输,状态位指示读命令的成功或失败之一。
4.如权利要求1的方法,其中传输读状态包括当向主机发送取回的数据时,将具有多个字段的状态消息与取回的数据一起传输,其中该多个字段的至少一个包括与读命令的成功或失败有关的信息。
5.如权利要求4的方法,其中该多个字段的至少另外一个包括与闪存器件中的空闲块使用有关的信息。
6.一种用于在主机和闪存器件之间接口的控制器,该控制器包括:
第一接口,被配置为在控制器和主机之间接口;
第二接口,被配置为在控制器和闪存器件之间接口;
控制模块,被配置为响应于从主机接收到读命令,对通过第二接口从闪存器件取回的数据进行错误分析;以及
状态模块,被配置为基于该错误分析的结果准备读状态信息;以及
其中该控制模块还被配置为通过第一接口向主机传输读状态信息与根据错误分析处理的取回的数据。
7.如权利要求6的控制器,其中该错误分析包括计算关于取回的数据的纠错码以及比较计算的纠错码与从闪存器件取回的存储的纠错码。
8.如权利要求6的控制器,其中错误分析包括计算单个纠错码。
9.如权利要求6的控制器,其中错误分析包括以电压偏移重新读取。
10.如权利要求6的控制器,其中读状态包括指示读命令的成功或失败之一的单个位。
11.如权利要求6的控制器,其中读状态包括布置在多个字段中的状态信息,其中该多个字段的至少一个包括与读命令的成功或失败有关的信息。
12.如权利要求11的控制器,其中该多个字段的至少另外一个包括与在闪存器件中的空闲块使用有关的信息。
13.一种管理闪存器件的方法,包括:
在与主机和闪存器件通信的控制器中进行:
从主机接收命令;
执行该命令;
确定发生与该命令有关的错误;
将关于该错误的状态信息存储在闪存器件中;以及
向主机传输标识关于该错误的状态信息已被控制器存储的错误指示符。
14.如权利要求13的方法,其中该命令包括写命令。
15.如权利要求13的方法,其中该错误包括块编程失败或者块擦除失败。
16.如权利要求13的方法,其中该命令包括读命令。
17.如权利要求16的方法,其中确定发生了错误包括响应于该读命令,对从闪存器件取回的数据应用纠错码,并且标识读错误已经发生并且被校正或者不可校正。
18.如权利要求13的方法,其中该状态信息包括多个状态字段,其中该状态字段的至少一个与读错误的严重性有关。
19.如权利要求13的方法,其中存储关于错误的状态信息包括存储用于由主机使用的、与闪存器件中的空闲块使用有关的信息。
20.一种用于在主机和闪存器件之间接口的控制器,该控制器包括:
第一接口,被配置为在控制模块和主机之间接口;
第二接口,被配置为在控制模块和闪存器件之间接口;
控制模块,被配置为响应于通过第一接口从主机接收的命令的执行,确定是否发生与该命令有关的错误;以及
状态模块,被配置为将关于该错误的状态信息存储在闪存器件上;以及
其中该控制模块还被配置为向主机传输标识关于错误的该状态信息已被状态模块存储的错误指示符。
21.如权利要求20的控制器,其中该命令包括写命令。
22.如权利要求21的控制器,其中该错误包括块编程失败或者块擦除失败。
23.如权利要求20的控制器,其中该命令包括读命令。
24.如权利要求23的控制器,其中该控制模块被配置为响应于该读命令,通过对从闪存器件取回的数据进行纠错码分析来确定是否发生错误。
25.如权利要求20的控制器,其中关于错误的该状态信息还包括与闪存器件中的空闲块使用有关的信息。
26.一种用于在主机和闪存器件之间接口的控制器,该控制器包括:
第一接口,被配置为在控制模块和主机之间接口;
第二接口,被配置为在控制模块和闪存器件之间接口;以及
空闲块管理模块,可重设地被布置为在以下模式之一工作:
第一空闲块管理模式,其中该空闲块管理模块被配置为对于预定数量的空闲块扫描闪存器件并阻止主机对该预定数量的空闲块的访问;
第二空闲块管理模式,其中该空闲块管理模块被配置为扫描闪存器件中的所有块并确定可用块的总数,以仅允许主机访问预定数量的可用块,并保留多于预定阈值的、可用块总数中的任意剩余者作为空闲块,其中该控制器阻止主机对该剩余者的访问;或者
第三空闲块管理模式,其中该空闲块管理模块被配置为当预定数量的空闲块之一已被空闲块管理模块使用时,从主机请求另外的空闲块。
27.一种管理闪存器件的方法,该方法包括:
在与主机和闪存器件通信的控制器中进行:
保留闪存器件中的预定数量的可用块作为空闲块,并允许主机访问闪存器件中的除了该预定数量的可用块之外的所有可用块;
当可由主机访问的块发生错误时,用空闲块之一替换该可由主机访问的块;
在替换块之后,向主机传输将可由主机访问的可用块之一返回到控制器作为空闲块的请求;以及
从主机接收标识该可用块之一的信息。
28.如权利要求27的方法,其中传输请求包括在附加于从闪存器件取回的数据的字段中传输该请求。
CN2010800358558A 2009-08-11 2010-08-06 提供闪存系统中的读状态和空闲块管理信息的控制器和方法 Pending CN102473126A (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US12/539,379 US20110041005A1 (en) 2009-08-11 2009-08-11 Controller and Method for Providing Read Status and Spare Block Management Information in a Flash Memory System
US12/539,379 2009-08-11
PCT/US2010/044701 WO2011019602A2 (en) 2009-08-11 2010-08-06 Controller and method for providing read status and spare block management information in a flash memory system

Publications (1)

Publication Number Publication Date
CN102473126A true CN102473126A (zh) 2012-05-23

Family

ID=42813407

Family Applications (1)

Application Number Title Priority Date Filing Date
CN2010800358558A Pending CN102473126A (zh) 2009-08-11 2010-08-06 提供闪存系统中的读状态和空闲块管理信息的控制器和方法

Country Status (5)

Country Link
US (1) US20110041005A1 (zh)
EP (1) EP2465036A2 (zh)
KR (1) KR20120052303A (zh)
CN (1) CN102473126A (zh)
WO (1) WO2011019602A2 (zh)

Cited By (32)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102880524A (zh) * 2012-09-27 2013-01-16 上海宏力半导体制造有限公司 一种校正信息载入方法
CN103593296A (zh) * 2012-08-15 2014-02-19 群联电子股份有限公司 数据储存方法、存储器控制器与存储器储存装置
CN103971723A (zh) * 2013-02-01 2014-08-06 Lsi公司 用于读取电压适应的补偿回路
CN104598163A (zh) * 2014-11-28 2015-05-06 成都龙腾中远信息技术有限公司 一种基于载荷地面测试接口适配器的高速存储模块的存储方法
WO2015157932A1 (en) * 2014-04-16 2015-10-22 Intel Corporation Method, apparatus and system for handling data error events with memory controller
CN106294215A (zh) * 2015-06-24 2017-01-04 三星电子株式会社 存储装置和操作存储装置的方法
CN107633867A (zh) * 2017-09-20 2018-01-26 南京扬贺扬微电子科技有限公司 基于ft4222的spi闪存测试系统及方法
CN108519859A (zh) * 2018-03-30 2018-09-11 北京联想核芯科技有限公司 数据读取方法、装置、设备及介质
CN108536622A (zh) * 2017-03-06 2018-09-14 爱思开海力士有限公司 存储装置、数据处理系统以及操作存储装置的方法
CN109478170A (zh) * 2016-07-26 2019-03-15 美光科技公司 存取状态信息
CN109491814A (zh) * 2017-09-13 2019-03-19 东芝存储器株式会社 专用集成电路中的集中式错误处置
CN109565502A (zh) * 2016-07-19 2019-04-02 西门子移动有限责任公司 用于传输数据的存储设备、数据传输设备和方法
CN110007853A (zh) * 2019-01-30 2019-07-12 青岛镕铭半导体有限公司 一种Nandflash命令处理方法、装置、终端及存储介质
CN110070901A (zh) * 2018-01-24 2019-07-30 华邦电子股份有限公司 半导体存储装置、其动作方法及分析系统
CN110362514A (zh) * 2018-04-11 2019-10-22 爱思开海力士有限公司 存储器系统以及操作存储器控制器的方法
CN110750467A (zh) * 2019-10-22 2020-02-04 深圳芯邦科技股份有限公司 一种Nand Flash中干扰页的检测方法、系统
CN111078133A (zh) * 2019-10-18 2020-04-28 苏州浪潮智能科技有限公司 一种管理全闪存储阵列的空间的方法、设备及介质
CN111128287A (zh) * 2018-10-31 2020-05-08 三星电子株式会社 操作存储设备的方法、存储设备以及操作存储系统的方法
CN111475325A (zh) * 2020-04-03 2020-07-31 江苏芯盛智能科技有限公司 一种存储设备纠错方法及纠错装置
CN111627489A (zh) * 2020-04-20 2020-09-04 珠海妙存科技有限公司 闪存特性分析方法及系统
CN111913647A (zh) * 2019-05-08 2020-11-10 华为技术有限公司 一种存储设备的磨损均衡方法、装置及相关设备
CN112181304A (zh) * 2020-09-30 2021-01-05 浙江大学 一种星载NAND Flash存储管理系统
CN113010102A (zh) * 2019-12-20 2021-06-22 台湾积体电路制造股份有限公司 操作存储器单元的方法及存储器器件
CN113870924A (zh) * 2020-06-30 2021-12-31 美光科技公司 用于使主机接口饱和的技术
CN114097038A (zh) * 2019-06-17 2022-02-25 美光科技公司 具有用于错误校正的状态反馈的存储器装置
CN114911422A (zh) * 2018-09-21 2022-08-16 美光科技公司 经调整扫描事件阈值
CN115443502A (zh) * 2020-03-16 2022-12-06 美光科技公司 用于数据和错误校正信息的单独裸片间连接器以及相关系统、方法和设备
TWI789122B (zh) * 2021-11-17 2023-01-01 瑞昱半導體股份有限公司 指令轉換系統以及指令轉換方法
TWI798536B (zh) * 2020-03-03 2023-04-11 慧榮科技股份有限公司 閃存資料故障分析的方法及電腦程式產品
CN116302664A (zh) * 2021-12-08 2023-06-23 西部数据技术公司 存储器匹配的低密度奇偶校验译码方案
WO2024012093A1 (zh) * 2022-07-13 2024-01-18 北京超弦存储器研究院 一种ssd、ssd的主控芯片及ssd资源管理方法
TWI861328B (zh) * 2020-02-12 2024-11-11 南韓商三星電子股份有限公司 用於硬體確認的儲存元件及藉由其進行硬體確認的方法

Families Citing this family (112)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8140712B2 (en) * 2009-07-17 2012-03-20 Sandforce, Inc. System, method, and computer program product for inserting a gap in information sent from a drive to a host device
US8516166B2 (en) 2009-07-20 2013-08-20 Lsi Corporation System, method, and computer program product for reducing a rate of data transfer to at least a portion of memory
US8266481B2 (en) * 2009-07-29 2012-09-11 Stec, Inc. System and method of wear-leveling in flash storage
US8453021B2 (en) 2009-07-29 2013-05-28 Stec, Inc. Wear leveling in solid-state device
US8499220B2 (en) * 2009-09-08 2013-07-30 Lsi Corporation Systems and methods for re-designating memory regions as error code corrected memory regions
US8108737B2 (en) * 2009-10-05 2012-01-31 Sandforce, Inc. System, method, and computer program product for sending failure information from a serial ATA (SATA) solid state drive (SSD) to a host device
TWI408688B (zh) * 2009-10-12 2013-09-11 Phison Electronics Corp 用於快閃記憶體的資料寫入方法及其控制器與儲存系統
US8595411B2 (en) * 2009-12-30 2013-11-26 Sandisk Technologies Inc. Method and controller for performing a sequence of commands
US8443263B2 (en) 2009-12-30 2013-05-14 Sandisk Technologies Inc. Method and controller for performing a copy-back operation
TW201212035A (en) * 2010-09-10 2012-03-16 Jmicron Technology Corp Access method of volatile memory and access apparatus of volatile memory
US8464137B2 (en) * 2010-12-03 2013-06-11 International Business Machines Corporation Probabilistic multi-tier error correction in not-and (NAND) flash memory
US8819328B2 (en) 2010-12-30 2014-08-26 Sandisk Technologies Inc. Controller and method for performing background operations
US8886990B2 (en) * 2011-01-27 2014-11-11 Apple Inc. Block management schemes in hybrid SLC/MLC memory
JP5728292B2 (ja) * 2011-02-04 2015-06-03 株式会社東芝 メモリデバイス及びホストシステム
US9058291B2 (en) 2011-02-28 2015-06-16 International Business Machines Corporation Multiple erasure correcting codes for storage arrays
US9170878B2 (en) 2011-04-11 2015-10-27 Inphi Corporation Memory buffer with data scrambling and error correction
US20120297248A1 (en) * 2011-05-17 2012-11-22 Alan David Bennett Block write handling after corruption
US8694719B2 (en) 2011-06-24 2014-04-08 Sandisk Technologies Inc. Controller, storage device, and method for power throttling memory operations
KR20130012737A (ko) * 2011-07-26 2013-02-05 에스케이하이닉스 주식회사 반도체 메모리 장치 및 이를 포함하는 반도체 시스템
US9003102B2 (en) 2011-08-26 2015-04-07 Sandisk Technologies Inc. Controller with extended status register and method of use therewith
US8656251B2 (en) * 2011-09-02 2014-02-18 Apple Inc. Simultaneous data transfer and error control to reduce latency and improve throughput to a host
TWI473103B (zh) * 2011-09-14 2015-02-11 威剛科技股份有限公司 快閃記憶體儲存裝置及其不良儲存區域的判定方法
US8839083B2 (en) * 2011-10-25 2014-09-16 Taejin Info Tech Co., Ltd. Secure error detection and synchronous data tagging for high-speed data transfer
US20130124778A1 (en) * 2011-11-10 2013-05-16 Greenliant Llc Method of storing host data and meta data in a nand memory, a memory controller and a memory system
US8700961B2 (en) 2011-12-20 2014-04-15 Sandisk Technologies Inc. Controller and method for virtual LUN assignment for improved memory bank mapping
US9740439B2 (en) 2011-12-23 2017-08-22 International Business Machines Corporation Solid-state storage management
US8656130B2 (en) 2011-12-23 2014-02-18 International Business Machines Corporation Low latency and persistent data storage
US9116620B2 (en) 2011-12-30 2015-08-25 Sandisk Technologies Inc. Controller and method for memory aliasing for different flash memory types
US9141308B2 (en) 2011-12-30 2015-09-22 Sandisk Technologies Inc. Controller and method for using a transaction flag for page protection
CN102609334B (zh) * 2012-01-09 2016-05-04 晨星软件研发(深圳)有限公司 非易失闪存擦除异常存储块修复方法和装置
US8874995B2 (en) 2012-02-02 2014-10-28 International Business Machines Corporation Partial-maximum distance separable (PMDS) erasure correcting codes for storage arrays
US8760922B2 (en) 2012-04-10 2014-06-24 Sandisk Technologies Inc. System and method for micro-tiering in non-volatile memory
WO2013158817A1 (en) * 2012-04-20 2013-10-24 Violin Memory, Inc. Lun management with distributed raid controllers
TWI497515B (zh) * 2012-07-10 2015-08-21 Silicon Motion Inc 快閃記憶體控制器、快閃記憶體偵錯方法
US9734921B2 (en) * 2012-11-06 2017-08-15 Rambus Inc. Memory repair using external tags
US9032244B2 (en) * 2012-11-16 2015-05-12 Microsoft Technology Licensing, Llc Memory segment remapping to address fragmentation
US9171620B2 (en) 2012-11-29 2015-10-27 Sandisk Technologies Inc. Weighted read scrub for nonvolatile memory
US9063879B2 (en) 2012-12-13 2015-06-23 Sandisk Technologies Inc. Inspection of non-volatile memory for disturb effects
US9502139B1 (en) 2012-12-18 2016-11-22 Intel Corporation Fine grained online remapping to handle memory errors
US9098205B2 (en) 2013-01-30 2015-08-04 Sandisk Technologies Inc. Data randomization in 3-D memory
US9135100B2 (en) 2013-03-14 2015-09-15 Micron Technology, Inc. Cooperative memory error detection and repair
US9478271B2 (en) * 2013-03-14 2016-10-25 Seagate Technology Llc Nonvolatile memory data recovery after power failure
US9235468B2 (en) * 2013-04-12 2016-01-12 Qualcomm Incorporated Systems and methods to improve the reliability and lifespan of flash memory
US9230656B2 (en) 2013-06-26 2016-01-05 Sandisk Technologies Inc. System for maintaining back gate threshold voltage in three dimensional NAND memory
CN104346292B (zh) 2013-08-05 2017-10-24 慧荣科技股份有限公司 用来管理一记忆装置的方法、记忆装置与控制器
CN104346288B (zh) 2013-08-05 2017-07-28 慧荣科技股份有限公司 用来管理一记忆装置的方法以及记忆装置与控制器
TWI502591B (zh) * 2013-08-05 2015-10-01 Silicon Motion Inc 用來管理一記憶裝置之方法以及記憶裝置與控制器
US9240238B2 (en) 2013-09-20 2016-01-19 Sandisk Technologies Inc. Back gate operation with elevated threshold voltage
US9128834B2 (en) * 2013-09-24 2015-09-08 International Business Machines Corporation Implementing memory module communications with a host processor in multiported memory configurations
US9336129B2 (en) 2013-10-02 2016-05-10 Sandisk Technologies Inc. System and method for bank logical data remapping
US9786388B1 (en) * 2013-10-09 2017-10-10 Avago Technologies General Ip (Singapore) Pte. Ltd. Detecting and managing bad columns
US9348694B1 (en) * 2013-10-09 2016-05-24 Avago Technologies General Ip (Singapore) Pte. Ltd. Detecting and managing bad columns
US20150106547A1 (en) * 2013-10-14 2015-04-16 Micron Technology, Inc. Distributed memory systems and methods
US20150121156A1 (en) 2013-10-28 2015-04-30 Sandisk Technologies Inc. Block Structure Profiling in Three Dimensional Memory
US10073731B2 (en) * 2013-11-27 2018-09-11 Intel Corporation Error correction in memory
US9230689B2 (en) 2014-03-17 2016-01-05 Sandisk Technologies Inc. Finding read disturbs on non-volatile memories
US9778975B2 (en) * 2014-05-19 2017-10-03 S34A, Inc. Hidden data identification in solid state drive forensics
US10055125B2 (en) 2014-05-19 2018-08-21 S34A, Inc. On-board chip reader adapter (OCRA)
US9922718B2 (en) 2014-05-22 2018-03-20 Seagate Technology Llc Flash command that reports a count of cell program failures
US9600189B2 (en) 2014-06-11 2017-03-21 International Business Machines Corporation Bank-level fault management in a memory system
US9442787B2 (en) * 2014-06-13 2016-09-13 Sandisk Technologies Llc Three dimensional (3D) memory including error detection circuitry
US8918577B1 (en) 2014-06-13 2014-12-23 Sandisk Technologies Inc. Three dimensional nonvolatile memory with variable block capacity
US9442799B2 (en) 2014-06-26 2016-09-13 Microsoft Technology Licensing, Llc Extended lifetime memory
WO2016003449A1 (en) * 2014-07-01 2016-01-07 Hewlett-Packard Development Company, L.P. Memory controller
US9367392B2 (en) * 2014-08-01 2016-06-14 Winbond Electronics Corporation NAND flash memory having internal ECC processing and method of operation thereof
US9652321B2 (en) * 2014-09-23 2017-05-16 Intel Corporation Recovery algorithm in non-volatile memory
TWI537966B (zh) * 2014-10-03 2016-06-11 群聯電子股份有限公司 錯誤處理方法、記憶體儲存裝置及記憶體控制電路單元
US20160191665A1 (en) 2014-12-31 2016-06-30 Samsung Electronics Co., Ltd. Computing system with distributed compute-enabled storage group and method of operation thereof
US9880748B2 (en) * 2015-02-13 2018-01-30 Qualcomm Incorporated Bifurcated memory management for memory elements
US9208817B1 (en) 2015-03-10 2015-12-08 Alibaba Group Holding Limited System and method for determination and reallocation of pending sectors caused by media fatigue
WO2016175852A1 (en) * 2015-04-30 2016-11-03 Hewlett Packard Enterprise Development Lp Memory module error tracking
US9703630B2 (en) 2015-06-08 2017-07-11 International Business Machines Corporation Selective error coding
KR102461453B1 (ko) 2015-06-10 2022-11-02 삼성전자주식회사 스토리지 장치
KR102403266B1 (ko) 2015-06-22 2022-05-27 삼성전자주식회사 데이터 저장 장치와 이를 포함하는 데이터 처리 시스템
US9577854B1 (en) 2015-08-20 2017-02-21 Micron Technology, Inc. Apparatuses and methods for asymmetric bi-directional signaling incorporating multi-level encoding
US9983963B2 (en) 2015-11-09 2018-05-29 Alibaba Group Holding Limited System and method for exploiting hard disk drive capacity reserve and extending operating life thereof
US9965352B2 (en) * 2015-11-20 2018-05-08 Qualcomm Incorporated Separate link and array error correction in a memory system
KR20170089069A (ko) 2016-01-25 2017-08-03 에스케이하이닉스 주식회사 메모리 시스템 및 그의 동작방법
TWI615853B (zh) * 2016-05-18 2018-02-21 瑞昱半導體股份有限公司 記憶體裝置、記憶體控制器與其控制方法
US11449232B1 (en) * 2016-07-22 2022-09-20 Pure Storage, Inc. Optimal scheduling of flash operations
US10679722B2 (en) 2016-08-26 2020-06-09 Sandisk Technologies Llc Storage system with several integrated components and method for use therewith
US20180059943A1 (en) * 2016-08-26 2018-03-01 Sandisk Technologies Llc Media Controller and Method for Management of CPU-Attached Non-Volatile Memory
US10489313B2 (en) 2016-10-31 2019-11-26 Alibaba Group Holding Limited Flash storage failure rate reduction and hyperscale infrastructure robustness enhancement through the MRAM-NOR flash based cache architecture
US10445199B2 (en) * 2016-12-22 2019-10-15 Western Digital Technologies, Inc. Bad page management in storage devices
US10613772B2 (en) * 2017-03-16 2020-04-07 Qualcomm Incorporated Methods and apparatuses for copying a data page in an unmanaged flash memory device
US10164817B2 (en) * 2017-03-21 2018-12-25 Micron Technology, Inc. Methods and apparatuses for signal translation in a buffered memory
CN107203441A (zh) * 2017-08-01 2017-09-26 常州昊云工控科技有限公司 双备份数据存储装置及其工作方法、机器人
US10331345B2 (en) * 2017-09-29 2019-06-25 Intel Corporation Method and apparatus for reducing silent data errors in non-volatile memory systems
KR102384773B1 (ko) 2017-10-12 2022-04-11 삼성전자주식회사 스토리지 장치, 컴퓨팅 시스템, 그리고 그것의 디버깅 방법
KR102714157B1 (ko) 2019-01-15 2024-10-08 에스케이하이닉스 주식회사 메모리 시스템, 데이터 처리 시스템 및 데이터 처리 시스템의 동작방법
KR102387181B1 (ko) 2017-10-31 2022-04-19 에스케이하이닉스 주식회사 컴퓨팅 디바이스 및 그것의 동작방법
KR102394695B1 (ko) 2017-11-08 2022-05-10 에스케이하이닉스 주식회사 메모리 시스템 및 그것의 동작방법
KR102455880B1 (ko) * 2018-01-12 2022-10-19 에스케이하이닉스 주식회사 메모리 시스템 및 메모리 시스템의 동작 방법
US11636014B2 (en) * 2017-10-31 2023-04-25 SK Hynix Inc. Memory system and data processing system including the same
US10777295B2 (en) * 2018-04-12 2020-09-15 Micron Technology, Inc. Defective memory unit screening in a memory system
US10733046B2 (en) * 2018-04-20 2020-08-04 Micron Technology, Inc. Transaction metadata
US10725851B2 (en) * 2018-04-27 2020-07-28 Seagate Technology Llc Storage device self-recovery exception engine
CN109213647B (zh) * 2018-08-29 2021-11-19 努比亚技术有限公司 一种刷机检测方法、移动终端及计算机可读存储介质
US10795810B2 (en) * 2018-09-10 2020-10-06 Micron Technology, Inc. Wear-leveling scheme for memory subsystems
US10607712B1 (en) 2018-09-28 2020-03-31 Toshiba Memory Corporation Media error reporting improvements for storage drives
KR20200113047A (ko) 2019-03-20 2020-10-06 삼성전자주식회사 오픈 채널 스토리지 장치의 동작 방법
US11243699B2 (en) 2019-05-22 2022-02-08 Micron Technology, Inc. System using a restricted operation mode memory indicator
US11294766B2 (en) * 2019-08-13 2022-04-05 Micron Technology, Inc. Coordinated error correction
US11775378B2 (en) * 2019-12-16 2023-10-03 Micron Technology, Inc. Memory health status reporting
US12099746B2 (en) * 2019-12-16 2024-09-24 Micron Technology, Inc. Interrupt signaling for a memory device
US11309052B2 (en) * 2020-08-25 2022-04-19 Micron Technology, Inc. Read voltage calibration for copyback operation
US12265720B2 (en) * 2020-08-31 2025-04-01 Alibaba Group Holding Limited Method and system of large amount of data migration with enhanced efficiency
JP2022042762A (ja) * 2020-09-03 2022-03-15 キオクシア株式会社 不揮発性メモリ、メモリシステム、および、不揮発性メモリの制御方法
KR102418060B1 (ko) * 2020-12-14 2022-07-07 현대오토에버 주식회사 플래시 메모리 ecc 모듈의 진단 장치 및 방법
US11977758B2 (en) * 2022-08-12 2024-05-07 Micron Technology, Inc. Assigning blocks of memory systems
US12204795B2 (en) * 2022-08-18 2025-01-21 Micron Technology, Inc. Error detection and correction in a controller
US20240289056A1 (en) * 2023-02-27 2024-08-29 Micron Technology Inc. Verifying chunks of data based on read-verify commands

Citations (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5532962A (en) * 1992-05-20 1996-07-02 Sandisk Corporation Soft errors handling in EEPROM devices
US6014755A (en) * 1992-10-30 2000-01-11 Intel Corporation Method of managing defects in flash disk memories
CN1437721A (zh) * 2000-02-17 2003-08-20 三因迪斯克公司 多数据区段同时编程和在其它指定块中存储物理块特征的闪速eeprom系统
CN1499531A (zh) * 2002-10-28 2004-05-26 管理非易失存储器系统中的数据完整性的方法和装置
US20050055621A1 (en) * 2003-09-10 2005-03-10 Adelmann Todd Christopher Magnetic memory with error correction coding
WO2006059772A2 (en) * 2004-11-30 2006-06-08 Kabushiki Kaisha Toshiba Memory system, memory system controller, and a data processing method in a host apparatus
CN1914627A (zh) * 2004-02-03 2007-02-14 松下电器产业株式会社 存储卡和数据处理装置及存储卡的控制方法和设定方法
US20080055957A1 (en) * 2006-08-30 2008-03-06 Guobiao Zhang Three-Dimensional Memory Module (3D-MM) Excelling Contemporary Micro-Drive (CMD)
US7360132B1 (en) * 2005-05-19 2008-04-15 Sun Microsystems, Inc. System and method for memory chip kill
US7372744B2 (en) * 2004-09-03 2008-05-13 Kabushiki Kaisha Toshiba Memory system which copies successive pages, and data copy method therefor
US7467337B2 (en) * 2004-12-22 2008-12-16 Fujitsu Limited Semiconductor memory device
US20080320214A1 (en) * 2003-12-02 2008-12-25 Super Talent Electronics Inc. Multi-Level Controller with Smart Storage Transfer Manager for Interleaving Multiple Single-Chip Flash Memory Devices
US20090063730A1 (en) * 2007-08-31 2009-03-05 Gower Kevin C System for Supporting Partial Cache Line Write Operations to a Memory Module to Reduce Write Data Traffic on a Memory Channel

Family Cites Families (99)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CA2015488C (en) * 1989-04-30 1997-07-08 Tomoyasu Tsuda Polyurethane, process for its production and polyester diol used for its production
GB2259589A (en) * 1991-09-12 1993-03-17 Motorola Inc Self - timed random access memories
US6230233B1 (en) 1991-09-13 2001-05-08 Sandisk Corporation Wear leveling techniques for flash EEPROM systems
JPH10107649A (ja) * 1996-09-30 1998-04-24 Sanyo Electric Co Ltd 符号誤り訂正/検出デコーダ
US5771346A (en) * 1996-10-24 1998-06-23 Micron Quantum Devices, Inc. Apparatus and method for detecting over-programming condition in multistate memory device
US5928370A (en) * 1997-02-05 1999-07-27 Lexar Media, Inc. Method and apparatus for verifying erasure of memory blocks within a non-volatile memory structure
US6034882A (en) 1998-11-16 2000-03-07 Matrix Semiconductor, Inc. Vertically stacked field programmable nonvolatile memory and method of fabrication
JP3602984B2 (ja) * 1999-07-09 2004-12-15 富士通株式会社 メモリ装置
JP3937214B2 (ja) * 1999-09-17 2007-06-27 株式会社ルネサステクノロジ エラー訂正回数を記録する記憶装置
JP2001297038A (ja) * 2000-04-11 2001-10-26 Toshiba Corp データ記憶装置および記録媒体並びに記録媒体制御方法
US6631085B2 (en) 2000-04-28 2003-10-07 Matrix Semiconductor, Inc. Three-dimensional memory array incorporating serial chain diode stack
US6420215B1 (en) 2000-04-28 2002-07-16 Matrix Semiconductor, Inc. Three-dimensional memory array and method of fabrication
US6738937B1 (en) * 2000-12-01 2004-05-18 Lsi Logic Corporation Method for nondisruptive testing of device and host attachment to storage subsystems
US7120761B2 (en) * 2000-12-20 2006-10-10 Fujitsu Limited Multi-port memory based on DRAM core
US6754765B1 (en) * 2001-05-14 2004-06-22 Integrated Memory Logic, Inc. Flash memory controller with updateable microcode
GB0123416D0 (en) * 2001-09-28 2001-11-21 Memquest Ltd Non-volatile memory control
GB0123415D0 (en) * 2001-09-28 2001-11-21 Memquest Ltd Method of writing data to non-volatile memory
US6778436B2 (en) * 2001-10-10 2004-08-17 Fong Piau Apparatus and architecture for a compact flash memory controller
US6859856B2 (en) * 2001-10-23 2005-02-22 Flex P Industries Sdn. Bhd Method and system for a compact flash memory controller
US7219271B2 (en) * 2001-12-14 2007-05-15 Sandisk 3D Llc Memory device and method for redundancy/self-repair
US7081377B2 (en) 2002-06-27 2006-07-25 Sandisk 3D Llc Three-dimensional memory
US6976194B2 (en) * 2002-06-28 2005-12-13 Sun Microsystems, Inc. Memory/Transmission medium failure handling controller and method
US6973613B2 (en) * 2002-06-28 2005-12-06 Sun Microsystems, Inc. Error detection/correction code which detects and corrects component failure and which provides single bit error correction subsequent to component failure
US7171536B2 (en) 2002-10-28 2007-01-30 Sandisk Corporation Unusable block management within a non-volatile memory system
US7096313B1 (en) * 2002-10-28 2006-08-22 Sandisk Corporation Tracking the least frequently erased blocks in non-volatile memory systems
US20050055479A1 (en) * 2002-11-21 2005-03-10 Aviad Zer Multi-module circuit card with inter-module direct memory access
US8037229B2 (en) * 2002-11-21 2011-10-11 Sandisk Technologies Inc. Combination non-volatile memory and input-output card with direct memory access
US7225357B2 (en) * 2003-01-21 2007-05-29 Zentek Technology Japan, Inc. SDIO card development system
JP4550439B2 (ja) * 2003-02-28 2010-09-22 東芝メモリシステムズ株式会社 Ecc制御装置
JP2004355163A (ja) * 2003-05-28 2004-12-16 Renesas Technology Corp データ処理装置および電子機器
US6988175B2 (en) 2003-06-30 2006-01-17 M-Systems Flash Disk Pioneers Ltd. Flash memory management method that is resistant to data corruption by power loss
JP3984209B2 (ja) * 2003-07-31 2007-10-03 株式会社東芝 半導体記憶装置
KR100560767B1 (ko) * 2003-09-02 2006-03-13 삼성전자주식회사 탈착 가능한 저장 장치를 포함하는 시스템 및 그것의 제어방법
US8071535B2 (en) * 2003-09-12 2011-12-06 The Regents Of The University Of California Guanidinium derivatives for improved cellular transport
US7012835B2 (en) 2003-10-03 2006-03-14 Sandisk Corporation Flash memory data correction and scrub techniques
US7730368B2 (en) * 2003-10-31 2010-06-01 Sandisk Il Ltd. Method, system and computer-readable code for testing of flash memory
EP1538525A1 (en) * 2003-12-04 2005-06-08 Texas Instruments Incorporated ECC computation simultaneously performed while reading or programming a flash memory
US7350044B2 (en) * 2004-01-30 2008-03-25 Micron Technology, Inc. Data move method and apparatus
CA2540365C (en) * 2004-02-05 2016-04-05 Research In Motion Limited Memory interface controller
JP4102313B2 (ja) * 2004-02-05 2008-06-18 株式会社東芝 半導体集積回路装置
JP2005234976A (ja) * 2004-02-20 2005-09-02 Renesas Technology Corp 記憶装置
JP2005258851A (ja) * 2004-03-12 2005-09-22 Renesas Technology Corp メモリカード
JP4570891B2 (ja) * 2004-03-30 2010-10-27 ルネサスエレクトロニクス株式会社 記憶装置
JP2006048783A (ja) * 2004-08-02 2006-02-16 Renesas Technology Corp 不揮発性メモリおよびメモリカード
JP2006048777A (ja) * 2004-08-02 2006-02-16 Toshiba Corp Nandフラッシュメモリおよびデータ書き込み方法
US7149111B2 (en) * 2004-12-17 2006-12-12 Msystems Ltd. Method of handling limitations on the order of writing to a non-volatile memory
US7187583B2 (en) * 2005-01-25 2007-03-06 Phison Electronics Corp. Method for reducing data error when flash memory storage device using copy back command
US7657696B2 (en) * 2005-02-25 2010-02-02 Lsi Corporation Method to detect NAND-flash parameters by hardware automatically
KR100759427B1 (ko) * 2005-03-17 2007-09-20 삼성전자주식회사 전력 소모가 적은 하드디스크 드라이버 및 이를 구비한 정보처리 시스템, 그리고 그들의 데이터 입출력 방법
KR100746289B1 (ko) * 2005-07-11 2007-08-03 삼성전자주식회사 메모리 용량 정보를 갱신하는 비휘발성 메모리 카드 장치및 방법
GB2428496A (en) * 2005-07-15 2007-01-31 Global Silicon Ltd Error correction for flash memory
US7362611B2 (en) * 2005-08-30 2008-04-22 Micron Technology, Inc. Non-volatile memory copy back
US8291295B2 (en) * 2005-09-26 2012-10-16 Sandisk Il Ltd. NAND flash memory controller exporting a NAND interface
US7631245B2 (en) * 2005-09-26 2009-12-08 Sandisk Il Ltd. NAND flash memory controller exporting a NAND interface
US20070076478A1 (en) * 2005-09-30 2007-04-05 Sigmatel, Inc. System and method of memory block management
US7661054B2 (en) * 2005-09-30 2010-02-09 Intel Corporation Methods and arrangements to remap degraded storage blocks
KR20050107369A (ko) * 2005-10-27 2005-11-11 서운식 모바일 기기를 위한 코드 직접 수행기능을 갖는 대용량저장장치 및 제어 방법
US7379330B2 (en) 2005-11-08 2008-05-27 Sandisk Corporation Retargetable memory cell redundancy methods
US7769978B2 (en) * 2005-12-21 2010-08-03 Sandisk Corporation Method and system for accessing non-volatile storage devices
JP2007183844A (ja) * 2006-01-10 2007-07-19 Hitachi Global Storage Technologies Netherlands Bv 補助記憶装置および記録再生方法
KR20070076849A (ko) * 2006-01-20 2007-07-25 삼성전자주식회사 메모리 카드의 카피백 동작을 수행하는 장치 및 방법
US8756399B2 (en) * 2006-01-25 2014-06-17 Seagate Technology Llc Mutable association of a set of logical block addresses to a band of physical storage blocks
JP2007272635A (ja) * 2006-03-31 2007-10-18 Toshiba Corp メモリシステム及びコントローラ
US7366029B2 (en) 2006-04-24 2008-04-29 Sandisk Corporation High-performance flash memory data transfer
US7852690B2 (en) * 2006-05-15 2010-12-14 Apple Inc. Multi-chip package for a flash memory
US7584336B2 (en) * 2006-06-08 2009-09-01 International Business Machines Corporation Systems and methods for providing data modification operations in memory subsystems
JP4960050B2 (ja) * 2006-09-19 2012-06-27 株式会社東芝 不揮発性半導体記憶装置、及び不揮発性半導体記憶装置のデータ書き込み方法
US8127200B2 (en) * 2006-12-24 2012-02-28 Sandisk Il Ltd. Flash memory device and system with randomizing for suppressing errors
US7984360B2 (en) * 2006-12-31 2011-07-19 Ramot At Tel Aviv University Ltd. Avoiding errors in a flash memory by using substitution transformations
US7949931B2 (en) * 2007-01-02 2011-05-24 International Business Machines Corporation Systems and methods for error detection in a memory system
US7861139B2 (en) * 2007-01-26 2010-12-28 Micron Technology, Inc. Programming management data for NAND memories
JP4498370B2 (ja) * 2007-02-14 2010-07-07 株式会社東芝 データ書き込み方法
US7477547B2 (en) 2007-03-28 2009-01-13 Sandisk Corporation Flash memory refresh techniques triggered by controlled scrub data reads
US7865473B2 (en) * 2007-04-02 2011-01-04 International Business Machines Corporation Generating and indicating incremental backup copies from virtual copies of a data set
US8473791B2 (en) * 2007-04-30 2013-06-25 Hewlett-Packard Development Company, L.P. Redundant memory to mask DRAM failures
JP5162763B2 (ja) * 2007-08-07 2013-03-13 株式会社メガチップス メモリアクセスシステム
US20100269021A1 (en) * 2007-09-05 2010-10-21 Gower Kevin C Method for Performing Error Correction Operations in a Memory Hub Device of a Memory Module
US8103936B2 (en) * 2007-10-17 2012-01-24 Micron Technology, Inc. System and method for data read of a synchronous serial interface NAND
US8209465B2 (en) * 2007-10-30 2012-06-26 Hagiwara Sys-Com Co., Ltd. Data writing method
JP5019611B2 (ja) * 2007-12-27 2012-09-05 株式会社東芝 メモリシステム
JP5150245B2 (ja) * 2007-12-27 2013-02-20 株式会社東芝 半導体記憶装置
JP4856110B2 (ja) * 2008-03-01 2012-01-18 株式会社東芝 チェンサーチ装置およびチェンサーチ方法
JP4691122B2 (ja) * 2008-03-01 2011-06-01 株式会社東芝 メモリシステム
JP2009244962A (ja) * 2008-03-28 2009-10-22 Toshiba Corp メモリシステム
US8281061B2 (en) * 2008-03-31 2012-10-02 Micron Technology, Inc. Data conditioning to improve flash memory reliability
US8059455B2 (en) * 2008-05-09 2011-11-15 Sandisk Il Ltd. Partial scrambling to reduce correlation
US8154918B2 (en) * 2008-06-30 2012-04-10 Sandisk Il Ltd. Method for page- and block based scrambling in non-volatile memory
US20100017650A1 (en) * 2008-07-19 2010-01-21 Nanostar Corporation, U.S.A Non-volatile memory data storage system with reliability management
US20100332942A1 (en) * 2008-09-10 2010-12-30 Arm Limited Memory controller for NAND memory using forward error correction
US8429330B2 (en) * 2008-09-12 2013-04-23 Sandisk Technologies Inc. Method for scrambling data in which scrambling data and scrambled data are stored in corresponding non-volatile memory locations
WO2010041093A1 (en) * 2008-10-09 2010-04-15 Federico Tiziani Virtualized ecc nand
US20100180182A1 (en) * 2009-01-09 2010-07-15 Seagate Technology Llc Data memory device and controller with interface error detection and handling logic
JP2010257540A (ja) * 2009-04-27 2010-11-11 Toshiba Corp 不揮発性半導体記憶装置
WO2010125695A1 (en) * 2009-04-30 2010-11-04 Powerchip Corporation Programming method for nand flash memory device
US8250282B2 (en) * 2009-05-14 2012-08-21 Micron Technology, Inc. PCM memories for storage bus interfaces
US7898859B2 (en) * 2009-06-15 2011-03-01 Micron Technology, Inc. Use of emerging non-volatile memory elements with flash memory
US8495332B2 (en) * 2009-07-24 2013-07-23 Apple Inc. Controller for optimizing throughput of read operations
US8478796B2 (en) * 2010-03-23 2013-07-02 Apple Inc. Uncorrectable error handling schemes for non-volatile memories
US8187936B2 (en) * 2010-06-30 2012-05-29 SanDisk Technologies, Inc. Ultrahigh density vertical NAND memory device and method of making thereof

Patent Citations (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5532962A (en) * 1992-05-20 1996-07-02 Sandisk Corporation Soft errors handling in EEPROM devices
US6014755A (en) * 1992-10-30 2000-01-11 Intel Corporation Method of managing defects in flash disk memories
CN1437721A (zh) * 2000-02-17 2003-08-20 三因迪斯克公司 多数据区段同时编程和在其它指定块中存储物理块特征的闪速eeprom系统
CN1499531A (zh) * 2002-10-28 2004-05-26 管理非易失存储器系统中的数据完整性的方法和装置
US7191379B2 (en) * 2003-09-10 2007-03-13 Hewlett-Packard Development Company, L.P. Magnetic memory with error correction coding
US20050055621A1 (en) * 2003-09-10 2005-03-10 Adelmann Todd Christopher Magnetic memory with error correction coding
US20080320214A1 (en) * 2003-12-02 2008-12-25 Super Talent Electronics Inc. Multi-Level Controller with Smart Storage Transfer Manager for Interleaving Multiple Single-Chip Flash Memory Devices
CN1914627A (zh) * 2004-02-03 2007-02-14 松下电器产业株式会社 存储卡和数据处理装置及存储卡的控制方法和设定方法
US7372744B2 (en) * 2004-09-03 2008-05-13 Kabushiki Kaisha Toshiba Memory system which copies successive pages, and data copy method therefor
WO2006059772A2 (en) * 2004-11-30 2006-06-08 Kabushiki Kaisha Toshiba Memory system, memory system controller, and a data processing method in a host apparatus
US7467337B2 (en) * 2004-12-22 2008-12-16 Fujitsu Limited Semiconductor memory device
US7360132B1 (en) * 2005-05-19 2008-04-15 Sun Microsystems, Inc. System and method for memory chip kill
US20080055957A1 (en) * 2006-08-30 2008-03-06 Guobiao Zhang Three-Dimensional Memory Module (3D-MM) Excelling Contemporary Micro-Drive (CMD)
US20090063730A1 (en) * 2007-08-31 2009-03-05 Gower Kevin C System for Supporting Partial Cache Line Write Operations to a Memory Module to Reduce Write Data Traffic on a Memory Channel

Cited By (57)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103593296A (zh) * 2012-08-15 2014-02-19 群联电子股份有限公司 数据储存方法、存储器控制器与存储器储存装置
CN103593296B (zh) * 2012-08-15 2016-05-18 群联电子股份有限公司 数据储存方法、存储器控制器与存储器储存装置
CN102880524A (zh) * 2012-09-27 2013-01-16 上海宏力半导体制造有限公司 一种校正信息载入方法
CN103971723B (zh) * 2013-02-01 2017-07-11 Lsi公司 用于读取电压适应的补偿回路
CN103971723A (zh) * 2013-02-01 2014-08-06 Lsi公司 用于读取电压适应的补偿回路
WO2015157932A1 (en) * 2014-04-16 2015-10-22 Intel Corporation Method, apparatus and system for handling data error events with memory controller
US9535782B2 (en) 2014-04-16 2017-01-03 Intel Corporation Method, apparatus and system for handling data error events with a memory controller
CN104598163A (zh) * 2014-11-28 2015-05-06 成都龙腾中远信息技术有限公司 一种基于载荷地面测试接口适配器的高速存储模块的存储方法
CN104598163B (zh) * 2014-11-28 2017-10-17 成都龙腾中远信息技术有限公司 一种基于载荷地面测试接口适配器的高速存储模块的存储方法
CN106294215A (zh) * 2015-06-24 2017-01-04 三星电子株式会社 存储装置和操作存储装置的方法
CN106294215B (zh) * 2015-06-24 2020-11-10 三星电子株式会社 存储装置和操作存储装置的方法
CN109565502A (zh) * 2016-07-19 2019-04-02 西门子移动有限责任公司 用于传输数据的存储设备、数据传输设备和方法
CN109478170A (zh) * 2016-07-26 2019-03-15 美光科技公司 存取状态信息
CN108536622B (zh) * 2017-03-06 2023-07-21 爱思开海力士有限公司 存储装置、数据处理系统以及操作存储装置的方法
CN108536622A (zh) * 2017-03-06 2018-09-14 爱思开海力士有限公司 存储装置、数据处理系统以及操作存储装置的方法
CN109491958A (zh) * 2017-09-13 2019-03-19 东芝存储器株式会社 错误处理系统和错误处理方法
CN109491814A (zh) * 2017-09-13 2019-03-19 东芝存储器株式会社 专用集成电路中的集中式错误处置
CN109491958B (zh) * 2017-09-13 2023-07-21 铠侠股份有限公司 错误处理系统和错误处理方法
CN107633867A (zh) * 2017-09-20 2018-01-26 南京扬贺扬微电子科技有限公司 基于ft4222的spi闪存测试系统及方法
CN107633867B (zh) * 2017-09-20 2020-12-01 南京扬贺扬微电子科技有限公司 基于ft4222的spi闪存测试系统及方法
CN110070901A (zh) * 2018-01-24 2019-07-30 华邦电子股份有限公司 半导体存储装置、其动作方法及分析系统
CN110070901B (zh) * 2018-01-24 2021-05-18 华邦电子股份有限公司 半导体存储装置、其动作方法及分析系统
CN108519859B (zh) * 2018-03-30 2021-04-20 深圳忆联信息系统有限公司 数据读取方法、装置、设备及介质
CN108519859A (zh) * 2018-03-30 2018-09-11 北京联想核芯科技有限公司 数据读取方法、装置、设备及介质
CN110362514A (zh) * 2018-04-11 2019-10-22 爱思开海力士有限公司 存储器系统以及操作存储器控制器的方法
CN114911422B (zh) * 2018-09-21 2024-10-01 美光科技公司 经调整扫描事件阈值
CN114911422A (zh) * 2018-09-21 2022-08-16 美光科技公司 经调整扫描事件阈值
CN111128287A (zh) * 2018-10-31 2020-05-08 三星电子株式会社 操作存储设备的方法、存储设备以及操作存储系统的方法
US12216939B2 (en) 2018-10-31 2025-02-04 Samsung Electronics Co., Ltd. Method of operating storage device, storage device performing the same and method of operating storage system using the same
CN110007853A (zh) * 2019-01-30 2019-07-12 青岛镕铭半导体有限公司 一种Nandflash命令处理方法、装置、终端及存储介质
CN111913647A (zh) * 2019-05-08 2020-11-10 华为技术有限公司 一种存储设备的磨损均衡方法、装置及相关设备
CN111913647B (zh) * 2019-05-08 2022-10-11 华为技术有限公司 一种存储设备的磨损均衡方法、装置及相关设备
US11714711B2 (en) 2019-06-17 2023-08-01 Micron Technology, Inc. Memory device with status feedback for error correction
CN114097038B (zh) * 2019-06-17 2023-03-14 美光科技公司 具有用于错误校正的状态反馈的存储器装置
CN114097038A (zh) * 2019-06-17 2022-02-25 美光科技公司 具有用于错误校正的状态反馈的存储器装置
US12287706B2 (en) 2019-06-17 2025-04-29 Lodestar Licensing Group Llc Memory device with status feedback for error correction
CN111078133A (zh) * 2019-10-18 2020-04-28 苏州浪潮智能科技有限公司 一种管理全闪存储阵列的空间的方法、设备及介质
CN110750467A (zh) * 2019-10-22 2020-02-04 深圳芯邦科技股份有限公司 一种Nand Flash中干扰页的检测方法、系统
CN110750467B (zh) * 2019-10-22 2021-11-02 深圳芯邦科技股份有限公司 一种Nand Flash中干扰页的检测方法、系统
CN113010102B (zh) * 2019-12-20 2024-02-06 台湾积体电路制造股份有限公司 操作存储器单元的方法及存储器器件
CN113010102A (zh) * 2019-12-20 2021-06-22 台湾积体电路制造股份有限公司 操作存储器单元的方法及存储器器件
TWI861328B (zh) * 2020-02-12 2024-11-11 南韓商三星電子股份有限公司 用於硬體確認的儲存元件及藉由其進行硬體確認的方法
TWI798536B (zh) * 2020-03-03 2023-04-11 慧榮科技股份有限公司 閃存資料故障分析的方法及電腦程式產品
CN115443502A (zh) * 2020-03-16 2022-12-06 美光科技公司 用于数据和错误校正信息的单独裸片间连接器以及相关系统、方法和设备
US12141084B2 (en) 2020-03-16 2024-11-12 Lodestar Licensing Group Llc Separate inter-die connectors for data and error correction information and related computing systems, methods, and apparatuses
CN115443502B (zh) * 2020-03-16 2024-01-19 美光科技公司 用于数据和错误校正信息的单独裸片间连接器以及相关系统、方法和设备
US11755506B2 (en) 2020-03-16 2023-09-12 Micron Technology, Inc. Separate inter-die connectors for data and error correction information and related computing systems, methods, and apparatuses
CN111475325A (zh) * 2020-04-03 2020-07-31 江苏芯盛智能科技有限公司 一种存储设备纠错方法及纠错装置
CN111627489B (zh) * 2020-04-20 2023-09-29 珠海妙存科技有限公司 闪存特性分析方法及系统
CN111627489A (zh) * 2020-04-20 2020-09-04 珠海妙存科技有限公司 闪存特性分析方法及系统
US11837275B2 (en) 2020-06-30 2023-12-05 Micron Technology, Inc. Techniques for saturating a host interface
CN113870924B (zh) * 2020-06-30 2022-09-30 美光科技公司 用于使主机接口饱和的技术
CN113870924A (zh) * 2020-06-30 2021-12-31 美光科技公司 用于使主机接口饱和的技术
CN112181304A (zh) * 2020-09-30 2021-01-05 浙江大学 一种星载NAND Flash存储管理系统
TWI789122B (zh) * 2021-11-17 2023-01-01 瑞昱半導體股份有限公司 指令轉換系統以及指令轉換方法
CN116302664A (zh) * 2021-12-08 2023-06-23 西部数据技术公司 存储器匹配的低密度奇偶校验译码方案
WO2024012093A1 (zh) * 2022-07-13 2024-01-18 北京超弦存储器研究院 一种ssd、ssd的主控芯片及ssd资源管理方法

Also Published As

Publication number Publication date
EP2465036A2 (en) 2012-06-20
WO2011019602A3 (en) 2011-04-21
WO2011019602A2 (en) 2011-02-17
KR20120052303A (ko) 2012-05-23
US20110041005A1 (en) 2011-02-17

Similar Documents

Publication Publication Date Title
CN102782654B (zh) 用于执行回拷操作的方法和控制器
CN102473126A (zh) 提供闪存系统中的读状态和空闲块管理信息的控制器和方法
US20110040924A1 (en) Controller and Method for Detecting a Transmission Error Over a NAND Interface Using Error Detection Code
US20110041039A1 (en) Controller and Method for Interfacing Between a Host Controller in a Host and a Flash Memory Device
USRE46201E1 (en) Method and controller for performing a sequence of commands
US8291295B2 (en) NAND flash memory controller exporting a NAND interface
KR101821845B1 (ko) 백그라운드 동작을 수행하기 위한 제어기 및 방법
JP5591917B2 (ja) 管理型不揮発性メモリのための低レイテンシ読み取り動作
JP5776107B2 (ja) メモリコントローラ及び方法におけるデータ完全性
EP2183745B1 (en) Ecc functional block placement in a multi-channel mass storage device
US20110072162A1 (en) Serial Line Protocol for Embedded Devices
CN108932107B (zh) 数据存储装置及其操作方法
CN114077383A (zh) 数据处理系统中共享数据的设备和方法
US8607123B2 (en) Control circuit capable of identifying error data in flash memory and storage system and method thereof
CN116888585A (zh) 用于简单复制命令的基于高速缓存的流
US12039173B2 (en) Data storage device that detects and releases input queue bottlenecks
JP7649917B2 (ja) Hmb喪失からの回復
US11893248B2 (en) Secure metadata protection
CN121333542A (zh) 动态完整性和数据加密(ide)聚合大小

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C02 Deemed withdrawal of patent application after publication (patent law 2001)
WD01 Invention patent application deemed withdrawn after publication

Application publication date: 20120523