KR20120052303A - 플래시 메모리 시스템에 판독 상태 및 예비 블록 관리 정보를 제공하기 위한 제어기 및 방법 - Google Patents

플래시 메모리 시스템에 판독 상태 및 예비 블록 관리 정보를 제공하기 위한 제어기 및 방법 Download PDF

Info

Publication number
KR20120052303A
KR20120052303A KR1020127003588A KR20127003588A KR20120052303A KR 20120052303 A KR20120052303 A KR 20120052303A KR 1020127003588 A KR1020127003588 A KR 1020127003588A KR 20127003588 A KR20127003588 A KR 20127003588A KR 20120052303 A KR20120052303 A KR 20120052303A
Authority
KR
South Korea
Prior art keywords
host
controller
flash memory
memory device
error
Prior art date
Application number
KR1020127003588A
Other languages
English (en)
Inventor
로버트 디. 셀링거
Original Assignee
샌디스크 테크놀로지스, 인코포레이티드
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 샌디스크 테크놀로지스, 인코포레이티드 filed Critical 샌디스크 테크놀로지스, 인코포레이티드
Publication of KR20120052303A publication Critical patent/KR20120052303A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR 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; CALCULATING OR 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; CALCULATING OR 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; CALCULATING OR 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

플래시 메모리 시스템에 판독 상태 및 예비 블록 관리 정보를 제공하기 위한 제어기 및 방법{CONTROLLER AND METHOD FOR PROVIDING READ STATUS AND SPARE BLOCK MANAGEMENT INFORMATION IN A FLASH MEMORY SYSTEM}
본 발명의 플래시 메모리 기술에 관한 것으로, 특히, 플래시 메모리 시스템에 판독 상태 및 예비 블록 관리 정보를 제공하기 위한 제어기 및 방법에 관한 것이다.
개인용 컴퓨터와 같은 호스트에 의해 데이터를 저장하기 위해서 일반적으로 NAND 플래시 메모리 장치들이 사용된다. 많은 아키텍처들에서, NAND 제어기는 호스트와 NAND 플래시 메모리 장치 간에 통신을 용이하게 하기 위해 사용된다. 일부 제어기 아키텍처들에서, NAND 제어기는 NAND 인터페이스를 사용하여 NAND 플래시 메모리 장치와 상호작용하며, USB 또는 SATA와 같은 표준, 비-NAND 인터페이스를 사용하여 호스트와 상호작용한다. 이러한 시스템들에서, 호스트는 저장 오류들뿐만 아니라 전송 오류들에 대해서도 보호하기 위해서 오류 정정 코드(ECC)를 생성할 수 있다. 대안적으로, 제어기는 ECC을 생성할 수 있고 호스트는 호스트와 제어기 간에 비-NAND 인터페이스에 의해 발생할 수 있는 전송 오류들로부터 데이터를 보호하기 위해 오류 검출 코드(EDC)를 생성할 수 있다. 참조로서 본원에 포함시키는 "NAND Flash Memory Controller Exporting a NAND Interface" 미국특허출원번호 11/326,336(미국특허공개번호 2007/0074093로서 공개된)는 호스트에 NAND 인터페이스를 엑스포트하는 제어기를 개시한다. 이렇게 하여, 제어기는 표준 NAND 플래시 메모리 장치에 의해 호스트에 엑스포트되는 동일 유형의 인터페이스를 호스트에 엑스포트한다. 또한, 이 제어기는 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 내지 도 13d는 실시예의 예시적인 제어기들의 블록도들이다.
소개
다음 실시예들은 플래시 메모리 제어기들 및 이에 사용하기 위한 방법들에 대한 것이다. 일실시예에서, 호스트 내 호스트 제어기와 플래시 메모리 장치 간에 인터페이스하기 위해 제어기 및 방법이 제공된다. 또 다른 실시예에서, 오류 검출 코드를 사용하여 NAND 인터페이스에 의한 전송 오류를 검출하기 위한 제어기 및 방법이 개시된다. 또 다른 실시예에서, 판독 상태 및 예비 블록 관리 정보를 제공하기 위한 제어기 및 방법이 개시된다. 이들 실시예들 중 어느 것이든 단독으로 혹은 다양한 조합들로 사용될 수 있음에 유의한다. 이들 및 다른 실시예들로 가기 전에, 예시적인 제어기 아키텍처들의 전반적인 개요와, NAND 인터페이스들 및 NAND 인터페이스 프로토콜들의 논의가 제공된다.
예시적인 제어기 아키텍처들
이제 도면으로 가면, 도 1은 제어기(100)가 제 1 인터페이스(125)를 통해 호스트(120)(호스트 제어기(121)를 구비한)와 통신하고 하나 이상의 제 2 인터페이스(들)(135)를 통해 하나 이상의 플래시 메모리 장치(들)과 통신하는 실시예의 시스템이다. (제 2 인터페이스(들)(135)의 수는 플래시 메모리 장치(들)(130)의 수와 같을 수 있고, 혹은 제 2 인터페이스(들)(135)의 수는 플래시 메모리 장치(들)(130)의 수 이상 또는 미만일 수 있다(예를 들면, 단일의 제 2 인터페이스(135)은 복수의 플래시 메모리 장치(들)을 지원할 수 있다). 본원에서 사용되는 바와 같이, "와 통신하는"이라는 어구는 여기에 도시되어 기술되어 있을 수도 있고 그렇지 않을 수도 있는 것으로, 하나 이상의 성분들과 직접 혹은 이들을 통해 간접적으로 통신함을 의미한다.
"호스트"는 여기에서 지명되거나 지명되지 않은 하나 이상의 성분들을 통해 직접적으로 혹은 간접적으로, 제어기(100)를 통해 하나 이상의 플래시 메모리 장치(들)(130)에 액세스할 수 있는 임의의 실체이다. 호스트는 다음으로 제한되는 것은 아니지만, 개인용 컴퓨터, 이동전화, 게임장치, PDA(personal digital assistant), 이메일/텍스트 메시징 장치, 디지털 카메라, 디지털 미디어(예를 들면, MP3) p층, GPS 내비게이션 장치, 개인용 내비게이션 시스템(PND), 모바일 인터넷 장치(MID), 및 TV 시스템과 같은 임의의 적합한 형태를 취할 수 있다. 응용에 따라, 호스트(120)는 하드웨어 장치, 소프트웨어 애플리케이션, 혹은 하드웨어와 소프트웨어와의 조합의 형태를 취할 수 있다.
"플래시 메모리 장치(들)"는 플래시 메모리 셀들 내에 데이터를 저장하기 위한 복수의 플래시 메모리 셀들 및 임의의 필요한 제어회로를 내장한 장치(들)를 지칭한다. 일실시예에서, 1회 프로그래머블 메모리 요소들 및/또는 재기입가능 메모리 요소들을 포함하는, 수동 요소 어레이들과 같은 다른 메모리 기술들이 사용될 수 있을지라도, 플래시 메모리 셀들은 NAND 메모리 셀들이다. (이들 실시예들에서, 비-NAND-형 플래시 메모리 장치는 여전히 NAND 인터페이스 및/또는 NAND 지령들 및 프로토콜들을 사용할 수 있을 것임에 유의한다). 수동 요소 어레이의 일예는 3차원 메모리 어레이이다. 본원에서 사용되는 바와 같이, 3차원 메모리 어레이는 단일 실리콘 기판 위에 서로 수직으로 적층된 복수의 층들의 메모리 셀들을 포함하는 메모리 어레이를 지칭한다. 이렇게 하여, 3차원 메모리 어레이는 서로 근접하여 패키지 또는 다이-본딩된 복수의 집적회로 장치들이라기보다는 모노리식 집적회로 구조이다. 3차원 메모리 어레이가 바람직할지라도, 대신에 메모리 어레이는 2차원(플래나) 어레이의 형태를 취할 수 있다. 본원에 참조로서 포함시키는 다음 특허문헌들은 3차원 메모리 어레이들에 대한 적합한 구성들을 기술하고 있는 것으로, 3차원 메모리 어레이는 레벨들 간에 워드라인들 및/또는 비트라인들을 공유하는 것들인 복수의 레벨들로서 구성된다: 미국특허 6,034,882; 6,185,122; 6,420,215; 6,631,085; 7,081,377. 또한, 플래시 메모리 장치(들)(130)은 단일 메모리 다이 또는 복수의 메모리 다이들일 수 있다. 따라서, 청구항들에서 사용되는 "플래시 메모리 장치"라는 어구는 단지 하나의 플래시 메모리 장치 또는 하나 이상의 플래시 메모리 장치를 지칭할 수 있다.
도 1에 도시된 바와 같이, 제어기(100)는 제어기(100)의 동작을 제어하며 호스트(120)로부터 수신된 지령(예를 들면, 판독, 기입, 소거, 등) 및 어드레스에 기초하여 메모리 동작을 수행하는 제어 모듈(140)을 포함한다. 본원에서 사용되는 바와 같이, "모듈"은 하드웨어, 소프트웨어, 펌웨어, 혹은 이들의 조합을 포함할 수 있다. 다음으로 제한되는 것은 아니지만 "모듈"이 취할 수 있는 형태들의 예들은 마이크로프로세서 또는 프로세서, 및 예를 들면 (마이크로)프로세서, 논리 게이트들, 스위치들, 응용특정의 집적회로(ASIC), 프로그래머블 논리 제어기, 및 내장형 마이크로제어기에 의해 실행될 수 있는 컴퓨터-판독가능 프로그램 코드(예를 들면, 소프트웨어 또는 펌웨어)를 저장하는 컴퓨터-판독가능 매체 중 하나 이상을 포함한다. (다음 단락들은 "모듈"이 취할 수 있는 다양한 형태들의 예들을 제공한다). 도 1에 도시된 바와 같이, 제어기(100)는 다음으로 제한되는 것은 아니지만 데이터 스크램블, 컬럼 대체, 기입 어보트 및/또는 프로그램 실패들(안전지역을 통한), 판독 스크러브를 핸들링, 마모 평준화, 배드 블록 및/또는 예비 블록 관리, 오류 정정 코드(ECC) 기능, 오류 검출 코드(EDC) 기능, 상태 기능, 암호화 기능, 오류 복구, 및 어드레스 매핑(예를 들면, 논리블록에서 물리블록으로의 매핑)을 포함하는 다른 기능을 제공하기 위한 하나 이상의 추가의 모듈들(150)을 포함할 수 있다. 다음 단락들은 이들 기능들, 및 다른 기능들의 추가의 예들에 대한 더 상세한 것들을 제공한다.
제어기(100) 및 플래시 메모리 장치(들)(130)이 도 1에서 2개의 개별적인 박스들로서 도시되었지만, 제어기(100) 및 플래시 메모리 장치(들)(130)은 임의의 적합한 방식으로 배열될 수 있음이 이해될 것이다. 도 2a, 도 2b, 도 2c는 제어기 및 플래시 메모리 장치(들)의 서로 다른 배열들을 도시한 블록도들이다. 도 2a에서, 제어기(200) 및 플래시 메모리 장치(들)(230)은 서로 다른 패키지들(260, 270)로 패키지된다. 이 실시예에서, 다이간 인터페이스는 제어기(200)와 플래시 메모리 장치(들)(230) 간을 인터페이스할 수 있다. 본원에서 사용되는 바와 같이, "다이간 인터페이스"(예를 들면, 다이간 NAND 인터페이스)는 서로 다른 다이들 상에 놓여진(예를 들면, 예를 들면, 하나 이상의 특정한 프로토콜들을 사용하여 서로 통신하기 위해 서로 다른 전자회로 유닛들에 대해 필요한 물리적 및 논리적 기반구조를 제공하기 위해) 2개의 서로 다른 전자회로 유닛들 간을 인터페이스하게 동작한다. 이에 따라, 다이간 인터페이스는 개별적 다이들 상에 놓여진 2개의 서로 다른 전자회로 유닛들 간을 인터페이스하기 위한 필요한 물리적 요소들(예를 들면, 패드들, 출력, 입력 드라이버들, 등)을 포함한다.
도 2b에서, 제어기(200) 및 플래시 메모리 장치(들)(230) 둘 다는 공통의 복수-칩 패키지(280) 내에 있다. 이 실시예에서, 다이간 인터페이스는 공통 복수-칩 패키지(280)에 패키지된 2개의 서로 다른 다이들 상에 제조된 제어기(200) 및 플래시 메모리 장치(들) 간을 인터페이스할 수 있다. 도 2c에서, 제어기(200) 및 플래시 메모리 장치(들)(230)은 동일 다이(290) 상에 집적된다. 또 다른 대안으로서, 제어기(200) 및/또는 플래시 메모리 장치(들)(230)은 2개의 서로 다른 다이들 상에 제조될 수 있고, 이들 다이들 중 하나 혹은 둘 다는 전혀 패키지를 갖지 않는다. 예를 들면, 많은 응용들에서, 공간을 절약할 필요성에 기인하여, 메모리 다이들은 전혀 패키지하지 않고 회로보드들 상에 실장된다.
이들 배열들 각각에서, 제어기(200)는 호스트로부터 별도로 물리적으로 위치된 것에 유의한다. 이것은 제어기(200) 및 플래시 메모리 장치(들)(230)를 매우 다양한 호스트들에서 사용될 수 있는 한 별도의 회로 유닛으로 간주될 수 있게 한다.
도 1에 관련하여 위에 언급된 바와 같이, 제어기(100)는 제 1 인터페이스(125)를 사용하여 호스트(120)와 통신하며 제 2 인터페이스(들)(135)를 사용하여 플래시 메모리 장치(들)(130)과 통신한다. 일반적으로, 제 1 및 제 2 인터페이스들(125, 135)은 임의의 적하한 형태를 취할 수 있다. 그러나, 도 3에 관련하여 이하 기술되는 본 바람직한 실시예에서, 제 1 및 제 2 인터페이스들(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 인터페이스 프로토콜의 한 적합한 예는 판독(opcode 00H), 기입(opcode 80H), 및 소거(opcode 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 인터페이스를 사용하여 플래시 메모리 장치와 상호작용하며, USB 또는 SATA와 같은 표준 비-NAND 인터페이스를 사용하여 호스트와 상호작용한다. 즉, 이들 종래의 제어기 아키텍처들에서, NAND 제어기는 NAND 인터페이스를 호스트에 엑스포트하지 않는다. 사실, 이것은 내장 NAND 지원이 없어 이 목적을 위해 외부 제어기를 필요로 하는 호스트 프로세서는 전형적으로 NAND 인터페이스가 없고 NAND 인터페이스를 엑스포트하는 장치에 직접 연결할 수 없고 따라서 호스트-측 NAND 인터페이스를 가진 제어기를 사용할 수 없기 때문에, 예상하는 것이 무리가 아니다. 한편, 내장 NAND 지원이 구비된 호스트 프로세서는 전형적으로 내장 NAND 제어기도 포함하고 있어 NAND 장치에 직접 연결할 수 있고, 따라서 외부 NAND 제어기에 대한 필요성이 없다.
참조함으로써 본원에 통합시키는 "NAND Flash Memory Controler Exporting a NAND Interface" 미국특허출원번호 11/326,336(미국특허공개번호 2007/0074093로서 공개된)는 호스트측으로 엑스포트하는 인터페이스가 NAND 인터페이스이라는 사실을 특징으로 하는 새로운 유형의 NAND 제어기를 개시한다. 이에 따라, NAND 제어기는 표준 NAND 플래시 메모리 장치에 의해 엑스포트되는 동일 유형의 인터페이스를 호스트에 엑스포트한다. 또한, 제어기는 바람직하게 플래시 메모리 장치측에도 NAND 인터페이스를 갖는데, 이 제어기는 NAND 플래시 메모리 장치 쪽으로는 호스트 역할을 하고 호스트 쪽으로는 NAND 장치 역할을 한다.
NAND 인터페이스를 엑스포트하는 예시적인 NAND 플래시 메모리 제어기
도면들로 돌아가서, 도 3은 실시예의 예시적 제어기(300)의 블록도이다. 도 3에 도시된 바와 같이, 제어기(300)는 제어기(300)의 동작을 제어하기 위한 제어 모듈(340) 및 선택적으로, 다른 기능들을 제공하기 위한 하나 이상의 추가의 모듈들(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에서 찾아 볼 수 있다.
데이터를 기입하려고 하는 위치 외에 논리적으로 혹은 물리적으로 이웃한 데이터가 변질될 수 있는 플래시 메모리 장치들에 기입할 때 몇 가지 잠재적인 문제들이 있다. 일예는 메모리의 한 영역(예를 들면, 셀, 페이지, 또는 블록)에의 기입이 실패되어 일부 주변 메모리의 내용들이 변질될 수 있을 때이다. 이것을 "프로그램 실패" 또는 "프로그램 교란"이라고 한다. "기입 어보트"로서 알려진 유사한 영향은 예를 들면 파워가 예기치 않게 제거되었을 때 기입(또는 프로그램) 동작이 영구적으로 종료될 때이다. 두 경우에, 미국특허 6,988,175에 기술된 바와 같이, 기입 어보트 및 프로그램 실패들을 핸들링하기 위해서 "위험 지역"으로부터 "안전지역"으로 데이터를 사전대책을 위해 카피하기 위해 사용될 수 있는 알고리즘들이 있다.
"판독 스크러브" 또는 더 일반적으로 "스크러브"는 교란을 보상하기 위해 플래시 메모리 장치에 저장된 데이터를 리프레시 및 정정하는 기술들을 지칭한다. 스크러브 동작은 신호들을 잠재적으로 교란시키는데 노출되었을 수도 있는 영역들 내에 있는 데이터를 판독하고, 이 데이터가 교란된 것으로 판정된다면 어떤 정정 동작을 수행하는 것을 수반한다. 판독 스크러브는 미국특허 7,012,835, 7,224,607, 및 7,477,547에 더욱 기술되어 있다.
플래시 메모리 장치들은 불균일하게 기입될 수 있고, "마모 평준화"는 메모리 셀들이 이들의 수명 동안 기입되는 횟수를 고르게 하려는 기술들을 말한다. 예시적인 마모 평준화 기술들은 미국특허 6,230,233 및 6,594,183에 기술되어 있다.
일반적으로, 플래시 메모리 장치들은 과잉 수의 블록들(정의된 최소 용량보다 큰)을 갖게 제조된다. 공장 테스트 동안이나 장치의 사용 동안에, 어떤 블록들은 "배드" 혹은 "결함이 있는" 것으로서 발견될 수도 있고, 이것은 이들은 데이터를 올바르게 저장할 수 없고 대체될 필요가 있음을 의미한다. 유사하게, 또 다른 블록이 실패하거나 결함이 있게 될 때까지 "예비들"로서 사용될 수 있는 과잉의 "적합" 블록들(정의된 최소 용량보다 큰)이 있을 수 있다. 이들 가외의 블록들을 관리하는 것은 각각 배드 블록 관리 및 예비 블록 관리로서 알려져 있다. 배드 블록 및 예비 블록 관리에 관한 더 많은 정보는 미국특허 7,171,536에서 찾아 볼 수 있다.
위에 언급된 바와 같이, 이들 서로 다른 기능 모듈들 및 이들이 예시적 제어기 아키텍처들에서 어떻게 사용되는가에 관한 추가의 정보는 이 문서에서 나중에 제공된다.
도면들을 다시 참조하면, 도 3에 도시된 바와 같이, 제어기(300)는 하나 이상의 NAND 플래시 장치(들)(330)(예를 들면, 1-8 메모리 다이들)과 인터페이스하기 위한 하나 이상의 플래시 메모리 장치-측 NAND 인터페이스(들)(335)를 포함한다. 또한, 플래시 메모리 장치-측 NAND 인터페이스(335)는 호스트-형 NAND 인터페이스(즉, NAND 인터페이스로 상호작용을 개시하고 NAND 플래시 장치(들)(330)에 호스트를 나타내게 구성된 것에)임에 유의한다. 또한, 제어기(300)는 NAND 인터페이스 프로토콜을 지원하는 호스트(320)(호스트 제어기(321)를 구비한)에 인터페이스하기 위한 호스트측 NAND 인터페이스(325)를 포함한다. 이 호스트측 NAND 인터페이스(325)는 플래시 메모리-형 NAND 인터페이스이기도 한다(예를 들면, 제어기(300)는 NAND 플래시 메모리 저장장치를 호스트(320)에 나타내게 구성된다). NAND 인터페이스들의 예들은 참조로서 본원에 포함시키는 미국특허 7,366,029에 기술된 것과 같은 개방 NAND 플래시 인터페이스(ONFI), 토글 모드(TM), 및 고성능 플래시 메모리 인터페이스를 포함하는데, 그러나 이들로 한정되는 것은 아니다. 제어기(300)는 선택적으로, SD, USB, SATA, 또는 MMC 인터페이스들과 같은 비-NAND 인터페이스들을 사용하여 제어기(300)를 호스트들에 인터페이스하기 위해, 하나 이상의 추가의 호스트-측 인터페이스들을 포함한다. 또한, 인터페이스들(325, 335)은 동일한 혹은 서로 다른 NAND 인터페이스 프로토콜들을 사용할 수 있다.
제어기(300) 및 플래시 메모리 장치(들)(330)은 임의의 요망되는 시스템 환경에서 사용될 수 있음에 유의한다. 예를 들면, 일 구현예에서, 하나 이상의 제어기(300)/플래시 메모리 장치(들)(330)의 유닛들로 제조된 제품은 고체상태 드라이브(SSD)에서 사용된다. 또 다른 예로서, 제어기(300)는 플래시 메모리 장치들에 인터페이스하기 위해 Southbridge 제어기를 사용하는 OEM 설계들에 사용될 수 있다.
NAND 인터페이스를 호스트에 엑스포트하는 NAND 플래시 메모리 제어기를 사용하는 몇 가지 잇점들이 있다. 이들 잇점들을 알기 위해서, 먼저 현 제어기 아키텍처들의 실제를 고찰한다. 최근에 두 유형들의 NAND 인터페이스들로서 "생(raw)" 인터페이스 및 "관리형(managed)" 인터페이스가 있다. 생 인터페이스에 있어서, 기본 메모리는 판독, 프로그램, 및 소거 같은 기본 지령들에 노출되며, 외부 제어기는 ECC, 결함 관리, 및 플래시 전환과 같은 메모리 관리 기능들을 제공할 것으로 예상된다. 관리형 인터페이스에 있어서, 어떤 더 높은 레벨의 인터페이스를 통해, 섹터들/페이지들/블록들 혹은 파일들과 같은 논리 아이템들이 관리되며, 제어기는 메모리 관리 기능들을 관리한다.
그러나, NAND를 "관리"하기 위해 필요한 한 세트의 펌웨어는 2개의 카테고리들로 분할될 수 있다. 제 1 카테고리는 대부분 호스트 인터페이스 객체들(및 판독/소정/기입 시퀀스들), 및 캐싱(caching)을 관리하는 일반적인 플래시 소프트웨어이다. 이것을 "호스트 관리" 층이라 한다. 제 2 카테고리는 기입 어보트, 파워 실패들, 및 기입 오류들에 기인한 데이터 상실을 방지하기 위해 사전 대책을 위한 판독 스크러브 및 하위 페이지 블록들의 카피와 같은 ECC, 데이터 스크램블, 및 특정 오류 복구 및 오류 방지 기술들을 행하는 플래시 특정의 관리 기능이다. 이것을 "장치 관리" 층이라 한다.
제 1 카테고리의 소프트웨어는 비교적 일정하며 OS 벤더들, 칩셋 및 제어기 벤더들, 및 내장형 장치 벤더들을 포함한 여러 회사들에 의해 제공될 수 있다. 일반적으로, 이들의 설계들에서 플래시를 사용하기를 원할 수 있는 M개의 특정한 시스템들/OSes/ASIC들이 있는 것으로 가정한다. 제 2 세트는 잠재적으로 개개의 회사들에 전유물이며 심지어는 어떤 메모리 설계들 및 세대들에 특정하다. 일반적으로, N개의 서로 다른 메모리 특정한 설계 포인트들이 있는 것으로 가정한다. 최근에, 이것은 생 NAND 또는 관리형 NAND을 구입하는 플래시 관리에 대한 실패 아니면 성공이라는 접근법이다. 또한, 이것은 해결책이 N개의 메모리 장치 관리 환경들 중 하나에 M개의 시스템 및 호스트 관리 환경들 중 하나를 포함시켜야 함을 의미한다. 일반적으로, 이것은 (1) 두 번째 종류의 지식을 가진 플래시 벤더는 ASIC 제어기 및 호스트 인터페이스 소프트웨어를 포함해서, 해결책의 모든 층들을 제공해야 하고 M개의 서로 다른 호스트 기회들을 위한 M개의 서로 다른 설계들을 행해야 하거나, (2) 임의의 독립적인 ASIC 및 펌웨어 회사는 N개의 서로 다른 설계들을 하지 않고는 이들의 해결책들을 특정한 메모리 설계들에 커스터마이즈할 기회가 거의 없을 수 있거나, (3) 2개의 회사들은 함께 작업해야 하고, 따라서 잠재적으로 중요 기업 비밀들 및 IP를 노출시키게 되고 및/또는 각각의 메모리 설계마다 다른 해결책들을 구현해야 함을 의미한다. 또한, 이것은 M개의 서로 다른 호스트 해결책들이 임의의 새로운 메모리 설계를 수락하게 수정되어야 하거나 임의의 새로운 메모리 설계가 M개의 서로 다른 호스트 해결책들을 수락하게 수정되어야 한다면 출시(time-to-market) 지연을 야기할 수 있다.
NAND 인터페이스를 호스트에 엑스포트하는 NAND 플래시 메모리 제어기를 사용함으로써, 생 혹은 물리적 NAND 위에 그리고 논리적 혹은 관리형 NAND 밑에 새로운 논리적 인터페이스를 생성하고, 호스트 제어기에서 ECC를 필요로 하지 않는 "가상"의 생 NAND 메모리를 생성하고 호스트 ECC를 비활성화하기 위해(NAND 메모리를 보호하기 위해 호스트로부터 0 ECC이 요구되기 때문에) 기존의 비동기, ONFI, 또는 TM과 같은 기존의 물리적 NAND 인터페이스들 및 지령들을 사용하는 새로운 논리적 인터페이스가 제공된다. 또한, 이 새로운 논리적 인터페이스는 이 인터페이스 레벨 "밑에" 예를 들면 데이터 스크램블, 스크러브, 교란, 안전지역 핸들링, 마모 평준화, 및 배드 블록 관리(적합 블록들만을 노출시키기 위해)을 제공할 수 있다.
이 서로 다른 논리 인터페이스는 ONFI 블록 추출(BA) 또는 Toshiba LBA을 포함해서, 표준 플래시 인터페이스들 또는 관리형 NAND 인터페이스들에 비해 몇가지 잇점들을 제공한다. 예를 들면, 메모리 유형 및 세대(예를 들면, NAND 대 3D (혹은 NOR) 및 5Xnm 대 4Xnm 대 3Xnm)마다 다를 수 있는 메모리-특정의 기능들을 분리시킴으로써, 핸들링 교란 및 안전지역과 같은 오류 방지 및 정정 수법들을 위한 ECC, 벤더-고유의 및 메모리-고유의 수법들마다 량들을 다르게 할 수 있게 하며, 벤더-고유의 알고리즘들이 제어기 및 펌웨어 내에 "비밀" 상태에 있게 한다. 또한, 이 논리적 인터페이스 레벨에서 기술(및 벤더들) 간에 더 큰 공통성이 있고, 이는 출시를 더 빠르게 할 수 있게 한다. 또한, 이것은 1 : 1 지령 동작에 훨씬 더 가깝게 할 수 있게 하며, 이것은 관리형 NAND 또는 다른 더 높은 레벨 인터페이스들에 비해 개선되고 더 예측가능한 수행을 의미한다.
이 제어기 아키텍처에 연관된 추가의 잇점들이 있다. 예를 들면, 시스템의 호스트 및 그외 부분들로부터 메모리 기술의 개발, 테스트, 및 발전을 독립적으로 할 수 있게 한다. 또한, 이들 메모리들을 지원하는 변화들이 더 국소화되기 때문에, 차세대 메모리들을 더 쉽게 더 빠르게 개발할 수 있게 한다. 또한, 메모리 제조업자들이 생 플래시를 관리하기 위해 사용되는 비밀 알고리즘들을 보호할 수 있게 한다. 또한, 페이지 관리는 파일 시스템 및/또는 다른 논리적 매핑과 통합될 수 있다. 이에 따라, 표준 외부 인터페이스들(전기적 및 지령 세트들)과 결부하여, 이 아키텍처는 세대간에 더욱 명료한 맨 플래시에서 설계하는 것이 더 쉬워지게 한다.
이 아키텍처의 사용으로부터 적어도 한 다른 2차적 잇점이 있는데, 제어기(300)는 외부 인터페이스에 단일 전기적 부하만을 나타나게 하며 MCP 내부에 맨 플래시를 구동한다. 이것은 플래시 채널들의 수를 증가시키지 않고 시스템 용량을 잠재적으로 더 크게 할 수 있게 하며, 외부 인터페이스들이 고속이 될 수 있게 하며(부하들이 거의 없기 때문에), 맨 플래시 장치들에 대한 내부 인터페이스들이 더 높은 속도가 될 수 있게 한다(매우 엄격하게 제어되는 내부 설계(기판 연결)가 가능하기 때문에).
이 실시예의 제어기에 연관된 또 다른 잇점은 잠재적으로 서로 다른 속도들(즉, 호스트와 제어기 간에 버스는 제어기와 플래시 메모리 장치(들) 간에 버스와는 다를 수 있다)로 서로 다른 호스트 및 메모리 버스들을 사용하여 "분할 버스" 아키텍처를 제공하기 위해 사용될 수 있다는 것이다. (본원에서 사용되는 바와 같이, "버스"는 동일한 인터페이스를 갖는 복수의 장치들(예를 들면, 칩들 또는 다이들)의 전기적 연결이다. 예를 들면, 점 대 점 연결은 2개의 장치들 사이에 버스이지만, 대부분의 인터페이스 표준들은 복수의 장치들이 동일한 전기적 버스에 연결되게 한다). 이 아키텍처는 잠재적으로 수백 플래시 메모리 장치들을 가질 수 있는 고체상태 드라이브들(SSDs)에서 특히 요망된다. 종래의 SSD 아키텍처들에서, 현재의 해결책은 복수-칩 패키지(MCP)에 N개의 일반적인 플래시 메모리 장치들을 패키지 하는 것이지만, 이것은 여전히 한 버스에 N개의 부하들을 야기하여, N 배의 커패시턴스 및 인덕턴스를 야기한다. 한 버스에 부하가 많을수록 더 느리게 동작한다. 예를 들면, 한 현재의 아키텍처는 1-4 장치들에 80 MHz 동작을 지원할 수 있으나 8-16 장치들에 40 MHz 동작만을 지원할 수 있다. 이것은 요망되는 것, 즉 더 많은 장치들이 사용될지라도 고속인 것과는 반대이다. 또한, 더 많은 장치들은 호스트와 메모리 MCP들 간에 더 큰 물리적 분리에 대한 필요성을 드러낸다. 예를 들면, 16 패키지들이 사용되었다면, 이들은 임의의 토폴로지(예를 들면, 버스 또는 스타-형(또는 임의의 스터브) 토폴로지)에서 비교적 큰 물리적 거리(예를 들면, 몇 인치)에 걸쳐 확산될 것이다. 또한, 이것은 임의의 전기적 인터페이스의 잠재적 성능을 감소시킨다. 따라서, 예를 들면, 300 MHz의 전송들(버스 폭들을 무시하고)을 얻기 위해서, 4개의 고속 버스들 또는 8개의 저속 버스들 이 사용될 수 있다. 그러나, 고속 버스들은 각각이 4개의 플래시 메모리 장치들, 혹은 최근에 대부분의 SSD들엔 충분하지 않은 총 16개의 장치들만을 지원할 수도 있을 것이다. 버스들이 더 빠르게 동작한다면, 잠재적으로 호스트 내 레지스터들 및 로직의 수뿐만 아니라, 인터페이스 연결들(핀들 및 아날로그 인터페이스들)의 수가 감소될 수 있다.
이 실시예에서 제어기(300)는 호스트와 생 플래시 메모리 장치(들) 간에 상호연결을 별도의 호스트측 인터페이스 및 플래시측 인터페이스로 이들 사이에 버퍼를 구비하여 분할하기 때문에, 호스트 버스는 거의 부하들이 없고 2 내지 4배 더 빠르게 동작할 수 있다. 또한, 메모리 버스는 MCP 내부에 있기 때문에, 연루된 짧은 거리와 유한한 부하들로 인해 저 파워, 고속, 및 저 전압을 가질 수 있다. 또한, 두 버스들은 서로 다른 주파수들 및 서로 다른 폭들(예를 들면, 일측은 8-비트 버스를 사용할 수도 있을 것이며, 다른 측은 16-비트 버스를 사용할 수 있다)으로 동작할 수 있다.
이들 버스들을 분리하기 위해 일부 아키텍처들은 표준 트랜시버들을 삽입할 수 있으나, 이 실시예의 제어기(300)는 버퍼링을 사용할 수 있고 서로 다른 속도들로 이들 인터페이스들을 동작할 수 있다. 이것 2개의 서로 다른 속도의 버스들, 예를 들면, 140 MB/sec로 동작하는 플래시 측 인터페이스 버스 및 132 또는 166 MB/sec로 동작하는 ONFI 버스를 제어기(300)가 정합시킬 수 있게 한다. 종래의 버스 트랜시버 설계는 2개의 버스들 중 더 낮은 것을 골라 이 예에서 132 MB/sec로 동작해야 할 것이며, 이 실시예의 제어기(300)는 166 MB/sec로 ONFI 버스를 동작시킴으로써 140 MB/sec를 달성할 수 있고 근본적으로 아이들 기간들을 가질 수 있다. 따라서, 이 실시예의 제어기(300)는 잠재적으로 저 비용 및/또는 저 파워로 더 큰 성능과 서로 다른 제품들 간에 인터페이스 융통성을 제공한다. (예를 들면, 서로 다른 속도 및 폭의 호스트 및 메모리 버스들, 전형적인 시스템에서 호스트에 약간의 부하들(호스트 인터페이스에 메모리 버스 대역폭을 더 빠르게 동작시키고 모을 수 있게 한다), 및 인터페이스 변환을 사용한 호스트 및 메모리 측 상에 서로 다른 인터페이스들).
위에 언급된 바와 같이, 단일 제어기는 플래시 메모리 장치(들)에 대한 복수의 플래시측 인터페이스(들)(335)을 가질 수 있는데, 이것은 생 플래시 메모리 장치들과 제어기로의 전송들 간에 더욱 병행도가 가능해지게 하여 플래시측 인터페이스가 호스트측 인터페이스(325)보다 더 느리게(더 빠를 뿐만 아니라) 동작할 수 있게 한다. 또한, 단일 제어기는 서로 다른 호스트 제어기 인터페이스들에 연결될 수 있는 복수의 호스트측 인터페이스들을 가질 수도 있어 플래시 메모리 장치(들)에 액세스하는데 있어 병행도가 더 커지게 하며, 제어기를 공유하거나, 플래시측 인터페이스(위에 기술된 이유로 호스트측 인터페이스보다 더 빠를 수도 있는)의 속도에 더 잘 맞출 수 있게 된다.
NAND 인터페이스를 호스트에 임포트하는 또 다른 잇점은 분산형 제어기 아키텍처의 사용에 관련된다. 최근에, 플래시 메모리 장치들은 전형적으로 단일 레벨의 제어기를 구비하여 구현된다. 큰 고체상태 드라이브들(SSDs)에서는 수십 또는 심지어 수백 개의 플래시 장치들이 있을 수 있다. 고성능 장치들에서는 파워가 제약되어 있을 수 있는 이들 플래시 장치들 대부분이 가능한 한 병렬 동작들이 되게 하는 것이 바람직할 수 있다. 최근에는 600 MB/sec의 인터페이스 명세들이 있고 이들은 여전히 증가하고 있다. 이 수준의 성능에 도달하는 것은 매우 빠른 제어기들, 메모리들, 및 ECC 모듈들을 요구한다. 최근에, 고성능 제어기들은 메모리 장치 관리를 핸들링하기 위해 하나 또는 적은 수의 ECC 모듈들 및 하나 또는 2개의 마이크로프로세서들을 구비하여 제작된다. 이 실시예의 제어기(300)에 있어서 ECC와 같이 기능들 중 일부는 메모리 장치들 자체들에 매우 국한적이기 때문에, 2개가 연결된 네트워크의 장치들이 이용될 수 있다. 구체적으로, 호스트(320)는 호스트 인터페이스 및 논리적 콘텐츠들의 고레벨 매핑을 관리할 수 있고, 하나 이상의 제어기들(300)은 메모리 장치 기능들(예를 들면, ECC)의 국부적 관리와 제어기(300) 및 호스트(320)의 병렬 실행 및 서로 다른 메모리들(320)) 상에서 병렬로 서로 다른 동작들을 핸들링하는 복수의 제어기들(300)의 병렬 실행에 기인하여 이들 기능들의 실행에 있어 병행도를 제공하기 위해 하나 이상의 생 NAND 플래시 메모리 장치들을 관리할 수 있다. 한 곳에서 메모리 장치 관리 기능들을 수행하는 SSD들 내 종래의 제어기들과는 대조적으로, 이들 기능들을 2개의 층들로 분할함으로써, 이 아키텍처는 두 방법들로(예를 들면, 호스트와 슬레이브 간에, 그리고 많은 슬레이브들 간에) 병렬 수행을 이용할 수 있다. 이것은 더 높은 총 수행 레벨들(예를 들면, 600 MB/sec)를 핸들링할 수 있는 단일 ECC 모듈 또는 마이크로프로세서를 설계해야 할 필요없이 이 레이트가 가능해지게 한다.
이 아키텍처의 또 다른 잇점은 판독, 소거와 같은 메모리-관련 기능들과 프로그램 교란 및 안전지역들을 핸들링하는 것 외에도, ECC 및 데이터 스크램블과 같은 기능들을 수행하기 위해 제어기(300)가 사용될 수 있기 때문에, 이들 기능들과 같은 메모리의 오류 복구 또는 저레벨 상세에 관해 시스템 개발자들이 알 필요가 없이, 생 메모리의 고레벨 추출이 개발될 수 있다는 것이다. 이 수준의 지원을 본원에서는 "정정된" 플래시"라 칭하는데, 이것은 생 플래시와 관리형 NAND 사이에서 논리적으로 존재한다. 한편, 이 아키텍처는 논리적 레벨에서 페이지 또는 블록 관리 면에서는 완전한 관리형 메모리는 아니며, 페이지들 및 블록들의 논리 대 물리 매핑을 제공할 것을 호스트에 요구할 수 있다. 그러나, 제어기(300)는 여전히 호스트 및 이의 펌웨어에 대해 어떤 플래시 메모리 관리 제약들을 부과할 수 있는데, 예를 들면 전체 페이지들만이 프로그램될 수 있고, 페이지들은 한 블록 내에 순서대로 기입되어야 하며, 페이지들은 전체 블록이 소거되어야 하기 전에 한번 만 기입될 수 있다. 물리적 블록들이 근사적으로 고르게 사용될 수 있게 하기 위해서 이들의 마모 평준화는 제어기(300)에 의해 수행될 수 있는데, 그러나 호스트(320)가 이 기능을 제공하게 할 수 있다. 또한, 제어기(300)는 바람직하게는 NAND의 페이지들 및 블록들에 전체 페이지 판독 및 기입 동작들을 호스트(320)에 보낸다. 논리 페이지 크기 및 블록 크기의 특징들은 기반 NAND와 동일할 것이다(부분 페이지 동작들이 지원되지 않는 한). 생 NAND에서 각 물리 페이지 내 대부분의 예비 영역은 ECC 및 이의 메타데이터용으로 제어기(300)에 의해 사용될 것이다. 제어기(300)는 사용하는 시스템이 메타데이터 관리를 위해 이용할 수 있는 적은 수의 예비 바이트들을 제공할 수 있다.
NAND 인터페이스를 통한 전송 오류를 검출하는 것에 관계된 실시예들
도 3을 참조하면, 전송 오류들은 NAND 인터페이스 버스를 통해 호스트-측 NAND 인터페이스(325)로 호스트(320)에서 제어기(300)로 데이터가 보내지고 있을 때 발생할 수 있다. ECC는 제어기(300) 내에서 생성되고 체크되기 때문에, 호스트-측 NAND 인터페이스(325)를 통해 전송되는 데이터를 보호하는 ECC는 없다. 이 문제 및 제안된 해결책이 도 4에 관련하여 이제 논의될 것이다.
도 4는 하나 이상의 플래시 메모리 장치(들)(430)에 데이터를 기입하고 이로부터 데이터를 판독하기 위한 실시예의 제어기(400)의 블록도이다. 도 4에 도시된 바와 같이, 제어기(400)는 이 실시예에서 NAND 인터페이스 프로토콜을 사용하여 제어기(400)와 호스트(420)(호스트 제어기(421)를 갖는) 간에 데이터를 전송하게 구성된 제 1 NAND 인터페이스(425), 및 NAND 인터페이스 프로토콜을 사용하여 제어기(400)와 하나 이상의 플래시 메모리 장치(들)(430) 간에 데이터를 전송하게 구성된 제 2 NAND 인터페이스(들)(435)를 포함한다. 위에 논한 바와 같이, 각 인터페이스(425, 435)에 의해 사용되는 NAND 인터페이스 프로토콜은 동일 프로토콜일 수 있거나 서로 다른 프로토콜들일 수 있다. 위에 논한 바와 같이, 제어기(400) 및 플래시 메모리 장치(들)(430)은 서로 다른 패키지들에 패지될 수 있거나, 둘 다 공통의 복수-칩 패키지 내에 놓일 수 있거나, 동일 다이 상에 집적될 수 있다. 또한, 일실시예에서, 호스트(420)는 논리에서 물리로의 어드레스 매핑을 수행하며, 따라서, 호스트(420)는 물리 어드레스에 대해 기입 또는 판독하기 위한 지령과 함께 이 물리 어드레스를 제 1 NAND 인터페이스(425)를 통해 제어기(400)에 제공한다.
이 실시예에서, 제어기(400)는 제어기(400)의 동작을 제어하는 제어 모듈(440), 오류 검출 코드(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)는 제 1 NAND 인터페이스(425)를 통해 호스트(420)로부터 기입 지령, 데이터, 및 데이터에 연관된 오류 검출 코드를 수신한다(단계(510)). (호스트(420)는 반드시 제어기에 지령을 발행하고 있다는 사실을 아는 것은 아니기 때문에, 핸들링할 수 있는 유형의 표준 NAND 플래시 저장장치와 인터페이스하고 있다고 가정할 수 있다). 오류 검출 코드는 전에, 혹은 보내지거나, 혹은 데이터와 혼합될 수 있으며, 일실시예에서, 오류 검출 코드는 데이터를 내포하는 데이터 패킷의 헤더(예를 들면, 8-16 예비 바이트들)의 부분이다. 위에 논한 바와 같이, 오류 검출 코드는 데이터 내 적어도 한 오류가 검출되게 하지만 정정되게 하지는 않는다. 다음에, EDC 모듈(450)은 데이터에 기초하여 오류 검출 코드를 발생하고, 제어 모듈(440)은 발생된 오류 검출 코드를 호스트(420)로부터 수신된 오류 검출 코드와 비교한다(단계(520)). 이 비교에 기초하여, 제어 모듈(440)은 발생된 오류 검출 코드가 호스트(420)로부터 수신된 오류 검출 코드와 일치하는지를 판정한다(단계(530)). 발생된 오류 검출 코드가 호스트(420)로부터 수신된 오류 검출 코드와 일치한다면, 제어 모듈(440)은 호스트(420)에서 제어기(400)로 데이터의 전송에서 오류가 발생하였음을 나타내는 신호를 호스트(420)에 보낸다(단계(540)). 그러면, 호스트(420)는 데이터를 제어기(400)에 다시 보낼 수 있다. 그러나, 발생된 오류 검출 코드가 호스트(420)로부터 수신된 오류 검출 코드와 일치한다면, 기입 프로세스는 ECC 모듈(460)이 데이터에 기초하여 오류 정정 코드를 발생하는 것을 계속한다(단계(550)). 위에 논한 바와 같이, 오류 정정 코드 데이터 내 적어도 한 오류가 검출되고 정정될 수 있게 한다. 이어서, 제어 모듈(440)은 제 2 NAND 인터페이스(435)를 통해 플래시 메모리 장치(들)(430)에 데이터 및 오류 정정 코드를 저장한다. 다시, 지령 바이트들, 어드레스 바이트들, 헤더 바이트들, 그리고 호스트의 데이터 바이트들와 ECC 모듈(460)에 의해 발생된 대응하는 ECC 비트들 둘 다를 내포하는 데이터 바이트들을 포함한 지령이 NAND 인터페이스 프로토콜에 따라 발행된다. 따라서, 플래시 메모리 장치(들)(430)은 이들이 호스트(420)로부터 직접적으로가 아니라 제어기(400)를 통해 간접적으로 정보를 수신하고 있다는 것을 반드시 아는 것은 아니다.
이제 도 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)로부터 알 수 있는 바와 같이, 이 실시예는 제 1 NAND 인터페이스(425)를 통해 호스트(420)와 제어기(400) 간에 데이터가 보내지고 있을 때 발생할 수 있는 전송 오류들에 대해 보호한다. 일부 제어기 아키텍처들에서, 기입동작에서, 호스트는 ECC를 발생하고 ECC 및 데이터를 제어기에 보내며 제어기는 ECC 및 데이터 둘 다를 플래시 메모리 장치에 저장한다. 유사하게, 판독동작에서, 제어기는 플래시 메모리 장치로부터 데이터 및 ECC를 인출하고 데이터 및 ECC를 호스트에 보낸다. 이들 아키텍처들에서, ECC는 메모리 장치 오류들에 대해 보호하기 위해 사용될 뿐만 아니라, 호스트와 제어기 간에 인터페이스 전송 오류들에 대해서도 보호하기 위해 사용된다. 그러나, 이 실시예에서, 플래시 메모리 장치(들)(430)에 데이터와 함께 저장할 ECC를 발생하는 것은 제어기(400)이며 호스트(420)가 아니다. 호스트(420)에게 EDC를 발생하게 하고 제어기(400)에게 기입들에서 EDC를 체크하게 하며 제어기(400)에게 EDC를 발생하게 하고 호스트(420)에게 판독들에서 EDC를 체크하게 함으로써, 이 실시예는 호스트(420)가 종래의 제어기 아키텍처에서처럼 저장을 위해 ECC를 발생하지 않을지라도 제 1 NAND 인터페이스(425)를 통해 전송 오류들에 대해 보호를 제공한다. 또한, 호스트에게 EDC를 발생하게 하고 제어기에게 EDC를 체크한 후 ECC를 발생하게 하는 프로세스가 호스트에 비-NAND 인터페이스를 제공하는 일부 종래의 제어기 아키텍처들(예를 들면, USB)에서 사용되더라도, 이 실시예는 호스트 및 제어기가 NAND 프로토콜을 사용하여 NAND 인터페이스를 통해 통신하는 도 3 및 도 4에 도시된 바와 같은 제어기 아키텍처들에서 사용될 수 있다. 또한, 일부 기존의 호스트 인터페이스 프로토콜들(특히 SATA, SAS, FC, 및 PCIe와 같은 직렬 프로토콜들)은 전송 오류들을 검출하기 위해 사용될 수 있는 패킷당 어떤 종류의 CRC를 제공하며, 이 정보는 호스트(420)를 통해 전달되어 데이터 패킷에 첨부되어 유사한 목적을 위해 사용될 수도 있을 것이다. 그러나, 외부 호스트 인터페이스(이를테면 SATA)를 통한 데이터 전송들은 제어기(400)에 제 1 NAND 인터페이스(425)를 통해 보내지는 페이지들과는 다른 전송 길이를 가질 수 있어 적합한 조절들이 행해질 필요가 있을 수 있다.
위에서, 호스트(420)에 의해서 그리고 EDC 모듈(450)에 의해 계산된 EDC는 ECC 모듈(450)에 의해 사용되는 것보다는 더 간단한 형태의 ECC 일 수도 있을 것이다. 예를 들면, 제 1 NAND 인터페이스(425)에 대해 사용되는 ECC는 전송 오류들을 검출 또는 정정하기만 하면 되며, 제 2 NAND 인터페이스(435)에 대해 사용되는 ECC는 바람직하게는 더 길고 더 복잡한 ECC를 요구할 수 있는 NAND 저장 오류들을 검출하여 정정하기 위해 사용된다.
플래시 메모리 시스템에서 판독 상태 및 예비 블록 관리 정보를 제공하는 것에 관계된 실시예들
도면들을 다시 참조하면, 도 7은 제어 모듈(740), 오류 정정 코드(ECC) 모듈(750), 상태 모듈(760), 및 예비 블록 관리 모듈(770)을 포함하는 실시예의 제어기(700)를 도시한 것이다. 제어기(700)는 각각 제 1 및 제 2 인터페이스들(725, 735)을 통해 호스트(720)(호스트 제어기(721)를 구비한) 및 플래시 메모리 장치(들)(730)과 통신할 수 있다. 제 1 및 제 2 인터페이스들(725, 735))은 임의의 적합한 형태를 취할 수 있고, 일실시예에서는 도 3에 관련하여 위에 기술된 바와 같이, NAND 인터페이스들이다. 그러나, 이외, 비-NAND-형 인터페이스들은 USB 및 SATA에 사용될 수 있는데, 그러나 이들로 제한되는 것은 아니다. 또한, 제어기(700)는 위에 논의된 물리적 배열들 중 어느 하나, 예를 들면 호스트 및 플래시 메모리, 등과는 독립적으로 패키지된, 하나 이상의 플래시 메모리 다이들을 내장한 메모리 시스템에 패키지되는 별도의 다이 상에 배치될 수 있다.
제어 모듈(740)은 제어기(700)의 동작을 제어하고 호스트(720)로부터 수신된 지령(예를 들면, 판독, 기입, 소거, 등) 및 어드레스에 기초하여 메모리 동작을 수행하게 구성될 수 있다. ECC 모듈(750)은 플래시 메모리 내 메모리의 블록들로부터 인출되거나 이에 보내지는 데이터를 핸들링할 때 판독 또는 기입 오류와 같은 오류가 발생하였는지를 판정하는 과정에서 사용된다. 제어기(700)는 판독 오류들을 검출하고 특정 오류 정정 코드 알고리즘의 역량 내에서 어떤 검출된 오류들을 정정하기 위해 다수의 오류 정정 코드(ECC) 알고리즘들 중 어느 하나를 적용하게 구성될 수 있다. 제어기(700)는 호스트에서 오류 정정을 행해야 하기보다는 오류 정정 알고리즘에 따라 처리된 데이터를 호스트(720)가 제 1 인터페이스(725)를 통해 수신하게 오류 정정 코딩의 적용을 핸들링한다. (대안적으로, ECC 모듈(750)은 ECC에 더하여 혹은 이 대신으로 다른 오류 복구 기술들을 사용할 수도 있을 오류 핸들링 모듈로 대체될 수 있다. 이러한 대안적 예에서, 제어기(700)는 여전히 데이터를 정정할 것이므로, 제 1 인터페이스(725)를 통해 보내진 데이터는 호스트(720)(예를 들면, 단일 오류 코드를 계산하거나 전압을 옮겨 다시 판독한다)에 의한 추가의 오류 처리를 요구하지 않는다)). 반대로, 기입 동작들 동안에, 제어기(700)는 오류 엔코딩 데이터를 핸들링하고 플래시 메모리 장치(들)(730)에 저장을 위해 제 2 인터페이스(735)를 통해 ECC 코드 및 데이터를 전송한다.
상태 모듈(760)은 플래시 메모리 장치(들)(730) 상에서 특정 동작들의 상태 에 관계된 데이터를 호스트(720)에 제공하기 위해 ECC 모듈(750)과 공조한다. 예를 들면, 상태 모듈(760)은 제어기(700)에서 오류 분석 활동을 검토하고, 판독 오류가 검출되었는지, 혹은 정정되었는지, 혹은 정정할 수 없는지에 기초하여 판독 오류 정보에 관한 상태 정보를 준비할 수 있다. 호스트, 제어기, 및 플래시 메모리 배열에서 호스트(720)는 전형적으로 데이터가 플래시 메모리 장치(들)(730)로부터 인출될 때 데이터의 오류 분석 또는 정정을 핸들링하지 않을 것이기 때문에, 호스트(720)는 판독 동작의 상태에 대한 상세가 없을 것이다. 상태 모듈(760)은 이 정보가 추적되어 호스트(720)에 제공될 수 있게 하므로 호스트(720)는 어떻게 혹은 어디로 데이터가 보내지거나 메모리에 요청될 것인가에 대해 임의의 요망되는 조절들을 행할 수 있게 된다. 또한, 호스트(720)는 이 상태를 사용하여 마모 평준화, 데이터 재배치, 혹은 판독 스크러브와 같은 그외 어떤 다른 사전 대책적인 또는 예방적인 동작을 개시할 수 있다.
상태 모듈(760)은 상태 정보를 몇몇 포맷들 중 한 포맷으로 호스트(720)에 보낼 수 있다. 상태 모듈이 호스트(720)에 송신하기 위해 판독 상태 정보를 준비하고 있는 상황에서, 판독 상태는 도 8a 및 도 8c에 나타낸 바와 같이, 플래시 메모리로부터 인출된 데이터에 첨부될 수 있다. (이들 도면들에 도시된 필드들이 임의의 순서로 올 수 있음에 유의한다). 도 8a는 제어기(700)에 의한 오류 분석에 대해 처리한 후에, 플래시 메모리로부터 인출된 데이터가 2 이상의 바이트들(따라서, 청구항들에서 사용되는 "비트"는 단일 비트 또는 하나 이상의 바이트들과 같이 하나 이상의 비트들을 지칭할 수 있다)에 패딩될 수 있는, 헤더(802), 데이터 페이로드 섹션(804), 및 상태 비트(806)를 갖는 메시지 내에 놓여지는 데이터 전송 포맷(800)을 도시한 것이다. 이 상태 비트(806)는 호스트(720)에 의해 사용을 위한 바이너리 성공 혹은 실패 표시일 수 있다. 상태 비트(806)는 반드시 판독 오류의 유형 또는 정도 간을 구별하는 것은 아니지만, 어떤 형태의 오류가 발생되었음을 경고하는 플래그를 호스트(720)에 제공할 것이다. 대안적으로, 상태 비트는 호스트(720)에 유지된 혹은 제어기(700)에 의해 유지된 룩업 테이블에 오류 메시지에 연관된 엔코딩된 값을 수록하기 위한 단일 필드일 수 있다. 도 8b는 도 8a와 유사하나, 상태 비트(806')는 판독들에서 제어기(700)에 의해 정상적으로 채워지게 될 헤더(802')의 부분으로서 포함되고, 별도의 상태 비트 필드는 없다.
대안적으로, 도 8c에 보인 바와 같이, 데이터 전송 포맷(808)은 헤더(810), 데이터 페이로드 섹션(812), 및 상태 섹션(814)에 복수의 필드들(816)로 배열된 하나 이상의 비트들을 갖는 상태 섹션(814)을 포함할 수 있다. 도 8c의 배열에서, 상태에 관한 더 상세한 정보는 판독 오류들에 관하여 전송될 수 있고 호스트(720)이 이용할 것이다. 상태 메시지의 일 구현예에서, 호스트(720)에 판독 오류 정보만이 제공될 수 있다. 다른 구현예에서, 상태 정보는 제어 모듈(740)에 의해 검출되고 제어기(700)의 상태 모듈(760)에 의해 포맷되는 판독, 기입, 및 소거 오류 정보 중 하나 이상을 전달하게 배열될 수 있다. 다른 실시예들에서, 상태 섹션(814)의 필드들(816)은 그에 더하여, 혹은 대안적으로, 예비 블록 관리에 관계된 데이터를 제공할 수 있다. 제어기(700)의 예비 블록 관리 모듈(770)에 연루되거나 이에 의해 보고된 예비 블록 관리 활동들에 관한 상세는 다음 단락에서 제공된다. 도 8c의 복수의 필드 실시예는 보고될 메모리 동작에 연관된 오류들의 조합들에 대한 메커니즘을 제공한다. 도 8d는 도 8c와 유사하나 상태 필드(814')는 헤더(810')의 일부이며, 유사하게 복수의 필드들(816')로 구성될 수 있다.
또 다른 실시예에서, 판독의 결과 또는 성공/실패는 유보된 또는 벤더에 고유한 필드들 중 하나에 상태 레지스터 또는 확장된 상태 레지스터에 표시될 수도 있을 것이다. 그러나, 비지 상태에 대해 폴링하는 것을 넘어, 최근에 호스트 제어기들은 반드시 상태 또는 확장된 상태 레지스터들에서 판독 오류들을 찾지는 않는다. 프로그램 및 소거 오류들은 프로그램 또는 소거 지령들(이것은 생 NAND 장치로부터 표준 오류를 보고하는 것이다)에 응하여 제 2 인터페이스(735)를 통해 보고되고, 이 정보는 호스트에 리턴될 수도 있을 것이다. 이러한 오류에 대한 일반적인 응답은 새로운 블록을 할당하고, 오류들을 가진 블록으로부터 임의의 현재 유효한 데이터 페이지들을 카피하고, 임의의 메타데이터에게 이것이 현재 유효한 블록이라 표시하게 하고 이어 오류들을 갖는 현존의 블록을 배드로서 표시하는 것이다. 일실시예에서, 제어기는 프로그램 또는 소거 실패들을 표시하고 이를 호스트 제어기에 맡겨 전술한 카피 및 메타데이터 관리를 수행하게 할 수 있다. 또 다른 실시예에서, 제어기는 이들 동작들을 수행하고 제어기 내에서 배드 블록을 관리할 수 있다. 이 경우에, 이것은 오류가 발생하였던 것보다 호스트 제어기에 완전히 분명하였을 수도 있을 것이며, 혹은 제어기는 이 정정 동작을 취하였음을 나타낼 수도 있을 것이다(예를 들면, 호스트는 소프트 오류가 발생하였던 것처럼 이것을 기록할 수도 있을 것이다). 따라서, 요약하여, 이들 비트들은 호스트가 관리해야 하는 오류가 발생하였음을, 혹은 제어기가 관리한(그리고 호스트에 단지 알려지며) 오류가 발생하였음을, 혹은 오류가 제어기에 의해 핸들링되고 호스트로부터 감쳐질 수도 있을 것임을 나타낼 수도 있을 것이다.
이를테면 단일 상태 비트(806 또는 806'), 복수의 필드들(816 또는 816')을 가진 상태 섹션(814 또는 814'), 또는 상태 또는 확장된 상태 레지스터 내 비트들을 통해, 오류를 알리는 택일적 방법들을 총괄하여 "오류 신호"라 칭하도록 할 것이다. 또 다른 실시예에서, 이들 오류 신호들 중 하나 이상에 더하여, 제어기(700)는 오류 신호들 중 하나 이상의 사용과 조합하여 기지의 위치에 상세한 상태 정보를 저장하게 구성될 수 있다. 예를 들면, 제어기(700)의 상태 모듈(760)은 플래시 메모리 장치(들)(730) 상에 소정의 위치에 혹은 오류 신호들 중 하나 이상을 수신한 것에 응하여 호스트가 액세스할 수 있는 제어기(700)에 상세한 상태 정보(예를 들면, 판독 상태 데이터)를 저장할 수 있다. 따라서, 상태 비트 또는 필드는 호스트가 상태(예를 들면 판독 오류)에 관한 추가의 상세를 원한다면 호스트에게 더 많은 정보가 제공될 수 있음을 나타내는 플래그보다 어떠한 더 많은 정보도 전달하지 않을 수 있다. 또한, 비트 또는 필드에 의해 플래그된 추가의 상태 정보는 호스트가 위치를 알 필요가 있어 상태 정보를 인출하기보다는 호스트가 상태 정보를 인출하기 위해 제어기(700)에 일반적인 지령을 보냄으로써 액세스할 수 있는 제어기(700)에 의해 추적된 위치에 저장될 수 있다.
도 8a의 단일 비트 -이 비트는 단순히 오류 정정의 성공 또는 실패를 나타낸다- 가 첨부된 상태 메시지 포맷이 사용된다면, 이 비트는 이를테면 개방 NAND 플래시 인터페이스 워킹 그룹으로부터 가용한 ONFI 2.0과 같은 가용한 인터페이스 프로토콜을 위한 확장된 판독 포맷으로 벤더-특정의 비트의 부분으로서 구현될 수 있다. 상태 모듈이 저장되게 하는 위치에 더 상세한 정보를 호스트(720)에 경고하는 복수의 비트 상태 정보, 혹은 단일 또는 복수의 비트 정보 포맷들이 위에 기술된 바와 같이 사용될 수도 있다.
도 9는 도 8a ~ 도 8d의 실시예들에서는 위치들(806, 806', 814, 814')에 놓여질 수 있거나, 호스트(720)가 상태 가용성의 통지 후에 추가 정보를 요청하거나 제어기(700)로부터 정보를 인출할 수 있는 실시예들에서는 제어기(700) 또는 플래시 메모리 장치(들)(730)에 저장될 수 있는 것인 상태 필드들(900)의 한 가능한 배열을 도시한 것이다. 상태 필드들(900)은 판독 동작의 성공 또는 실패를 나타내는 필드(902), ECC 정정과 같은 정정이 수행되었는지에 관한 정보를 제공하는 필드(904), 및 "하드" ECC 실패(즉, 데이터가 손실되었던)가 있었는지를 플래그하는 필드(906)를 포함할 수 있다. 판독 상태 정보 외에도, 상태 필드들(900)은 프로그램 또는 소거 오류가 제어기(700)에 의해 검출되었는지를 나타내는 하나 이상의 필드들(908)을 포함할 수도 있다. 이하 논의되는 바와 같이, 예비 블록 관리에 관계된 상태 정보로서, 이를테면 블록 카피 및 재-매핑을 요청하는 필드(910), 호스트에 새로운 예비 블록을 리턴할 것을 요청하는 필드(912), 및 플래시 메모리 장치(들)(730)에서 결함 블록에 대해 동작이 시도된 적이 있었음을 호스트(720)에 알리는 필드(914)가 포함될 수도 있다. 특정 응용을 위해 필요할 수 있는 다른 상태 정보를 핸들링하기 위해 하나 이상의 추가의 필드들(916)이 배열될 수도 있다. 예를 들면, 이러한 필드(916)는 소프트 오류들(즉, ECC에 의해 정정된 오류들)의 수를 나타낼 수 있다.
도 10은 판독 상태 정보를 호스트(720)에 제공하기 위해 제어기(700)에 실시할 수 있는 실시예의 방법의 흐름도(1000)를 도시한 것이다. 제어기(700)는 먼저 호스트(720)로부터 판독 지령을 수신한다(단계(1002). 데이터를 판독하기 위해서, 제어기(700)는 판독 지령을 플래시 메모리 장치(들)(730)에 발행하고(단계(1004)), 플래시 메모리 장치(들)(730)은 오류 정정 코드와 함께 한 페이지의 데이터를 제 2 인터페이스(735)를 통해 제어기(700)에 리턴한다(단계(1006)). 제어기(700)의 ECC 모듈(760)은 인출된 데이터에 대해 오류 분석을 수행한다(단계(1008)). 오류 분석 또는 핸들링은 오류 정정 코드 알고리즘 또는 그외 오류 정정 메커니즘일 수 있다. ECC 알고리즘이 사용된다면, 제어기(700)는 플래시 메모리 장치(들)(730)로부터 인출된 데이터에 대해 ECC 바이트들을 계산하고, 계산된 ECC 바이트들을 이전에 저장되어 데이터와 함께 인출된 것들과 비교한다. 계산된 ECC 바이트들 및 인출된 ECC 바이트들이 일치하지 않는다면, 제어기(700)는 오류를 확인한다(단계(1010)). 계산된 ECC와 저장된 ECC 간에 차이가 제어기(700)에 의해 정정될 수 있다면, 제어기(700)는 제 1 인터페이스(725)를 통해 전송하기 전에 데이터를 완전히 정정할 것이며 오류를 "소프트" 또는 정정가능 오류로서 확인할 것이다. 대안적으로, 오류가 ECC 알고리즘 혹은 그외 오류 복구 절차들이 오류를 보상할 수 없을 만큼 충분히 심하다면, 제어기(700)는 데이터 유실이 발생하였음을 알리는 하드 오류를 확인할 것이다. 플래시 메모리 장치(들)(730)로부터 판독된 정정된 데이터는 위에서 논한 데이터 메시지 포맷들(800, 800', 808, 808') 중 하나와 같은 데이터 메시지 포맷으로 첨부된 상태 정보와 함께 호스트(720)에 제 1 인터페이스(725)를 통해 보내진다(단계(1012)).
도 10에 예시된 실시예인 판독 상태 오류를 제공하는 방법을 참조하면, 판독 상태 오류가 계산되어 제어기(700)에 의해 판독되어 분석된 정보의 각 페이지의 끝에만 제공되므로 복수의 페이지들의 스트리밍은 중단되지 않으며, 어느 페이지들이 오류들을 내포하는지에 대해 명확해진다. 또한, 또 다른 실시예에서, 제어기(700)가 플래시 메모리 장치(들)(730)로부터 데이터를 읽고 완전한 한 페이지의 플래시 메모리가 처리되기 전에 데이터가 들어올 때 ECC를 계산할 수 있는 것도 생각해 볼 수 있다. 예를 들면, 페이지 크기가 8 킬로바이트들(KB)이라면, 제어기(700)는 각각이 한 페이지 미만을 포함하는 것인 2 KB 세그먼트들에서 ECC를 계산할 수 있고, 따라서 페이지의 각 부분이 행해진 후에 ECC는 페이지의 이 부분을 나타내는 정보에 대해 체크되거나 정정될 수 있다. 2 KB 세그먼트 또는 그 이상의 2 KB 세그먼트들이 플래시 메모리 장치(들)(730)에서 제어기(700)로 전송된 후에, 제어기(700)는 플래시 메모리에서 제어기로 이 페이지에 대해 데이터의 마지막이 전송되기 전에 제 1 인터페이스(725)를 통해 오류-정정된 데이터를 전송하는 것을 동시에 시작할 수 있다.
적합, 배드 , 및 예비 블록 관리 실시예들
다시 도 9를 참조하면, 위에 언급된 바와 같이, 상태 필드들(900)은 플래시 메모리의 실제 수명동안 나타날 수 있는 배드(결함) 블록들을 관리하기 위해 필요한 예비 블록들을 핸들링하는데 유용한 예비 블록 관리, 예를 들면 필드들(910 ~ 914)에 관계된 정보를 포함할 수 있다. 도 7에 도시된 바와 같이, 예비 블록 관리 모듈(770)은 몇몇 방법들 중 한 방법으로 동작하게 제어기(700) 에 포함될 수 있다. 채택된 특별한 예비 블록 관리 모드에 따라, 이를테면 필드들(910 ~ 914)와 같은, 정보의 하나 이상의 필드들이 이용될 수 있다.
일반적으로, 플래시 메모리 장치들은 과잉의 수의 블록들(정의된 최소 용량보다 큰)을 갖게 제조된다. 공장 테스트 동안이나 장치의 사용 동안에, 어떤 블록들은 "배드" 혹은 "결함이 있는 것"인 것으로서 발견될 수도 있고, 이것은 이들은 데이터를 올바르게 저장할 수 없고 대체될 필요가 있음을 의미한다. 유사하게, 또 다른 블록이 실패되거나 결함이 있게 될 때까지 "예비들"로서 사용될 수 있는 과잉의 "적합" 블록들(정의된 최소 용량보다 큰)이 있을 수 있다. 이들 가외의 블록들을 관리하는 것은 각각 배드 블록 관리 및 예비 블록 관리로서 알려져 있다. 이들 개념들은 도 12a 및 도 12b에 도시된 예시적인 플래시 메모리 장치(1200)의 블록들을 다루는 다음 단락들에서 더 상세히 기술될 것이다.
도 12a는 예를 들면 총 1,000 개 블록들의 메모리로 설계되고 제조되는 장치의 블록들을 물리적으로 도시한 것이다. 이 도면에서, 블록들은 물리적 순서로 도시되었으며, 각각의 백색의 블록(1210)은 플래시 메모리 장치(1,000 블록들 중 몇 개만이 도시되었다) 내 독립적인 블록을 나타낸다. 각각의 흑색의 블록(1220)은 제조시 결함이 있는 블록(이 예에서는 랜덤하게 분포되어 있는)을 나타낸다. 도 12b는 동일 부분(1200)의 개요도로서, 여러 적합 및 배드 블록들은 함께 그룹으로 도시되었다(물리적 순서는 아님). 1200와 같은 부분에 대한 예시된 벤더 데이터 시트는 1230에 나타낸 바와 같이, 수명이 다했을 때 적어도 900개의 적합 블록들을 가질 것으로 기대될 수 있음을 나타낼 수 있다. 본 특정한 예시된 플래시 메모리 장치(1200)에 있어서는 950 적합(백색) 블록들(전부가 도시된 것은 아님) 및 50 배드(흑색) 블록들(전부가 도시된 것은 아님)이 있다. 50 배드 블록들(제조시 혹은 초기 테스트시에)은 1260으로서 논리적으로 그룹화하여 도시되었다.
본 예를 계속하면, 데이터 시트는 명시된 수명 동안 10개의 블록들만이 실패할 수 있다고 명시할 수 있고, 따라서 이들은 "최소 예비들"(1240)로서 도시되었다. 따라서, 장치(1200)는 제조시 최소 910 적합 블록들을 가져야 한다(아니면 공장은 데이터 시트에 부합하지 않을 것이기 때문에 이러한 장치를 출하하지 않을 것이다). 이외 40개의 적합(백색) 블록들(950개의 적합 블록들과 910개의 보장된 적합 블록들 간에 차이)은 "가외의 예비" 블록들인 것으로 간주되며 1240로서 도시되었다. 가외의 예비들의 수는 반드시 기대되는 것은 아닐 수 있고 이론적으로 90(매우 드물긴 하지만, 배드 블록들이 전혀 없다면)과 0(90 배드 블록들을 의미하는 것으로 단지 데이터 시트 요건들을 충족시킬 것이다) 사이에서 다양할 수도 있을 것이다. 총괄적으로, 최소 예비들 및 가외의 예비들을 "예비 블록들"이라 칭할 수도 있다.
전형적으로, 호스트는 생 플래시 메모리에 직접 예비 블록 관리를 핸들링할 것이다. 예를 들면, 표준 호스트는 어느 블록들이 사용가능한 블록들인지를 판정하고 어느 블록들이 결함 또는 "배드" 블록들이라고 하는 사용불가한지를 판정하기 위해 특정 시그내처를 찾기 위해 플래시 메모리 내 모든 블록들을 스캔하는 자신의 제어기를 구비할 수 있다. 따라서, 위에 기술되고 1200에 상세히 도시된 바와 같은 플래시 메모리 장치(들)(730)와 같은 플래시 메모리가 1,000 블록들의 메모리를 가진 것으로서 제조된다면, 호스트 제어기는 전형적으로 모든 1,000 블록들을 분석하고 적합 및 배드 블록들을 확인할 것이다. 전형적인 호스트 제어기는 940 적합 블록들(이 예에서) 전부 혹은 일부를 사용하고 현재 사용가능한 블록들이 배드가 되었을 때 현재 사용가능한 블록들을 교체하는데 사용하기 위해 예비 블록들로서 10 블록들을 유보해 둘 수 있다. 이것은 발견되는 임의의 가외의 예비 (적합) 블록들을(예를 들면, 이 예에서 40) 사용할 수도 있다. 도 7에 기술된 바와 같이 예비 블록 관리 모듈(770)을 가진 제어기(700) 을 이용하면, 호스트에 의해 전형적으로 핸들링되는 예비 블록 관리의 서로 다른 면들을 제어기(700)의 예비 블록 관리 모듈(770)이 넘겨받을 수도 있다.
일 구현예에서, 예비 블록 관리 모듈(770)은 3가지 예비 블록 관리 동작 모드들 중 한 모드에서 동작하게 선택적으로 구성될 수 있다: (1) 제어기(700)가 예비 블록들의 관리를 제공하지 않고 호스트(720)가 스스로 결함들에 대해 블록들을 스캔하는 비-관리형 모드; (2) 호스트(720)에게 N 적합 논리 블록들만을 제공하는 완전-관리 예비 블록 관리 모드, N은 데이터 시트 파라미터이며 플래시 메모리에서 가용한 파라미터 페이지에서 읽어들일 수 있으며; (3) 호스트가 가외의 예비 블록들을 사용하지만 제어기(700)는 제어기의 예비 블록 보급이 요망되는 레벨 미만으로 떨어졌을 때 제어기(700)에 의해 사용하기 위한 이들 가외의 블록들 중 일부를 내놓을 것을 호스트에 요청할 수 있는 분할-예비 블록 관리 모드.
제어기(700)가 개별적인 호스트(720), 제어기(700), 및 플래시 메모리 장치(들)(730)을 조립하는 제조설비에 아직 있는 동안 호스트(720)에 의해 초기화되거나, 혹은 심지어는 특정원 원 장비 제조업자(OEM)에 의한 사용을 위해 미리 초기화될지라도, 제어기(700) 내에 예비 블록 관리 모듈(770)은 다른 예비 블록 관리 모드가 선택된 후에 예비 블록 관리 모드를 변경하게 재구성될 수 있다.
도 11의 흐름도(1100)를 참조하면, OEM에서 원래로 초기화하든 사전에 선택된 모드를 재설정하든, 제어기(700)에서 예비 블록 관리 모듈의 초기화시, 제어기(700)는 요망되는 동작 모드를 확인하는 선택 지령을 수신한다(단계(1102)). 비-관리형 예비 블록 관리 모드가 선택되었음을 선택 지령이 나타낸다면(단계(1104)), 예비 블록 관리 모듈(770)은 사용가능 및 배드 블록들을 확인하기 위해 직접 플래시 메모리 장치(들)(730)를 스캔할 것을 호스트(720)에 허용한다(단계(1106)). 비-관리형 모드에서, 제어기(700)는 예비 블록 사용을 관리하는 것이 금지된다. 대신에, 예비 블록 관리 모듈(770)이 배드 블록을 나타내는 오류를 확인하였을 때(이를테면 정정불가 ECC 실패(필드(906)) 또는 프로그램 혹은 소거 실패(필드(908))), 제어기(700)는 이 특정한 블록은 카피해 두고 필드(910)(도 9)와 같은 적합한 상태 필드를 사용하여 재-매핑할 필요가 있음을 호스트(720)에 알릴 수 있다. (또한, 필드(908)는 2개의 필드들일 수도 있는데, 하나는 프로그램 실패에 대한 것이고 다른 하나는 소거 실패에 대한 것이거나, 이들은 한 필드에 결합될 수도 있을 것이다).
예비 블록 관리가 비-관리형 예비 블록 관리 모드에서 호스트(720)에게 전적으로 맡겨질 수 있을지라도, 제어기(700)는 여전히 몇 개의 예비 블록들에 대해 스캔하여 이들을 오류 복구를 위해 사용하기 위해 호스트(720)가 모르게 할 수 있다. 즉, 최대 1,000 블록들을 갖는 플래시 메모리의 도 12의 예를 사용할 때, 데이터 시트들은 900으로서 최소 보장된 수의 블록들과 990으로서 최대 보장된 수의 블록들을 보일 수도 있을 것이다. 본 특정한 부분에서 실체 적합 블록들의 수가 905인 경우, 호스트(720)는 호스트(720)가 적합 블록들에 대해 스캐닝하기 전에 제어기(700)가 자신이 사용하기 위해 10 블록들을 감추어 졌다면 940 적합 블록들만을 발견할 것이다. 제어기(700)는 제어기(700)가 어느 블록들을 감추고 있는지를 알고 있기 때문에, 감추어진 블록들이 배드 블록들임을 거짓으로 나타냄으로써 호스트(720)로부터 적합 블록들을 감출 수 있다. 예를 들면, 제어기(700)가 블록 X를 감추기로 결정하였다면, 호스트가 블록 X를 읽을 때, 호스트는 결함 블록 플래그와 함께 임의의 데이터를 리턴할 수 있다. 마찬가지로, 호스트에서 블록 X로 임의의 소거 또는 프로그램 요청들시, 제어기는 소거 또는 프로그램 오류를 알릴 수 있다.
예비 블록 관리의 제 2 모드에 관련하여(단계(1108)), 완전 관리 모드에서, 예비 블록 관리 모듈(780)은 적합 블록들을 확인하기 위해 플래시 메모리 장치(들)(730) 내 블록들을 모두 스캐닝하는 것을 수행하고 N 적합 블록들만을 호스트 제어기에 제공하는데, N은 보장된 수의 사용가능한 블록들의 플래시 메모리의 파라미터 페이지에서 판독될 수 있는 데이터 시트 파라미터이다(단계(1110) 및 단계(1112)). 그러면 제어기(700)는 N 적합 블록들에 대해서만 호스트 동작을 허용한다. 제어기(700)는 오류 핸들링을 사용할 수 있는 예비들로서 임의의 가외의 적합 블록들을 유지한다(단계(1114)). 다시, 위에 도 12에 기술된 1,000 블록들을 갖는 가정된 플래시 메모리를 참조하면, N은 900일 수 있고, 제어기(700)는 가외의 50개의 사용가능 블록들 전부를 예비들로서 유지할 것이며, 호스트(720)는 현재-적합한 블록이 배드가 된 것에 응하여 이들 예비들이 예비 블록 관리 모듈(780)에 의해 사용하게 될 때까지 이들에 액세스할 수 없다.
위에 언급된 세 번째 예비 블록 관리 모드인 분할 관리는 가외의 블록들(1250)(즉, 데이터 시트 상에 보장 개수 이상이고 원래 예비들로서 유보했던 임의의 블록들 미만의 것들)의 사용에 관하여 제어기(700)와 호스트(720) 간에 공조할 수 있게 한다. 호스트 동작들을 최적화하기 위해 이들 가외의 예비 블록들을 호스트(720)가 사용할 수 있게 할 수 있다. 분할 관리 기술의 일실시예에서, 예비 블록 관리가 분할 블록 관리를 위한 지령으로 초기화된다면(단계(1116)), 제어기(700)의 예비 블록 관리 모듈(770)은 적합 및 배드 블록들을 발견하기 위해 플래시 메모리 장치(들)(730)을 스캔하며, 오류 복구를 위해 적합 블록들 중 몇 개로서 예를 들면 5개를 적합 블록들로서 유보해둔다(단계(1118)). 제어기(700)는 모든 적합 블록들을 발견하고 호스트에게 적합 블록들만을 보여줄 수 있다.
예를 들면, 제어기(700)는 플래시 메모리 장치(들)(730)의 파라미터 페이지를 읽고 특정 플래시 메모리에 얼마나 많은 남은 적합 블록들이 있는지를 판정할 수 있다. 플래시 메모리 장치들의 클래스에 대한 제품 데이터 시트는 최소 및 최대 수의 가능한 적합 블록들(예를 들면, 900 ~ 990)을 보고할 수 있다. 따라서, 950 블록들이 예비 블록 관리 모듈(770)에 의해 스캔되어 실제로 사용가능한 것으로 발견된 1,000개의 가능한 블록들을 갖는 가정된 플래시 메모리의 전술한 예를 다시 참조하면, 제어기(700)가 이들 적합 블록들 중 5개를 예비 블록들로서 보유한다면, 945개의 적합 블록들을 호스트(720)에 보고할 것이다(단계(1120)). 따라서, 호스트(720)는 5개의 다른 적합 블록들이 존재함을 모를 것이다. 제어기(700)는 배드 블록들이 제거된 콤팩트한 논리적 어드레스 범위(예를 들면, 적합 블록들의 어드레스들은 순차적으로 0-N과 같이 재 매핑된다)에 적합 블록들을 재-매핑할 수 있다(단계(1122)). 호스트(720)가 N보다 큰 어드레스들에 판독, 프로그램, 또는 소거 동작을 시도한다면, 제어기(700)는 오류를 보고할 것이다. 예로서 도 9의 데이터 필드들(900)를 사용하면, 이 오류는 제어기가 규정한 범위 밖으로 호스트(720)가 가려고 할 때 호스트(720)가 결함 블록을 어드레스하고 있다고 여기도록 예비 블록 관리 모듈(770)가 필드(914)에 데이터를 첨부함으로써 보고될 수 있다.
분할 관리 모드의 대안적 실시예에서, 예비 블록 관리 모듈(780)은 플래시 메모리 장치(들)(730)에서 모든 블록들을 스캔하는 대신에, 단순히 자신을 위해 예비 블록들로서 유지하고 어느 것이 적합하고 어느 것이 결함이 있는 것인지를 판정하기 위해 호스트(720)가 모든 블록들을 스캔할 수 있게 하기 위해 단지 한 세트의 적합 블록들만을 스캔하고 유보할 수 있다. 분할 관리 모드의 이 대안적 구현예에서, 호스트(720)가 예비 블록 관리 모듈(770)이 예비 블록들로서 확인한 블록들 중 하나에 판독, 프로그램, 또는 소거 동작을 수행하려고 할 때 제어기(700)는 블록 내 결함을 표시하거나 오류를 기록할 것이다. 예를 들면, 제어기(700)는 결함 블록들을 표시하기 위해 사용되는 적합한 바이트들에 결함 플래그를 삽입하거나, 도 9에 필드(914)에 "결함 블록에 시도된 동작"과 같은 판독 상태에 필드를 채울 수 있다. 그러면 호스트(720)는 자신의 목적을 위해 파라미터 페이지에 보장된 개수 이상의 것들을 포함해서, 모든 다른 사용가능한 블록들을 사용할 것이다.
분할 블록 관리 기술의 어느 버전이 채용되는 관계없이, 호스트(720)는 전형적으로 자신의 이익, 예를 들면 성능 또는 내구성을 개선하기 위해서 -이들 둘 다를 호스트(720)는 최소 수 이상의 블록들에는 기대할 수 없을 수 있을 것이다- 최소값 이상의 임의의 가외의 예비 블록들을 사용할 수 있을 것이다. 따라서, 이 예에서, 호스트는 자신이 사용할 수도 있을 45개의 가외의 블록들(사용가능한 총 950개에서, 데이터 시트 상에 900개의 보장된 최소수와 유보된 5개를 제외하여)를 가질 것이다.
분할 관리 모드에 있어서, 제어기(700)가 프로그램 또는 소거 오류와 같은 예비 블록을 요구하는 오류에 접했을 때, 예비 블록 관리 모듈(770)은 새로이 발견된 결함 블록을 대체하기 위해 자신의 예비들 중 하나를 사용한다. 이 예에서, 예비는 위에 확인된 바와 같이 유보된 5개의 블록들 중 하나가 될 것이다. 예비 블록을 사용한 후에, 예비 블록 관리 모듈(780)은 이것이 전형적으로 유지하는 최소 수 미만의 예비 블록들(즉, 5)을 가질 것이며, 또 다른 예비 블록을 필요함을 호스트(720)를 통지할 것이다(단계(1124). 제어기(700)의 예비 블록 관리 모듈(780)로부터 호스트(720)에 제공되는 통지는 인출된 데이터와 함께 리턴되는 상태 값에 필드를 통해서 될 수 있다. 예를 들면, 도 9에서, 플래그는 예비로서 사용하기 위해 가외의 블록의 리턴을 요청하는 필드(912)로 전달될 수 있다. 이 예에서, 호스트(720)는 이전에는 사용할 수 있었지만 액세스할 수 있는 것으로서 보장되었던 최소 수를 초과한 45 가외의 블록들 중 하나를 리턴할 필요가 있을 것이다. 호스트(720)는 셋 특징 지령과 함께 전용 어드레스 또는 오프셋에 정보를 기입함으로써, 혹은 어드레스 필드로서 블록 어드레스와 함께 벤더-고유의 지령을 사용함으로써, 예비로서 사용하기 위해 어느 블록이 리턴되고 있는지를 제어기(700)에 표시할 수 있다.
분할 관리 모드에서, 클래스 메모리에 대해 데이터 시트에 의해 보장된 최소값 이상의 가외의 블록들은 호스트(720)가 사용할 수 있지만 나중에 예비들로서 소환될 수 있는 가외의 블록들과 제어기(700)를 위해 즉시 유보되는 예비들 간을 "분할"할 것이다. 이것은 제어기(700)가 임의의 가외의 블록들도 요구할 수 없고 사용할 수 있는 고정된 수의 예비 블록들을 갖는 비-관리형 모드와는 다르며 모든 가외의 블록들이 제어기(700)에 의해 사용되고 호스트(720)는 사용할 수 없는 완전 관리 모드와도 다르다. 예비 블록 관리에 대해 완전 혹은 부분적 (분할) 제어기-관리형 모드가 갖는 융통성은 호스트 제어기에 대해 필요로 되는 복잡성을 감소시킴으로써 전형적인 호스트 관리 또는 예비 블록 정보보다 잇점을 제공할 수 있다.
판독 상태의 특정한 예들이 도 7 내지 도 9의 예들에서 기술되었지만, 상태 모듈은 기입("프로그램"이라고도 함) 또는 소거 오류들을 판정하고 이들을 역시 정규 오류 상태 비트를 사용하여 제어기에서 호스트에 알리기 위해 사용될 수 있다. 또한, 제어기는 선택적으로, 가외의 상태를 입수할 수 있음을 알리기 위해 오류 상태에서 유보된 또는 벤더-고유의 필드를 사용할 수도 있을 것이다. 이들 오류 표시자들(판독 상태 오류, 정규 기입 또는 소거 오류, 또는 가외의 상태 가용 필드) 중 어느 것을 수신하였을 때, 호스트는 이 가외의 상태 정보를 읽을 수도 있을 것이며, 이의 예가 도 9에 도시되었다. ONFI 2.0에서 기존의 상태 레지스터 필드들에 비트들 2, 3, 또는 4는 가외의 상태를 알리기 위해 사용될 수도 있을 것이다. 또한, 상태 정보 및 예비 블록 관리를 동일한 메시지 포맷의 부분으로서 보였지만, 제어기는 다른 실시예들에서 상태 정보 또는 예비 블록 관리 정보 중 하나만을 제공하게 구성될 수도 있다.
오류 분석 및 오류 정정을 핸들링하고 호스트와 공조하여 몇몇 모드들 중 한 모드에서 오류복구를 위해 예비 블록들에 관계된 통보를 관리할 수 있고 호스트에 의해 엑세스되는 메시지 필드에 판독 지령들 또는 기입 및 소거 오류들에 관한 상태 정보를 제공하는 것인 플래시 메모리에 사용하기 위한 개선된 독립적인 제어기가 기술되었다. 여기에 개시된 방법 및 제어기는 호스트와는 별도로 제어기에 활동을 허용하여 호스트 제어기를 더 단순화하여 설계할 수 있게 하며 여러 레벨들의 제어기 및 호스트의 공조와 최적화가 달성될 수 있게 제어기의 활동들에 관계된 정보를 호스트에 제공하면서 플래시 메모리에 호스트에 사용될 수 있게 별도의 제어기의 아키텍처를 커스터마이즈할 수 있게 한다.
예시적인 NAND 플래시 메모리 제어기 실시예
이 단락은 예시적인 제어기 아키텍처를 제공하며 위에 논의된 여러 기능 모듈들 중 일부에 관해 더 상세한 것을 제공한다. 위에 언급된 바와 같이, "모듈"은 임의의 적합한 방법, 이를테면 하드웨어, 소프트웨어/펌웨어, 또는 이들의 조합으로 구현될 수 있고, "모듈"의 기능은 단일 성분에 의해 수행되거나 제어기 내 몇 개의 성분들 간에 분산될 수 있다.
이제 도면들을 다시 참조하면, 도 13a는 도 3의 NAND 제어기(300)의 본 바람직한 실시예를 도시한 것이다. 이들 도면들에 도시된 성분들 중 어느 것이든 하드웨어, 소프트웨어/펌웨어, 혹은 이들의 조합으로서 구현될 수 있음을 알아야 할 것이다. 이 구현예에서, 도 3에 제 1 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는 복수의(예를 들면, 8) 판독 및 기입 요청들을 동시에 핸들링해야 한다.
도 13a을 다시 참조하면, 도 3의 제 2 NAND 인터페이스(335)는 여기에서는 플래시 인터페이스 모듈("FIM")(3020)에 의해 구현된다. 현재의 실시예에서, FIM(3020)은 일군의 로직과, "장치측 인터페이스"를 "호스트-형 인터페이스"로서 생성하는 저레벨 프로그래머블 시퀀서로서 구현된다. 이 실시예에서, FIM(3020)은 지령 레지스터(3140), 어드레스 레지스터(3150), ECC 엔코딩 모듈(3160), ECC 디코딩 모듈(3170), 데이터 스크램블러(3180), 및 데이터 디스크램블러(3190)를 포함한다.
NAND 제어기(300) 내부에는 로컬 ROM, 코드 RAM, 및 데이터 RAM을 구비한 프로세서(3040)가 있다. 중앙 버스(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(3020)에 위치된 소량의 로직 및 테이블로 구현되는, 컬럼 대체 모듈을 더 포함할 수 있다. 컬럼 대체 모듈은 플래시 메모리 장치(들)(330)(도 3)이 배드 컬럼 위치들 상에 정보를 내포할 수 있게 한다. 배드 컬럼 어드레스 정보는 플래시 메모리 장치(들)(330) 내 내포되고 임의의 판독 또는 기입 동작에 앞서 펌웨어에 의해 스캔된다. 펌웨어가 플래시 메모리 장치(들)(330)를 스캔한 후에, 컬럼 대체 모듈에 의해 사용될 배드 컬럼 위치를 가진 배드 컬럼 어드레스 테이블을 형성한다. 플래시 기입 동작들에서, 컬럼 대체 모듈은 검출되는 어드레스에 대한 데이터 (OxFFFF)을 배드 컬럼 어드레스 테이블에 삽입한다. 플래시 판독 동작들에서, 배드 컬럼 어드레스로부터 데이터는 무시될 것이다.
이제 일반적으로 기술되는 NAND 제어기(300)의 성분들을 사용하여, NAND 제어기(300)의 예시적 기입 및 판독 동작들이 이제 제시될 것이다. 먼저 기입 동작으로 가면, HIM(3010) 내 FIFO(3080)는 호스트 제어기로부터 오는 기입 지령, 어드레스, 및 데이터를 위한 버퍼로서 작용하며 이들 요소들을 시스템 카드 영역에 동기화시킨다. CRC 모듈(3100)은 임의의 전송 오류들이 있는지를 판정하기 위해 인입 정보를 체크한다. (CRC 모듈(3100)은 위에서 논의된 EDC 모듈의 예이다). CRC 모듈은 단 대 단 데이터 보호 수법의 부분으로서 전송 오류들에 대해 체크하기 위해 오류 검출 코드를 생성하거나 체크한다. 어떠한 오류들도 검출되지 않는다면, 제어 유닛(3090)은 FIFO(3080)로부터 수신된 지령을 디코딩하며, 이를 지령 레지스터(3110)에 저장하고 어드레스를 어드레스 레지스터(3120)에 저장한다. 호스트 제어기로부터 수신된 데이터는 중앙 버스(3030)를 통해 HDMA AHB 인터페이스(3130)를 통해 BRAM(3050)에 보내진다. 제어유닛(3090)은 프로세서(3040)가 지령 레지스터(3080) 및 어드레스 레지스터(3120)로부터 지령을 읽는 것에 응하여 프로세서(3040)에 인터럽트를 보내며, 지령에 기초하여, FIM(3020) 내 데이터 경로를 설정하고 지령을 FIM의 지령 레지스터(3140)에 저장한다. 또한, 프로세서(3040)는 NAND 인터페이스(325)로부터의 어드레스를 내부 NAND 어드레스로 변환하고, 이를 FIM의 어드레스 레지스터(3150)에 저장한다. 논리 대 물리 어드레스 변환이 수행되어야 한다면, 프로세서(3040)는 매핑 테이블을 사용하여 정확한 물리적 어드레스를 생성할 수 있다. 또한, 프로세서(3040)는 이하 기술되는 하나 이상의 추가의 기능들을 수행할 수 있다. 이어서, 프로세서(3040)는 BRAM(3050)에서 FIM(3020)로 데이터 전송을 셋업한다.
FIM(3020)은 어드레스 레지스터(3150)을 값을 취하고 이를 NAND 인터페이스(335)의 표준에 따라 포맷한다. BRAM(3050)에 저장된 데이터는 암호화를 위해 암호화 모듈(3070)에 보내지고 이어서 데이터 스크램블러(3180)를 통해 보내진다. 데이터 스크램블러(3180)는 데이터를 스크램블하고 데이터를 FIM ECC 엔코더(3160)에 출력하는데, FIM의 ECC 엔코더(3160)는 데이터와 함께 저장될 ECC 패리티 비트들을 발생한다. 이어서, 데이터 및 ECC 비트들은 기입 지령과 함께 제 2 NAND 인터페이스를 통해 저장을 위해 플래시 메모리 장치(들)에 전송된다. 기입들 동안 발생할 수 있는 추가의 기능의 예로서, 기입 어보트 또는 프로그램 실패들에 대한 보호가 활성화되고 기입 요청이 상위 페이지 어드레스에 대한 것이라면, 프로세서(3040)는 대응하는 하위 페이지에 대해 제 2 NAND 인터페이스를 통해 플래시 메모리 장치(들)에 판독 지령을 보내고, 이어서 프로그램 지령을 보내어 플래시 메모리 장치(들)(330) 내 다른 위치에 다시 기입함으로써 안전지역(예비 스크래치된 영역)에 카피되게 한다. 상위 페이지를 기입할 때 오류가 발생하더라도, 하위 페이지는 여전히 안전지역으로부터 다시 판독되어 오류가 정정될 수 있다. (이것은 안전지역을 통해 기입 어보트 및/또는 프로그램 실패들을 핸들링하기 위한 위에서 논의된 모듈의 예이다).
이제 판독 동작을 참조하면, HIM(3010)은 호스트 제어기로부터 판독 지령 수신하고, 프로세서(3040)는 지령 및 논리 어드레스를 판독한다. 논리 대 물리 어드레스 변환이 수행되어 한다면, 프로세서(3040) 내 펌웨어는 매핑 테이블을 사용하여 정확한 물리 어드레스를 생성할 수도 있을 것이다. (이것은 위에 논의된 어드레스 매핑 모듈의 예이다). 이어서 펌웨어는 제 2 NAND 인터페이스(335)를 통해 플래시 메모리 장치(들)(330)에 물리 어드레스를 보낸다. 판독 액세스 후에, 데이터는 NAND 인터페이스를 통해 전송되고, 오류 정정을 위해 신드롬 데이터를 생성하기 위해 디코딩되어 사용되고, 데이터 디스크램블러(3190)에 의해 디스크램블되고, 이어서 중앙 버스(3030)를 통해 BRAM(3050)에 보내진다. ECC 정정 엔진(3060)은 BRAM(3050)에 저장된 데이터에 대한 ECC를 사용하여 정정될 수 있는 임의의 오류들을 정정하기 위해 사용된다. ECC는 계산되어 물리 페이지의 부분들에 저장되기 될 수 있기 때문에, 프로세서(3040)는 페이지의 각 부분이 수신되거나 정정될 때 중단되거나, 모든 데이터가 전송될 때 한번 중단될 수 있다. 이어서, 암호화 모듈(3070)은 데이터에 관한 해독 동작을 수행한다. 위에 기술된 타이밍은 제 1 NAND 인터페이스(325) 및 제 2 NAND 인터페이스(335)가 서로 다른 속도들로 동작할 수 있고 펌웨어는 저장-송부 기술들 또는 속도-매칭 버퍼링을 사용하여 데이터를 전송할 수 있기 때문에 유연하다. 데이터가 호스트 제어기에 다시 보내질 때, 데이터는 HIM(3010)을 통해 보내지며, 전송 CRC는 전송 오류에 대해 체크하기 위해 제 1 NAND 인터페이스(325)를 통해 호스트에 다시 보내진다.
위에 언급된 바와 같이, 호스트 제어기로부터 보내진 지령들을 핸들링하는 것에 더하여, 프로세서(3040)는 하나 이상의 추가의 기능들을 비동기적으로 혹은 호스트에 의해 보내진 임의의 특정한 지령과는 무관하게 수행할 수 있다. 예를 들면, ECC 정정 엔진(3060)이 정정가능 소프트 오류를 검출한다면, ECC 정정 엔진(3060)은 소프트 오류를 정정할 수 있고, 대응하는 블록이 나중에 판독 스크러브될 수도 있도록 페이지 위치를 기록하기 위해 프로세서(3040)를 중단시킬 수 있다. 프로세서(3040)에 의해 수행될 수 있는 다른 예시적 배경 작업들은 이하 기술되는 바와 같이, 마모 평준화 그리고 배드 블록들 및 예비 블록들의 매핑이다.
다시 도면들을 참조하면, 도 13b는 실시예의 NAND 제어기를 더 상세히 도시한 블록도이다. 도 13a에 도시된 제어기에서와 같이, 이 실시예에서 제어기는 중앙 버스(여기에서는, 데이터 경로를 위한 어드밴스드 마이크로제어기 버스 아키텍처("AMBA") 고성능 버스("AHB") 다-층 매트릭스 버스(3270) 및 지령 경로를 위한 어드밴스드 주변 버스("APB")(3330))를 통해 통신하는 ONFI HIM(3200) 및 FIM(3260)을 내장한다. ONFI HIM(3200) 및 FIM(3260)은 프로세서들 중 어느 것과도 연관될 수 있다. 예를 들면, ONFI HIM(3200)은 MRAM(3290)에 저장된 ARC 코드를 실행하는 ARC600 마이크로프로세서(3280)(내장 캐시(3285)를 가진)에 연관될 수 있다. 일반적으로, ARC600(3280)은 ONFI HIM(3200)로부터 인터럽트들을 처리하기 위해 사용되며 데이터 경로 셋업을 관리하고 정보를 플래시 제어 RISC(3250)에 전송한다. 플래시 제어 RISC(3250)는 FIM(3260)과 함께 사용될 수 있는 마이크로프로세서이며, 일반적으로, FIM(3260) 내 여러 성분들에 마이크로-제어 코드들을 발생함으로써 FIM(3260)을 셋업하는 기능을 핸들링한다. 특히, 플래시 제어 RISC(3250)는 AHB 버스(3270)로 통신하며 DRAM(3220)으로부터 데이터를 판독하기 위해 AHB 버스 프로토콜 지령들을 발생하는 FIM(3260) 내 플래시 다이렉트 메모리 액세스("FDMA") 모듈(3440)을 셋업한다. 또한, 플래시 제어 RISC(3250)는 ECC 엔코더 및 디코더를 내장하는 EDC 모듈(3450)을 셋업한다. 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 표준의 부분인 비동기 모드 또는 소스 동기 모드에서 동작하는 ONFI 인터페이스(3350)를 포함한다. (비동기(또는 "비동기") 모드는 데이터가 기입들을 위한 WE# 및 판독들을 위한 RE# 신호와 함께 래치될 때이다. 소스 동기(또는 "소스(src) 동기")는 데이터가 언제 래치되어야 할지를 나타내기 위해 스트로브(DQS)가 데이터와 함께 보내질 때이다. 또한, ONFI HIM(3200)는 도 13a에 관련하여 위에 기술된 바와 같이 기능하는 것들인, 지령 FIFO(3360), 데이터 FIFO(3370), 데이터 제어기(3380), 레지스터 구성 모듈(3400), 호스트 다이렉트 메모리 액세스("HDMA") 모듈(3380), 및 CRC 모듈(3415)을 포함한다. ONFI HIM(3200)는 각각 APB 버스(3330) 및 AHB 버스(3270)와 통신하기 위한 APB 인터페이스(3390) 및 AHB 포트(3420)를 더 포함한다. FIM(3260)는 EDC 엔코더 및 EDC 디코더를 포함하는 EDC 모듈(3450), 플래시 제어 RISC(3250) 혹은 ARC600 마이크로프로세서(3280)에 의해 제공된 마이크로-제어 코드들에 기초하여 NAND 버스에 지령들을 발생하는 플래시 프로토콜 시퀀서("FPS")(3430), FDMA(3440), 데이터 스크램블러/디-스크램블러(3470) 및 NAND 인터페이스(3460)를 포함한다.
스크램블러/디스크램블러(3470)는 플래시 기입 전송들(스크램블링) 및 플래시 판독 전송들(디스크램블) 동안 데이터의 변환을 수행한다. 플래시 메모리 장치(들)(330)에 저장된 데이터는 더 랜덤화된 데이터 패턴들을 생성함으로써 데이터 패턴-종속적 민감성, 교란 영향, 또는 오류들을 감소시키기 위해 스크램블될 수 있다. 메모리 장치(들)(330)에 페이지들에 걸쳐 이동 패턴으로 데이터를 스크램블함으로써, 메모리의 신뢰도는 현저히 개선될 수 있다. 스크램블러/디스크램블러(3470)는 데이터를 동시에 처리하며 레지스터 액세스들을 사용하여 ARC600 프로세서(3280) 또는 플래시 제어 RISC(3250)에 의해 구성된다. ECC 체크 비트 생성은 스크램블 후에 수행된다. ECC 오류 검출은 디-스크램블 전에 수행되지만 정정은 디스크램블 후에 수행된다.
이 실시예에서 NAND 제어기는 전반적으로 도 13a에 관련하여 위에 기술된 바와 같이 기입 및 판독 동작들을 처리한다. 예를 들면, 기입 동작에 있어서, 지령 FIFO(3360) 및 데이터 FIFO(3370)는 인입 기입 지령 및 데이터를 저장하며, CRC 모듈(3415)은 어떠한 전송 오류들이 있는지를 판정하기 위해 인입 정보를 체크한다. 어떠한 오류들도 검출되지 않는다면, 데이터 제어기(3380)는 지령 FIFO(3360)로부터 수신된 지령을 디코딩하며, 이를 레지스터 구성 모듈(3400)에 저장한다. 호스트 제어기로부터 수신된 어드레스는 레지스터 구성 모듈(3400) 내 어드레스 레지스터에 저장된다. 호스트 제어기로부터 수신된 데이터는 HDMA(3410)을 통해 DRAM(3220)에 보내진다. 이어서, 데이터 제어기(3380)는 ARC600(3280) 또는 플래시 제어 RISC(3250)에 인터럽트를 보내어 지령 레지스터로부터 지령을 판독하고, 어드레스 레지스터로부터 어드레스를 판독하고, 제어를 플래시 제어 RISC(3250)에 보내어 DRAM(322)으로부터 데이터를 판독하여 ECC 및 데이터 스크램블 동작들을 수행하는 것을 시작하게 FIM(3260)를 셋업하고, 그 결과는 저장을 위해 플래시 메모리 장치(들)(330)에 보내진다. ARC600 마이크로프로세서(3280) 및/또는 FIM(3260)은 추가의 동작들을 수행할 수 있다. 예를 들면, FIM(3260)은 컬럼 대체를 수행할 수 있고, 배드 블록 및 예비 블록 관리, 안전지역들, 판독 스크러브, 및 마모 평준화 동작들은 FIM(360)과 더불어 ARC600 마이크로프로세서(3280)를 사용하여 수행될 수 있다. 이들 동작들을 이하 상세히 기술한다.
판독 동작에 있어서, ONFI HIM(3200)은 판독 지령이 수신되었을 때 ARC600 마이크로프로세서(3280)에 인터럽트를 보낸다. 이어서, ARC600 마이크로프로세서(3280)는 지령 및 어드레스 정보를 플래시 제어 RISC(3250)에 보내며, 이것은 판독 지령을 NAND 플래시 메모리 장치(들)(330)에 발생시키게 FPS(3430)을 셋업한다. 일단 데이터가 NAND 플래시 메모리 장치(들)(330)로부터 읽혀질 준비가 되었으면, FPS(3430)는 판독 지령들을 NAND 버스에 보내는 것을 시작한다. 판독된 데이터는 NAND 인터페이스 유닛(3460)을 통해 데이터 디스크램블러(3470)로 가고 이어서 EDC 모듈(3450)을 거치는데, 이것은 ECC 정정을 위해 신드롬 비트들을 발생한다. 이어서, 데이터 및 신드롬 비트들은 FDMA(3440)를 거쳐 DRAM(3220)에 저장된다. 이어서, 플래시 제어 RISC(3250)는 임의의 오류들을 정정하게 ECC 정정 엔진(3230)을 셋업한다. 암호화 모듈(3300)은 이때 데이터를 해독할 수 있다. 이어서, ARC600 마이크로프로세서(3280)는 인터럽트를 수신하고 DRAM(3220)으로부터 데이터가 읽혀질 준비가 되었음을 나타내기 위해 ONFI HIM(3200)에 레지스터 구성 모듈(3400)을 프로그램한다. 이 정보에 기초하여, ONFI HIM(3200)는 DRAM(3220)으로부터 데이터를 읽고 이를 데이터 FIFO(3370)에 저장한다. 이어서, ONFI HIM(3200)는 데이터가 읽혀질 준비가 되었음을 알리기 위해 호스트 제어기에 준비 신호를 보낸다.
위에 언급된 바와 같이, 다른 HIM들과는 달리, ONFI HIM는 호스트 제어기로부터 몇 개의 작은 크기의 요청들(예를 들면, 개개의 페이지들에 대한)을 수신하며, 따라서 ONFI HIM는 복수의(예를 들면, 8) 판독 및 기입 요청들을 동시에 핸들링해야 한다. 따라서, 다른 HIM들에서보다 ONFI HIM와 호스트 제어기 간에 더 많은 양방향 전달이 있다. 전달에 있어 이러한 증가된 빈도에 따라 복수의 판독 및 기입 요청들을 핸들링함에 있어 더욱 병렬로 처리하게 된다.
도 13c 및 도 13d는 각각 판독 및 기입 동작들을 위한 ONFI HIM의 논리적 동작들을 도시한 것이다. 먼저 도 13c로 가면, 이 실시예의 ONFI HIM(3480)은 ONFI 버스(3490)를 통해 호스트 제어기로부터 판독 지령을 수신한다. ONFI HIM(3480)은 비동기 또는 소스 동기 모드에서 동작할 수 있고 판독 지령을 신호 멀티플렉서들(3500, 3530)을 통해 지령 FIFO(3540)에 전달한다. (ONFI HIM(3480)은 각각 비동기 및 ONFI 소스 동기 성분들(3510, 3520)을 사용하여 비동기 모드 및 소스 동기 모드에서 사용될 수 있다). 또한, ONFI HIM(3480)은 호스트 제어기로부터 수신된 어드레스를 논리 유닛 번호("LUN") 어드레스 FIFO(3550)에 저장한다. (이 실시예에서 NAND 제어기는 LUN 어드레스들에 의해 어드레스될 수 있는 독립된 실체들로서 취급되는 복수의 논리 유닛들을 지원한다). FIFO들(3540, 3550)로부터 지령 및 어드레스가 이들을 동기화시키는 지령 및 데이터 제어기(3560)에 읽혀진다. 이어서, 지령 및 데이터 제어기(3560)는 인터럽트를 시스템 레지스터 제어기(3570)에 보내며, 이것은 ARC600 마이크로제어기에 인터럽트를 발생한다. 이어서, ARC600 마이크로제어기는 시스템 레지스터 제어기(3570) 내 레지스터로부터 LUN 어드레스를 판독하는데, 플래시 메모리 장치(들)로부터 데이터를 판독하는 과정은 위에 기술된 바와 같다. 모든 판독된 데이터가 DRAM에 기입되었을 때, ARC600 마이크로프로세서는 데이터가 읽혀질 준비가 되었음을 ONFI HIM(3480)에 알리기 위해 시스템 레지스터 제어기(3570) 내 상태 레지스터를 프로그램한다. 이어서, ONFI HIM(3480)는 판독 요청 제어유닛(3585)을 사용하여 HDMA(3580)을 통해 데이터를 판독한다. 판독된 데이터는 각 LUN 3595마다 분할된 판독 데이터 FIFO(3590)에 저장된다. 일단 이것이 행해졌으면, 준비 표시자가 상태 레지스터에 저장되고, 데이터는 호스트 제어기에 스트리밍된다.
이제 도 13d을 참조하면, 기입 동작에서, ONFI(3410) 버스를 통해 호스트 제어기로부터 기입 지령이 수신된다. ONFI HIM(3400)은 신호 멀티플렉서들(3420, 3450)을 통해 기입 지령을 지령 FIFO(3460)에 전달한다. (ONFI HIM(3400)은 각각 비동기 및 ONFI 소스 동기 성분들(3430, 3440)을 사용하여 비동기 모드 및 소스 동기 모드에서 사용될 수 있다). 또한, ONFI HIM(3400)는 호스트 제어기로부터 수신된 어드레스를 논리 유닛 번호("LUN") 어드레스 FIFO(3470)에 저장한다. 호스트 제어기로부터 수신된 데이터는 기입 데이터 FIFO(3520)에 저장된다. FIFO들(3460, 3470)로부터 지령 및 어드레스가 이들을 동기화시키는 지령 및 데이터 제어기(3480)에 읽혀진다. 이어서, 지령 및 데이터 제어기(3480)는 인터럽트를 시스템 레지스터 제어기(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 메모리 장치(들)(330)은 NAND 셀들 내 결함들에 기인하여, 혹은 NAND 셀들이 소거 및 프로그램 사이클들에 관하여 갖는 한정된 내구성에 기인하여 메모리의 예상 수명 동안 몇번의 프로그램 실패들이 일어날 수도 있다.
NAND 메모리 장치(들)(330)은 프로그램 페이지 동작이 성공적으로 완료되지 않았을 때 제어기(300)에 실패 상태를 리턴할 것이다. 제어기 프로세서(3040)(도 13a) 또는 플래시 프로토콜 시퀀서(3430)(도 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 실패 모드들은 유사하게 이를테면 이웃 워드라인들 상에 있는 메모리 어레이의 다른 영역들 내 데이터를 변질시킬 수도 있을 것이 가능하다. 다른 잠재적으로 취약한 데이터를 제어기 BRAM(3050)에 판독하고 및/또는 데이터를 스크래치 패드 또는 안전지역 영역에 저장하는 이 방법은 이들 상황들에서 데이터를 보호하기 위해 사용될 수도 있을 것이다.
FIM(3020)에 부착된 NAND 플래시 메모리 장치(들)(330)이 소거될 때, NAND 메모리 장치(들)(330)은 블록 소거 동작의 성공 또는 실패를 NAND 제어기(300)(또는 선택적으로 HIM(3010)을 통해 ONFI 호스트에)에 보고한다. NAND 메모리 장치(들)(330)은 소거 동작이 성공적으로 완료되지 않았을 때 제어기(300)에 실패 상태를 리턴할 것이다. 플래시 프로토콜 시퀀서(3430) 내 제어기 프로세서(3040) 또는 회로들은 각 소거 동작의 성공 또는 실패를 검증한다. 일반적으로, 임의의 소거 동작의 실패로 프로세서(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)에 내포된)는 프로세서(3040)에 의해 제어되는 바와 같이, ECC 정정 엔진(3060)에 의해 원래의 값으로 복구하기 위해 "정정" 또는 수정된다. 데이터 오류들이 ECC 정정 능력을 초과한다면, "정정불가" 판독 오류가 발생한다. 전형적으로, 정정불가 판독 오류에 따라 판독시 호스트 인터페이스에 오류 상태가 리턴될 것이다.
정정불가 판독 오류들을 방지하거나 오류가 검출되었을 때 복구하는 한 방법은 제어기(300)(혹은 외부 ONFI 호스트)가 판독 동작을 재시도하는 것이다. 재시도는 데이터 내에 오류들을 감소시키기 위해 옮겨진 마진 레벨들 또는 다른 메커니즘들을 사용하여, 아마도 오류들을 제거하거나 오류들의 수를 ECC 정정 능력 이내의 레벨로 감소시킬 수 있다.
선택적으로, 판독 오류가 복구될 때, 혹은 데이터를 복구하는데 필요한 ECC 정정 량이 어떤 임계값을 충족하거나 초과한다면, 데이터는 데이터를 오류-가 없는 혹은 개선된 상태로 복구하기 위해서 같은 블록에 혹은 다른 블록에 재기입될 수도 있을 것이다. 원 데이터 위치는 선택적으로 결함이 있는 것으로 간주될 수 있고, 이 경우 결함이 있는 것으로 마크되고 사용되지 못하게 될 수도 있을 것이다.
도 13a을 다시 참조하면, NAND 제어기(300)는 기입 어보트를 핸들링할 수 있다. 기입 어보트는 프로그램 또는 소거 동작이 진행 중인 동안 제어기(300) 및 NAND 메모리 장치(들)(330)에 예기치 않은 파워 상실이다. 파워가 상실되면 NAND 메모리 장치(들)(330)에서 프로그래밍 및 소거 상태들이 불완전하게 될 수 있어 정정불가 판독 오류들을 초래할 수도 있을 것이다. MLC NAND에서와 같은 어떤 경우들에 있어서, 워드라인을 공유하는 다른 페이지들(즉, 하위 페이지)은 위에 기술된 거의 프로그램 실패 상태와 같이, 워드라인의 상위 페이지에 어보드된 프로그램 동작에 의해 변질될 수도 있을 것이다.
기입 어보트 오류들을 감소 또는 제거하거나 이들의 영향을 최소화하는 몇가지 방법들이 있다. 한 방법은 파워가 인터럽트되었음을 프로세서(3040)에 알리기 위해 저 전압 검출 회로를 사용하는 것이다. 프로세서(3040)는 현재의 프로그램 또는 소거 동작들을 마칠 수 있게 하나 새로운 동작들이 시작되게 하지는 않는다. 이상적으로, 현재의 동작들은 완료하기에 충분한 파워와 충분한 시간을 가질 것이다.
아마도 저 전압 검출 방법에 관련하여 사용되는 대안적 방법은 프로그램 또는 소거 동작들을 완료하기 위해 가용한 파워를 늘리기 위해 파워 공급회로들에 커패시턴스 또는 배터리(또는 일부 대안적 파워 공급원)를 추가하는 것이다.
또 다른 방법은 위에 기술된 것과 유사한 스크래치 패드 "안전지역"을 제공하는 것이다. 상위 페이지 프로그램 동안 취약할 수 있는 하위 페이지들에 존재하는 임의의 "구(old)" 데이터는 상위 페이지 프로그램이 시작되기 전에 안전지역에 읽혀져 저장될 수도 있을 수 있다. 이것은 파워 상실 이벤트의 경우에 이전에 프로그램된 데이터에 대한 보호를 제공할 것이다. 일부 구현들에서, 기입 어보트 상황에서 변질되었던 데이터를 판독할 수 없는 것이 수락될 수도 있지만, 이외 다른 있을 수 있는 관계없는 구 데이터는 보호되어야 한다.
또 다른 방법은 제어기에 파워가 들어왔을 때 잠재적 기입 어보트 오류들을 탐색하는 것이다. 기입 어보트의 결과인 것으로 판정될 수 있는(혹은 가정될 수 있는) 오류가 발견된다면, 오류 데이터는 무시될 수도 있다. 이 상황에서, 제어기(300)는 효과적으로 이전 데이터로 되돌아가게 하며, 중단된 동작은 마치 일어나지 않은 것처럼 된다.
다시 도 13a를 참조하면, NAND 제어기(300)는 메모리에 마모 평준화를 수행할 수 있다. 마모 평준화는 평준화하지 않을 경우 정규 플래시 관리 알고리즘들의 결과로서 발생하였을 것보다 모든 물리적 블록들 간에 더 고르게 블록을 분포시킴으로써 전체 제품 내구성 및 수명을 증가시키는 방법이다. 이것은 "콜드(cold)" 블록들을 예비 블록들 저장소에 넣어두어 이들을 호스트 데이터 업데이트들을 위해 사용되게 하고, 이와 아울러 호스트에 의해 업데이트되지 않은 "콜드" 블록들로부터 데이터를 "핫(hot)" 블록에 이동시킴으로써 행해진다. 이러한 교환에 따라 "핫" 및 "콜드" 블록들은 혼합될 것이다. 교환은 교환을 위한 블록들을 고르거나, 핫 카운트(프로그램-소거 사이클 회수) 분석에 기초하여 이들을 골라, 무작위로 혹은 순환적으로 행해질 수 있다. 교환은 주기적으로 행해질 수 있는데, 예를 들면 전형적으로 마모와 성능 오버헤드의 균형을 잡기 위해 전체 시스템 성능과 블록 사용의 균등함 간에 균형을 잡기 위해 시스템 파라미터에 의해 조정(calibrated)되는 것으로 매 100 블록 사이클들로 행해질 수 있다.
예시적인 고 레벨 시퀀스는 다음과 같다:
1. 마모 평준화 동작을 스케쥴하고,
2. 핫 카운트 분석에 의해서 혹은 무작위로 혹은 순환적으로 "핫" 및 "콜드" 블록들을 확인하고,
3. 선택된 "콜드" 블록으로부터 데이터를 자유 블록 저장소 내 선택된 "핫" 자유 블록에 카피하고,
4. "콜드" 블록을 자유 블록 저장소에 들여놓는다. 결국, 자유 블록 저장소는 핫 블록 대신 콜드 블록으로 채워진다.
분석-기반의 블록 선택과 같은 일부 동작들을 생략될 수 있다. 블록 마모 분포가 균등한 것으로서 검출된다면 마모 평준화 동작 자체 역시 생략될 수 있다.
마모 평준화 동작 및 핫 카운트 관리는 호스트 제어기(121)(도 3)가 이들 하우스키핑 플래시 블록 레벨 동작들을 알지 못하게, 프로세서(3040)에 의해 펌웨어에서 수행된다.
도 13a을 참조하면, 제어기(300)는 판독 교란의 검출시 플래시 메모리 장치(들)(330)에 판독 스크러브를 구현할 수 있다. 플래시 메모리 장치(들)(330) 내에 NAND 메모리 어레이의 한 영역에의 판독 동작들은 메모리 어레이의 다른 영역들에 영향을 미치거나 교란을 일으킬 수 있어, 셀들이 한 상태에서 다른 상태로 옮겨지게 하여, 종국에는 이들 다른 영역들에 이전에 저장된 데이터를 판독하려고 할 때 비트 오류들을 야기한다. 교란 영향들은 많은 판독 동작들에 걸쳐 누적될 수 있어, 결국 시스템의 데이터 정정 능력들을 초과할 수 있는 다수의 비트 오류들을 야기할 수 있다. 데이터 정정 능력들을 초과하는 오류들을 정정불가 오류들이라 한다. 프로그램 교란들로부터 실패들을 방지하는 한 방법은 잠재적으로 취약한 영역들이 정정불가 혹은 복구불가 오류들이 되기 전에 교란 영향들을 검출하기 위해 이들 영역들에 판독 또는 "스크러브" 동작들을 수행하는 것이다. 전형적으로 데이터 판독시 오류가 난 다수의 비트들이 있음을 검출함으로써 일단 교란 상태가 검출되면, 프로세서(3040)는 일반적으로 "리프레시"하기 위해 NAND 메모리 어레이의 다른 영역에 데이터를 카피함으로써 메모리 내 다른 영역에 데이터를 이동시킬 수 있다.
판독 스크러브 카피는 일반적으로 호스트 판독 동작 과정 동안에, 혹은 내부 시스템 판독 동작 동안에, 혹은 스케쥴된 판독 스크러브 스캔에 의해 판독되는 블록들 내에 ECC 정정 엔진(3060)(도 13a)에 의해 발견되는 정정가능 ECC 오류에 의해 개시된다. 시스템 판독 동작들은 펌웨어, 파라미터들, 혹은 NAND 플래시에 저장된 매핑 정보를 읽기 위해 플래시 저장 시스템에 의해 필요로 되는 것들이다. 판독 스크러브 스캔은 내포된 임의의 데이터가 교란되었는지를 판정하기 위한 블록 내 모들 데이터의 판독이다. 블록들은 전형적으로 이들이 호스트 판독 또는 시스템 판독 동작 과정 동안 부분적으로 판독되었을 때 판독 스크러브 스캔을 위해 선택되지만, 그러나 다른 기준을 사용하여, 이를테면 무작위로, 혹은 메모리의 블록들을 대해 확정된 순서를 통해 선택될 수 있다. 판독 스크러브 스캔 동작은 시간이 걸리고 판독 스크러브 스캔 동작은 시스템 전체에 걸쳐 데이터에 영향을 미치기 때문에, 시스템은 무작위 선택, 혹은 카운터, 혹은 그외 다른 메커니즘들을 사용하여, 단지 주기적으로만 혹은 드물게, 판독 스크러브 스캔을 위한 블록들을 선택할 수 있다. 스케쥴링 빈도는 시스템 수행 필요성과 교란된 데이터가 정정불가가 되기 전에 이를 검출하기 위한 빈도 요구 간에 균형을 맞추기 위해 조정될 수 있다. 사전의 정해진 임계값 이상으로 오류가 난 어떤 수의 비트들을 갖는 정정가능 오류가 검출되었을 때, 블록에 대해 판독 스크러브 카피가 일람표로 만들어진다.
판독 스크러브 카피는 데이터가 교란된 블록으로부터 판독되고 정정가능 ECC 오류를 가진 모든 데이터의 정정 후에 다른 블록에 기입하는 방법이다. 원래의 블록은 공통의 자유 블록 저장소에 돌려보내질 수 있고 종국에는 소거되어 다른 데이터가 기입될 수 있다. 판독 스크러브 스캔 및 판독 스크러브 카피 스케쥴링은 호스트 제어기(121)가 이들 하우스키핑 플래시 블록 레벨의 동작들을 알지 못하게 되도록, 프로세서(3040)에 의해 펌웨어로 NAND 제어기(300)에서 행해질 것이다.
결어
전술한 상세한 설명은 발명의 정의로서가 아니라 발명이 취할 수 있는 선택된 형태들의 예시로서 이해되게 한 것이다. 이 발명의 범위를 정의하게 한 것은 모든 등가물들을 포함해서 다음의 청구항들뿐이다. 또한, 다음 청구항들 중 일부는 성분이 어떤 기능을 수행하게 도작하거나 어떤 작업을 위해 구성된 것을 기술할 수 있다. 이들은 제약적 한정들이 아님에 유의해야 한다. 또한, 청구항들에 인용된 단계들은 반드시 이들이 인용된 순서가 아닌 임의의 순서로 수행될 수 있는 것에 유의한다.
100: 제어기 120: 호스트
121: 제어기 125: 제 1 인터페이스
130: 플래시 메모리 장치 135: 제 2 인터페이스
140: 제어 모듈 150: 다른 기능을 위한 모듈
200: 제어기 230: 플래시 메모리 장치
260: 제어기 패키지 270: 플래시 메모리 장치 패키지
300: NAND 제어기 320: 호스트
321: 제어기 325: 플래시형 NAND 형 인터페이스
340: 제어 모듈 350: 다른 기능을 위한 모듈
335: 호스트형 NAND 인터페이스 330: 플래시 메모리 장치
420; 호스트 421: 제어기
425: 제 1 NAND 인터페이스 430: 플래시 메모리 장치
435: 제 2 NAND 인터페이스 440: 제어 모듈
450: ECC 모듈

Claims (28)

  1. 플래시 메모리 장치 관리 방법에 있어서, 호스트 및 플래시 메모리 장치와 통신하는 제어기에서,
    상기 호스트로부터 판독 지령을 수신하는 단계;
    상기 판독 지령을 수신한 것에 응답하여 상기 플래시 메모리 장치로부터 데이터를 인출하는 단계;
    상기 인출된 데이터에 대해 오류 분석을 수행하는 단계; 및
    상기 오류 분석 결과에 기초하여 상태 정보를 포함하는 판독 상태를 상기 호스트에 송신하는 단계를 수행하는 것을 포함하는, 방법.
  2. 제 1 항에 있어서, 상기 오류 분석을 수행하는 단계는 상기 인출된 데이터에 대해 오류 정정 코드를 발생하는 단계 및 상기 플래시 메모리 장치로부터 인출된 저장된 오류 정정 코드에 상기 발생된 오류 정정 코드를 비교하는 단계를 포함하는, 방법.
  3. 제 1 항에 있어서, 상기 판독 상태를 송신하는 단계는 상기 인출된 데이터가 상기 호스트에 보내질 때 상기 인출된 데이터와 함께 단일의 한 비트 상태 필드만을 송신하는 단계를 포함하며, 상기 상태 비트는 상기 판독 지령의 성공 또는 실패 중 하나를 나타내는 것인, 방법.
  4. 제 1 항에 있어서, 상기 판독 상태를 송신하는 단계는 상기 인출된 데이터가 상기 호스트에 보내질 때 상기 인출된 데이터와 함께 복수의 필드들을 갖는 상태 메시지를 송신하는 단계를 포함하고, 상기 복수의 필드들 중 적어도 하나는 상기 판독 지령의 성공 또는 실패에 관계된 정보를 포함하는, 방법.
  5. 제 4 항에 있어서, 상기 복수의 필드들 중 적어도 한 다른 필드는 상기 플래시 메모리 장치에서 예비 블록 사용에 관계된 정보를 포함하는, 방법.
  6. 호스트와 플래시 메모리 장치 간에 인터페이스하기 위한 제어기에 있어서,
    상기 제어기와 상기 호스트 간을 인터페이스하게 구성된 제 1 인터페이스;
    상기 제어기와 상기 플래시 메모리 장치 간을 인터페이스하게 구성된 제 2 인터페이스;
    상기 호스트로부터 판독 지령의 수신에 응하여, 상기 플래시 메모리 장치로부터 상기 제 2 인터페이스를 통해 인출된 데이터에 대해 오류 분석을 수행하게 구성된 제어 모듈; 및
    상기 오류 분석의 결과에 기초하여 판독 상태 정보를 준비하게 구성된 상태 모듈을 포함하고,
    상기 제어 모듈은 상기 오류 분석에 따라 처리된 인출된 데이터와 함께 상기 판독 상태 정보를 상기 제 1 인터페이스를 통해 상기 호스트에 송신하게 더욱 구성된, 제어기.
  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. 호스트와 플래시 메모리 장치 간에 인터페이스하는 제어기에 있어서,
    상기 제어 모듈과 상기 호스트 간에 인터페이스하게 구성된 제 1 인터페이스;
    상기 제어 모듈과 상기 플래시 메모리 장치 간에 인터페이스하게 구성된 제 2 인터페이스;
    상기 호스트로부터 상기 제 1 인터페이스를 통해 수신된 지령의 실행에 응하여 상기 지령에 관계된 오류가 발생하였는지를 판정하게 구성된 제어 모듈; 및
    상기 플래시 메모리 장치에 상기 오류에 관한 상태 정보를 저장하게 구성된 상태 모듈을 포함하고,
    상기 제어 모듈은 상기 오류에 관한 상기 상태 정보가 상기 상태 모듈에 의해 저장되었음을 확인하는 오류 표시자를 상기 호스트에 송신하게 더욱 구성된, 제어기.
  21. 제 20 항에 있어서, 상기 지령은 기입 지령을 포함하는, 제어기.
  22. 제 21 항에 있어서, 상기 오류는 블록 프로그래밍 실패 또는 블록 소거 실패를 포함하는, 제어기.
  23. 제 20 항에 있어서, 상기 지령은 판독 지령을 포함하는, 제어기.
  24. 제 23 항에 있어서, 상기 제어 모듈은 상기 판독 지령에 응하여 상기 플래시 메모리 장치로부터 인출된 데이터에 대해 오류 정정 코드 분석을 수행함으로써 상기 오류가 발생하였는지 판정하게 구성되는, 제어기.
  25. 제 20 항에 있어서, 상기 오류에 관한 상기 상태 정보는 상기 플래시 메모리 장치에 예비 블록 사용에 관계된 정보를 더 포함하는, 제어기.
  26. 호스트와 플래시 메모리 장치 간에 인터페이스하는 제어기에 있어서,
    상기 제어 모듈과 상기 호스트 간에 인터페이스하게 구성된 제 1 인터페이스;
    상기 제어 모듈과 상기 플래시 메모리 장치 간에 인터페이스하게 구성된 제 2 인터페이스; 및
    다음 중 하나에서 동작하게 제설정가능하게 배열된 예비 블록 관리 모듈을 포함하는, 제어기.
    소정 수의 예비 블록들에 대해 상기 플래시 메모리 장치를 스캔하고 상기 소정 수의 예비 블록들에 호스트 액세스를 하지 못하게 구성되는 제 1 예비 블록 관리 모드; 또는
    상기 플래시 메모리 장치에 모든 블록들을 스캔하고 가용한 총 블록들의 수를 판정하게 구성되어, 소정 수의 상기 가용한 블록들에만 상기 호스트가 액세스하게 하고, 소정의 임계값보다 큰 가용한 블록들의 총 개수 중 임의의 나머지를 예비 블록들로서 보유하게 하는 것으로, 상기 제어기는 상기 나머지에 상기 호스트에 의한 액세스를 하지 못하게 하는 것인, 제 2 예비 블록 관리 모드; 혹은
    소정 수의 예비 블록들 중 하나가 상기 예비 블록 관리 모듈에 의해 사용되었을 때 상기 호스트로부터 추가의 예비 블록들을 요청하는 제 3 예비 블록 관리 모드.
  27. 플래시 메모리 장치 관리 방법에 있어서, 호스트 및 플래시 메모리 장치와 통신하는 제어기에서,
    상기 플래시 메모리 장치에 소정 수의 사용가능한 블록들을 예비 블록들로서 유보해두고 상기 소정 수 이외의 상기 플래시 메모리 장치 내 모든 상기 사용가능한 블록들에 상기 호스트 액세스를 허용하는 단계;
    상기 호스트에 의해 액세스될 수 있는 상기 블록이 오류를 나타낼 때 상기 예비 블록들 중 하나로 상기 호스트에 의해 액세스될 수 있는 블록을 대체하는 단계;
    상기 블록을 대체한 것에 이어, 상기 호스트에 의해 액세스될 수 있는 상기 사용가능한 블록들 중 하나를 예비 블록으로서 상기 제어기에 리턴하기 위해 상기 호스트에의 요청을 송신하는 단계; 및
    상기 사용가능한 블록들 중 하나를 확인하는 상기 호스트로부터 정보를 수신하는 단계를 포함하는, 방법.
  28. 제 27 항에 있어서, 상기 요청을 송신하는 단계는 상기 플래시 메모리 장치로부터 인출된 데이터에 첨부된 필드에 상기 요청을 송신하는 단계를 포함하는, 방법.

KR1020127003588A 2009-08-11 2010-08-06 플래시 메모리 시스템에 판독 상태 및 예비 블록 관리 정보를 제공하기 위한 제어기 및 방법 KR20120052303A (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US12/539,379 2009-08-11
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

Publications (1)

Publication Number Publication Date
KR20120052303A true KR20120052303A (ko) 2012-05-23

Family

ID=42813407

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020127003588A KR20120052303A (ko) 2009-08-11 2010-08-06 플래시 메모리 시스템에 판독 상태 및 예비 블록 관리 정보를 제공하기 위한 제어기 및 방법

Country Status (5)

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

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10514860B2 (en) 2016-01-25 2019-12-24 SK Hynix Inc. Memory system and operation method for the same
KR20200135548A (ko) * 2018-04-20 2020-12-02 마이크론 테크놀로지, 인크 트랜잭션 메타 데이터
WO2021126700A1 (en) * 2019-12-16 2021-06-24 Micron Technology, Inc. Memory health status reporting
KR20220085100A (ko) * 2020-12-14 2022-06-22 현대오토에버 주식회사 플래시 메모리 ecc 모듈의 진단 장치 및 방법

Families Citing this family (133)

* 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
US8453021B2 (en) 2009-07-29 2013-05-28 Stec, Inc. Wear leveling in solid-state device
US8266481B2 (en) * 2009-07-29 2012-09-11 Stec, Inc. System and method of wear-leveling in flash storage
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 用於快閃記憶體的資料寫入方法及其控制器與儲存系統
US8443263B2 (en) 2009-12-30 2013-05-14 Sandisk Technologies Inc. Method and controller for performing a copy-back operation
US8595411B2 (en) 2009-12-30 2013-11-26 Sandisk Technologies Inc. Method and controller for performing a sequence of commands
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
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
US9141308B2 (en) 2011-12-30 2015-09-22 Sandisk Technologies Inc. Controller and method for using a transaction flag for page protection
US9116620B2 (en) 2011-12-30 2015-08-25 Sandisk Technologies Inc. Controller and method for memory aliasing for different flash memory types
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 快閃記憶體控制器、快閃記憶體偵錯方法
CN103593296B (zh) * 2012-08-15 2016-05-18 群联电子股份有限公司 数据储存方法、存储器控制器与存储器储存装置
CN102880524A (zh) * 2012-09-27 2013-01-16 上海宏力半导体制造有限公司 一种校正信息载入方法
WO2014074390A1 (en) * 2012-11-06 2014-05-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
US8879324B2 (en) * 2013-02-01 2014-11-04 Lsi Corporation Compensation loop for read voltage adaptation
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
CN107423231B (zh) 2013-08-05 2020-11-20 慧荣科技股份有限公司 用来管理一记忆装置的方法以及记忆装置与控制器
CN107741913B (zh) 2013-08-05 2021-09-07 慧荣科技股份有限公司 用来管理一记忆装置的方法、记忆装置与控制器
TWI523016B (zh) * 2013-08-05 2016-02-21 慧榮科技股份有限公司 用來管理一記憶裝置之方法以及記憶裝置與控制器
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
US9348694B1 (en) * 2013-10-09 2016-05-24 Avago Technologies General Ip (Singapore) Pte. Ltd. Detecting and managing bad columns
US9786388B1 (en) * 2013-10-09 2017-10-10 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
EP3132449B1 (en) 2014-04-16 2023-04-26 Intel Corporation Method, apparatus and system for handling data error events with memory controller
US10055125B2 (en) 2014-05-19 2018-08-21 S34A, Inc. On-board chip reader adapter (OCRA)
US9778975B2 (en) * 2014-05-19 2017-10-03 S34A, Inc. Hidden data identification in solid state drive forensics
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 群聯電子股份有限公司 錯誤處理方法、記憶體儲存裝置及記憶體控制電路單元
CN104598163B (zh) * 2014-11-28 2017-10-17 成都龙腾中远信息技术有限公司 一种基于载荷地面测试接口适配器的高速存储模块的存储方法
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 삼성전자주식회사 데이터 저장 장치와 이를 포함하는 데이터 처리 시스템
KR102447471B1 (ko) * 2015-06-24 2022-09-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
TWI615853B (zh) * 2016-05-18 2018-02-21 瑞昱半導體股份有限公司 記憶體裝置、記憶體控制器與其控制方法
DE102016213164A1 (de) * 2016-07-19 2018-01-25 Siemens Aktiengesellschaft Speichervorrichtung, Datenübertragungsvorrichtung und Verfahren zum Übertragen von Daten
US11449232B1 (en) * 2016-07-22 2022-09-20 Pure Storage, Inc. Optimal scheduling of flash operations
US10303632B2 (en) * 2016-07-26 2019-05-28 Micron Technology, Inc. Accessing status information
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
KR20180101760A (ko) * 2017-03-06 2018-09-14 에스케이하이닉스 주식회사 저장 장치, 데이터 처리 시스템 및 이의 동작 방법
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 常州昊云工控科技有限公司 双备份数据存储装置及其工作方法、机器人
US10528414B2 (en) * 2017-09-13 2020-01-07 Toshiba Memory Corporation Centralized error handling in application specific integrated circuits
CN107633867B (zh) * 2017-09-20 2020-12-01 南京扬贺扬微电子科技有限公司 基于ft4222的spi闪存测试系统及方法
KR102384773B1 (ko) 2017-10-12 2022-04-11 삼성전자주식회사 스토리지 장치, 컴퓨팅 시스템, 그리고 그것의 디버깅 방법
KR102455880B1 (ko) * 2018-01-12 2022-10-19 에스케이하이닉스 주식회사 메모리 시스템 및 메모리 시스템의 동작 방법
KR20200088634A (ko) 2019-01-15 2020-07-23 에스케이하이닉스 주식회사 메모리 시스템, 데이터 처리 시스템 및 데이터 처리 시스템의 동작방법
KR102387181B1 (ko) 2017-10-31 2022-04-19 에스케이하이닉스 주식회사 컴퓨팅 디바이스 및 그것의 동작방법
US11636014B2 (en) * 2017-10-31 2023-04-25 SK Hynix Inc. Memory system and data processing system including the same
KR102394695B1 (ko) 2017-11-08 2022-05-10 에스케이하이닉스 주식회사 메모리 시스템 및 그것의 동작방법
JP6502538B1 (ja) * 2018-01-24 2019-04-17 ウィンボンド エレクトロニクス コーポレーション 半導体記憶装置および解析システム
CN108519859B (zh) * 2018-03-30 2021-04-20 深圳忆联信息系统有限公司 数据读取方法、装置、设备及介质
KR20190118862A (ko) * 2018-04-11 2019-10-21 에스케이하이닉스 주식회사 메모리 시스템 및 메모리 컨트롤러의 동작 방법
US10777295B2 (en) * 2018-04-12 2020-09-15 Micron Technology, Inc. Defective memory unit screening in a memory system
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
US10691377B2 (en) * 2018-09-21 2020-06-23 Micron Technology, Inc. Adjusting scan event thresholds to mitigate memory errors
US10607712B1 (en) * 2018-09-28 2020-03-31 Toshiba Memory Corporation Media error reporting improvements for storage drives
KR20200049051A (ko) * 2018-10-31 2020-05-08 삼성전자주식회사 스토리지 장치의 구동 방법, 이를 수행하는 스토리지 장치 및 이를 이용한 스토리지 시스템의 구동 방법
CN110007853B (zh) * 2019-01-30 2022-06-28 镕铭微电子(济南)有限公司 一种Nandflash命令处理方法、装置、终端及存储介质
KR20200113047A (ko) 2019-03-20 2020-10-06 삼성전자주식회사 오픈 채널 스토리지 장치의 동작 방법
CN111913647B (zh) * 2019-05-08 2022-10-11 华为技术有限公司 一种存储设备的磨损均衡方法、装置及相关设备
US11243699B2 (en) 2019-05-22 2022-02-08 Micron Technology, Inc. System using a restricted operation mode memory indicator
US11307929B2 (en) * 2019-06-17 2022-04-19 Micron Technology, Inc. Memory device with status feedback for error correction
US11294766B2 (en) * 2019-08-13 2022-04-05 Micron Technology, Inc. Coordinated error correction
CN111078133B (zh) * 2019-10-18 2022-08-09 苏州浪潮智能科技有限公司 一种管理全闪存储阵列的空间的方法、设备及介质
CN110750467B (zh) * 2019-10-22 2021-11-02 深圳芯邦科技股份有限公司 一种Nand Flash中干扰页的检测方法、系统
US20210181990A1 (en) * 2019-12-16 2021-06-17 Micron Technology, Inc. Interrupt signaling for a memory device
DE102020120488A1 (de) * 2019-12-20 2021-06-24 Taiwan Semiconductor Manufacturing Co. Ltd. Verfahren zur nachschlagtabellenfreien speicherreperatur
TWI798536B (zh) * 2020-03-03 2023-04-11 慧榮科技股份有限公司 閃存資料故障分析的方法及電腦程式產品
US11366772B2 (en) 2020-03-16 2022-06-21 Micron Technology, Inc. Separate inter-die connectors for data and error correction information and related systems, methods, and apparatuses
CN111475325B (zh) * 2020-04-03 2022-10-14 江苏芯盛智能科技有限公司 一种存储设备纠错方法及纠错装置
CN111627489B (zh) * 2020-04-20 2023-09-29 珠海妙存科技有限公司 闪存特性分析方法及系统
US11315623B2 (en) * 2020-06-30 2022-04-26 Micron Technology, Inc. Techniques for saturating a host interface
US11309052B2 (en) * 2020-08-25 2022-04-19 Micron Technology, Inc. Read voltage calibration for copyback operation
JP2022042762A (ja) * 2020-09-03 2022-03-15 キオクシア株式会社 不揮発性メモリ、メモリシステム、および、不揮発性メモリの制御方法
CN112181304B (zh) * 2020-09-30 2022-06-14 浙江大学 一种星载NAND Flash存储管理系统
TWI789122B (zh) * 2021-11-17 2023-01-01 瑞昱半導體股份有限公司 指令轉換系統以及指令轉換方法
CN117435120A (zh) * 2022-07-13 2024-01-23 北京超弦存储器研究院 一种ssd、ssd的主控芯片及ssd资源管理方法
US20240061614A1 (en) * 2022-08-18 2024-02-22 Micron Technology, Inc. Error detection and correction in a controller

Family Cites Families (112)

* 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
US5532962A (en) * 1992-05-20 1996-07-02 Sandisk Corporation Soft errors handling in EEPROM devices
US5473753A (en) * 1992-10-30 1995-12-05 Intel Corporation Method of managing defects in flash disk memories
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 富士通株式会社 メモリ装置
WO2001022232A1 (fr) * 1999-09-17 2001-03-29 Hitachi, Ltd. Memoire dans laquelle le nombre de corrections d'erreurs est enregistre
US8341332B2 (en) * 2003-12-02 2012-12-25 Super Talent Electronics, Inc. Multi-level controller with smart storage transfer manager for interleaving multiple single-chip flash memory devices
US6426893B1 (en) * 2000-02-17 2002-07-30 Sandisk Corporation Flash eeprom system with simultaneous multiple data sector programming and storage of physical block characteristics in other designated blocks
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
GB0123415D0 (en) * 2001-09-28 2001-11-21 Memquest Ltd Method of writing data to non-volatile memory
GB0123416D0 (en) * 2001-09-28 2001-11-21 Memquest Ltd Non-volatile memory control
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
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
US6976194B2 (en) * 2002-06-28 2005-12-13 Sun Microsystems, Inc. Memory/Transmission medium failure handling controller and method
US7096313B1 (en) * 2002-10-28 2006-08-22 Sandisk Corporation Tracking the least frequently erased blocks in non-volatile memory systems
US7171536B2 (en) 2002-10-28 2007-01-30 Sandisk Corporation Unusable block management within a non-volatile memory system
US20040083334A1 (en) * 2002-10-28 2004-04-29 Sandisk Corporation Method and apparatus for managing the integrity of data in non-volatile memory system
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 삼성전자주식회사 탈착 가능한 저장 장치를 포함하는 시스템 및 그것의 제어방법
US7191379B2 (en) * 2003-09-10 2007-03-13 Hewlett-Packard Development Company, L.P. Magnetic memory with error correction coding
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
WO2005076203A1 (ja) * 2004-02-03 2005-08-18 Matsushita Electric Industrial Co., Ltd. メモリカード及びデータ処理装置並びにメモリカードの制御方法及び設定方法
JP4102313B2 (ja) * 2004-02-05 2008-06-18 株式会社東芝 半導体集積回路装置
US7610433B2 (en) * 2004-02-05 2009-10-27 Research In Motion Limited Memory controller interface
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フラッシュメモリおよびデータ書き込み方法
JP4504138B2 (ja) * 2004-09-03 2010-07-14 株式会社東芝 記憶システム及びそのデータコピー方法
JP4695385B2 (ja) * 2004-11-30 2011-06-08 株式会社東芝 メモリカードおよびカードコントローラ
US7149111B2 (en) * 2004-12-17 2006-12-12 Msystems Ltd. Method of handling limitations on the order of writing to a non-volatile memory
JP2006179101A (ja) * 2004-12-22 2006-07-06 Fujitsu Ltd 半導体記憶装置
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 삼성전자주식회사 전력 소모가 적은 하드디스크 드라이버 및 이를 구비한 정보처리 시스템, 그리고 그들의 데이터 입출력 방법
US7360132B1 (en) * 2005-05-19 2008-04-15 Sun Microsystems, Inc. System and method for memory chip kill
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
US7631245B2 (en) * 2005-09-26 2009-12-08 Sandisk Il Ltd. NAND flash memory controller exporting a NAND interface
US8291295B2 (en) * 2005-09-26 2012-10-16 Sandisk Il Ltd. NAND flash memory controller exporting a NAND interface
US7661054B2 (en) * 2005-09-30 2010-02-09 Intel Corporation Methods and arrangements to remap degraded storage blocks
US20070076478A1 (en) * 2005-09-30 2007-04-05 Sigmatel, Inc. System and method of memory block management
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
US20080055957A1 (en) * 2006-08-30 2008-03-06 Guobiao Zhang Three-Dimensional Memory Module (3D-MM) Excelling Contemporary Micro-Drive (CMD)
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 株式会社メガチップス メモリアクセスシステム
US7584308B2 (en) * 2007-08-31 2009-09-01 International Business Machines Corporation System for supporting partial cache line write operations to a memory module to reduce write data traffic on a memory channel
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
JP5150245B2 (ja) * 2007-12-27 2013-02-20 株式会社東芝 半導体記憶装置
JP5019611B2 (ja) * 2007-12-27 2012-09-05 株式会社東芝 メモリシステム
JP4691122B2 (ja) * 2008-03-01 2011-06-01 株式会社東芝 メモリシステム
JP4856110B2 (ja) * 2008-03-01 2012-01-18 株式会社東芝 チェンサーチ装置およびチェンサーチ方法
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
US20090282267A1 (en) * 2008-05-09 2009-11-12 Ori Stern 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

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10514860B2 (en) 2016-01-25 2019-12-24 SK Hynix Inc. Memory system and operation method for the same
KR20200135548A (ko) * 2018-04-20 2020-12-02 마이크론 테크놀로지, 인크 트랜잭션 메타 데이터
WO2021126700A1 (en) * 2019-12-16 2021-06-24 Micron Technology, Inc. Memory health status reporting
US11775378B2 (en) 2019-12-16 2023-10-03 Micron Technology, Inc. Memory health status reporting
KR20220085100A (ko) * 2020-12-14 2022-06-22 현대오토에버 주식회사 플래시 메모리 ecc 모듈의 진단 장치 및 방법

Also Published As

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

Similar Documents

Publication Publication Date Title
USRE46013E1 (en) Method and controller for performing a copy-back operation
KR20120052303A (ko) 플래시 메모리 시스템에 판독 상태 및 예비 블록 관리 정보를 제공하기 위한 제어기 및 방법
US20110041039A1 (en) Controller and Method for Interfacing Between a Host Controller in a Host and a Flash Memory Device
US20110040924A1 (en) Controller and Method for Detecting a Transmission Error Over a NAND Interface Using Error Detection Code
USRE46201E1 (en) Method and controller for performing a sequence of commands
US8291295B2 (en) NAND flash memory controller exporting a NAND interface
EP2183745B1 (en) Ecc functional block placement in a multi-channel mass storage device
US8977833B2 (en) Memory system
KR100621631B1 (ko) 반도체 디스크 제어 장치
US8996959B2 (en) Adaptive copy-back method and storage device using same
US20110296084A1 (en) Data storage apparatus and method of writing data
KR20140001924A (ko) 백그라운드 동작을 수행하기 위한 제어기 및 방법
JP2007513435A (ja) データ組織化を管理するための方法、システム、及びプログラム
US20130304970A1 (en) Systems and methods for providing high performance redundant array of independent disks in a solid-state device
WO2015102035A1 (en) Techniques for storing data in bandwidth optimized or coding rate optimized code words based on data access frequency
JP2019023936A (ja) 記憶装置及びメモリシステム
KR20230121611A (ko) 시스템 메모리 신뢰성, 가용성 및 서비스 가능성(ras)을개선하기 위한 적응형 오류 정정
US12039173B2 (en) Data storage device that detects and releases input queue bottlenecks
US20230259289A1 (en) Secure Metadata Protection
US20240111427A1 (en) Data Storage Device That Detects And Releases Input Queue Bottlenecks
US20210319810A1 (en) Method and apparatus for accessing to data in response to power-supply event

Legal Events

Date Code Title Description
WITN Application deemed withdrawn, e.g. because no request for examination was filed or no examination fee was paid