KR20120107126A - 카피-백 동작을 수행하기 위한 방법 및 제어기 - Google Patents

카피-백 동작을 수행하기 위한 방법 및 제어기 Download PDF

Info

Publication number
KR20120107126A
KR20120107126A KR1020127019786A KR20127019786A KR20120107126A KR 20120107126 A KR20120107126 A KR 20120107126A KR 1020127019786 A KR1020127019786 A KR 1020127019786A KR 20127019786 A KR20127019786 A KR 20127019786A KR 20120107126 A KR20120107126 A KR 20120107126A
Authority
KR
South Korea
Prior art keywords
data
flash memory
controller
memory device
host
Prior art date
Application number
KR1020127019786A
Other languages
English (en)
Other versions
KR101735866B1 (ko
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 KR20120107126A publication Critical patent/KR20120107126A/ko
Application granted granted Critical
Publication of KR101735866B1 publication Critical patent/KR101735866B1/ko

Links

Images

Classifications

    • 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
    • G11C29/08Functional testing, e.g. testing during refresh, power-on self testing [POST] or distributed testing
    • G11C29/12Built-in arrangements for testing, e.g. built-in self testing [BIST] or interconnection details
    • G11C29/38Response verification devices
    • G11C29/42Response verification devices using error correcting codes [ECC] or parity check
    • 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
    • G06F11/1008Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
    • G06F11/1068Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices in sector programmable memories, e.g. flash disk
    • 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
    • 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
    • G06F11/1008Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
    • G06F11/1012Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices using codes or arrangements adapted for a specific type of error
    • G06F11/1016Error in accessing a memory location, i.e. addressing error
    • 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
    • G06F2213/00Indexing scheme relating to interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F2213/0038System on Chip
    • 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

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)

Abstract

본 명세서에서 설명된 실시예들은 카피-백 동작을 수행하기 위한 방법 및 제어기를 제공한다. 일 실시예에서, 제어기는 데이터 및 카피-백 동작과 연관된 오류 정정 코드를 적어도 하나의 플래시 메모리 디바이스로부터 수신한다. 상기 제어기는 상기 오류 정정 코드가 상기 데이터 내에 오류가 존재한다고 나타내는지를 결정한다. 상기 오류 정정 코드가 상기 데이터 내에 오류가 존재한다고 나타내지 않는 경우, 상기 제어기는 호스트로부터 수신된 목적지 주소 및 카피-백 프로그램 명령어를 상기 적어도 하나의 플래시 메모리 디바이스로 보낸다. 상기 오류 정정 코드가 상기 데이터 내에 오류가 존재한다고 나타내는 경우, 상기 제어기는 상기 데이터를 정정하고 상기 목적지 주소, 상기 정정된 데이터, 및 프로그램 명령어를 상기 적어도 하나의 메모리 디바이스에 보낸다. 부가적인 실시예들은 상기 카피-백 동작 동안에 데이터를 수정하는 것과 관계 있다.

Description

카피-백 동작을 수행하기 위한 방법 및 제어기{METHOD AND CONTROLLLER FOR PERFORMING A COPY-BACK OPERATION}
본 발명은 카피-백 동작을 수행하기 위한 방법 및 제어기에 대한 것이다.
낸드(NAND) 플래시 메모리 디바이스들은 흔히 호스트, 이를테면 개인용 컴퓨터(PC)에 의해 데이터를 저장하기 위해 사용된다. 호스트는 낸드 인터페이스, 이를테면 오픈 낸드 플래시 인터페이스(ONFI)를 이용해서 낸드 플래시 메모리 디바이스와 통신할 수 있다. 호스트가 낸드 플래시 메모리 장치에 보낼 수 있는 명령어의 일 예는 "카피-백" 명령어이다. 동작시, 상기 호스트는 소스 주소 및 카피-백 판독 명령어를 상기 낸드 플래시 메모리 디바이스에 보내고, 이에 대한 응답으로 상기 낸드 플래시 메모리 디바이스는 자신의 비-휘발성 메모리 내의 소스 주소로부터 데이터를 판독해서 상기 낸드 플래시 메모리 디바이스 내에 있는 레지스터에 상기 데이터를 기록한다. 그 다음에, 상기 호스트는 목적지 주소 및 카피-백 프로그램 명령어를 상기 낸드 플래시 메모리 디바이스에 보내고, 이에 대한 응답으로 상기 낸드 플래시 메모리 디바이스는 상기 레지스트로부터 상기 데이터를 판독해서 자신의 비-휘발성 메모리 내의 목적지 주소에 기록한다. 상기 데이터가 상기 호스트로 되돌려 보내지지 않기 때문에, 카피-백 동작은 상기 호스트와 상기 낸드 플래시 메모리 디바이스 사이에서 통신 버스를 차지하는 것을 회피하며, 상기 데이터를 이동하기 위해 표준 판독 및 프로그램 동작들을 실행하기 위해 처리력 및 오버헤드를 상기 호스트가 할당할 필요를 회피한다. 그러나, 데이터와 함께 저장된 임의의 오류 정정 코드(ECC) 비트들이 또한 이동됨에도 불구하고, 상기 낸드 플래시 메모리 디바이스는 상기 데이터에 대한 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는 실시예의 바람직한 실시예들의 블록도들이다.
도 14는 카피-백 동작을 수행하기 위한 실시예의 방법의 흐름도이다.
도 15는 데이터가 수정되는 카피-백 동작을 수행하기 위한 실시예의 방법의 흐름도이다.
도입부
다음의 실시예들은 플래시 메모리 제어기들 및 이들과 함께 사용하기 위한 방법들에 대한 것이다. 일 실시예에서, 제어기 및 방법이 카피-백 동작을 수행하기 위해 제공된다. 이 실시예 및 그밖의 실시예들을 보기 전에, 바람직한 제어기 아키텍쳐들의 일반적인 개관 및 낸드 인터페이스들 및 낸드 인터페이스 프로토콜들에 대한 논의가 제공된다.
바람직한 제어기 아키텍쳐들
이제 도면들을 보면, 도 1은 제어기(100)가 제1 인터페이스(125)를 통해 호스트(120)(호스트 제어기(121)를 구비함)와 통신하고 하나 이상의 제2 인터페이스(들)(135)를 통해 하나 이상의 플래시 메모리 디바이스(들)(130)과 통신하는 실시예의 시스템이다. (제2 인터페이스(들)의 수는 플래시 메모리 디바이스(들)(130)의 수와 매치할 수 있거나, 제2 인터페이스(들)(135)의 수는 플래시 메모리 디바이스(들)의 수보다 크거나 작을 수 있다(예컨대 단일한 제2 인터페이스(135)가 다수 플래시 메모리 디바이스(들)을 지원할 수 있다). 본 명세서에서 사용된 바와 같이, 표현 "통신하는"은 직접적으로 통신하거나 하나 이상의 구성요소들을 통해 간접적으로 통신하는 것을 의미하는데, 하나 이상의 구성요소들은 본 명세서에 나타나거나 나타나지 않을 수 있다.
"호스트"는 본 명세서에서 명명되거나 명명되지 않은 하나 이상의 구성요소들을 통해 직접적으로 또는 간접적으로, 상기 제어기(100)를 통해, 상기 하나 이상의 플래시 메모리 디바이스(들)(130)에 액세스할 수 있다. 호스트는 임의의 적합한 형태를 취할 수 있는데, 이를테면 개인용 컴퓨터, 이동 전화기, 게임 디바이스, 휴대 정보 단말기, 이메일/문자 메시징 장치, 디지털 카메라, 디지털 미디어(예컨대, MP3) 플레이어, GPS 내비게이션 디바이스, 개인용 내비게이션 시스템(PND), 이동 인터넷 디바이스(MID), 및 TV 시스템이나 이것들로 제한되지 않는다. 응용예에 따라, 상기 호스트(120)는 하드웨어 디바이스, 소프트웨어 어플리케이션, 또는 하드웨어와 소프트웨어의 조합의 형태를 취할 수 있다.
"플래시 메모리 디바이스(들)"은 데이터를 상기 플래시 메모리 셀들에 저장하기 위한 복수의 플래시 메모리 셀들 및 임의의 필요한 제어 회로를 포함하는 디바이스(들)을 가리킨다. 일 실시예에서, 상기 플래시 메모리 셀들은 낸드 메모리 셀들이나, 1회 프로그래밍 가능한 메모리 소자들 및/또는 재기록가능한 메모리 소자들을 포함하는, 수동 소자 어레이들과 같은 그밖의 메모리 기술들이 사용될 수 있다. (이러한 실시예들에서, 비-낸드-타입 플래시 메모리 디바이스가 여전히 낸드 인터페이스 및/또는 낸드 명령어들 및 프로토콜들을 사용할 수 있다는 것이 주목되어야 한다.) 수동 소자 어레이의 일 예는 3D 메모리 어레이이다. 본 명세서에 사용된 바와 같이, 3D 메모리 어레이는 단일 실리콘 기판 위에 서로 수직으로 적층된 복수의 층의 메모리 셀들을 포함하는 메모리 어레이를 가리킨다. 이와 같이, 3D 메모리 어레이는 서로 근접해서 패키징된 또는 다이-접합된 복수의 집적 회로 디바이스들이라기 보다는 모놀리식 집적 회로 구조이다. 3D 메모리 어레이가 선호되나, 상기 메모리 어레이는 대신에 2D (평면형) 어레이의 형태를 취할 수 있다. 참고문헌으로서 본 명세서에 병합되는 다음의 특허 문서들은 3D 메모리 어레이들을 위한 적합한 구성들을 설명하는데, 여기서 3D 메모리 어레이는 복수의 레벨들로서 구성되며, 워드 라인들 및/또는 비트 라인들은 레벨들 사이에 공유된다: 미국 특허(제6,034,882호; 제6,185,122호; 제6,420,415호; 제6,631,085호; 및 제7,081,377호). 또한, 상기 플래시 메모리 디바이스(들)(130)은 단일 메모리 다이 또는 다수 메모리 다이들일 수 있다. 이로써, 청구항들에 사용된 구절 "플래시 메모리 디바이스"는 오직 하나의 플래시 메모리 디바이스 또는 하나를 초과하는 플래시 메모리 디바이스를 가리킬 수 있다.
도 1에 도시된 바와 같이, 상기 제어기(100)는 또한 상기 제어기(100)의 동작을 제어하기 위한 그리고 상기 호스트(120)로부터 수신된 명령어(예컨대, 판독, 기록, 삭제 등) 및 주소를 기초로 해서 메모리 동작을 수행하기 위한 제어 모듈(140)을 포함한다. 본 명세서에 사용된 바와 같이, "모듈"은 하드웨어, 소프트웨어, 펌웨어, 또는 이들의 임의의 조합을 포함할 수 있다. "모듈"이 포함할 수 있는 형태들의 예들은 마이크로프로세서 또는 프로세서 및 컴퓨터 판독 가능 매체 중 하나 이상을 포함하나 이들로 제한되지 않는데, 컴퓨터 판독 가능 매체는 예컨대 상기 (마이크로)프로세서, 로직 게이트들, 스위치들, 응용 특정 집적 회로(ASIC), 프로그래머블 로직 제어기, 및 임베디드 마이크로제어기에 의해 실행가능한 컴퓨터 판독가능 프로그램 코드(예컨대, 소프트웨어 또는 펌웨어)를 저장한다. (다음 부분들은 "모듈"이 취할 수 있는 다양한 형태들의 예들을 제공한다.) 도 1에 도시된 바와 같이, 상기 제어기(100)는 그밖의 기능을 제공하기 위한 하나 이상의 부가 모듈들(150)을 포함할 수 있는데, 상기 기능은 데이터 스크램블링, 열 치환, 기록 중단 및/또는 프로그램 실패 핸들링( 안전한 구역 경유), 판독 스크러빙, 마모 레벨링, 배드 블록 및/또는 여분 블록 관리, 오류 정정 코드(ECC) 기능, 오류 검출 코드(EDC) 기능, 상태 기능, 암호화 기능, 오류 복구, 및 주소 매핑(예컨대, 논리 블록들의 물리 블록들로의 매핑)을 포함하나 이들로 제한되지 않는다. 다음 부분들은 그밖의 기능들의 부가적인 예들뿐만 아니라 이러한 기능들에 대한 더 많은 세부사항들을 제공한다.
상기 제어기(100) 및 플래시 메모리 디바이스(들)(130)이 도 1에 두 개의 별개 상자로서 도시되나, 상기 제어기(100) 및 플래시 메모리 디바이스(들)(130)은 임의의 적합한 방식으로 배치될 수 있다는 것이 이해되어야 한다. 도 2a, 도 2b 및 도 2c는 상기 제어기 및 플래시 메모리 디바이스(들)의 상이한 배치들을 예시하는 블록도들이다. 도 2a에서, 상기 제어기(200) 및 상기 플래시 메모리 디바이스(들)(230)은 상이한 패키지들(260, 270)에 패키징된다. 이 실시예에서, 다이간 인터페이스가 상기 제어기(200)와 상기 플래시 메모리 디바이스(들)(230) 사이에서 인터페이싱될 수 있다. 본 명세서에서 사용된 바와 같이, "다이간 인터페이스"(예컨대, 다이간 낸드 인터페이스)가 (예컨대, 하나 이상의 특정 프로토콜들을 이용해서 서로 통신하도록 전자 회로의 별개 유닛들에 필요한 물리적인 그리고 논리적인하부구조를 제공하기 위해) 별개 다이들에 상주하는 전자 회로의 두 개의 별개 유닛들 사이에서 인터페이스하도록 작동한다. 따라서, 상기 다이간 인터페이스는 별개의 다이들 상에 상주하는 전자 회로의 두 개의 별개 유닛들 사이에서 인터페이스하기 위한 필요한 물리적인 요소들(예컨대, 패드들, 출력부, 입력 드라이버들 등)을 포함한다.
도 2b에서, 상기 제어기(200) 및 상기 플래시 메모리 디바이스(들)(230)은 둘 다 공통 멀티-칩 패키지(280) 내에 상주한다. 이 실시예에서, 다이간 인터페이스는 상기 공통 멀티-칩 패키지(280) 내에 패키징된 두 개의 별개의 다이들 상에 제작된 상기 플래시 메모리 디바이스(들)(230)과 상기 제어기(200) 사이에서 인터페이스할 수 있다. 도 2c에서, 상기 제어기(200) 및 상기 플래시 메모리 디바이스(들)(230)은 동일한 다이(290) 상에 집적된다. 또 하나의 대안으로서, 상기 제어기(200) 및/또는 플래시 메모리 디바이스(들)(230)은 두 개의 별개의 다이들 상에 제작될 수 있는데, 이 다이들 중 하나 또는 둘 다가 어떠한 패키지도 갖지 않는다. 예컨대, 많은 응용예들에서, 공간을 보존하기 위한 필요성으로 인해, 메모리 다이들은 어떠한 패키징도 없이 회로판들 상에 장착된다.
이러한 배치들 각각에서, 상기 제어기(200)는 상기 호스트와는 별개로 물리적으로 위치된다는 것이 주목되어야 한다. 이는 상기 제어기(200) 및 플래시 메모리 디바이스(들)(230)이 다양한 호스트들에서 사용될 수 있는 별개의 회로 유닛으로 고려되는 것을 허용한다.
도 1을 참조해서 위에서 주목된 바와 같이, 상기 제어기(100)는 제1 인터페이스(125)를 이용해서 호스트(120)와 통신하고 제2 인터페이스(들)(135)을 이용해서 상기 플래시 메모리 디바이스(들)(130)과 통신한다. 일반적으로, 상기 제1 및 제2 인터페이스들(125, 135)은 임의의 적합한 형태를 취할 수 있다. 그러나, 도 3과 연계해서 아래에서 설명될 현재 선호되는 실시예에서, 상기 제1 및 제2 인터페이스들(125, 135)은 낸드 인터페이스 프로토콜들을 사용하는 낸드 인터페이스들이다. 도 3으로 가기 전에, 다음 부분은 낸드 인터페이스들 및 낸드 인터페이스 프로토콜들에 대한 일반적인 논의를 제공한다.
낸드 인터페이스들 및 낸드 인터페이스 프로토콜들
낸드 인터페이스 프로토콜은 예컨대, 데이터 라인들 및 제어 신호들, 이를테면 ALE(주소 래치 인에이블), CLE(명령어 래치 인에이블), 및 WE#(기록 인에이블)을 이용해서 낸드 플래시 디바이스와 호스트 사이에서 명령어들 및 데이터 전송들을 조정하기 위해 사용된다. 용어 "낸드 인터페이스 프로토콜"은 지금까지 표준화 기구에 의해 공식적으로 표준화되지는 않았으나, 낸드 플래시 디바이스들의 제조업자들은 모두, 낸드 플래시 기능의 기본적인 서브세트를 지원하기 위한 매우 유사한 프로토콜들을 따른다. 이는 그들의 전자 제품들 내의 낸드 디바이스들을 사용하는 고객들이 특정 벤더의 디바이스들을 가지고 동작시키기 위해 그들의 하드웨어 또는 소프트웨어를 맞출 필요 없이 임의의 제조업자로부터의 낸드 디바이스들을 이용할 수 있다록 행해진다. 이러한 기본적인 기능 서브세트 이상의 추가 기능을 제공하는 낸드 벤더들조차 이 기본 기능이 적어도 어느 정도까지, 나머지 벤더들에 의해 사용된 프로토콜과 호환성을 제공하기 위해 제공된다는 것을 보장한다는 것이 주목된다.
소정 디바이스(예컨대, 제어기, 플래시 메모리 디바이스, 호스트 등)가 "낸드 인터페이스"를 포함하거나 구비한다고 말해지는데 이는 상기 소정 디바이스가 (예컨대, 낸드 인터페이스 프로토콜을 이용해서 또 하나의 디바이스와 인터페이스하기 위해) 상기 낸드 인터페이스 프로토콜을 지원하는데 필요한 요소들(예컨대, 하드웨어, 소프트웨어, 펌웨어, 또는 이들의 임의의 조합)을 포함하는 경우이다. (본 명세서에 사용된 바와 같이, 용어 "인터페이스(들)"은 단일 인터페이스 또는 다수 인터페이스들을 가리킬 수 있다. 이로써, 청구항들 내에서 용어 "인터페이스"는 오직 하나의 인터페이스 또는 하나를 초과하는 인터페이스를 가리킬 수 있다.) 이 응용예에서, 용어 "낸드 인터페이스 프로토콜"(또는 간단히 "낸드 인터페이스")는 개시 디바이스와 응답 디바이스 사이의 인터페이스 프로토콜을 가리키는데, 일반적으로, 모든 타이밍 파라미터틀과 완전히 호환하는 건 아닌, 낸드 디바이스들에 의해지원된 다른 명령어들에 대해 완전히 호환하는 건 아닌, 또는 낸드 디바이스들에 의해 지원되지 않은 부가적인 명령어들을 포함하는 경우에도, 기본적인 판독, 기록, 및 삭제 동작들을 위한 호스트와 낸드 플래시 디바이스 사이의 프로토콜을 따른다. 낸드 인터페이스 프로토콜의 하나의 적합한 예는 (opcode 00H) 판독, (opcode 80H) 기록, 그리고 (opcode 60H) 삭제를 위해 도시바 TC58NVG1S3B 낸드 디바이스(또는 도시바 TC58NVG2D4B 낸드 디바이스)와 인터페이스 할 때 사용된 바이트들 시퀀스들과 기능상 동등한 전송 바이트들 시퀀스들을 사용하는 그리고 또한 위 낸드 디바이스의 명령어 래치 인에이블(CLE), 주소 래치 인에이블(ALE), CE, 기록 인에이블(WE) 및 RE 신호들과 기능상 동등한 제어 신호들을 사용하는 인터페이스 프로콜이다.
낸드 인터페이스 프로토콜은 호스트- 플래시 디바이스가 아님 -가 낸드 인터페이스를 통해 상호작용을 개시한다는 점에서 대칭이 아니라는 것이 주목된다. 나아가, 소정 디바이스(예컨대, 제어기)의 인터페이스(예컨대, 낸드 인터페이스 또는 또 하나의 프로토콜과 연관된 인터페이스)가 "호스트-측 인터페이스"일 수 있거나(예컨대, 상기 소정 디바이스는 상기 호스트-측 인터페이스를 사용해서 호스트와 상호작용하도록 적응됨), 상기 소정 디바이스의 인터페이스가 "플래시 메모리 디바이스-측 인터페이스"일 수 있다(예컨대, 상기 소정 디바이스는 상기 플래시 메모리 디바이스-측 인터페이스를 사용해서 플래시 메모리 디바이스와 상호작용하도록 적응된다). 용어들 "플래시 메모리 디바이스-측 인터페이스", "플래시 디바이스-측 인터페이스" 및 "플래시-측 인터페이스"가 본 명세서에서 혼용된다.
이 용어들(즉, "호스트-측 인터페이스" 및 "플래시 디바이스-측 인터페이스")이 용어들 "호스트-타입 인터페이스" 및 "플래시-타입 인터페이스"과 혼동되어서는 안 되는데, 이들은 낸드 인터페이스 프로토콜이 대칭형이 아니기 때문에, 이 프로토콜의 양측 사이에서 구별하기 위해 본 명세서에서 사용되는 용어들이다. 나아가, 상호작용을 개시하는 것은 호스트이기 때문에, 소정 디바이스가 상기 낸드 인터페이스 프로토콜의 호스트 측을 이행하기 위해 (즉, 낸드 호스트를 제시해서 상기 낸드 프로토콜 상호작용을 개시하기 위해) 필요한 하드웨어 및/또는 소프트웨어를 포함하는 경우, 상기 소정 디바이스가 "호스트-타입 인터페이스"를 구비한다고 말해진다는 것을 주목하자. 유사하게, 상기 플래시 디바이스가 상호작용을 개시하지 않기 때문에, 소정 디바이스가 상기 낸드 프로토콜의 플래시 측을 이행하기 위해(즉, 낸드 플래시 디바이스를 제시하기 위해) 필요한 하드웨어 및/또는 소프트웨어를 포함하는 경우, 상기 소정 디바이스가 "플래시-타입 인터페이스"를 구비한다고 말해진다는 것을 주목하자.
통상적으로, "호스트-타입 인터페이스들"(즉, 호스트의 역할을 하는 인터테이스들)은 "플래시 디바이스-측 인터페이스들"이나(즉, 이들은 플래시 디바이스들과 또는 플래시 디바이스를 흉내내는 하드웨어와 상호작용하나), "플래시 디바이스-타입 인터페이스들"(상기 플래시 디바이스의 역할을 하는 인터페이스들)은 통상적으로 "호스트-측 인터페이스들"이다(즉, 이들은 호스트들과 또는 호스트를 흉내내는 하드웨어와 상호작용한다).
낸드 디바이스들의 복잡함 때문에, "낸드 제어기"는 전자 시스템에서 낸드 디바이스의 사용을 제어하기 위해 사용될 수 있다. 낸드 제어기를 개입시키지 않고 호스트에 의해 직접 낸드 디바이스를 작동시키고 사용하는 것이 가능하나, 그러한 아키텍쳐는 많은 단점들을 겪는다. 첫째, 상기 호스트는 상기 낸드 디바이스의 제어 신호들(예컨대, CLE 또는 ALE) 각각을 개별적으로 조작해야 하는데, 이는 호스트에게 번거로우며 시간소모가 크다. 둘째, 오류 정정 코드(ECC)의 지원이 호스트에게 부담을 준다. 적어도 이런 이유들로, "무 제어기" 아키텍쳐는 보통 비교적 느리고 비효율적이다.
몇 가지 종래 제어기 아키텍쳐들에서, 낸드 제어기는 낸드 인터페이스를 사용해서 플래시 메모리 디바이스와 상호작용하고 표준, 비-낸드 인터페이스, 이를테면 USB 또는 SATA를 사용해서 호스트와 상호작용한다. 즉, 이러한 종래 제어기 아키텍쳐들에서, 상기 낸드 제어기는 낸드 인터페이스를 상기 호스트로 익스포트(export)하지 않는다. 실제로, 이것은 빌트인 낸드 지원부를 구비하지 않는 그리고 그러한 목적으로 통상적으로 낸드 인터페이스를 구비하지 않으며 낸드 인터페이스를 익스포트하는 디바이스에 직접 연결할 수 없는 외부 제어기를 필요로 하며, 따라서 호스트-측 낸드 인터페이스를 구비하는 제어기가 쓸모없는 호스트 프로세서로서 예측하는 것이 합리적이다. 한편, 빌트인 낸드 지원부를 구비하는 호스트 프로세서가 통상적으로 또한 빌트인 낸드 제어기를 포함하고 낸드 디바이스에 직접 연결할 수 있으며, 따라서 외부 낸드 제어기에 대한 요구가 존재하지 않는다.
본 명세서에 참고문헌으로 병합되는 "낸드 인터페이스를 익스포트하는 낸드 플래시 메모리 제어기"(미국 특허(제 7,631,245호))가 새로운 타입의 낸드 제어기를 개시하는데, 이는 상기 호스트 측으로 익스포트하는 상기 인터페이스가 낸드 인터페이스라는 사실을 특징으로 한다. 이와 같이, 상기 낸드 제어기는 표준 낸드 플래시 메모리 디바이스에 의해 익스포트되는 동일한 타입의 인터페이스를 호스트로 익스포트한다. 상기 제어기는 또한 바람직하게는 역시 상기 플래시 메모리 디바이스 측 상에서 낸드 인터페이스를 구비하는데, 상기 제어기는 상기 낸드 플래시 메모리 디바이스 쪽으로 호스트의 역할을 하며 상기 호스트쪽으로 낸드 디바이스의 역할을 한다.
낸드 인터페이스를 익스포트하는 바람직한 낸드 플래시 메모리 제어기
도면으로 돌아가면, 도 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)는 하나 이상의 낸드 플래시 디바이스(들)(330)(예컨대, 1 내지 8 개의 메모리 다이들)과 인터페이스하기 위한 하나 이상의 플래시 메모리 디바이스-측 낸드 인터페이스(들)(335)을 포함한다. 나아가, 상기 플래시 메모리 디바이스-측 낸드 인터페이스(335)가 또한 호스트-타입 낸드 인터페이스(즉, 상기 낸드 인터페이스를 통해 상호작용을 개시하도록 그리고 호스트를 낸드 플래시 디바이스(들)(330)에 제시하도록 적응됨)라는 것이 주목된다. 상기 제어기(300)는 또한 낸드 인터페이스 프로토콜을 지원하는 호스트(320)(호스트 제어기(321)를 구비함)와 인터페이스하기 위한 호스트 측 낸드 인터페이스(325)를 포함한다. 이 호스트 측 낸드 인터페이스(325)는 또한 플래시 메모리-타입 낸드 인터페이스이다(예컨대, 상기 제어기(300)는 낸드 플래시 메모리 저장 디바이스를 상기 호스트(320)에 제시하도록 적응된다). 낸드 인터페이스들의 예들은 오픈 낸드 플래시 인터페이스(ONFI), 토글 모드(TM), 및 고성능 플래시 메모리 인터페이스, 이를테면 본 명세서에 참고문헌으로 병합된 미국 특허(제7,366,029호)에 설명된 것을 포함하나 이들로 제한되지 않는다. 상기 제어기(300)는 상기 제어기(300)를 비-낸드 인터페이스들, 이를테면 SD, USB, SATA, 또는 MMC 인터페이스들을 호스트들과 인터페이스하기 위해 선택적으로, 하나 이상의 부가적인 호스트-측 인터페이스들을 포함할 수 있다. 또한, 상기 인터페이스들(325, 335)은 동일한 또는 상이한 낸드 인터페이스 프로토콜을 사용할 수 있다.
상기 제어기(300) 및 플래시 메모리 디바이스(들)(330)은 임의의 필요한 시스템 환경에서 사용될 수 있다는 것이 주목되어야 한다. 예컨대, 하나의 이행예에서, 하나 이상의 제어기(300)/플래시 메모리 디바이스(들)(330) 유닛들로 제조된 제품이 솔리드 스테이트 드라이브(SSD)에 사용된다. 또 하나의 예로서, 상기 제어기(300)는 플래시 메모리 디바이스들과 인터페이스하기 위해 사우스브리지(southbridge) 제어기를 사용하는 OEM 설계에서 사용될 수 있다.
낸드 인터페이스를 호스트에 익스포트하는 낸드 플래시 메모리 제어기를 사용하는 것에 대해 몇 가지 이점들이 존재한다. 이러한 이점들을 인식하기 위해, 첫째, 현재 제어기 아키텍쳐들의 현실들을 고려하자. 오늘날, 두 가지 타입의 낸드 인터페이스들: "로" 인터페이스 및 "관리된" 인터페이스가 존재한다. 로 인터페이스와 함께, 기본 메모리가 판독, 프로그램, 및 삭제와 같은 프리미티브 명령어들을 가지고 노출되며, 외부 제어기는 메모리 관리 기능들, 이를테면 ECC, 결함 관리, 및 플래시 변환을 제공하는 것이 예상된다. 관리된 인터페이스와 함께, 몇 가지 고위 레벨 인터페이스를 통해, 논리 항목들 이를테면 섹터들/페이지들/블록들 또는 파일들이 관리되고, 상기 제어기는 메모리 관리 기능들을 관리한다.
그러나, 상기 낸드를 관리하는데 필요한 펌웨어 세트가 두 개의 카테고리로 분리될 수 있다. 첫 번째 카테고리는 호스트 인터페이스, 객체들(및 판독/수정/기록 시퀀스들), 및 캐시저장을 주로 관리하는 일반적인 플래시 소프트웨어이다. 이는 "호스트 관리" 층으로 불린다. 두 번째 카테고리는 플래시-특정 관리 기능인데, 이 기능은 예컨대, 기록 중단, 정전, 및 기록 오류로 인한 데이터 손실을 예방하기 위해 적극적인 판독 스크러빙 및 저위-페이지 블록들 카피와 같은 ECC, 데이터 스크램블링, 및 특정 오류 복구 및 오류 예방 기법들이다. 이는 "디바이스 관리" 층으로 불린다.
소프트웨어의 첫 번째 카테고리는 비교적 일정하며, OS 벤더들, 칩셋 및 제어기 벤더들, 및 임베디드 디바이스 벤더들을 포함하는 다양한 회사들에 의해 제공될 수 있다. 일반적으로, 설계에 있어서 플래시를 사용하기를 원할 수 있는 M개의 특정 시스템들/OS들/ASIC들이 존재한다고 가정하자. 두 번째 세트는 개별 회사들에게 잠재적으로 독점되며 어떠한 메모리 설계들 및 세대들에 더 특정하다. 일반적으로, N개의 상이한 메모리 특정 설계 포인트들이 존재한다고 가정하자. 오늘날, 이것은 플래시 관리로의 전부 또는 전무 접근법이다 - 로 낸드 또는 관리된 낸드를 구매. 이것은 또한 해결책이 M개의 시스템 및 호스트 관리 환경들 중 하나를 N개의 메모리 디바이스 관리 환경들 중 하나와 통합해야 한다는 것을 의미한다. 일반적으로, 이것은 (1) 제2 종류의 지식이 있는 플래시 벤더가 ASIC 제어기 및 호스트 인터페이스 소프트웨어를 포함하는 해결책의 모든 층들을 제공하고, M개의 상이한 호스트 기회들에 M개의 상이한 설계들을 제공해야 하거나, (2) 임의의 독립적인 ASIC 및 펌웨어 회사가 N개의 상이한 설계들을 하지 않고 특정 메모리 설계들에 그들의 해결책들을 맞춤제공 할 기회가 거의 없거나, (3) 두 회사가 귀중한 기업 비밀들 및 IP를 잠재적으로 노출해서 함께 일해야 하고/하거나 각각의 메모리 설계를 위해 상이한 해결책들을 이행해야 한다는 것을 의미한다. 이것은 또한 M개의 상이한 호스트 해결책들이 임의의 새로운 메모리 설계를 수용하기 위해 수정될 필요가 있는 경우 또는 그 역인 경우 타임투마킷(TTM) 지연을 생성할 수 있다.
낸드 인터페이스를 호스트로 익스포트하는 낸드 플래시 메모리 제어기를 이용해서, 새로운 논리 인터페이스가 제공되는데, 이 인터페이스는 기존의 물리적 낸드 인터페이스들 및 명령어들, 이를테면 레거시 비동기, ONFI, 또는 TM을 이용해서 로 또는 물리 낸드 위에 그리고 논리 또는 관리된 낸드 아래에 새로운 논리 인터페이스를 생성하고, 상기 호스트 제어기 내에서 필요한 ECC 없이 "가상" 로 낸드 메모리를 생성하고, 호스트 ECC를 디스에이블시킨다(상기 낸드 메모리를 보호하기 위해 0 ECC가 상기 호스트로부터 필요하기 때문임). 이 새로운 논리 인터페이스는 또한 이 인터페이스 레벨 "아래에" 예컨대, 데이터 스크램블링, 스크러빙, 교란, 안전 구역 핸들링, 마모 레벨링, 및 배드 블록 관리(단지 양호한 블록들을 노출시키기 위해서임)을 제공할 수 있다.
이 상이한 논리 인터페이스는 ONFI 블록 추상화(BA) 또는 도시바 LBA를 포함하는, 표준 플래시 인터페이스들 또는 관리된 낸드 인터페이스들 이상의 몇 가지 이점들을 제공한다. 예컨대, 메모리 타입 및 세대(예컨대, 낸드 vs. 3D(또는 NOR) 및 5Xnm vs. 4Xnm vs. 3Xnm)로부터 달라질 수 있는 메모리-특정 기능들의 분리가 상이한 양의 ECC, 오류 예방을 위한 벤더-고유 및 메모리-고유 스킴들 및 정정 스킴들, 이를테면 교란 및 안전 구역 핸들링을 허용하고, 벤더-고유 알고리즘들이 상기 제어기 및 펌웨어 내에 "비밀"로 남아있게 허용한다. 부가적으로, 더 빠른 타임투마킷을 가능하게 하는 이 논리 인터페이스 레벨에서 기술(과 벤더) 사이에 더 큰 공통성이 존재한다. 나아가, 이것은 1:1 명령어 동작에 훨씬 더 가까워지는 것을 허용하는데, 이는 개선된 그리고 더 예측가능한 성능 vs. 관리된 낸드 또는 그밖의 고위 레벨 인터페이스들을 의미한다.
이 제어기 아키텍쳐와 연관된 부가적인 이점들이 존재한다. 예컨대, 상기 호스트 및 상기 시스템의 그밖의 부분들로부터 메모리 기술의 독립적인 개발, 테스트, 및 진화를 허용한다. 또한 다음 세대 메모리들의 더 쉬운 그리고 더 빠른 전개를 또한 허용할 수 있으며, 그 이유는 그러한 메모리들을 지원하기 위한 변화들이 더 국부화되기 때문이다. 나아가, 메모리 제조업자들이 로 플래시를 관리하기 위해 사용된 비밀 알고리즘들을 보호하는 것을 허용한다. 또한, 페이지 관리가 파일 시스템 및/또는 그밖의 논리 매핑과 통합될 수 있다. 따라서, 표준 외부 인터페이스들(전기 및 명령어 세트들)과 조합되어, 이 아키텍쳐는 세대마다 더 투명한 로 플래시에서 설계하는 것을 더 쉽게 만든다.
이 아키텍쳐의 사용으로부터 적어도 하나의 다른 이차적인 혜택이 존재한다 - 상기 제어기(300)는 단지 상기 외부 인터페이스 상에서 단일 전기 부하를 제시하며 상기 MCP 내부의 상기 로 플래시를 구동한다. 이는 플래시 채널들의 수, 더 높은 속도의 외부 인터페이스들(더 적은 부하 때문임), 및 더 높은 속도의 내부 인터페이스들(매우 타이트하게 제어되는 내부 설계(기판 연결)이 가능하기 때문임)을 상기 로 플래시 디바이스들까지 증가시키지 않고 잠재적으로 더 큰 시스템 용량을 허용한다.
이 실시예의 제어기와 연관된 또 하나의 이점은 상이한 호스트 및 메모리 버스들의 사용을 통해 잠재적으로 상이한 속도로 "분할 버스" 아키텍쳐를 제공하도록 사용될 수 있다는 것이다(즉, 상기 호스트와 상기 제어기 사이의 버스가 상기 제어기와 상기 플래시 메모리 디바이스(들) 사이의 버스와 상이할 수 있다). (본 명세서에 사용된 바와 같이, "버스"는 동일한 인터페이스를 갖는 다수 디바이스들(예컨대, 칩들 또는 다이들)의 전기 연결이다. 예컨대, 점대점 연결은 두 디바이스들 사이의 버스이나, 대부분의 인터페이스 표준들은 동일한 전기 버스에 연결된 다수 디바이스들을 지원한다.) 이 아키텍쳐는 수백 개의 플래시 메모리 디바이스들을 잠재적으로 구비할 수 있는 솔리드 스테이트 드라이브들(SSDs)에 특히 필요하다. 종래의 SSD 아키텍쳐에서, 현재 해결책은 멀티-칩 패키지(MCP)에 N개의 보통의 플래시 메모리 디바이스들을 패키징하는 것이나, 이것은 여전히 N개의 부하를 버스 상에 생성해서, 커패시턴스 및 인덕턴스를 N번 생성한다. 버스 상에 부하가 더 많을수록, 더 늦게 작동한다. 예컨대, 하나의 현재 아키텍쳐가 1 내지 4개의 디바이스들을 가지고 80MHz 동작을 지원할 수 있으나, 8 내지 16개의 디바이스들을 가지고는 단지 40MHz를 지원할 수 있다. 이것은 필요한 것의 반대이다 - 더 많은 디바이스들이 사용되는 경우 더 높은 속도. 나아가, 더 많은 디바이스들은 호스트와 메모리 MCP들 사이에 더 큰 물리적 분리에 대한 필요성을 나타낸다. 예컨대, 16개의 패키지들이 사용된 경우, 임의의 토폴로지(예컨대, 버스 또는 별-모양의 (또는 임의의 스터브) 토롤로지)에서 비교적 큰 물리적 거리(예컨대, 몇 인치)에 걸쳐 확산될 것이다. 이것은 또한 임의의 전기 인터페이스의 잠재적 성능을 감소시킨다. 따라서, 예컨대, 300MHz의 전송(버스 폭을 무시)을 획득하기 위해, 네 개의 고속 버스들 또는 여덟 개의 저속 버스들이 사용될 수 있다. 그러나, 상기 고속 버스들은 단지 네 개의 플래시 메모리 디바이스들 각각을, 또는 16개의 총 디바이스들을 지원하는데, 이는 오늘날 대부분의 SSDs에 충분하지 않다. 상기 버스들이 더 고속으로 기능하는 경우, 잠재적으로 호스트 내의 로직 및 레지스터들의 양뿐만 아니라 인터페이스 연결들(핀들 및 아날로그 인터페이스들)의 수가 감소될 수 있다.
이 실시예에서 상기 제어기(300)는 상기 호스트와 상기 로 플래시 메모리 디바이스(들) 사이의 상호 연결을 별개의 호스트 측 인터페이스와 플래시 측 인터페이스로 그들 사이에 버퍼를 가지고 분할하기 때문에, 상기 호스트 버스는 더 적은 부하를 가지며 2 내지 4배 더 고속으로 기능할 수 있다. 나아가, 상기 메모리 버스가 MCP 내에 있기 때문에, 수반된 짧은 거리 및 유한한 부하들로 인해 더 적은 전력, 더 높은 속도, 및 더 적은 전압을 가질 수 있다. 나아가, 상기 두 개의 버스들은 상이한 주파수로 그리고 상이한 폭으로 기능할 수 있다(예컨대, 일측은 8비트 버스를 사용하고 타측은 16비트 버스를 사용할 수 있다).
일부 아키텍쳐들이 이 버스들을 결합해제하기 위해 표준 송수신기들을 삽입할 수 있으나, 이 실시예의 상기 제어기(300)는 버퍼링을 사용할 수 있으며 이러한 인터페이스들을 상이한 속도로 기능시킬 수 있다. 이는 상기 제어기(300)가 또한 두 개의 상이한 속도 버스들, 예컨대 140MB/sec로 기능하는 플래시 측 인터페이스 및 132 또는 166MB/sec로 기능하는 ONFI 버스와 매치하는 것을 허용한다. 종래의 버스 송수신기 설계는 상기 두 개의 버스들 중 더 낮은 것을 선택해야 하고 이 예에서 132MB/sec로 기능해야 하나, 이 실시예의 상기 제어기(300)는 상기 ONFI 버스를 166MB/sec로 기능시킴으로써 140MB/sec를 달성할 수 있으며 본질적으로 아이들 기간들을 구비할 수 있다. 이로써, 이 실시예의 상기 제어기(300)는 잠재적으로 더 낮은 비용 및/또는 더 낮은 전력으로 더 높은 성능을 그리고 상이한 제품들(예컨대, 상이한 속도 및 폭 호스트 및 메모리 버스들, (상기 호스트 인터페이스로의 상기 메모리 버스 대역폭의 집성 및 더 고속 동작을 가능하게 하는)통상적인 시스템 내의 호스트 상의 더 적은 부하들), 및 인터페이스 변환을 갖는 상기 호스트 및 메모리 측 상의 상이한 인터페이스들) 사이에서 인터페이스 융통성을 제공한다.
위에서 언급된 바와 같이, 단일 제어기가 또한 플래시 메모리 디바이스(들)로의 다수 플래시 측 인터페이스(들)(335)을 구비할 수 있는데, 이는 또한 로 플래시 메모리 디바이스들 사이에서 추가 병렬성을 가능하게 하고 상기 제어기에게 전송하는데, 이는 상기 플래시 측 인터페이스가 상기 호스트 측 인터페이스(325)보다 (더 빠르게 뿐만 아니라) 더 느리게 기능하게 허용한다. 단일 제어기가 또한 다수 호스트 측 인터페이스들을 구비할 수 있는데, 이 인터페이스들은 상기 플래시 메모리 디바이스(들)에 액세스하는데 있어서 더 큰 병렬성을 허용하기 위해, 상기 제어기를 공유하기 위해, 또는 (위에서 설명된 이유로 상기 호스트 측 인터페이스보다 더 빠른) 상기 플래시 측 인터페이스의 속도와 매치하기 위해 상이한 호스트 제어기 인터페이스들과 연결될 수 있다.
호스트와의 낸드 인터페이스를 임포트하는 것의 또 하나의 이점은 분산형 제어기 아키텍쳐의 사용과 관계있다. 오늘날, 플래시 메모리 디바이스들은 통상적으로 단일 레벨 제어기를 가지고 이행된다. 많은 솔리드 스테이트 드라이브들(SSDs)에서, 수십 또는 수백 개의 플래시 디바이스들이 존재할 수 있다. 고성능 디바이스들에서, 가능한 한 이 플래시 디바이스들 중 많은 것 내에서 병렬 동작들이 시작하는 것이 바람직할 수 있는데, 이는 전류 제약을 받을 수 있다. 오늘날 600MB/sec의 인터페이스 스펙들이 존재하며, 이들은 여전히 증가하고 있다. 이 레벨의 성능에 도달하는 것은 매우 고속의 제어기들, 메모리들, 및 ECC 모듈들을 필요로 한다. 오늘날, 고성능 제어기들은 메모리 디바이스 관리를 핸들링하기 위해 하나 또는 소수의 ECC 모듈들 및 하나 또는 두 개의 마이크로프로세서들을 가지고 구축된다. 이 기능들 중 일부는 이 실시예의 제어기(300)를 가지고, 메모리 디바이스들 그 자체, 이를테면 ECC에 매우 국부화되기 때문에, 2-티어 디바이스 네트워크가 이용될 수 있다. 특히, 상기 호스트(320)는 상기 호스트 인터페이스 및 논리 콘텐트들의 고레벨 매핑을 관리할 수 있으며, 하나 이상의 제어기들(300)은 메모리 디바이스 기능들(예컨대, ECC)의 국부 관리를 그리고 상기 제어기(300)와 상기 호스트(320)의 병렬 실행 및 상이한 메모리들(320) 상에서 병렬로 상이한 동작들을 핸들링하는 다수의 제어기들(300)의 병렬 실행으로 인한 이 기능들의 실행에서의 병렬성을 제공하기 위해 하나 이상의 로 낸드 플래시 메모리 디바이스들을 관리할 수 있다. 하나의 장소에서 메모리 디바이스 관리 기능들을 수행하는 SSDs 내의 종래 제어기들과 대조적으로, 이러한 기능들을 두 개의 층으로 분할함으로써, 이 아키텍쳐는 (예컨대, 호스트와 슬레이브 사이에서, 그리고 많은 슬레이브들 사이에서) 두 가지 방식으로 병렬 성능을 이용할 수 있다. 이는 단일 ECC 모듈 또는 마이크로프로세서를 설계해야 할 필요없이 더 높은 총 성능 레벨들(예컨대, 600MB/sec)을 가능하게 하는데, 상기 단일 ECC 모듈 또는 마이크로프로세서는 해당 속도를 핸들링할 수 있다.
이 아키텍쳐의 또 하나의 이점은 시스템 개발자들이 오류 복구 또는 메모리의 저레벨 세부사항들, 이를테면 ECC 및 데이터 스크램블링에 대해 알 필요 없도록 메모리의 고 레벨 추상화가 개발될 수 있다는 것인데, 그 이유는 상기 제어기(300)가 메모리-특정 기능들 이를테면 판독, 삭제, 및 프로그램 교란, 및 안전 구역들을 핸들링하는 것에 덧붙여서 그러한 기능들을 수행하기 위해 사용될 수 있기 때문이다. 이러한 레벨의 지원은 본 명세서에서 "정정된" 플래시로 불리는데, 이는 로 플래시와 관리된 낸드 사이에 논리적으로 존재한다. 한편, 이 아키텍쳐는 하나의 논리 레벨로 페이지 또는 블록 관리 의미로 완전히 관리되는 메모리는 아니며 호스트에게 페이지들 및 블록들의 논리 내지 물리 매핑을 위해 제공할 것을 요구할 수 있다. 그러나, 상기 제어기(300)는 여전히 몇 가지 플래시 메모리 관리 제한들을 상기 호스트 및 그 펌웨어에 제시할 수 있는데, 이를테면: 완전한 페이지들만이 프로그래밍될 수 있으며, 페이지들이 블록 내에서 순서로 기록되어야 하며, 페이지들이 전체 블록이 삭제되어야 하기 전에 한번 기록될 수 있다. 물리 블록들이 대략 고르게 사용된다는 것을 보장하기 위한 물리 블록들의 마모 레벨링이 또한 상기 제어기(300)에 의해 수행될 수 있으나; 상기 호스트(320)는 이 기능을 제공할 책임이 있을 수 있다. 또한, 상기 제어기(300)는 바람직하게는 상기 호스트(320)에 낸드의 페이지들 및 블록들로 완전한 페이지 판독 및 기록 동작들을 제시한다. 논리 페이지 크기 및 블록 크기의 특성들은 (부분적인 페이지 동작들이 지원되지 않는 경우) 아래에 놓인 낸드와 동일할 가능성이 있을 것이다. 로 낸드 내의 각 물리 페이지 내의 여분 영역의 대부분은 ECC 및 그 메타데이터를 위해 상기 제어기(300)에 의해 사용될 것이다. 상기 제어기(300)는 사용 시스템이 메타데이터 관리에 이용할 수 있는 소수의 여분 바이트들을 제공할 수 있다.
낸드 인터페이스를 통해 송신 오류를 검출하는 것에 관한 실시예들
도 3을 참조하면, 데이터가 상기 호스트-측 낸드 인터페이스(325)로의 낸드 인터페이스 버스를 통해 상기 호스트(320)로부터 상기 제어기(300)로 보내짐에 따라 송신 오류들이 발생할 수 있다. ECC가 생성되어 상기 제어기(300) 내에서 검사되기 때문에, 상기 호스트-측 낸드 인터페이스(325)를 통해 송신된 데이터를 보호하는 어떠한 ECC도 존재하지 않는다. 이 문제점 및 제안된 해결책이 이제 도 4와 연계해서 논의될 것이다.
도 4는 데이터를 하나 이상의 플래시 메모리 디바이스(들)(430)에 기록 그리고 이 디바이스로부터 판독하기 위한 실시예의 제어기(400)의 블록도이다. 도 4에 도시된 바와 같이, 이 실시예에서 상기 제어기(400)는 낸드 인터페이스 프로토콜을 사용하는 상기 제어기(400)와 호스트(420)(호스트 제어기(421)를 구비함) 사이에서 데이터를 전송하도록 구성된 제1 낸드 인터페이스(425) 및 낸드 인터페이스 프로토콜을 사용해서 상기 제어기(400)와 하나 이상의 플래시 메모리 디바이스(들)(430) 사이에서 데이터를 전송하도록 구성된 제2 낸드 인터페이스(들)(435)을 포함한다. 위에서 논의된 바와 같이, 각 인터페이스(425, 435)에 의해 사용된 상기 낸드 인터페이스 프로토콜은 동일 프로토콜일 수 있거나 상이한 프로토콜들일 수 있다. 위에서 논의된 바와 같이, 상기 제어기(400) 및 상기 플래시 메모리 디바이스(들)(430)이 상이한 패키지들로 패키지될 수 있거나, 공통 멀티-칩 패키지에 상주할 수 있거나, 동일 다이 상에 통합될 수 있다. 또한, 일 실시예에서, 상기 호스트(420)는 논리-물리 주소 매핑을 수행해서, 상기 호스트(420)는 물리 주소에 기록 또는 판독하도록 명령어와 함께 상기 제1 낸드 인터페이스(425)를 통해 해당 물리 주소를 상기 제어기(400)에 제공한다.
이 실시예에서, 상기 제어기(400)는 상기 제어기(400)의 동작을 제어하기 위한 제어 모듈(440), 오류 검출 코드(EDC) 모듈(450)(예컨대, ECC 인코더/디코더), 및 오류 정정 코드(ECC) 모듈(460)(예컨대, ECC 인코더/디코더)를 포함한다. 상기 EDC 모듈(450)는 입력 데이터를 기초로 해서 오류 검출 코드를 생성하도록 작동하고, 상기 ECC 모듈(466)은 입력 데이터를 기초로 해서 오류 정정 코드를 생성하도록 작동한다. 이 실시예에서, 상기 제어 모듈(440)은 ECC 코드를 사용해서 오류들을 정정하도록 구성된다(예컨대, 상기 제어 모듈(440)의 일부가 ECC 정정 엔진이다). 이 상황에 사용된 데이터는 저장되거나 조회될 정상적인 데이터 페이지 및 상기 호스트(420) 또는 상기 제어기(400)에 의해 계산된 주소들, 플래그들 또는 데이터를 저당하기 위해 사용된 헤더, 메타데이터, 또는 여분 필드들을 포함할 수 있다. 오류 검출 코드가 적어도 하나의 오류가 검출되나 정정되지는 않는 것을 허용하는 반면에, 오류 정정 코드는 적어도 하나의 오류가 검출 및 정정되는 것을 허용한다. 검출 및/또는 정정될 수 있는 오류들의 수는 사용되는 오류 검출 코드 스킴 및 올 정정 코드 스킴의 타입에 의존한다. 적절한 타입의 오류 검출 코드 스킴들은 하나 이상의 바이트 체크섬, 세로 중복 검사(LRC), 순환 중복 검사(CRC), 또는 8b/10b 코드를 포함하나 이것들로 제한되지 않는다. 적절한 타입의 오류 정정 코드 스킴들은 해밍 코드 및 리드-솔로몬 코드를 포함하나 이것들로 제한되지 않는다.
도 5 및 도 6은 이 실시예에서 상기 제어기(400)가 기록 및 판독 동작들에서 각각 어떻게 사용되는지를 예시하는 흐름도들(500, 600)이다. 우선 도 5 내의 흐름도(500)로 가면, 상기 제어기(400)는 기록 명령어, 데이터, 상기 데이와 연관된 오류 검출 코드를 상기 제1 낸드 인터페이스(425)를 통해 상기 호스트(420)로부터 수신한다(510). (상기 호스트(420)가 상기 명령어를 제어기에 발급하고 있다는 사실을 반드시 인식하고 있는 건 아니기 때문에, 그것이 핸들링할 수 있는 타입의 표준 낸드 플래시 저장 디바이스와 인터페이스하고 있다고 가정할 수 있다). 상기 오류 검출 코드는 데이터와의 믹싱 전후에 보내질 수 있으며, 일 실시예에서, 상기 오류 검출 코드는 상기 데이터를 포함하는 데이터 패킷의 헤더(예컨대, 8-16 여분 바이트들)의 일부이다. 위에서 논의된 바와 같이, 상기 오류 검출 코드는 상기 데이터 내의 적어도 하나의 오류가 검출되나 오류 정정되지는 않는 것을 허용한다. 다음에, 상기 EDC 모듈(450)은 상기 데이터를 기초로 해서 오류 검출 코드를 생성하며, 상기 제어 모듈(440)은 상기 생성된 오류 검출 코드를 상기 호스트(420)로부터 수신된 상기 오류 검출 코드와 비교한다(520). 이 비교를 기초로 해서, 상기 제어 모듈(440)은 상기 생성된 검출 코드가 상기 호스트(420)로부터 수신된 상기 오류 검출 코드와 매치하는지를 결정한다(530). 상기 생성된 오류 검출 코드가 상기 호스트(420)로부터 수신된 상기 오류 검출 코드와 매치하지 않는 경우, 상기 제어 모듈(440)은 오류가 상기 호스트(420)로부터 상기 제어기(400)로의 데이터의 송신시에 발생했다는 것을 나타내는 신호를 상기 호스트(420)로 보낸다(540). 상기 호스트(420)는 이후 상기 데이터를 상기 제어기(400)로 되돌려 보낸다. 그러나, 상기 생성된 오류 검출 코드가 상기 호스트(420)로부터 수신된 상기 오류 검출 코드와 매치하는 경우, 상기 기록 프로세스는 상기 ECC 모듈(460)을 가지고 상기 데이터를 기초로 해서 오류 정정 코드를 계속해서 생성한다(550). 위에서 논의된 바와 같이, 상기 오류 정정 코드는 상기 데이터 내의 적어도 하나의 오류가 검출 및 정정되는 것을 허용한다. 상기 제어 모듈(440)은 이후 상기 데이터 및 상기 오류 정정 코드를 상기 제2 낸드 인터페이스(435)를 통해 상기 플래시 메모리 디바이스(들)(430)에 저장한다. 다시, 상기 명령어는 상기 낸드 인터페이스 프로토콜에 따라 발급되고, 명령어 바이트들, 주소 바이트들, 헤더 바이트들, 및 데이터 바이트들을 포함하는데, 데이터 바이트들은 호스트의 데이터 바이트들 및 상기 ECC 모듈(460)에 의해 생성된 대응 ECC 비트들을 포함한다. 이와 같이, 상기 플래시 메모리 디바이스(들)(430)은 상기 제어기(400)를 통해 간접적으로 그리고 상기 호스트(420)로부터 비 직접적으로 정보를 수신하고 있다는 것을 반드시 인식하고 있는 건 아니다.
이제 도 6으로 가면, 흐름도(600)는 상기 제어기(400)가 판독 동작시 어떻게 사용되는지를 예시한다. 도 6에 도시된 바와 같이, 상기 제어기(400)는 상기 호스트(420)로부터 판독 명령어를 수신한다(610). 상기 제어기(400)는 이후 데이터 및 상기 데이터와 연관된 오류 정정 코드를 상기 플래시 메모리 디바이스(들)(430)로부터 판독한다(620). 위에서 언급된 바와 같이, 상기 오류 정정 코드는 상기 데이터 내의 적어도 하나의 오류가 검출 및 정정되는 것을 허용한다. 다음에, 상기 ECC 모듈(460)은 상기 데이터를 기초로 해서 오류 정정 코드를 생성하고, 상기 제어 모듈(440)(예컨대 ECC 정정 엔진을 사용)은 상기 생성된 오류 정정 코드를 상기 플래시 메모리 디바이스(들)로부터 수신된 오류 정정 코드와 비교한다(630). 이 비교를 기초로 해서, 상기 제어 모듈(440)은 상기 생성된 오류 정정 코드가 상기 플래시 메모리 디바이스(들)(430)로부터 수신된 오류 정정 코드와 매치하는지를 결정한다(640). 상기 생성된 오류 정정 코드가 상기 플래시 메모리 디바이스(들)(430)로부터 수신된 상기 오류 정정 코드와 매치하지 않는 경우, 상기 제어 모듈(440)은 상기 데이터 내의 오류(들)을 정정하려고 시도한다(650). (위에서 논의된 바와 같이, 사용된 상기 ECC 스킴에 의존해서, 상기 제어 모듈(440)은 하나 이상의 검출된 오류를 정정할 수 있거나 상기 제어 뮤들은 상기 오류를 정정하려고 시도하기 위해 다른 수단을 사용할 수 있다.) 상기 정정이 성공하지 못하는 경우, 저장 오류가 발생했다는 것을 나타내는 신호가 상기 호스트(420)로 보내질 수 있다. 그러나, 상기 생성된 오류 정정 코드가 상기 플래시 메모리 디바이스(들)(430)로부터 수신된 상기 오류 정정 코드와 매치하는 경우, 상기 판독 프로세스는 상기 EDC 모듈(450)을 가지고 상기 데이터를 기초로 해서 오류 검출 코드를 계속해서 생성한다(660). 위에서 논의된 바와 같이, 상기 오류 검출 코드는 상기 데이터 내의 적어도 하나의 오류가 검출되나 정정되지 않는 것을 허용한다. 상기 제어 모듈(440)은 이후 상기 데이터 및 상기 오류 검출 코드를 상기 호스트(420)로 보낸다(670). 상기 호스트(420)는 이후 상기 데이터 및 선택적 헤더를 기초로 해서 자신의 오류 검출 코드를 생성해서 그것을 상기 제어기(400(??))로부터 수신된 상기 오류 검출 코드와 비교한다. 상기 코드들이 매치하지 않는 경우, 상기 호스트(420)는 송신 오류가 발생했다는 것을 알고 상기 데이터를 되돌려 보내기 위해 신호를 상기 제어기(400)로 보낼 수 있다.
이 흐름도들(500, 600)로부터 알 수 있는 바와 같이, 이 실시예는 데이터가 상기 제1 낸드 인터페이스(425)를 통해 상기 호스트(420)와 상기 제어기(400) 사이에서 보내짐에 따라 발생할 수 있는 송신 오류들에 대해 보호한다. 일부 제어기 아키텍쳐들에서, 기록 동작에서, 상기 호스트가 ECC를 생성해서 상기 ECC 및 데이터를 상기 제어기로 보내고, 상기 제어기가 상기 ECC 및 데이터를 상기 플래시 메모리 디바이스에 저장한다. 유사하게, 판독 동작에서, 상기 제어기는 상기 플래시 메모리 디바이스로부터 상기 데이터 및 상기 ECC를 수신해서 상기 데이터 및 상기 ECC를 상기 호스트로 보낸다. 이러한 아키텍쳐들에서, ECC는 메모리 디바이스 오류들에 대해 보호하기 위해 사용될 뿐만 아니라 상기 호스트와 상기 제어기 사이에서 인터페이스 송신 오류들에 대해 보호하기 위해 사용된다. 그러나, 이 실시예에서, 상기 플래시 메모리 디바이스(들)(430)에 데이터와 함께 저장할 ECC를 생성하는 것은 - 호스트(420)가 아니라 - 제어기(400)이다. 상기 호스트(420)가 EDC를 생성하고 상기 제어기(400)가 기록에 대해 상기 EDC를 검사하며 상기 제어기가 EDC를 생성하고 상기 호스트(420)가 판독에 대해 상기 EDC를 검사함으로써, 이 실시예는 상기 호스트(420)가 종래 제어기 아키텍쳐에서처럼, 저장을 위해 ECC를 생성하지 않음에도 상기 제1 낸드 인터페이스(425)를 통해 통신 오류들에 대한 보호를 제공한다. 나아가, 상기 호스트가 EDC를 생성하고, 상기 제어기가 상기 EDC를 검사하고 이후 ECC를 생성하게 하는 프로세스가 상기 호스트(예컨대, USB)로의 비-낸드 인터페이스를 제공하는 일부 이전 제어기 아키텍쳐들에 사용되나, 이 실시예는 상기 호스트 및 상기 제어기가 낸드 프로토콜을 사용해서 낸드 인터페이스를 통해 통신하는 도 3 및 도 4에 도시된 바와 같이, 제어기 아키텍쳐들에서 사용될 수 있다. 나아가, 일부 기존 호스트 인터페이스 프로토콜들(특히 SATA, SAS, FC 및 PCIe와 같은 직렬 프로토콜)이 송신 오류들을 검출하기 위해 사용될 수 있는 패킷당 일종의 CRC를 제공하며, 이 정보는 상기 호스트(420)를 통해 전달될 수 있으며 데이터 패킷에 첨부될 수 있고 유사 목적으로 사용될 수 있다. 그러나, 외부 호스트 인터페이스(이를테면 SATA)를 통한 데이터 전송들이 상기 제어기(400)로의 상기 제1 낸드 인터페이스(425)를 통해 보내진 페이지들과 상이한 전송 길이를 가질 수 있으며, 적당한 조정이 이루어질 필요가 있을 수 있다.
위에서, 상기 호스트(420)에 의해 그리고 상기 EDC 모듈(450)에 의해 계산된 EDC가 또한 상기 ECC 모듈(450)에 의해 사용된 것보다 더 간단한 형태의 ECC일 수 있다. 예컨대, 상기 제1 낸드 인터페이스(425)를 통해 사용된 ECC는 단지 송신 오류들을 검출 또는 정정할 필요가 있으나, 상기 제2 낸드 인터페이스(435)를 통해 사용된 ECC는 바람직하게는 더 긴 또는 더 복잡한 ECC를 필요로 할 수 있는 낸드 저장 오류들을 검출 및 정정하기 위해 사용된다.
플래시 메모리 시스템에서 판독 상태 및 여분 블록 관리 정보를 제공하는 것에 관한 실시예들
도면으로 돌아가면, 도 7은 제어 모듈(740), 오류 정정 코드(ECC) 모듈(750), 상태 모듈(760), 여분 블록 관리 모듈(770)을 포함하는 실시예의 제어기기(700)의 도면이다. 상기 제어기(700)는 제1 및 제2 인터페이스들(725, 735)를 통해 호스트(720)(호스트 제어기(721)를 구비함) 및 플래시 메모리 디바이스(들)(730)과 각각 통신할 수 있다. 상기 제1 및 제2 인터페이스들(725, 735)은 임의의 적절한 형태를 취할 수 있으며, 일 실시예에서, 도 3과 연계해서 위에서 설명된 바와 같이, 낸드 인터페이스들이다. 그러나, 그밖의 비-낸드-타입 인터페이스들, 이를테면 USB 및 SATA이 사용될 수 있으나 이들로 제한되지 않는다. 부가적으로, 상기 제어기(700)는 위에서 논의된 물리적 배치들 중 임의의 배치로 놓일 수 있는데, 예컨대, 상기 호스트 및 상기 플래시 메모리로부터 독립적으로 패키징된 하나 이상의 플래시 메모리 다이들을 포함하는 메모리 시스템에 패키징되는 별개 다이 상에 놓일 수 있다.
상기 제어 모듈(740)은 상기 제어기(700)의 동작을 제어하기 위해 그리고 명령어(예컨대, 판독, 기록, 삭제 등) 및 상기 호스트(720)로부터 수신된 주소를 기초로 해서 메모리 동작을 수행하기 위해 구성될 수 있다. 오류, 이를테면 판독 또는 기록 오류가 상기 플래시 메모리 내의 메모리 블록들로부터 조회된 이 블록들에 기록된 데이터를 핸들링하는데 발생했는지를 ECC 모듈(750)이 결정하는 프로세스에서 사용된다. 상기 제어기(700)는 특별한 오류 정정 코드 알고리즘의 능력 내에서 판독 오류들을 검출하기 위해 그리고 어떠한 검출된 오류들을 정정하기 위해 다수의 오류 정정 코드(ECC) 알고리즘들 중 임의의 알고리즘을 적용하기 위해 구성될 수 있다. 상기 제어기(700)는 상기 호스트(720)가 호스트에서 오류 정정을 해야 하는 것 보다는 오류 정정 알고리즘에 따라 처리된 상기 제1 인터페이스(725)를 통해 데이터를 수신하도록 오류 정정 코딩 응용예를 핸들링한다. (대안적으로, 상기 ECC 모듈(750)은 ECC에 덧붙여서 또는 이를 대신해서 다른 오류 복구 기법들을 사용할 수 있는 오류 핸들링 모듈로 치환될 수 있다. 이러한 대안예에서, 상기 제어기(700)는 여전히 데이터를 정정해서, 상기 제1 인터페이스(725)를 통해 보내진 데이터가 상기 호스트(720)에 의해 추가적인 오류 처리(예컨대 단 오류 코드를 계산하는 것 또는 전압 변동으로 재-판독하는 것)를 필요로 하지 않는다.) 반대로, 기록 동작들 동안에, 상기 제어기(700)는 오류 코딩 데이터를 핸들링해서, 상기 플래시 메모리 디바이스(들)(730) 상의 저장을 위해 ECC 코드 및 데이터를 상기 제2 인터페이스를 통해 전송한다.
상기 상태 모듈(760)은 상기 호스트(720)에 상기 플래시 메모리 디바이스(들)(730) 상의 특별한 동작들의 상태에 대한 데이터를 제공하기 위해 상기 ECC 모듈(750)과 협력한다. 예컨대, 상기 상태 모듈(760)은 상기 제어기(700) 내의 오류 분석 활동을 검토해서, 판독 오류가 검출되었는지, 정정되었는지, 또는 정정가능한지를 기초로 해서 판독 오류 정보데 대한 상태 정보를 준비할 수 있다. 데이터가 상기 플래시 메모리 디바이스(들)(730)로부터 조회됨에 따라 데이터의 오류 분석 또는 정정을 상기 호스트(720)가 통상적으로 핸들링하지 않는 호스트, 제어기, 및 플래시 메모리 배치 때문에, 상기 호스트(720)는 판독 동작의 상태에 대한 세부 사항을 구비하지 않을 것이다. 상기 상태 모듈(760)은 이 정보가 추적되어 상기 호스트(720)에 제시되는 것을 허용하는데, 이는 데이터가 메모리로 보내지는 방식에 있어서 또는 데이터가 요청되는 경우에 임의의 필요한 조정을 할 수 있도록 하기 위해서이다. 상기 호스트(720)는 또한 일부 다른 적극적인 또는 예방적인 동작, 이를테면 마모 레벨링, 데이터 재할당, 또는 판독 스크러빙을 트리거하기 위해 이 상태를 사용할 수 있다.
상기 상태 모듈(760)은 몇 가지 포맷 중 하나로 상기 호스트(720)로 상태 정보를 제시할 수 있다. 상기 상태 모듈이 상기 호스트(720)로의 송신을 위해 판독 상태 정보를 준비하는 상황들에서, 상기 판독 상태는 도 8a 및 도 8c에 나타난 바와 같이, 상기 플래시 메모리로부터 조회된 데이터에 첨부될 수 있다. (이 도면들에 도시된 필드들이 임의의 순서로 올 수 있다는 것이 주목되어야 한다.) 도 8a는 데이터 전송 포맷(800)을 예시하는데, 여기에서 상기 제어기(700)에 의한 오류 분석을 위한 처리 후에, 상기 플래시 메모리로부터 조회된 데이터가 헤더(802), 데이터 페이로드 부(804), 및 상태 비트(806)을 구비하는 메시지에 놓이며, 상기 상태 비트는 두 개 이상의 바이트들에 패딩될 수 있다(이로써, 청구항에 사용된 바와 같이 "비트"는 단일 비트 또는 하나 이상의 비트들, 이를테면 하나 이상의 바이트들을 가리킬 수 있다). 이 상태 비트(806)는 상기 호스트(720)에 의한 사용을 위한 이진 성공 또는 실패 표시일 수 있다. 상기 상태 비트(806)는 판독 오류의 타입 또는 정도 사이에서 반드시 구별하지는 않으나, 어떠한 형태의 오류가 발생되었다는 것을 알리는 플래그를 상기 호스트(720)에게 제공한다. 대안적으로, 상기 상태 비트는 상기 호스트에(720)에 그리고 상기 제어기(700)에 의해 유지된 룩-업 테이블내의 오류 메시지와 연관된 인코딩된 값을 보유하기 위한 단일 필드일 수 있다. 도 8b는 도 8a와 유사하나 상태 비트(806')가 판독시에 상기 제어기(700)에 의해 정상적으로 채워지는 헤더(802')의 일부로서 포함되며, 별개의 상태 비트 필드가 존재하지 않는다.
대안적으로, 도 8c에서 이해되는 바와 같이, 데이터 전송 포맷(808)은 헤더(810), 데이터 페이로드부(812), 및 다수의 필드들(816)에 배치된 하나 이상의 비트들을 구비하는 상태부(814)을 포함할 수 있다. 도 8c의 배치에서, 상태에 대한 더 상세한 정보가 판독 오류들에 대해 전송될 수 있으며 상기 호스트(720)에 이용가능할 것이다. 상기 상태 메시지의 일 이행예에서, 판독 오류 정보만이 상기 호스트(720)에 제공될 수 있다. 다른 이행예들에서, 상기 상태 정보는 상기 제어 모듈(740)에 의해 검출된 그리고 상기 제어기(700)의 상기 상태 모듈(760)에 의해 포맷된 판독, 기록 및 삭제 오류 정보 중 하나 이상을 전달하도록 배치될 수 있다. 다른 실시예들에서, 상기 상태부(814)의 필드들(816)은 또한, 또는 대안적으로, 여분 블록 관리에 관한 데이터를 제시할 수 있다. 상기 제어기(700)의 상기 여분 블록 관리 모듈(770)에 참여한 또는 이 모듈에 의해 보고되는 여분 블록 관리 활동등에 대한 세부사항들이 다음 부분에서 제공된다. 도 8c의 다수 필드 실시예가 보고될 메모리 동작과 연관된 오류들의 조합들을 위한 메커니즘을 제공한다. 도 8d는 도 8c와 유사하나 상태 필드(814')가 헤더(810')의 일부이고 다수 필드들(816')로 유사하게 구성될 수 있다.
또 하나의 실시예에서, 판독의 결과 즉 성공/실패가 예약된 또는 벤더 고유 필드들 중 하나 내에서 상태 레지스터 또는 연장된 상태 레지스터에 나타날 수 있다. 그러나, 바쁜 상태를 폴링(poll)하는 것을 넘어서, 호스트 제어기들이 오늘날 상기 상태 또는 연장된 상태 레지스터들 내에서 판독 오류들을 반드시 찾을 수 있는 것은 아니다. 프로그램 및 삭제 오류들이 프로그램 또는 삭제 명령어들에 응답해서 상기 제2 인터페이스(735)를 통해 보고되며(즉 로 낸드 디바이스로부터 보고하는 표준 오류), 이 정보는 상기 호스트로 반환될 수 있다. 이러한 오류에 대한 보통 응답은 새 블록을 할당하고, 오류들이 있는 블록으로부터 임의의 현재의 유효한 데이터 페이지들을 카피하고, 임의의 메타데이터 즉 유효한 블록이 나타나게 하고 이후 배드로서 오류를 갖는 기존 블록을 표시하는 것이다. 일 실시예에서, 상기 제어기는 상기 프로그램 및 삭제 실패들을 나타낼 수 있으며 위 카피 및 메타데이터 관리를 수행하기 위해 상기 호스트 제어기에게 남길 수 있다. 또 하나의 실시예에서, 상기 제어기는 이러한 동작들을 수행할 수 있으며 상기 제어기 내에서 배드 블록을 관리할 수 있다. 이 경우에, 오류가 발생했다는 것이 상기 호스트 제어기에게 완전히 투명할 수 있거나 이 정정 행위를 했다는 것을 상기 제어기가 나타낼 수 있다(예컨대, 상기 호스트는 소프트 오류가 발생한 것처럼 이것을 로그할 수 있다). 따라서, 요컨대, 이러한 비트들은 상기 호스트가 관리해야 하는 오류가 발생했다는 것을, 상기 제어기가 관리한 오류가 발생했다는 것을(그리고 상기 호스트가 단지 통보받음), 또는 상기 오류가 상기 제어기에 의해 핸들링될 수 있고 상기 호스트로부터 감추어질 수 있다는 것을 나타낼 수 있다.
단일 상태 비트(806 또는 806'), 다수 필드들(816 또는 816')을 갖는 상태부(814 또는 814'), 또는 상기 상태 또는 연장된 상태 레지스터 내의 비어(via) 비트들과 같은 오류를 발신하는 대안적인 방식들이 "오류 신호"로서 총괄해서 불릴 것이다. 또 하나의 실시예에서, 이 오류 신호들 중 하나 이상에 덧붙여서, 상기 제어기(700)는 상기 오류 신호들 중 하나 이상의 사용과 조합해서 알려진 위치에 상세한 상태 정보를 저장하도록 구성될 수 있다. 예컨대, 상기 제어기(700)의 상기 상태 모듈(760)은 상세한 상태 정보(예컨대, 판독 상태 데이터)를 플래시 메모리 디바이스(들)(730) 상의 미리결정된 위치에 또는 상기 호스트가 상기 오류 신호들 중 하나 이상을 수신하는 것에 응답해서 액세스할 수 있는 제어기(700) 내에 저장할 수 있다. 따라서, 상기 호스트가 상기 상태(예컨대, 판독 오류)에 대한 부가적인 세부사항들을 원하는 경우 더 많은 정보가 상기 호스트에 이용가능하다는 것을 나타내는 플래그보다 상기 상태 비트 또는 필드가 임의의 더 많은 정보를 전달할 수 없다. 또한, 상기 호스트가 위치를 알 필요가 있고 상태 정보를 조회할 필요가 있는 것보다는, 상기 상태 정보를 조회하도록 일반 명령어를 상기 제어기(700)로 보냄으로써 액세스할 수 있는 제어기(700)에 의해 추적되는 위치에 상기 비트 또는 필드에 의해 플래그된 부가적인 상태 정보가 저장될 수 있다.
단일 비트가 오류 정정의 성공 또는 실패의 단순한 주장(bare assertion)을 나타내는 도 8a의 단일 비트 첨부된 상태 메시지 포맷이 사용되는 경우, 상기 비트는 이용가능한 인터페이스 프로토콜, 이를테면 오픈 낸드 플래시 인터페이스 작업 그룹으로부터 이용가능한 OFFI 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)는 2KB 세그먼트들 내에서 ECC를 계산할 수 있는데, 각 세그먼트는 한 페이지보다 더 적게 포함하며, 이는 상기 페이지의 각 부분이 행해진 후에, ECC가 상기 페이지의 해당 부분을 나타내는 해당 정보를 위해 검사되거나 정정될 수 있도록 하기 위해서이다. 하나 이상의 2KB 세그먼트들이 플래시 메모리 디바이스(들)(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)은 세 가지 여분 블록 관리 동닥 모드들 중 하나로 작동하도록 선택적으로 구성될 수 있다:(1) 상기 제어기(700)가 여분 블록들에 대해 어떠한 관리도 제공하지 않고 호스트(720)가 혼자서 결함용 블록들을 스캔하는 관리되지 않는 모드; (2) 상기 제어기(700)가 호스트(720)에 N개의 양호한 논리 블록들만을 제공하는 완전히-관리되는 여분 블록 관리 모드로서, N은 데이터 시트 파라미터이며 플래시 메모리 상에서 이용가능한 파라미터 페이지에서 판독가능한, 모드; (3) 상기 호스트가 추가 여분 블록들을 사용할 수 있으나 상기 제어기(700)가 상기 제어기의 여분 블록 공급이 원하는 레벨 아래로 떨어질 때 상기 제어기(700)에 의한 사용을 위해 이 추가 블록들 중 일부를 방출할 것을 호스트에게 요청할 수 있는, 분할-여분 블록 관리 모드.
상기 제어기(700)가 별개 호스트(720), 제어기(700), 및 플래시 메모리 디바이스(들)(730)을 조립하는 제조 설비에 있는 동안에 상기 호스트(720)에 의해 초기화될 수 있거나, 심지어 특정 오리지널 장비 제조업자(OEM)에 의한 사용을 위해 미리초기화 될 수 있으나, 상기 제어기(700) 내의 여분 블록 관리 모듈(770)은 상이한 여분 블록 관리 모드가 선택된 후에 상기 여분 블록 관리 모드를 변경하도록 재구성할 수 있다.
도 11의 흐름도(1100)를 참조하면, 상기 제어기(700) 내에서 여분 블록 관리 모듈의 초기화 시에, OEM에서의 오리지널 초기화시에 또는 이전에-선택된 모드를 재설정시에, 상기 제어기(700)는 원하는 동작 모드를 식별하는 선택 명령어를 수신한다(1102). 관리되지 않는 여분 블록 관리 모드가 선택되었다(1104)고 상기 선택 명령어가 나타내는 경우, 상기 여분 블록 관리 모듈(770)은 사용가능한 및 배드 블록들을 식별하기 위해 상기 호스트(720)가 상기 플래시 메모리 디바이스(들)(730)을 직접 스캔할 것을 허락한다(1106). 관리되지 않는 모드에서, 상기 제어기(700)는 또한 여분 블록 사용을 관리하는 것으로부터 예방된다. 대신에, 상기 여분 블록 관리 모듈(770)이 (정정할 수 없는 ECC 실패(필드(906) 또는 프로그램 또는 삭제 실패(필드(908))와 같은) 배드 블록을 나타내는 오류를 식별할 때, 상기 제어기(700)는 또한 특별한 블록이 적당한 상태 필드, 이를테면 필드(910)(도 9)를 사용해서 카피 및 재매핑을 필요로 한다는 것을 상기 호스트(720)에 알릴 수 있다. (필드(908) 또한 두 개의 필드일 수 있다 - 하나는 프로그램 실패용이고 또 하나는 삭제 실패용이나, 이들은 하나의 필드 내에 조합될 수 있다.)
여분 블록 관리가 상기 관리되지 않는 여분 블록 관리 모드에서 상기 호스트(720)에게 전적으로 맡겨질 수 있으나, 상기 제어기(700)는 여전히 소수의 여분 블록들을 스캔할 수 있으며 오류 복구를 위해 사용하도록 이들을 상기 호스트(720)에게 비가시적으로 유지할 수 있다. 즉, 최대 1,000개의 블록들을 갖는 플래시 메모리의 도 12 내의 예를 사용해서, 상기 데이터 시트들은 최소의 보장된 수의 블록들을 900으로 그리고 최대의 보장된 수의 블록들을 990으로 나타낼 수 있다. 특정 부분 내의 양호한 블록들의 진짜 수가 950개인 경우, 상기 호스트(720)는 상기 호스트(720)가 양호한 블록들을 스캔하기 전에 상기 제어기(700)가 자신의 사용을 위해 10개의 블록들을 감춘 경우 단지 940개의 양호한 블록들을 발견한다. 상기 제어기(700)는 상기 감추어진 블록들이 배드 블록들이라는 것을 허위로 나타냄으로써 상기 호스트(720)로부터 양호한 블록들을 감출 수 있는데, 그 이유는 상기 제어기(700)가 감추고 있는 블록들을 알기 때문이다. 예컨대, 상기 제어기(700)가 블록 X를 감추기로 결정한 경우, 상기 호스트가 블록 X를 판독할 때, 결함성 블록 플래그와 함께 임의의 데이터를 반환할 수 있다. 마찬가지로, 블록 X에 대해 상기 호스트로부터의 임의의 삭제 또는 프로그램 요청시에, 상기 제어기는 삭제 또는 프로그램 오류를 발신할 수 있다.
여분 블록 관리의 두 번째 모드에 대해(1108), 완전히-관리되는 모드에서, 상기 여분 블록 관리 모듈(780)이 양호한 블록들을 식별해서 단지 N개의 양호한 블록들을 상기 호스트 제어기에 제공하기 위해 상기 플래시 메모리 디바이스(들)(730) 내의 블록들의 모든 스캔을 수행하는데, N은 보증된 수의 사용가능 블록들의 플래시 메모리의 파라미터 페이지 내에서 판독가능한 데이터 시트 파라미터이다(1110). 상기 제어기(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-999)를 보고할 수 있다. 따라서, 950개의 블록들이 상기 여분 블록 관리 모듈(770)에 의해 스캔되어 실제로 사용가능하다고 발견되는, 1,000개의 가능한 블록들을 구비하는 가설적 플래시 메모리의 위 예를 다시 참조하면, 상기 제어기(700)가 이러한 양호한 블록들 중 5개를 여분 블록들로서 보유하는 경우, 945개의 양호한 블록들을 상기 호스트(720)에 보고한다(1120). 따라서, 상기 호스트(720)는 5개의 다른 양호한 블록들이 존재한다는 것을 알지 못한다. 상기 제어기(700)는 제거된 배드 블록들을 가지고 상기 양호한 블록들을 작은 논리 주소 범위에 재매핑할 수 있다(예컨대, 양호한 블록들의 주소들이 순차적으로 0-N으로 재매핑된다)(1122). 상기 호스트(720)가 N보다 더 큰 주소들에 대해 판독, 프로그램 또는 삭제 동작을 시도하는 경우, 상기 제어기(700)는 오류를 보고할 것이다. 예로서 도 9의 데이터 필드들(900)을 이용해서, 이 오류가 필드(914)에 데이터를 첨부하는 여분 블록 관리 모듈(770)에 의해 보고될 수 있는데, 이는 제어기 규정된 범위 밖으로 나가려고 노력할 때 결함성 블록을 어드레스하고 있다고 상기 호스트(720)가 믿도록 하기 위해서이다.
분할 관리 모드의 대안적인 실시예에서, 상기 여분 블록 관리 모듈(780)은 플래시 메모리 디바이스(들)(730) 내의 모든 블록들을 스캔하는 대신에, 혼자서 여분 블록들로서 유지할 한 세트의 양호한 블록들만을 단지 스캔 및 예약할 수 있으며 어떤 것이 양호한지 그리고 어떤 것이 결함있는지를 결정하기 위해 상기 호스트(720)가 모든 블록들을 스캔하는 것을 허용할 수 있다. 분할 관리 모드의 이 대안적인 이행예에서, 상기 호스트(720)가 상기 여분 블록 관리 모듈(770)이 여분 블록들로서 식별한 블록들 중 하나에 대한 판독, 프로그램, 또는 삭제 동작을 수행하려고 시도할 때, 상기 제어기(700)는 블록 내의 결함을 나타내거나 오류를 레코딩한다. 예컨대, 제어기(700)는 결함성 블록들을 표시하기 위해 사용된 적당한 바이트들 내에 결함 플래그를 삽입하거나, 도 9 내의 "결함성 블록에 대한 시도된 동작" 필드(914)와 같은 판독 상태에서의 필드를 덧붙일 수 있다. 상기 호스트(720)는 이후 그러한 목적으로, 파라미터 페이지에 보증된 수를 넘어서는 블록들을 포함하는, 모든 다른 사용가능 블록들을 사용한다.
상기 분할 블록 관리 기법 중 어떤 버전이 채용되는지와 무관하게, 상기 호스트(720)는 예컨대 성능 또는 내구성을 개선하기 위해 통상적으로 최소 수 이상의 임의의 추가의 여분의 블록들을 사용할 수 있는데, 상기 호스트(720)는 블록들의 최소수보다 많은 블록들에 의지할 수 있다. 따라서, 이 예에서, 상기 호스트는 사용할 수 있는 45개의 추가 블록들을 구비한다(사용가능한 총 950개 마이너스 예약된 5개 vs. 데이터 시트에 대한 900개의 보증된 최소수).
분할 관리 모드를 가지고, 상기 제어기(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가 추가 상태를 발신하기 위해 사용될 수 있다. 부가적으로, 상태 정보 및 여분 블록 관리가 동일한 메시지 포맷의 일부로서 도시되나, 상기 제어기는 다른 실시예들에서 상태 정보 및 여분 블록 관리 정보 중 하나를 단지 제공하기 위해 구성될 수 있다.
플래시 메모리와 사용하기 위한 개선된 독립적인 제어기가 설명되었는데, 이제어기는 오류 분석 및 오류 정정을 핸들링 할 수 있고, 호스트와 협력해서 몇 가지 모드들 중 하나로 오류 복구를 위해 여분 블록들에 관한 통신을 관리할 수 있으며, 상기 호스트에 의해 액세스하는 메시지 필드에서 판독 명령어들 또는 기록 및 삭제 오류들에 관한 상태 정보를 제공할 수 있다. 본 명세서에 설명된 상기 방법 및 제어기는 호스트 제어기가 더 많이 간략화된 설계를 갖는 것을 허용할 수 있는 호스트와 별개로 제어기에 의한 활동을 허락하며, 다양한 레벨의 제어기 및 호스트 협력 및 최적화가 달성될 수 있도록 제어기의 활동들과 관련된 정보를 호스트에게 제공하면서 플래시 메모리에서 호스트와 사용될 수 있는 이산 제어기의 맞춤형 아키텍쳐를 허락한다.
바람직한 낸드 플래시 메모리 제어기 실시예
이 부분은 바람직한 제어기 아키텍쳐를 논의하며 위에서 논의된 다양한 기능 모듈들 중 일부에 대해 더 세부사항을 제공한다. 위에서 주목된 바와 같이, "모듈"은 임의의 적합한 방식으로, 이를테면 하드웨어, 소프트웨어/펌웨어, 또는 이들의 조합으로 이행될 수 있으며, "모듈"의 기능은 단일 구성요소에 의해 수행될 수 있거나 상기 제어기 내의 몇 가지 구성요소들 사이에서 분포될 수 있다.
다시 도면으로 돌아가면, 도 13a는 도 3의 낸드 제어기(300)의 현재 선호되는 이행예의 도면이다. 도면들에 도시된 구성요소들 중 임의의 것이 하드웨어, 소프트웨어/펌웨어, 또는 이들의 조합으로서 이행될 수 있다는 것이 이해되어야 한다. 이 이행예에서, 도 3의 상기 낸드 인터페이스(325)는 호스트 인터페이스 모듈("HIM")(3010)에 의해 이행된다. 상기 HIM(3010)은 "플래시 디바이스-타입 인터페이스"로서 "호스트 측 인터페이스"를 지원하는 로직 집합이다. 상기 HIM(3010)은 선입선출("FIFO") 모듈(3080), 제어 유닛(3090), 순환 중복 검사("CRC") 모듈(3100)(또 하나의 타입의 오류 검출 코드("EDC")가 사용될 수 있음), 명령어 레지스터(3110), 주소 레지스터(3120), 및 호스트 직접 메모리 액세스("HDMA") 유닛(3130)을 포함한다. 이 실시예에서, 상기 HIM(3010)은 ONFI HIM의 형태를 취한다. 아래에서 더 상세히 설명되는 바와 같이, 일부 HIM들은 몇 개의 페이지들에 걸치는 비교적 큰 양의 데이터에 대해 호스트 제어기로부터 고레벨 요청을 수신하며, 상기 낸드 제어기는 무슨 동작들이 상기 요청을 충족하기 위해 요구되는지를 결정한다. 대조적으로, ONFI HIM은 호스트 제어기로부터 (예컨대, 개별 페이지들에 대한) 몇 개의 더 작은-크기의 요청들을 수신해서, 상기 ONFI HIM은 다수의(예컨대, 8개의) 판독 및 기록 요청들을 동시에 핸들링하는 것이 요구된다.
도 13a로 돌아가면, 도 3의 상기 제2 낸드 인터페이스(335)는 플래시 인터페이스 모듈("FIM")(3020)에 의해 여기에서 이행된다. 현재 실시예에서, 상기 FIM(3020)은 상기 "디바이스 측 인터페이스"를 "호스트-타입 인터페이스"로서 생성하는 저레벨 프로그래머블 시퀀서와 로직 집합으로서 이행된다. 이 실시예에서, 상기 FIM(3020)은 명령어 레지스터(3140), 주소 레지스터(3150), ECC 인코드 모듈(3160), ECC 디코드 모듈(3170), 데이터 스크램블러(3180), 및 데이터 디스크램블러(3190)를 포함한다.
상기 낸드 제어기(300) 내에는 프로세서(3040)가 있는데, 이 프로세서는 롬, 코드 램, 및 데이터 램을 구비한다. 중앙 버스(3030)는 상기 프로세서(3040), 상기 HIM(3010), 상기 FIM(3020), 및 아래에서 설명되는 다른 모듈들을 연결하며, 도시된 상이한 모듈들 사이에서 데이터를 전송하기 위해 사용된다. 이 양방향 버스(3030)는 각각의 내부 구성요소로의 실제 연결을 갖는 전기 버스 또는 ARC 마이크로프로세서와 연계해서 사용된 어드밴스드 하이-스피드 버스("AHB")일 수 있는데, 이는 상호접속 매트릭스를 이용해서 다양한 모듈들을 논리적으로 연결한다. 상기 중앙 버스(3030)는 데이터, 제어 신호들, 또는 둘 다를 송신할 수 있다. 상기 낸드 제어기(300)는 또한 판독 또는 기록되는 데이터 페이지들을 일시적으로 저장하기 위해 사용되는 버퍼 램("BRAM")(3050), 및 오류들을 정정하기 위한 ECC 정정 엔진(3060)을 포함한다. 상기 낸드 제어기(300)는 암호화/복호화 기능들을 수행하기 위한 암호화 모듈(3070)을 더 포함한다.
상기 낸드 제어기(300)는 열 치환 모듈을 더 포함할 수 있는데, 이 모듈은 상기 FIM 시퀀서, 상기 프로세서(3040) 내의 펌웨어에 의해, 또는 바람직하게는 상기 FIM(3020) 내에 위치된 테이블과 소량의 로직으로 이행된다. 상기 열 치환 모듈은 상기 플래시 메모리 디바이스(들)(330)(도 3)이 배드 열 위치들에 대한 정보를 포함하는 것을 허용한다. 상기 배드 열 주소 정보는 상기 플래시 메모리 디바이스(들)(330)에 포함되며 임의의 판독 또는 기록 동작 전에 펌웨어에 의해 스캔된다. 펌웨어가 상기 플래시 메모리 디바이스(들)(330)을 스캔한 후에, 상기 열 치환 모듈에 의해 사용되도록 상기 배드 열 위치를 가지고 배드 열 주소 테이블을 구축한다. 플래시 기록 동작시에, 상기 열 치환 모듈은 배드 열 주소 테이블에서 검출되는 주소에 대한 데이터(0xFFFF)를 삽입한다. 플래시 판독 동작시에, 상기 배드 열 주소로부터의 데이터가 폐기될 것이다.
지금 일반적으로 설명된 상기 낸드 제어기(300)의 구성요소들을 가지고, 상기 낸드 제어기(300)의 바람직한 기록 및 판독 동작들이 이제 제시될 것이다. 우선 기록 동작으로 가면, 상기 HIM(3010) 내의 상기 FIFO(3080)가 호스트 제어기로부터의 인커밍 기록 명령어, 주소, 및 데이터를 위한 버퍼로서 작용하며 그러한 요소들을 시스템 카드 도메인과 동기화한다. 상기 CRC 모듈(3100)은 임의의 송신 오류들이 존재하는지를 결정하기 위해 인커밍 정보를 검사한다. (상기 CRC 모듈(3100)은 위에서 논의된 EDC 모듈의 예이다.) 상기 CRC 모듈은 종단간 데이터 보호 스킴의 일부로서 송신 오류들을 검사하기 위해 오류 검출 코드를 생성 또는 검사한다. 어떠한 오류도 검출되지 않는 경우, 상기 제어 유닛(3090)은 상기 FIFO(3080)로부터 수신된 명령어를 디코딩해서 명령어 레지스터(3110)에 저장하고, 또한 주소를 주소 레지스터(3120)에 저장한다. 상기 호스트 제어기로부터 수신된 데이터가 상기 HDMA AHB 인퍼페이스(3130)을 통해 상기 중앙 버스(3030)를 경유해서 상기 BRAM(3050)으로 보내진다. 상기 제어 유닛(3090)은 차단을 상기 프로세서(3040)으로 보내는데, 이에 대한 응답으로 상기 프로세서(3040)는 상기 명령어 레지스터(3080) 및 상기 주소 레지스터(3120)로부터 명령어를 판독하고, 상기 명령어를 기초로 해서, 상기 FIM(3020) 내에서 데이터 경로를 설정하며 상기 명령어를 상기 FIM'의 명령어 레지스터(3140)에 저장한다. 상기 프로세서(3040)는 또한 상기 낸드 인터페이스(325)로부터의 주소를 내부 낸드 주소로 변환하며 FIM의 주소 레지스터(3150)에 저장한다. 논리-물리 주소 변환이 수행되는 경우, 상기 프로세서(3040)는 올바른 물리 주소를 생성하기 위해 매핑 테이블을 사용할 수 있다. 상기 프로세서(3040)는 또한 아래에서 설명되는 하나 이상의 부가 기능들을 수행할 수 있다. 상기 프로세서(3040)는 이후 상기 BRAM(3050)으로부터 상기 FIM(3020)로의 데이터 전송을 설정한다.
상기 FIM(3020)은 상기 주소 레지스터(3150)로부터 값을 취해서 상기 낸드 인터페이스(335)의 표준에 따라 포맷한다. 상기 BRAM(3050)에 저장된 데이터가 암호화를 위해 상기 암호화 모듈(3070)로 보내지며 이후 상기 데이터 스크램블러(3180)를 통해 보내진다. 상기 데이터 스크램블러(3180)는 상기 데이터를 스크램블해서 상기 데이터를 상기 FIM의 ECC 인코더(3160)로 출력하는데, 이 인코더가 상기 데이터와 함께 저장될 ECC 패리티 비트들을 생성한다. 상기 데이터 및 ECC 비트들은 이후 기록 명령어를 가지고 상기 제2 낸드 인터페이스를 통해 저장을 위해 상기 플래시 메모리 디바이스(들)로 전송된다. 기록 동안에 발생할 수 있는 부가 기능의 예로서, 기록 중단 또는 프로그램 실패에 대한 보호가 가능한 경우 및 상기 기록 요청이 상위 페이지 주소에 대한 경우, 상기 프로세서(3040)는 판독 명령어를 대응하는 저위 페이지를 위한 제2 낸드 인터페이스를 통해 상기 플래시 메모리 디바이스(들)로 보낼 수 있으며 이후 프로그램 명령어를 이 명령어가 안전한 구역(여분의 스크래치패드 영역)에 카피되도록 보내는데 상기 플래시 메모리 디바이스(들)(330) 내의 또 하나의 위치에 프로그램 명령어를 다시 기록함으로써 카피된다. 오류가 상위 페이지를 기록하는데 있어서 발생하는 경우, 상기 저위 페이지가 여전히 상기 안전한 구역으로부터 다시 판독될 수 있으며 오류가 정정된다. (이는 안전한 구역들을 통해 기록 중단 및/또는 프로그램 실패를 핸들링하기 위해 위에서 설명된 모듈의 예이다.)
이제 판독 동작으로 가면, 상기 HIM(3010)이 호스트 제어기로부터 판독 명령어를 수신하고, 상기 프로세서(3040)가 명령어 및 논리 주소를 판독한다. 논리-물리 주소 변환이 수행되는 경우, 상기 프로세서(3040) 내의 펌웨어가 올바른 물리 주소를 생성하기 위해 매핑 테이블을 사용할 수 있다. (이는 위에서 설명된 주소 매핑 모듈의 예이다.) 상기 펌웨어는 이후 상기 물리 주소를 제2 낸드 인터페이스(335)를 통해 상기 플래시 메모리 디바이스(들)(330)로 보낸다. 상기 판독 액세스 이후에, 상기 데이터가 상기 낸드 인터페이스를 통해 전송되고, 오류 정정을 위한 신드롬 데이터를 생성하기 위해 디코딩 및 사용되고, 상기 데이터 디스크램블러(3190)에 의해 디스크램블링되고, 이후 상기 중앙 버스(3030)를 통해 상기 BRAM(3050)으로 보내진다. 상기 ECC 정정 엔진(3060)은 상기 BRAM(3050)에 저장되는 데이터에 대해 ECC를 사용해서 정정될 수 있는 임의의 오류들을 정정하기 위해 사용된다. 상기 ECC가 계산되어 물리 페이지의 부분들에 저장될 수 있기 때문에, 상기 프로세서(3040)는 페이지의 각 부분이 수신 또는 정정됨에 따라, 또는 상기 데이터 모두가 전송될 때 한번 차단될 수 있다. 상기 암호화 모듈(3070)은 이후 상기 데이터에 대한 복호화 동작을 수행한다. 위에서 설명된 타이밍은 융통성 있는데, 그 이유는 상기 제1 낸드 인터페이스(325) 및 상기 제2 낸드 인터페이스(335)가 상이한 속도로 동작할 수 있으며, 상기 펌웨어가 저장-포워딩 기법들 또는 속도-매치 버퍼링을 사용해서 데이터를 전송할 수 있기 때문이다. 상기 데이터가 상기 호스트 제어기로 다시 보내질 때, 상기 HIM(3010)을 통해 보내지며, 송신 CRC가 송신 오류를 검사하기 위해 상기 제1 낸드 인터페이스(325)를 통해 상기 호스트로 다시 보내진다.
위에서 언급된 바와 같이, 상기 호스트 제어기로부터 보내진 명령어들을 핸들링하는 것에 덧붙여서, 상기 프로세서(3040)는 상기 호스트에 의해 보내진 임의의 특정 명령어와 독립적으로 또는 비동기적으로 하나 이상의 부가 기능들을 수행할 수 있다. 예컨대, 상기 ECC 정정 엔진(3060)이 정정가능한 소프트 오류를 검출하는 경우, 상기 ECC 정정 엔진(3060)은 상기 소프트 오류를 정정할 수 있으며 또한 상기 페이지 위치를 로그하기 위해 상기 프로세서(3040)를 차단할 수 있는데 이는 대응 블록이 추후에 판독 스크러빙될 수 있도록 하기 위해서이다. 상기 프로세서(3040)에 의해 수행될 수 있는 그밖의 바람직한 배경 작업들은 아래에서 설명되는 바와 같이, 마모 레벨링 그리고 배드 블록 및 여분 블록의 매핑이다.
다시 도면으로 돌아가면, 도 13b는 실시예의 낸드 제어기의 더 상세한 모습을 도시하는 블록도이다. 도 13a에 도시된 제어기와 같이, 이 실시예에서 제어기는 ONFI HIM(3200) 및 FIM(3260)을 포함하며, 이들은 중앙 버스(여기서, 데이터 경로를 위한 어드밴스드 마이크로컨트롤러 버스 아키텍쳐("AMBA") 고성능 버스("AHB") 멀티층 매트릭스 버스(3270) 및 명령어 경로를 위한 어드밴스드 병렬 버스("APB")(3330))를 통해 통신한다. 상기 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)는 상기 FIM(3260)내에서 플래시 직접 메모리 액세스("FDMA") 모듈(3440)을 설정하는데, FIM은 AHB 버스(3270)과 통신하며 DRAM(3220)으로부터 데이터를 판독하기 위해 AHB 버스 프로토콜 명령어들을 생성한다. 상기 플래시 제어 RISC(3250)은 또한 ECC 인코더 및 디코더를 포함하는 EDC 모듈(3450)을 설정한다. 상기 MRAM(3240)은 상기 플래시 제어 RISC(3250)를 기능하게 하기 위해 사용된 코드를 저장한다.
이 실시예에서 상기 낸드 제어기는 또한 이 제어기가 부팅시에 기능하도록 지령어 코드를 저장하는 롬(3210)을 포함한다. 상기 낸드 제어기의 부가적인 구성요소들은 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# 신호를 가지고 래치될 때이다. 소스 동기(또는 "소스 싱크")는 상기 데이터가 래치되어야 하는 때를 나타내기 위해 데이터를 가지고 스트로브(DQS)가 포워딩될 때이다.) 상기 ONFI HIM(3200)은 또한 명령어 FIFO(3360), 데이터 FIFO(3370), 데이터 제어기(3380), 레지스터 구성 모듈(3400), 호스트 적접 메모리 액세스("HDMA")모듈(3410(??)), 및 CRC 모듈(3415)을 포함하는데, 이는 도 13a와 연계해서 위에서 설명된 바와 같이 기능한다. 상기 ONFI HIM(3200)은 APB 버스(3330) 및 AHB 버스(3270)과 각각 통신하기 위해 APB 인터페이스(3390) 및 AHB 포트(3420)을 더 포함한다. 상기 FIM(3260)은 EDC 인코더 및 EDC 디코더를 포함하는 EDC 모듈(3450), 상기 플래시 제어 RISC(3250) 및 상기 ARC600 마이크로프로세서(3280)에 의해 제공된 마이크로-제어 코드들을 기초로 해서 상기 낸드 버스로의 명령어들을 생성하는 플래시 프로토콜 시퀀서("FPS")(3430), FDMA(3440), 데이터 스크램블러/디스크램블러(3470) 및 낸드 인터페이스(3460)을 포함한다.
상기 스크램블러/디스크램블러(3470)는 플래시 기록 전송(스크램블링) 및 플래시 판독 전송(디스크램블링) 동안에 데이터의 변환을 수행한다. 플래시 메모리 디바이스(들)(330)에 저장된 데이터가 더 많은 랜덤화된 데이터 패턴들을 생성함으로써 데이터 패턴-의존적인 민감도, 교란 효과, 또는 오류를 줄이기 위해 스크램블링될 수 있다. 상기 메모리 디바이스(들)(330) 내에서 페이지들에 걸쳐 시프팅 패턴으로 상기 데이터를 스크램블링함으로써, 상기 메모리의 신뢰도는 상당히 개선될 수 있다. 상기 스크램블러/디스크램블러(3470)는 무선으로 데이터를 처리하고 레지스터 액세스를 사용해서 상기 ARC600 프로세서(3280) 또는 상기 플래시 제어 RISC(3250)에 의해 구성된다. ECC 검사 비트 생성이 스크램블링 후에 수행된다. ECC 오류 검출이 디스크램블링 전에 수행되나, 정정이 디스크램블링 후에 수행된다.
이 실시예에서 상기 낸드 제어기는 도 13a대 대해 위에서 설명된 바와 같이 일반적으로 기록 및 판독 동작들을 처리한다. 예컨대, 기록 동작을 위해, 상기 명령어 FIFO(3360) 및 상기 데이터 FIFO(3370)가 인커밍 기록 명령어 및 데이터를 저장하고, 상기 CRC 모듈(3415)가 임의의 송신 오류들이 존재하는지를 결정하기 위해 인커밍 정보를 검사한다. 어떠한 오류도 검출되지 않는 경우, 상기 데이터 제어기(3380)는 상기 명령어 FIFO(3360)로부터 수신된 명령어를 디코딩해서 상기 레지스터 구성 모듈(3400) 내의 명령어 레지스터에 저장한다. 상기 호스트 제어기로부터 수신된 주소가 상기 레지스터 구성 모듈(3400) 내의 주소 레지스터에 저장된다. 상기 호스트 제어기로부터 수신된 데이터가 HDMA(3410)를 통해 상기 DRAM(3220)으로 보내진다. 상기 데이터 제어기(3380)는 이후, 상기 명령어 레지스터로부터 명령어를 판독하는 상기 플래시 제어 RISC(3250) 또는 상기 ARC600(3280)로 차단을 보내고, 주소 레지스터로부터 주소를 판독하고, DRAM(322)로부터 데이터를 판독하기 시작하도록 그리고 ECC 및 데이터 스크램블링 동작들을 수행하도록 상기 FIM(3260)을 설정하기 위해 제어권을 상기 플래시 제어 RISC(3250)으로 넘기는데, 이 결과가 저장을 위해 상기 플래시 메모리 디바이스(들)(330)로 보내진다. 상기 ARC600 마이크로프로세서(3280) 및/또는 상기 FIM(3260)은 부가적인 동작들을 수행할 수 있다. 예컨대, 상기 FIM(3260)은 열 치환을 수행할 수 있으며, 다음 동작들이 상기 FIM(360)과 함께 상기 ARC600 마이크로프로세서(3280)을 사용해서 수행될 수 있다: 배드 블록 및 여분 블록 관리, 안전한 구역들, 판독 스크러빙, 및 마모 레벨링. 이러한 동작들은 아래에서 더 상세히 설명된다.
판독 동작을 위해, 상기 ONFI HIM(3200)은 판독 명령어가 수신될 때 차단을 상기 ARC600 마이크로프로세서(3280)로 보낸다. 상기 ARC600 마이크로프로세서(3280)는 이후 상기 명령어 및 주소 정보를 상기 플래시 제어 RISC(3250)로 전달하는데, 플래시 제어 RISC는 상기 낸드 플래시 메모리 디바이스(들)(330)로의 판독 명령어를 생성하도록 상기 FPS(3430)을 설정한다. 일단 데이터가 상기 낸드 플래시 메모리 디바이스(들)(330)로부터 판독될 준비가 되면, 상기 FPS(3430)는 판독 명령어들을 상기 낸드 버스로 보내기 시작한다. 상기 판독 데이터는 상기 낸드 인터페이스 유닛(3460)을 통해 상기 데이터 디스크램블러(3470)로 가고 이후 상기 EDC 모듈(3450)을 통해 가는데, EDC 모듈은 ECC 정정을 위해 신드롬 비트들을 생성한다. 상기 데이터 및 신드롬 비트들은 이후 상기 FDMA(3440)을 통해 전달되어 상기 DRAM(3220)에 저장된다. 상기 플래시 제어 RISC(3250)는 이후 임의의 오류들을 정정하기 위해 상기 ECC 정정 엔진(3230)을 설정한다. 상기 암호화 모듈(3300)은 이때 상기 데이터를 복호화할 수 있다. 상기 ARC600 마이크로프로세서(3280)는 이후 차단을 수신하고, 상기 데이터가 상기 DRAM(3220)으로부터 판독될 준비가 되었다는 것을 나타내기 위해 상기 ONFI HIM(3200)에서 상기 레지스터 구성 모듈(3400)을 프로그래밍한다. 이 정보를 기초로 해서, 상기 ONFI HIM(3200)은 상기 DRAM(3200)으로부터 상기 데이터를 판독하고 상기 데이터 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 HM(3480)은 어싱크 및 ONFI 소스 싱크 구성요소들(3510, 3520)을 각각 사용해서 어싱크 모드 및 소스 싱크 모드에서 사용될 수 있다.) 상기 ONFI HIM(3480)은 또한 상기 호스트 제어기로부터 수신된 주소들을 논리 유닛 번호("LUN") 주소 FIFO(3550)에 저장한다. (이 실시예에서 상기 낸드 제어기는 다수의 논리 유닛들을 지원하는데, 이 유닛들은 LUN 주소들에 의해 주소지정가능한 독립 개체들로서 취급된다.) 상기 명령어 및 주소들이 명령어 및 데이터 제어기(3560)로의 FIFO들(3540, 3550)로부터 판독되는데, 이 제어기는 이 항목들을 동기화한다. 상기 명령어 및 데이터 제어기(3560)는 이후 차단을 시스템 레지스터 제어기(3570)로 보내는데, 이 레지스터 제어기는 ARC600 마이크로제어기로의 차단을 생성한다. 상기 ARC600 마이크로제어기는 이후 상기 시스템 레지스터 제어기(3570)에서 레지스터로부터 LUN 주소를 판독하며, 상기 플래시 메모리 디바이스(들)로부터 데이터를 판독하는 프로세스는 위에서 설명된 바와 같다. 모든 판독 데이터가 DRAM에 기록될 때, 상기 데이터가 판독될 준비가 되어 있다고 상기 ONFI HIM(3480)에 알리기 위해 상기 ARC600 마이크로프로세서가 상기 시스템 레지스터 제어기(3570) 내의 상태 레지스터에 프로그래밍한다. 상기 ONFI HIM(3480)은 이후 상기 판독 요청 제어 유닛(3585)을 사용해서 상기 HDMA(3580)를 통해 데이터를 판독한다. 상기 판독 데이터는 상기 판독 데이터 FIFO(3590)에 저장되는데, 이 FIFO는 각각의 LUN(3595)를 위해 나누어진다. 일단 이것이 행해지면, 준비 인디케이터가 상기 상태 레지스터에 저장되고, 상기 데이터가 상기 호스트 제어기로 스트리밍된다.
이제 도 13d로 가면, 기록 동작에서, 기록 명령어가 ONFI(3410) 버스를 통해 호스트 제어기로부터 판독된다. 상기 ONFI HIM(3400)이 신호 멀티플레서들(3420, 3450)을 통해 기록 명령어를 명령어 FIFO(3460)에 전달한다. (상기 ONFI HIM(3400)은 상기 어싱크 및 ONFI 소스 싱크 구성요소들(3430, 3440)을 각각 사용해서 어싱크 모드 및 소스 싱크 모드에서 사용될 수 있다.) 상기 ONFI HIM(3400)은 또한 상기 호스트 제어기로부터 수신된 주소들을 논리 유닛 번호("LUN") 주소 FIFO(3470)에 저장한다. 상기 호스트 제어기로부터 수신된 데이터가 기록 데이터 FIFO(3520)에 저장된다. 상기 명령어 및 주소가 명령어 및 데이터 제어기(3480)로의 FIFO들(3460, 3470)로부터 판독되는데, 이 제어기는 이 항목들을 동기화한다. 상기 명령어 및 데이터 제어기(3480)는 이후 차단을 시스템 레지스터 제어기(3490)로 보내는데, 이 레지스터 제어기는 ARC600 마이크로제어기로의 차단을 생성한다. 상기 ARC600 마이크로제어기는 이후 상기 시스템 레지스터 제어기(3490)에서 레지스터로부터 LUN 주소를 판독하며, 기록 동작으로부터 상기 제어기를 설정하는 프로세스는 위에서 설명된 바와 같다. 상기 HDMA(3530)는 AHB 버스(3550)와 통신하는 AHB 포트(3540)를 구비하며 상기 데이터를 상기 DRAM에 보낸다. CRC 모듈(3545)이 데이터 내의 송신 오류들을 검사한다. 일단 데이터가 상기 플래시 메모리 디바이스(들)(330)에 저장되고 상기 플래시 메모리 디바이스(들)(330)이 준비가 되어 있다는 것을 나타내고 프로그램 동작의 상태가 성공 또는 실패이면, 준비 인디케이터가 시스템 레지스터 제어기(3490) 내의 상태 레지스터에 저장되는데, 이는 상기 ONFI HIM(3400)이 상기 호스트 제어기로부터 또 하나의 명령어에 대해 준비가 되어 있다는 것을 나타낸다.
도 13a로 돌아가면, 상기 낸드 제어기(300)는 또한 프로그램 실패 및 삭제 실패를 핸들링할 수 있다. 상기 플래시 인터페이스 모듈(3020)(이하, FIM)에 부착된 상기 낸드 플래시 메모리 디바이스(들)(330)이 프로그래밍됨에 따라, 상기 낸드 메모리 디바이스(들)(330)이 상기 프로그램 동작의 성공 또는 실패를 상기 낸드 제어기(300)에(또는 선택적으로 상기 호스트 인터페이스 모듈(3010)(이하 HIM)을 통해 ONFI 호스트로) 보고한다. 상기 낸드 메모리 디바이스(들)(330)은 낸드 셀들 내의 결함들로 인해 또는 상기 낸드 셀들이 사이클들을 삭제 및 프로그래밍하는 것에 대해 갖고 있는 제한된 내구성으로 인해 상기 메모리의 기대 수명에 걸쳐 몇 번의 프로그램 실패를 경험할 수 있다.
상기 낸드 메모리 디바이스(들)(330)은 상기 프로그램 페이지 동작이 성공적으로 완료되지 않을 때 실패 상태를 상기 제어기(300)에 반환할 것이다. 상기 제어기 프로세서(3040)(도 13a) 또는 플래시 프로토콜 시퀀서(3430)(도 13b)가 각각의 프로그램 페이지 동작의 성공 또는 실패를 검증한다. 일반적으로, 임의의 단일 프로그램 페이지 동작의 실패는 상기 프로세서(3040)(또는 선택적으로 상기 ONFI 호스트)가 전체 낸드 블록(다수 페이지들을 포함할 수 있음)이 결함있다고 여기게 할 것이다. 결함성 블록은 사용되지 않을 것이다. 통상적으로, 상기 제어기(300)는 성공적으로 프로그래밍되지 않은 데이터 및 결함성 블록 내의 선행 페이지들 내의 임의의 데이터를 또 하나의 치환 블록(여분 블록)에 복사할 것이다. 상기 제어기(300)는 상기 FIM(3020), 상기 데이터 디스크램블러(3190), 및 상기 ECC 디코더(3170)를 사용해서 그리고 필요한 경우 상기 ECC 정정을 적용해서 BRAM(3050)으로의 선행 페이지들을 판독할 수 있다. 상기 데이터가 이후 정상 방식으로 상기 FIM(3020)을 사용해서 상기 치환 블록에 기록된다.
프로그램 실패들의 일 측면은 하나의 페이지를 프로그래밍하는 실패가 이전에 프로그래밍된 또 하나의 페이지 내의 데이터를 손상시킬 수 있다는 것이다. 통상적으로, 이는 상기 메모리 어레이 내에서 워드-라인을 공유하는 상위 및 저위 논리 페이지들을 가지고 물리적으로 정리되는 MLC 낸드 메모리를 가지고 가능하다. 통상적인 사용은 데이터를 저위 페이지에 그리고 후속 데이터를 상위 페이지에 프로그래밍하는 것이다. 상기 워드-라인 상에 상위 페이지를 프로그래밍할 때 프로그램 실패가 발생할 때 저위 페이지 내의 데이터의 손실을 예방하기 위한 한 가지 방법은 상기 상위 페이지를 프로그래밍하기 전에 저위 페이지 데이터를 판독하는 것이다. 상기 저위 페이지 데이터는 상기 제어 BRAM(3050)에 대해 판독될 수 있으며, 때때로 "안전 구역"으로 불리는, 비-휘발성 플래시 메모리 디바이스(들)(330) 내의 스크래치 패드 영역에 부가적으로 프로그래밍될 수 있다. 상기 데이터는 따라서 BRAM(3050)에 보유되거나 안전 구역이 이후 프로그래밍 실패로 인한 손실로부터 보호되며 상기 치환 블록에 카피되는 것이 가능한데, 특히 데이터가 상기 낸드 메모리 디바이스(들)(330)의 저위 페이지에서 손상되어 더 이상 성공적으로 판독될 수 없는 경우에 그러하다.
일부 낸드 실패 모드들이 메모리 어레이의 다른 영역들에서, 이를테면 인접 워드 라인들 상에서 데이터를 유사하게 손상시킬 수 있다는 것이 가능하다. 상기 제어기 BRAM(3050)에 대해 다른 잠재적으로 취약한 데이터를 판독하는 및/또는 스크래치 패드 또는 안전 구역 영역에 대해 데이터를 세이브하는 이 방법이 또한 이 상황에 데이터를 보호하기 위해 사용될 수 있다.
상기 FIM(3020)에 부착된 상기 낸드 플래시 메모리 디바이스(들)(330)이 삭제됨에 따라, 상기 낸드 메모리 디바이스(들)(330)은 상기 블록 삭제 동작의 성공 또는 실패를 상기 낸드 제어기(300)(또는 선택적으로 상기 HIM(3010)을 통해 상기 ONFI 호스트)로 보고한다. 상기 낸드 메모리 디바이스(들)(330)은 상기 삭제 동작이 성공적으로 완료되지 않을 때 실패 상태를 상기 제어기(300)에 반환할 것이다. 상기 제어기 프로세서(3040) 또는 상기 플래시 프로토콜 시퀀서(3430) 회로들이 각각의 삭제 동작의 성공 또는 실패를 검증한다. 일반적으로, 임의의 삭제 동작의 실패는 상기 프로세서(3040)(또는 ONFI 호스트)가 전체 낸드 블록이 결함있다고 여기게 할 것이다. 결함성 블록은 사용되지 않을 것이며 여분 블록이 그 자리에 사용된다.
상기 낸드 제어기(300)는 상기 플래시 메모리 디바이스 내에서 프로그램 교란, 삭제 교란, 및 판독 교란을 또한 핸들링할 수 있다.
내부 낸드 프로그래밍 동작들이 아마도, 상기 메모리 어레이의 다른 영역들에 영향을 미칠 수 있거나 교란할 수 있는데, 이는 그러한 다른 영역들을 판독하려고 시도할 때 오류를 야기한다. 프로그램 교란으로부터 실패들을 예방하기 위한 한 가지 방법은 프로그래밍 동작들과 연계해서 잠재적으로 취약한 영역들에 대한 판독 또는 "판독 스크러빙" 동작들을 수행하는 것인데, 이는 정정할 수 없는 또는 복구불가능한 오류들로 되기 전에 교란 효과들을 검출하기 위해서이다. 일단 교란 조건이 (판독 스크러빙 동작 동안에 하이 소프트 오류율에 의해) 검출되면, 상기 제어기 프로세서(3040)(또는 외부 ONFI 호스트)가 상기 플래시 메모리 디바이스(들)(330) 내의 또 하나의 영역에 상기 데이터를 카피할 수 있다.
내부 낸드 삭제 동작들이 아마도, 상기 메모리 어레이의 다른 영역들에 영향을 미칠 수 있거나 교란할 수 있는데, 이는 그러한 다른 영역들을 판독하려고 시도할 때 오류를 야기한다. 삭제 교란으로부터 실패들을 예방하기 위한 한 가지 방법은 삭제 동작들과 연계해서 잠재적으로 취약한 영역들에 대한 판독 또는 "판독 스크러빙" 동작들을 수행하는 것인데, 이는 정정할 수 없는 또는 복구불가능한 오류들로 되기 전에 교란 효과들을 검출하기 위해서이다. 일단 교란 조건이 검출되면, 상기 제어기 프로세서(3040)(또는 외부 ONFI 호스트)가 상기 플래시 메모리 디바이스(들)(330) 내의 또 하나의 영역에 상기 데이터를 카피할 수 있다.
상기 내부 낸드 판독 동작들이 아마도, 상기 메모리 어레이의 다른 영역들에 영향을 미칠 수 있거나 교란할 수 있는데, 이는 그러한 다른 영역들을 판독하려고 시도할 때 오류를 야기한다. 이 교란 효과들은 때때로 많은 판독 동작들에 걸쳐 누적할 수 있다. 판독(??) 교란으로부터 실패들을 예방하기 위한 한 가지 방법은 판독 동작들과 연계해서 잠재적으로 취약한 영역들에 대한 판독 또는 "판독 스크러빙" 동작들을 수행하는 것인데, 이는 정정할 수 없는 또는 복구불가능한 오류들로 되기 전에 교란 효과들을 검출하기 위해서이다. 일단 교란 조건이 검출되면, 상기 제어기 프로세서(3040)(또는 외부 ONFI 호스트)가 상기 플래시 메모리 디바이스(들)(330) 내의 또 하나의 영역에 상기 데이터를 카피할 수 있다.
이제 도 13a를 참조하면, 상기 낸드 제어기(300)는 다음 방식으로 판독 오류들을 핸들링한다. 통상적으로, 상기 FIM(3020)을 통해 상기 낸드 메모리 디바이스(들)(330)에 프로그래밍되는 데이터가 상기 낸드 어레이 내의 데이터에 첨부 및 저장된 오류 검출 또는 오류 정정 코드를 갖는다. 상기 제어기(300)는 이 기능을 위해 ECC 인코더(3160)를 사용한다. 이러한 데이터가 상기 플래시 어레이로부터 BRAM(3050)으로 판독될 때, 상기 ECC 디코더(3170)가 상기 데이터로부터 ECC 코드를 재생성해서, 상기 플래시에 프로그래밍될 때 데이터에 첨부된 ECC 코드와 비교한다. 상기 데이터가 기록된 데이터와 동일할 때, 상기 ECC 회로들은 어떠한 데이터 오류도 존재하지 않는다고 나타낸다. 상기 판독 데이터에서 어떤 차이가 검출되고, 이 차이가 정정할 상기 ECC의 능력 내에 있기에 충분히 작은 경우, 상기 판독 데이터(통상적으로 BRAM(3050)에 포함됨)가 "정정"되거나 수정되어, 상기 프로세서(3040)에 의해 제어되는 대로, 상기 ECC 정정 엔진(3060)에 의해 원래 값으로 복원한다. 상기 데이터 오류들이 상기 ECC 정정 능력을 초과하는 경우, "정정할 수 없는" 판독 오류가 발생한다. 통상적으로, 정정할 수 없는 판독 오류는, 판독될 때, 오류 상태가 호스트 인터페이스로 반환되게 한다.
정정할 수 없는 판독 오류들을 예방하기 위한 또는 오류가 검출될 때 복구하기 위한 한 가지 방법은 상기 제어기(300)(또는 상기 외부 ONFI 호스트)가 판독 동작을 재시도하는 것이다. 이러한 재시도는 상기 데이터 내에서 오류들을 감소시키기 위해 변동된 마진 레벨들 또는 다른 메커니즘들, 아마도 상기 오류들을 삭제하는 것 또는 상기 ECC 정정 기능 내에 있는 레벨로 오류들의 수를 줄이는 것을 사용할 수 있다.
선택적으로, 판독 오류가 복구될 때, 또는 상기 데이터를 복구하는데 필요한 ECC 정정량이 어떤 임계치를 충족하거나 초과하는 경우, 상기 데이터는 오류 없는 또는 개선된 조건으로 상기 데이터를 복원하기 위해 동일한 블록 또는 또 하나의 블록에 재 기록될 수 있다. 원래 데이터 위치가 선택적으로 결함있다고 고려될 수 있으며, 이 경우 결함있다고 표시되고 사용되지 않을 수 있다.
도 13a를 다시 참조하면, 상기 낸드 제어기(300)는 또한 기록 중단을 핸들링할 수 있다. 기록 중단은 프로그램 또는 삭제 동작이 진행중인 동안에 상기 제어기(300) 및 낸드 메모리 디바이스(들)(330)로의 전력의 예상치 못한 손실이다. 상기 전력 손실은 정정할 수 없는 판독 오류들을 야기할 수 있는 상기 낸드 메모리 디바이스(들)(330) 내에서 불완전한 프로그래밍 또는 삭제 조건들을 야기할 수 있다. MLC 낸드와 같은 몇 가지 경우에, 워드 라인(즉, 저위 페이지)를 공유하는 다른 페이지들이 위에서 설명된 프로그램 실패 조건처럼, 워드 라인의 상위 페이지 상에서 중단된 프로그램 동작에 의해 손상될 수 있다.
기록 중단 오류들을 줄이거나 제거하기 위해 또는 그 영향을 최소화하기 위해 몇 가지 방법들이 존재한다. 한 가지 방법은 전력이 차단되었다는 것을 상기 프로세서(3040)에 통보하기 위해 저전압 검출 회로를 사용하는 것이다. 상기 프로세서(3040)는 이후 현재의 프로그램 또는 삭제 동작이 끝나는 것을 허용하나 새로운 동작들이 시작하는 것은 허용하지 않을 수 있다. 이상적으로는, 현재 동작들이 완료하기에 충분한 전력을 가지고 충분한 시간을 갖는다.
아마도 저전압 검출 방법과 연계해서 사용되는 대안적인 방법은 프로그램 또는 삭제 동작을 완료하는데 이용가능한 전력을 연장하기 위해 커패시턴스 또는 배터리(어떠한 대안적인 전원)를 전력 공급 회로에 부가하는 것이다.
또 하나의 방법은 위에서 설명된 것과 유사한 스크래치 패드"안전 구역"을 제공하는 것이다. 상위 페이지 프로그램 동안에 취약할 수 있는 저위 페이지들에 존재하는 임의의 "오래된" 데이터가 판독되어, 상위 페이지 프로그램이 시작되기 전에 안전 구역에 세이브될 수 있다. 이는 전력 손실 경우에 이전에-프로그래밍된 데이터에 보호를 제공한다. 일부 이행예에서, 기록 중단 상황에서 손상된 데이터를 판독할 수 없는 것이 수용가능할 수 있으나 다른 아마도 무관한 더 오래된 데이터가 보호되어야 한다.
또 하나의 방법은 상기 제어기가 전력 공급될 때 잠재적인 기록 중단 오류들을 탐색하는 것이다. 기록 중단 결과라고 결정(또는 전제)될 수 있는 오류가 발견되는 경우, 오류 데이터가 폐기될 수 있다. 이 상황에서, 상기 제어기(300)는 이전 데이터로 다시 효과적으로 되돌아가며, 차단된 동작은 그것이 발생하지 않았던 것처럼 있는다.
도 13a를 다시 참조하면, 상기 낸드 제어기(300)는 또한 상기 메모리 상에서 마모 레벨링을 수행할 수 있다. 마모 레벨링은 정상 플래시 관리 알고리즘들의 결과 다른 방식으로 발생할 수 있는 것보다 모든 물리 블록들 사이에서 블록 사용을 더 고르게 분포시킴으로써 전체 제품 내구성 및 수명을 증가시키는 것이다. 이는 호스트 데이터 갱신을 위해 차례로 사용될 여분 블록들 풀로 "콜드" 블록들을 만들고, 그리고 동시에 상기 호스트에 의해 갱신되지 않은 "콜드" 블록들로부터 데이터를 "핫" 블록으로 이동함으로써 행해진다. 이러한 바꾸기는 "핫" 및 "콜드" 블록들을 믹싱하는 것을 야기할 것이다. 이러한 바꾸기는 바꾸기를 위한 블록들을 선택해서, 또는 핫 카운트(프로그램-삭제 사이클의 수) 분석을 기초로 해서 블록들을 선택해서 무작위로 또는 순환적으로 행해질 수 있다. 이러한 바꾸기는 주기적으로, 즉 100개의 블록 사이클마다 행해질 수 있는데, 전체 시스템 성능을 밸런싱하기 위한 시스템 파라미터에 의해 그리고 마모 및 성능 오버헤드를 밸런싱하기 위한 블록 사용의 이브닝(evening)에 의해 통상적으로 교정될 수 있다.
예시적인 고레벨 시퀀스는:
1. 마모 레벨링 동작 스케쥴링
2. 핫 카운트 분석에 의해 또는 무작위로 또는 순환식으로 "핫" 및 "콜드" 블록들 식별
3. 선택된 "콜드" 블록으로부터의 데이터를 자유 블록 풀 내의 선택된 "핫" 자유 블록에 카피
4. "콜드" 블록을 자유 블록 풀에 방출. 그 결과, 상기 자유 블록 풀은 핫 블록 대신에 콜드 블록에 의해 차지됨.
일부 동작들, 이를테면 분석-기반 블록 선택은 건너뛸 수 있다. 마모 레벨 동작 자체는 또한 블록 마모 분포가 고르게 검출되는 경우 건너뛸 수 있다.
상기 마모 레벨 동작들 및 핫 카운트 관리가 상기 프로세서(3040)에 의해 펌웨어에서 수행될 것인데, 이는 상기 호스트 제어기(121)(도 3)가 이러한 하우스키핑 플래시 블록 레벨 동작들을 인식하지 않도록 하기 위해서이다.
도 13a를 참조하면, 상기 제어기(300)는 또한 판독 교란이 검출시에 상기 플래시 메모리 디바이스(들)(330) 상에서 판독 스크러빙을 이행할 수 있다. 상기 플래시 메모리 디바이스(들)(330) 내에서 낸드 메모리 어레이의 하나의 영역으로의 판독 동작들이 상기 메모리 어레이의 다른 영역들에 영향을 주거나 교란시킬 수 있는데, 이는 셀들이 하나의 상태에서 또 하나의 상태로 변동하게 하며, 결국 그러한 다른 영역들에 대해 이전에 저장된 데이터를 판독하려고 시도할 때 비트 오류들을 야기한다. 이 교란 효과들은 많은 판독 동작들에 걸쳐 누적할 수 있는데, 이는 결국 시스템의 데이터 정정 능력들을 초과할 수 있는 다수의 비트 오류들로 이끈다. 상기 시스템 정정 능력들을 초과하는 오류들이 정정할 수 없는 오류들로 불린다. 프로그램 교란들로부터 실패들을 예방하기 위한 한 가지 방법은 잠재적으로 취약한 영역들 상에서 판독 또는 "스크러빙" 동작들을 수행하는 것인데, 이는 정정할 수 없는 또는 복구불가능한 영역들로 되기 전에 교란 효과들을 검출하기 위해서이다. 데이터 판독시에 오류내에서 다수의 비트들이 존재한다는 것을 통상적으로 검출함으로써 일단 교란 조건이 검출되면, 상기 프로세서(3040)는 일반적으로 낸드 메모리 어레이의 또 하나의 영역을 리프레시하기 위해 데이터를 이 영역에 카피함으로써 메모리 내의 또 하나의 영역으로 데이터를 이동시킬 수 있다.
판독 스크럽 카피는 호스트 판독 동작, 내부 시스템 판독 동작 코스 동안에 블록 판독으로, 또는 스케줄링된 판독 스크럽 스캔에 의해, ECC 정정 엔진(3060)(도 13a)에 의해 발견된 정정할 수 있는 ECC 오류에 의해 보통 트리거된다. 시스템 판독 동작들은 낸드 플래시에 저장된 매핑 정보, 파라미터들, 또는 펌웨어를 판독하기 위해 플래시 저장 시스템에 의해 요구된다. 판독 스크럽 스캔은 블럭에 포함된 임의의 데이터가 교란되었는지를 결정하기 위한 블록 내의 모든 데이터의 판독이다. 호스트 판독 또는 시스템 판독 동작 코스 동안에 부분적으로 판독될 때 통상적으로 블록들은 판독 스크럽 스캔을 위해 선택되나, 또한 다른 기준, 이를테면 무작위로, 또는 메모리 블록들을 통한 결정론적 시퀀싱을 통해 선택될 수 있다. 판독 스크럽 스캔 동작이 시간이 걸리고 시스템의 데이터 처리량에 영향을 미치기 때문에, 시스템은 무작위 선택의 사용, 카운터, 또는 다른 메커니즘들에 의해, 단지 주기적으로 또는 드물게 판독 스크럽 스캔을 위해 블록들을 선택할 수 있다. 스케줄링의 빈도는 시스템 성능 요구와, 교란된 데이터가 정정할 수 없게 되기 전에 이 데이터를 검출할 빈도 요건(frequency require) 사이에서 밸런싱하기 위해 교정될 수 있다. 미리정의된 임계치 이상 오류에서 일정수의 비트들을 갖는 정정할 수 있는 오류의 검출시에, 상기 판독 스크럽 카피는 블록을 위해 스케줄링된다.
판독 스크럽 카피는 정정가능한 ECC 오류를 갖는 모든 데이터의 정정 후에, 데이터가 교란된 블록으로부터 판독되어 또 하나의 블록에 기록되는 방법이다. 원래 블록은 이후 공통 자유 블록에 반환되고, 결국 삭제되어 다른 데이터로 기록될 수 있다. 판독 스크럽 카피 및 판독 스크럽 카피 스케줄링은 상기 프로세서(3040)에 의해 펌웨어 내의 낸드 제어기(300)에서 행해질 것인데, 이는 상기 호스트 제어기(121)가 이러한 하우스키핑 플래시 블록 레벨 동작들을 인식하지 못하도록 하기 위해서이다.
카피-백 명령어를 수행하는 것에 대한 실시예들
위의 배경 부분에서 설명된 바와 같이, 통상적인 카피-백 동작을 가지고, 낸드 플래시 메모리 디바이스가 데이터를 비-휘발성 메모리 내의 소스 주소로부터 내부 레지스터로 판독하고 이후 상기 레지스터로부터 데이터를 상기 비-휘발성 메모리 내의 목적지 주소에 기록한다. 상기 낸드 플래시 메모리 디바이스가 카피-백 동작시에 내부적으로 이동하는 상기 데이터에 대해 오류 정정 코드(ECC) 동작들을 수행하지 않기 때문에, 상기 데이터에 존재하는 임의의 오류들이 전파된다. 이 실시예들에서, 호스트와 하나 이상의 낸드 플래시 메모리 디바이스들 사이에서 인터페이스하는 제어기가 이러한 사안들을 극복하기 위해 ECC 기능 및 그밖의 최적화를 제공하기 위해 사용된다. 임의의 적합한 아키텍쳐가 사용될 수 있으나, 이 실시예들은 도 3에 도시된 아키텍쳐와 연계해서 설명될 것이다. (낸드 인터페이스들의 사용 및 도 3으로부터의 다른 세부사항들 및 대응하는 논의가, 명확하게 청구항 내에서 인용되지 않는 경우 청구항에 대해 판독되어서는 안 된다는 것이 주목되어야 한다.) 이 실시예에서, 도 3 내의 상기 제어 모듈(340)은 도 14에 도시된 행위들을 수행하기 위해 작동하는 회로 형태를 취한다. 여기에 사용된 바와 같이, "회로"는 마이크로프로세서 또는 프로세서 및 컴퓨터 판독 가능 매체 중 하나 이상을 취할 수 있는데, 컴퓨터 판독 가능 매체는 예컨대 상기 (마이크로)프로세서, 로직 게이트들, 스위치들, 응용 특정 집적 회로(ASIC), 프로그래머블 로직 제어기, 및 임베디드 마이크로제어기에 의해 실행가능한 컴퓨터 판독가능 프로그램 코드(예컨대, 소프트웨어 또는 펌웨어)를 저장하며, 이는 위에서 논의되고 예시된 바와 같다.
이제 도 14 내의 흐름도(1400)로 가면, 상기 제어기(300)는 소스 주소 및 카피-백 판독 명령어를 상기 호스트(320)로부터 수신한다(1410). 상기 제어기(300)는 이후 상기 소스 주소 및 상기 카피-백 판독 명령어를 상기 플래시 메모리 디바이스(330)로 보낸다(1420). 이 명령어에 응답해서, 상기 플래시 메모리 디바이스(330)는 자신의 비-휘발성 메모리 내의 소스 주소로부터 데이터를 판독해서 내부 레지스터에서 상기 데이터를 기록하는데, 이 레지스터는 비-휘발성 메모리 또는 상기 플래시 메모리 디바이스(330) 내의 어떤 다른 위치일 수 있다. (상기 용어들 "레지스터", "캐시", 및 "버퍼"는 본 명세서에서 혼용된다.) 다음에, 상기 제어기(300)는 데이터 및 상기 데이터와 연관된 오류 정정 코드를 상기 플래시 메모리 디바이스(330)로부터 수신하고(1430) 목적지 주소 및 카피-백 프로그램 명령어를 상기 호스트(320)로부터 수신한다(1440). 상기 제어기(300)는 이후 상기 오류 정정 코드가 상기 데이터 내에 오류가 존재한다고 나타내는지를 결정한다(1450). 상기 오류 정정 코드가 상기 데이터 내에 오류가 존재한다고 나타내지 않는 경우, 상기 제어기(300)는 상기 목적지 주소 및 상기 카피-백 프로그램 명령어를 상기 플래시 메모리 디바이스(330)로 보내고(1460), 이에 응답해서 상기 플래시 메모리 디바이스(330)는 레지스터로부터 데이터를 판독해서 상기 데이터를 상기 목적지 주소에 기록한다. 그러나, 상기 오류 정정 코드가 상기 데이터 내에 오류가 존재한다고 나타내는 경우, 상기 제어기(300)는 상기 데이터를 (예컨대, 위에서 설명된 ECC 정정 기법들을 사용해서) 정정하고 목적지 주소, 정정된 데이터, 및 프로그램 명령어를 상기 플래시 메모리 디바이스(330)로 보낸다(1470).
이 실시예들과 연관된 몇 가지 이점이 존재한다. 예컨대, ECC를 검사하지 않고 상기 낸드 플래시 메모리가 데이터를 카피한(따라서 임의의 오류들을 전파하는) 이전의 카피-백 동작들과는 달리, 이 실시예에서, 제어기(300)는 오류들을 검사 및정정하며, 이에따라 데이터의 신뢰도를 개선시킨다. 또한, 상기 낸드 플래시 메모리 디바이스가 이미 필요로 하는 데이터를 갖고 있기 때문에 상기 제어기(300)가 상기 낸드 인터페이스를 통해 동일 데이터를 상기 낸드 플래시 메모리 디바이스로 다시 보내는데 시간 또는 대역폭을 소비할 필요가 없음에 따라, 상기 제어기(300)가 오류를 검출하지 않는 경우 상기 낸드 플래시 메모리 디바이스가 자신의 정상 카피-기록 동작을 계속하는 것을 허용함으로써 성능이 최적화된다.
일 실시예에서, 위 기능은 ONFI 2.0 규격의 122쪽 내지 124쪽에 정의된 카피-백 기능과 유사한 명령어 및 주소 시퀀스를 사용해서 이행된다. 예컨대, 도 3 및 특정 ONFI 명령어들을 참조하면, 상기 호스트(320)는 소스 주소가 뒤따르는 판독 명령어(x'00) 및 x'35 카피-백 판독 명령어를 제1 인터페이스(325)를 통해 상기 제어기(300)로 보낸다. 상기 제어기(300)는 동일한 판독 명령어, 소스 주소, 및 x'35 카피-백 판독 명령어를 제2 인터페이스(335)를 통해 플래시 메모리 디바이스(330)로 보낸다. 이는 상기 플래시 메모리 디바이스(330)가 자신의 낸드 어레이로부터 데이터를 낸드 다이 상의 레지스터로 판독해서 데이터를 제2 인터페이스(335)를 통해 상기 제어기(300) 내의 BRAM(3050)에 전송하게 한다(도 13a 참조). 상기 제어기(300)는 위에서 설명된 바와 같이 ECC 정정을 수행할 수 있다. 선택적으로, 상기 데이터는 또한 상기 제1 인터페이스(325)를 통해 호스트(320)로 전송될 수 있다.
판독이 완료된 후에, 상기 호스트(320)는 상기 목적지 주소가 뒤따르는 카피-백 프로그램 명령어(x'35) 및 x'MM 명령어를 상기 제1 인터페이스(325)를 통해 상기 제어기(300)로 보내는데, x'MM은 임의의 사용되지 않은 명령어 코드이다. (선택적으로, 이 동작 시퀀스는 상이한 카피-백 프로그램 명령어(x'35 및 x'00 또는 상기 카피-백 프로그램 명령어 x'85 이외의 어떤 것)에 의해 발신될 수 있다.) 상ㄱ 제어기(300)는 이제 ECC 정정이 이루어졌는지에 의존해서 두 가지 행위 중 하나를 취할 수 있다. ECC 정정이 없는 경우에, 상기 제어기(300)는 상기 목적지 주소를 갖는 카피-백 기록 명령어 및 x'10 명령어를 상기 제2 인터페이스(335)를 통해 상기 플래시 메모리 디바이스(330)로 보내는데, 이에따라 상기 플래시 메모리 디바이스로 데이터를 다시 보내는 추가 전송 시간을 회피한다. 그러나, 정정가능한 ECC 오류가 존재한 경우에, 상기 제어기(300)는 상기 목적지 주소를 갖는 (정정된 데이터와 함께) 정상적인 프로그램 명령어 x'80 및 x'10 명령어를 상기 제2 인터페이스(235)를 통해 상기 플래시 메모리 디바이스(330)로 발급한다. 이 명령어들 중 임의의 것이 완전한 경우에, 상기 제어기(300)는 상기 제1 인터페이스(325)를 통해 상기 호스트(320)로 완료를 발신할 수 있다.
이러한 실시예들과 사용될 수 있는 많은 대안들이 존재한다. 예컨대, 일 대안예에서, 상기 데이터는 동일한 플래시 메모리 다이 또는 논리 유닛(LUN) 내에서 하나의 평면으로부터 또 하나의 평면으로 카피된다. 이 대안예에서, 상기 소스 및 목적지 주소들은 상이한 평면들 내에 있으며, 상기 호스트(320)는 상이한 평면(예컨대, ONFI 내의 상이한 인터리빙된 주소)을 선택한다. 상기 레지스터가 상이한 평면들 사이에서 공유되는 경우, 위에서 설명된 방법이 사용될 수 있다. 그러나, 공유 레지스터가 아닌 경우, 오류 정정 코드가 데이터 내의 오류를 나타내지 않는 경우에도 1470을 수행하는 것이 선호될 수 있다.
또 하나의 대안예에서, 상기 데이터는 하나의 다이 또는 LUN으로부터 또 하나의 다이 또는 LUN으로 카피된다. 위에서 설명된 방법이 일반적으로 여기에서 사용되나, 이 대안예에서, 상기 호스트는 판독 상태 인핸스드 명령어를 상기 LUN에 발급할 수 있는데, 이는 상기 데이터가 오는 곳을 고유하게 식별하기 위해서이다(다수의 카피-백 판독들이 상이한 소스 LUN들에 의해 병렬로 처리될 수 있는 경우에, 상기 카피-백 기록 동작을 위한 소스가 선택되어야 한다). 또한, 상기 카피-백 프로그램 명령어를 위해, 상기 호스트(320)는 목적지 다이 또는 LUN을 선택할 수 있다. 상기 이전의 카피-백 판독의 제어기-저장된 콘텐트들이 LUN 또는 다이와 연관될 수 있기 때문에, 이는 또한 상기 소스 LUN 또는 다이 및 상기 목적지 LUN 또는 다이 둘 다를 바쁘게 만드는 것을 포함할 수 있는데 그 이유는 LUN들 또는 다이들이 이 명령어 시퀀스가 완료될 때까지 다른 명령어들을 처리하지 못할 수 있기 때문이다. 또한, 위에서 언급된 대안예에서와 같이, 상기 LUN들 또는 다이들 사이에 공유 레지스터가 존재하지 않는 경우, 오류 정정 코드가 상기 데이터 내에서 오류를 나타내지 않는 경우에도 1470을 수행하는 것이 선호될 수 있다. 이 대안예들 중 임의의 것에서, 하나 이상의 새로운 그리고 고유한 명령어가 또한 이 동작들이 평면들, LUN들, 또는 다이들에 걸쳐 존재한다고 더 명시하기 위해 사용될 수 있다. 또 하나의 대안예로서, 카피-백 판독 및 기록이 ECC 정정없이 상이한 평면들 및/또는 상이한 LUN들(또는 다이들) 상에서 수행될 수 있다. 상기 제어기(300)의 사용은 이 동작을 가능하게 하는데 그 이유는 ONFI 2.0 규격에서, 페이지 레지스터가 각 평면에 전용되기 때문이다.
또 하나의 대안예에서, 상기 카피가 동일한 평면 및 동일한 다이 내에서 발생하는 상황에서, 카피-백 판독 및 카피-백 기록의 정상 사용이 여전히 데이터를 ECC 정정없이 상기 플래시 메모리 디바이스 내의 내부 레지스터에 그리고 이로부터 전송하기 위해 사용될 수 있다. 그러나, 설정 또는 획득 특색 명령어 내에 고유한(예컨대 벤더 예약된) 필드를 명시함으로써, 상기 카피-백 판독/카피-백 기록을 위한 디폴트 거동이 ECC 정정 및 위에서 설명된 다른 동작들을 수행하기 위해 상기 플래시 메모리 디바이스로부터 상기 제어기(300)이 BRAM으로 전송을 자동으로 하기 위해 설정될 수 있다. 이와 같이, 비트를 플리핑(flipping)하는 것은 상기 제어기(300)가 어떤 모드에서 선택적으로 작동하는 것을 허용한다. 예컨대, 일 실시예에서, 벤더-고유 명령어가 ONFI 또는 TM에 부가될 수 있는데, 이는 호스트(320)가예컨대 레이지 관리 또는 마모 레벨링의 일부로서 이러한 명령어를 발급하는 것을 허용한다. 다른 가능성들은 이 모드를 선택적으로 가능하게 하거나 불가능하게 할 수 있는 설정 특색 명령어를 사용해서, 상기 카피-백 기능이 항상 어떻게 작동하는지를 명시하는 파라미터 페이지 내에서 추가 비트를 부가하는 것, 및 검사 및 정정이 수행되어야 한다는 것을 나타내는 새로운 제2 명령어 바이트(예컨대, 상기 ONFI 카피-백 기능에서 x35 대신에 xNN인 제2 명령어 바이트)를 정의하는 것을 포함한다.
또 하나의 대안적인 실시예는 카피-백 데이터의 정보(예컨대, 헤더)에 대한 수정예들(예컨대, 변경들 또는 부가물들)에 대한 ECC의 사용에 대한 것이다. 몇 가지 상황에서, 데이터는 카피-백 동작 동안에 변경된다. 예컨대, ONFI 2.0 규격의 122쪽 내지 126쪽은 페이지의 일부, 이를테면 헤더 필드를 변경 판독 열 명령어를 발급함으로써 변경하기 위한 호스트의 능력을 논의한다. 그러나, 임의의 올 검사 또는 정정으로 이것을 하기 위한 방식을 제공하지 않아서, 헤더 내에서 마주치는 임의의 오류들이 무시된다. 또한, (상기 호스트(320)에 덧붙여서 또는 그 대신에) 상기 제어기(300)가 헤더 정보 또는 상기 데이터의 또 하나의 부분을 변경하기를 원할 수 있는 경우에 이전 문단들에서 논의된 상황들이 존재한다. 예컨대, 데이터가 상이한 평면들 또는 다이들에 카피되는 카피-백 동작에서 상기 제어기(300)가 사용되는 경우를 고려하자(예컨대, 블록들 및 페이지들의 소스 및 목적지가 동일한 다이 또는 평면내에 있을 가능성이 없는 가비지 집합/회수(reclaim) 기능에서임). 이러한 상황에서, 상기 제어기(300)는 카피되는 데이터의 블록 또는 페이지를 위한 헤더 정보를 생성할 수 있다. 헤더 정보의 예들은 SATA LBA 주소(즉, 논리 주소), 타입 필드(예컨대, 데이터 vs. 제어), 물리 시작 주소, 전단 주소 블록 그룹(F그룹) 내의 오프셋, (두 개의 더 작은 런들(smaller runs)로 분할되는 경우 수정될 필요가 있을 수 있는) 데이터의 런 렝쓰, 및 내구성 태그(즉, 마모 레벨링 또는 판독 스크럽에 대한 요구의 표시)를 포함하나 이들로 제한되지 않는다.
이 실시예에서, 상기 제어기(300)는 카피-백 동작에서 수정된 데이터를 커버하기 위해 ECC 비트들을 생성한다. 이 실시예는 이제 도 15 내의 흐름도(1500)를 참조해서 논의될 것이다. 첫째, 상기 제어기(300)는 소스 주소 및 카피-백 판독 명령어를 상기 호스트(320)로부터 수신해서(1510) 상기 소스 주소 및 상기 카피-백 판독 명령어를 상기 플래시 메모리 디바이스(320)로 보낸다(1520). 상기 제어기(300)는 이후 데이터를 상기 플래시 메모리 디바이스(320)로부터 수신해서(1530) 수신된 데이터를 수정한다(1540). 다음에, 상기 제어기(330)는 상기 수정된 데이터를 위한 오류 정정 코드 비트들을 생성한다(1550). 상기 제어기(330)가 상기 호스트(320)로부터 목적지 주소 및 카피-백 프로그램 명령어를 수신할 때(1560), 상기 목적지 주소, 상기 오류 정정 코드 비트들을 갖는 수정된 데이터, 및 프로그램 명령어를 상기 플래시 메모리 디바이스(330)로 보낸다(1570).
또 하나의 실시예에서, 상기 제어 모듈(340)은 상기 호스트 제어기(321)에 투명하게 수정된 데이터(상기 호스트 제어기(321)로주터 나오는 것 대신임) 중 일부를 생성할 수 있다. 상기 제어 모듈(340)은 배드 블록 관리를 한 경우 헤더 데이터 중 일부를 통상적으로 수정한다. 예컨대, 상기 헤더 필드 내에서 상기 논리 블록 주소 및 내구성(또는 사이클 카운트) 데이터를 저장할 수 있다. 상기 제어 모듈(340)이 예컨대 판독 스크러빙 핸들링 또는 기록 오류로부터의 복구로 인해 블록을 재할당할 필요가 있을 때, 상기 블록을 상이한 물리 블록에 카피할 수 있으며 상기 헤더 필드 내에서 값을 중 일부를 갱신할 필요가 있을 수 있다. 이 동작은 위에서 설명된 바와 같이 계속되는데, 상기 제어기(300)는 상기 플래시 메모리 디바이스(320)로부터 판독하고, 데이터를 수정해서, 상기 수정된 데이터를 위한 오류 정정 코드를 생성한다.
이로써, 이 실시예는 상이한 평면들, 다이들, 및 LUN들 사이에서의 복사 뿐만 아니라 ECC 오류 정정, 선택적으로는 상기 제어기(300) 또는 상기 호스트(320)에 의해 자동으로 개정된 헤더 필드들을 포함 또는 재생성하는 것을 가능하게 한다. 위와 같이, 이 실시예의 기능은 임의의 적합한 방식으로, 이를테면, 상기 카피-백 기능이 항상 작동한다고 명시하는 파라미터 페이지 내의 추가 비트를 통해, 이 모드를 선택적으로 가능 또는 불가능하게 할 수 있는 설정 특색 명령어를 통해, 또는 검사 및 정정을 나타내는 새롭게 정의된 제2 명령어 바이트(예컨대, 상기 ONFI x35 명령어 대신에 ONFI xNN 명령어의 제2 명령어 바이트)를 통해, 그러나 이들로 제한되지 않고, 트리거될 수 있다.
위에서 언급된 소스 및/또는 목적지 주소들이 물리 주소들일 수 있다는 것, 또는 이들이 상기 제어기(300)에 의해 물리 주소들에 매핑되는 논리 주소들일 수 있다는 것이 주목되어야 한다. 또한, 상기 주소는 주소 범위(예컨대, "from_sector" 및 "to_sector")일 수 있거나, 상기 명령어는 시작 주소로부터 핸들링할 데이터량(예컨대, 다수의 섹터들)을 명시할 수 있다. 대안적으로, 소정 위치로부터 핸들링될 데이터의 양이 입력될 수 있으며, 따라서 핸들링할 데이터량을 명시할 필요가 없다(예컨대, 상기 낸드 플래시 메모리 디바이스(330)가 단일 섹터 또는 단일 페이지를 기초로 해서 작동하는 경우임).
또한, 카피-백 동작 후에, 소스 주소에서의 원래 데이터가 소스 주소에 남아 있을 수 있거나 그렇지 못할 수 있다는 것이 주목되어야 한다. 즉, 이 실시예들에서, "카피"는 "카피"로 통상적으로 생각되는 것을 참조할 수 있다(예컨대, 원래 데이터가 동작 완료 후에 소스 주소 내에 남아 있는다). 그러나, "카피"는 또한 "이동"으로 통상적으로 생각되는 것을 참조할 수 있다(즉, 원래 데이터가 카피-백 동작 후에 소스 주소에 남아 있는다). 일 실시예에서, 상기 카피-백 명령어 자체는 소스 위치에서의 데이터의 배치를 명시한다. 예컨대, 상기 명령어는 소스 위치에서의 데이터의 배치를 명시하는 파라미터(예컨대, 명령어 스트링 내의 플래그)를 포함할 수 있다. 또 하나의 실시예에서, 소스 위치에서의 상기 데이터의 배치는 명령어 도면(schematic)에 나타난다. 예컨대, 데이터가 목적지 위치에 기록된 후에 데이터의 원래 섹터들이 교란되지 않은 채로 남아있다는 것을 명령어 자체의 시만텍이 나타내도록 "COPY_SECTORS" 명령어가 정의될 수 있다. 유사하게, 상기 데이터가 상기 목적지 위치에 기록된 후에 어떤 행위가 취해진다는 것(예컨대, 소스 섹터들 내에서 데이터를 논리적으로 삭제)을 상기 명령어 자체의 시만텍이 나타내도록 "MOVE_SECTORS" 명령어가 정의될 수 있다.
위에서 주목된 바와 같이, 상기 소스 위치에서의 데이터의 배치가 다양한 형태들을 취할 수 있다. 예컨대, 하나의 배치 타입은 소스 위치에서의 데이터를 그대로 두는 것이다. 이러한 배치 타입은 소스 위치에서의 데이터가 온전히 남겨지기 때문에 "카피" 동작으로 통상적으로 여겨지는 것과 일치한다. 또 하나의 배치 타입은 (예컨대, 소스 위치에서의 데이터를 0들로 덮어쓰기 함으로써) 소스 위치에서의 데이터를 (예컨대, 간단한, 원-패스 삭제 또는 멀티-패스 안전한 삭제로서) 물리적으로 삭제하는 것이다. 이러한 배치 타입은 소스 위치에서의 데이터가 제거되기 때문에, "이동" 또는 "자르기 및 붙이기" 동작으로 통상적으로 여겨지는 것과 일치한다. 이러한 배치 타입은 데이터가 "레지듀"로 남겨지는 것을 회피하는 것이 필요한 보안 환경들에서 선호될 수 있다. 또 하나의 배치 타입은 "트리밍"이라 불리는 소스 위치에서의 데이터를 논리적으로 삭제하는 것이다. 이러한 배치 타입으로, 소스 위치에서의 데이터는 물리적으로는 삭제되지 않으나, 파일을 위한 메타데이터 또는 할당 테이블 내의 테이터를 위한 엔트리가 삭제된, 무효인, 또는 기록되지 않은 것으로 표시된다. 이와 같이, 트리밍된 섹터들은 가비지 집합 사이클에서 무시될 수 있으며, 따라서 이들은 이동될 필요가 없다. 위치에서의 데이터가 물리적으로는 삭제되지 않기 때문에, 나중에 필요한 경우 회수될 수 있다. 삭제 또는 트리밍이 어떠한 타입의 메모리 디바이스들, 이를테면 솔리드 스테이트 드라이브들 또는 그밖의 타입의 플래시 메모리 디바이스들에서 사용될 수 있으나, 트리밍은 하드 디스크 드라이블과 같은 할당 테이블을 갖지 않는 메모리 디바이스들에서 이용가능한 옵션이 아닐 수 있다. 배치 타입의 또 하나의 예로서, 명령어는 소스 위치에서의 데이터를 위한 "신경쓰지 않는" 조건을 나타낼 수 있다. 이 실시예들에서 사용될 수 있는 부가적인 변형예들에 대한 추가 정보는 참고문헌으로 본 명세서에 병합되는 미국 특허 출원(제12/338,378호 및 제12/544,529호)에서 발견될 수 있다.
결론
앞의 상세한 설명은 본 발명이 취할 수 있는 선택된 형태들의 예시로서 이해되고 본 발명의 정의로서 이해되지 않는다는 것이 의도된다. 모든 등가물들을 포함하는 다음의 청구항들만이 본 발명의 범위를 정의하도록 의도된다. 또한, 다음 청구항들 중 일부가 하나의 구성요소가 어떤 기능을 수행하기 위해 작동하고 어떤 작업을 위해 구성된다는 것을 진술할 수 있다. 이들은 제한들이 아니라는 것이 주목되어야 한다. 청구항들에서 인용된 행위들은 (이들이 반드시 인용된 순서대로가 아니라) 임의의 순서로 수행될 수 있다는 것이 또한 주목되어야 한다.
본 발명은 카피-백 동작을 수행하기 위한 방법 및 제어기에 이용가능하다.
100: 제어기 120: 호스트
121: 제어기 125: 제1 인터페이스
130: 플래시 메모리 디바이스(들)
135: 제2 인터페이스(들) 140: 제어 모듈
150: 다른 기능들을 위한 모듈(들)
200: 제어기 230: 플래시 메모리 디바이스(들)
260: 제어기 패키지 270: 플래시 메모리 디바이스(들) 패키지
280: 멀티-칩 패키지 320: 호스트
321: 제어기
325: 플래시-타입 낸드 인터페이스 /호스트 측 인터페이스
330: 플래시 메모리 디바이스(들)
335: 호스트-타입 낸드 인터페이스(들) /플래시 측 인터페이스
340: 제어 모듈 350: 다른 기능들을 위한 모듈(들)
420: 호스트 421: 제어기
425: 제1 낸드 인터페이스 430: 플래시 메모리 디바이스(들)
435: 제2 낸드 인터페이스(들)
440: 제어 모듈 450: EDC 모듈
460: ECC 모듈

Claims (38)

  1. 카피-백 명령어를 수행하기 위한 방법으로서,
    호스트 및 적어도 하나의 플래시 메모리 디바이스와 통신하는 제어기에서 수행하는 단계로서:
    소스 주소 및 카피-백 판독 명령어를 상기 호스트로부터 수신하는 단계;
    상기 소스 주소 및 상기 카피-백 판독 명령어를 상기 적어도 하나의 플래시 메모리 디바이스에 보내는 단계로서, 상기 소스 주소 및 상기 카피-백 판독 명령어에 응답해서, 상기 적어도 하나의 플래시 메모리 디바이스가 데이터를 상기 소스 주소로부터 판독해서 상기 데이터를 상기 적어도 하나의 플래시 메모리 디바이스 내의 레지스터에 기록하는, 소스 주소 및 카피-백 판독 명령어를보내는 단계;
    상기 데이터 및 상기 데이터와 연관된 오류 정정 코드를 상기 적어도 하나의 플래시 메모리 디바이스로부터 수신하는 단계;
    목적지 주소 및 카피-백 프로그램 명령어를 상기 호스트로부터 수신하는 단계;
    상기 오류 정정 코드가 상기 데이터 내에 오류가 존재한다고 나타내는지를 결정하는 단계;
    상기 오류 정정 코드가 상기 데이터 내에 오류가 존재한다고 나타내지 않는 경우, 상기 목적지 주소 및 상기 카피-백 프로그램 명령어를 상기 적어도 하나의 플래시 메모리 디바이스에 보내는 단계로서, 상기 목적지 주소 및 상기 카피-백 프로그램 명령어를 수신하는 것에 응답해서, 상기 적어도 하나의 플래시 메모리 디바이스가 상기 레지스터로부터 데이터를 판독해서 상기 데이터를 상기 적어도 하나의 플래시 메모리 디바이스 내의 목적지 주소에 기록하는, 목적지 주소 및 카피-백 프로그램 명령어를 적어도 하나의 플래시 메모리 디바이스에 보내는 단계; 및
    상기 오류 정정 코드가 상기 데이터 내에 오류가 존재한다고 나타내는 경우:
    상기 데이터를 정정하는 단계; 및
    상기 목적지 주소, 상기 정정된 데이터, 및 프로그램 명령어를 상기 적어도 하나의 플래시 메모리 디바이스에 보내는 단계를 포함하는, 카피-백 명령어 수행 방법.
  2. 제1항에 있어서,
    상기 소스 주소 및 목적지 주소는 상기 적어도 하나의 플래시 메모리 디바이스 중 하나 내의 메모리의 상이한 평면들을 위해 있는, 카피-백 명령어 수행 방법.
  3. 제2항에 있어서,
    상기 적어도 하나의 플래시 메모리 디바이스 내의 레지스터는 상기 상이한 평면들 사이에서 공유되는, 카피-백 명령어 수행 방법.
  4. 제2항에 있어서,
    상기 적어도 하나의 플래시 메모리 디바이스 내의 레지스터는 상이한 평면들 사이에서 공유되지 않으며, 상기 방법은 상기 오류 정정 코드가 상기 데이터 내에 오류가 존재한다고 나타내지 않는 경우, 상기 카피-백 프로그램 명령어 대신에 하나의 프로그램 명령어를 상기 적어도 하나의 플래시 메모리 디바이스에 보내는 단계를 더 포함하는, 카피-백 명령어 수행 방법.
  5. 제1항에 있어서,
    상기 소스 주소 및 목적지 주소는 상이한 플래시 메모리 디바이스들을 위해 있는, 카피-백 명령어 수행 방법.
  6. 제1항에 있어서,
    상기 소스 및 목적지 주소들은 물리 주소들인, 카피-백 명령어 수행 방법.
  7. 제1항에 있어서,
    상기 소스 및 목적지 주소들은 논리 주소들이며, 상기 방법은 상기 논리 주소들을 물리 주소들로 변환하기 위해 상기 제어기를 이용하는 단계를 더 포함하는, 카피-백 명령어 수행 방법.
  8. 제1항에 있어서,
    상기 제어기는 제1 인터페이스를 통해 상기 호스트와 통신하고 제2 인터페이스를 통해 상기 적어도 하나의 플래시 메모리 디바이스와 통신하는, 카피-백 명령어 수행 방법.
  9. 제8항에 있어서,
    상기 제1 및 제2 인터페이스들 중 적어도 하나는 낸드 인터페이스 프로토콜을 사용해서 데이터를 전송하도록 구성된 낸드 인터페이스를 포함하는, 카피-백 명령어 수행 방법.
  10. 제어기로서,
    호스트와 상기 제어기 사이에서 데이터를 전송하도록 구성된 제1 인터페이스;
    상기 제어기와 적어도 하나의 플래시 메모리 디바이스 사이에서 데이터를 전송하도록 구성된 제2 인터페이스; 및
    회로로서:
    소스 주소 및 카피-백 판독 명령어를 상기 호스트로부터 수신하도록;
    상기 소스 주소 및 상기 카피-백 판독 명령어를 상기 적어도 하나의 플래시 메모리 디바이스에 보내도록 하되, 상기 소스 주소 및 상기 카피-백 판독 명령어에 응답해서, 상기 적어도 하나의 플래시 메모리 디바이스가 데이터를 상기 소스 주소로부터 판독해서 상기 데이터를 상기 적어도 하나의 플래시 메모리 디바이스 내의 레지스터에 기록하며;
    상기 데이터 및 상기 데이터와 연관된 오류 정정 코드를 상기 적어도 하나의 플래시 메모리 디바이스로부터 수신하도록;
    목적지 주소 및 카피-백 프로그램 명령어를 상기 호스트로부터 수신하도록;
    상기 오류 정정 코드가 상기 데이터 내에 오류가 존재한다고 나타내는지를 결정하도록;
    상기 오류 정정 코드가 상기 데이터 내에 오류가 존재한다고 나타내지 않는 경우, 상기 목적지 주소 및 상기 카피-백 프로그램 명령어를 상기 적어도 하나의 플래시 메모리 디바이스에 보내도록 하되, 상기 목적지 주소 및 상기 카피-백 프로그램 명령어를 수신하는 것에 응답해서, 상기 적어도 하나의 플래시 메모리 디바이스가 상기 레지스터로부터 데이터를 판독해서 상기 데이터를 상기 적어도 하나의 플래시 메모리 디바이스 내의 목적지 주소에 기록하며;
    상기 오류 정정 코드가 상기 데이터 내에 오류가 존재한다고 나타내는 경우:
    상기 데이터를 정정하도록; 및
    상기 목적지 주소, 상기 정정된 데이터, 및 프로그램 명령어를 상기 적어도 하나의 플래시 메모리 디바이스에 보내도록 작동하는, 회로
    를 포함하는, 제어기.
  11. 제10항에 있어서,
    상기 소스 주소 및 목적지 주소는 상기 적어도 하나의 플래시 메모리 디바이스 중 하나 내의 메모리의 상이한 평면들을 위해 있는, 제어기.
  12. 제11항에 있어서,
    상기 적어도 하나의 플래시 메모리 디바이스 내의 레지스터는 상기 상이한 평면들 사이에서 공유되는, 제어기.
  13. 제11항에 있어서,
    상기 적어도 하나의 플래시 메모리 디바이스 내의 레지스터는 상기 상이한 평면들 사이에서 공유되지 않으며, 상기 회로는 상기 오류 정정 코드가 상기 데이터 내에 오류가 존재한다고 나타내지 않는 경우, 상기 카피-백 프로그램 명령어 대신에 하나의 프로그램 명령어를 상기 적어도 하나의 플래시 메모리 디바이스에 보내도록 더 작동하는, 제어기.
  14. 제10항에 있어서,
    상기 소스 주소 및 목적지 주소는 상이한 플래시 메모리 디바이스들을 위해 있는, 제어기.
  15. 제10항에 있어서,
    상기 소스 및 목적지 주소들은 물리 주소들인, 제어기.
  16. 제10항에 있어서,
    상기 소스 및 목적지 주소들은 논리 주소들이며, 상기 회로는 상기 논리 주소들을 물리 주소들로 변환하기 위해 상기 제어기를 이용하도록 더 작동하는, 제어기.
  17. 제10항에 있어서,
    상기 제1 및 제2 인터페이스들 중 적어도 하나는 낸드 인터페이스 프로토콜을 사용해서 데이터를 전송하도록 구성된 낸드 인터페이스를 포함하는, 제어기.
  18. 카피-백 명령어를 수행하기 위한 방법으로서,
    호스트 및 적어도 하나의 플래시 메모리 디바이스와 통신하는 제어기에서 수행하는 단계로서:
    소스 주소 및 카피-백 판독 명령어를 상기 호스트로부터 수신하는 단계;
    상기 소수 주소 및 상기 카피-백 판독 명령어를 상기 적어도 하나의 플래시 메모리 디바이스에 보내는 단계;
    상기 적어도 하나의 플래시 메모리 디바이스로부터 수정된 데이터를 위한 오류 정정 코드 비트들을 생성하는 단계;
    목적지 주소 및 카피-백 프로그램 명령어를 상기 호스트로부터 수신하는 단계;
    상기 목적지 주소, 상기 오류 정정 코드 비트들로 수정된 데이터, 및 프로그램 명령어를 상기 적어도 하나의 플래시 메모리 디바이스로 보내는 단계
    를 포함하는, 카피-백 명령어 수행 방법.
  19. 제18항에 있어서,
    상기 소스 주소 및 목적지 주소는 상기 적어도 하나의 플래시 메모리 디바이스 중 하나 내의 메모리의 상이한 평면들을 위해 있는, 카피-백 명령어 수행 방법.
  20. 제19항에 있어서,
    상기 적어도 하나의 플래시 메모리 디바이스 내의 레지스터는 상기 상이한 평면들 사이에서 공유되는, 카피-백 명령어 수행 방법.
  21. 제19항에 있어서,
    상기 적어도 하나의 플래시 메모리 디바이스 내의 레지스터는 상이한 평면들 사이에서 공유되지 않는, 카피-백 명령어 수행 방법.
  22. 제18항에 있어서,
    상기 소스 주소 및 목적지 주소는 상이한 플래시 메모리 디바이스들을 위해 있는, 카피-백 명령어 수행 방법.
  23. 제18항에 있어서,
    상기 소스 및 목적지 주소들은 물리 주소들인, 카피-백 명령어 수행 방법.
  24. 제18항에 있어서,
    상기 소스 및 목적지 주소들은 논리 주소들이며, 상기 방법은 상기 논리 주소들을 물리 주소들로 변환하기 위해 상기 제어기를 이용하는 단계를 더 포함하는, 카피-백 명령어 수행 방법.
  25. 제18항에 있어서,
    상기 제어기는 제1 인터페이스를 통해 상기 호스트와 통신하고 제2 인터페이스를 통해 상기 적어도 하나의 플래시 메모리 디바이스와 통신하는, 카피-백 명령어 수행 방법.
  26. 제25항에 있어서,
    상기 제1 및 제2 인터페이스들 중 적어도 하나는 낸드 인터페이스 프로토콜을 사용해서 데이터를 전송하도록 구성된 낸드 인터페이스를 포함하는, 카피-백 명령어 수행 방법.
  27. 제18항에 있어서,
    상기 데이터는 상기 제어기에 의해 수정되는, 카피-백 명령어 수행 방법.
  28. 제18항에 있어서,
    상기 데이터는 상기 호스트에 의해 수정되는, 카피-백 명령어 수행 방법.
  29. 제어기로서,
    호스트와 상기 제어기 사이에서 데이터를 전송하도록 구성된 제1 인터페이스;
    상기 제어기와 적어도 하나의 플래시 메모리 디바이스 사이에서 데이터를 전송하도록 구성된 제2 인터페이스; 및
    회로로서:
    소스 주소 및 카피-백 판독 명령어를 상기 호스트로부터 수신하도록;
    상기 소스 주소 및 상기 카피-백 판독 명령어를 상기 적어도 하나의 플래시 메모리 디바이스에 보내도록;
    상기 적어도 하나의 플래시 메모리 디바이스로부터 수정된 데이터를 위한 오류 정정 코드 비트들을 생성하도록;
    목적지 주소 및 카피-백 프로그램 명령어를 상기 호스트로부터 수신하도록;
    상기 목적지 주소, 상기 오류 정정 코드 비트들로 수정된 데이터, 및 프로그램 명령어를 상기 적어도 하나의 플래시 메모리 디바이스에 보내도록 작동하는, 회로
    를 포함하는, 제어기.
  30. 제29항에 있어서,
    상기 소스 주소 및 목적지 주소는 상기 적어도 하나의 플래시 메모리 디바이스 중 하나 내의 메모리의 상이한 평면들을 위해 있는, 제어기.
  31. 제30항에 있어서,
    상기 적어도 하나의 플래시 메모리 디바이스 내의 레지스터는 상기 상이한 평면들 사이에서 공유되는, 제어기.
  32. 제30항에 있어서,
    상기 적어도 하나의 플래시 메모리 디바이스 내의 레지스터는 상기 상이한 평면들 사이에서 공유되지 않는, 제어기.
  33. 제29항에 있어서,
    상기 소스 주소 및 목적지 주소는 상이한 플래시 메모리 디바이스들을 위해 있는, 제어기.
  34. 제29항에 있어서,
    상기 소스 및 목적지 주소들은 물리 주소들인, 제어기.
  35. 제29항에 있어서,
    상기 소스 및 목적지 주소들은 논리 주소들이며, 상기 회로는 상기 논리 주소들을 물리 주소들로 변환하기 위해 상기 제어기를 이용하도록 더 작동하는, 제어기.
  36. 제29항에 있어서,
    상기 제1 및 제2 인터페이스들 중 적어도 하나는 낸드 인터페이스 프로토콜을 사용해서 데이터를 전송하도록 구성된 낸드 인터페이스를 포함하는, 제어기.
  37. 29항에 있어서,
    상기 데이터는 상기 제어기에 의해 수정되는, 제어기.
  38. 제29항에 있어서,
    상기 데이터는 상기 호스트에 의해 수정되는, 제어기.
KR1020127019786A 2009-12-30 2010-11-19 카피-백 동작을 수행하기 위한 방법 및 제어기 KR101735866B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US12/650,263 US8443263B2 (en) 2009-12-30 2009-12-30 Method and controller for performing a copy-back operation
US12/650,263 2009-12-30
PCT/US2010/057386 WO2011090545A2 (en) 2009-12-30 2010-11-19 Method and controller for performing a copy-back operation

Publications (2)

Publication Number Publication Date
KR20120107126A true KR20120107126A (ko) 2012-09-28
KR101735866B1 KR101735866B1 (ko) 2017-05-15

Family

ID=44168955

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020127019786A KR101735866B1 (ko) 2009-12-30 2010-11-19 카피-백 동작을 수행하기 위한 방법 및 제어기

Country Status (6)

Country Link
US (2) US8443263B2 (ko)
EP (1) EP2519879B1 (ko)
KR (1) KR101735866B1 (ko)
CN (1) CN102782654B (ko)
TW (1) TWI514403B (ko)
WO (1) WO2011090545A2 (ko)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101653999B1 (ko) * 2015-04-02 2016-09-09 서울시립대학교 산학협력단 낸드 플래시 기반의 스토리지 시스템 및 데이터 보존 강화 방법
KR200490682Y1 (ko) 2018-10-25 2019-12-16 아틱스엔지니어링(주) 실차 시험용 소규모 풍동
KR20200124070A (ko) * 2019-04-23 2020-11-02 삼성전자주식회사 멀티 코어 솔리드 스테이트 드라이브의 운용 방법

Families Citing this family (268)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8307180B2 (en) 2008-02-28 2012-11-06 Nokia Corporation Extended utilization area for a memory device
US8874824B2 (en) 2009-06-04 2014-10-28 Memory Technologies, LLC Apparatus and method to share host system RAM with mass storage memory RAM
US8423866B2 (en) * 2009-10-28 2013-04-16 SanDisk Technologies, Inc. Non-volatile memory and method with post-write read and adaptive re-write to manage errors
US8634240B2 (en) * 2009-10-28 2014-01-21 SanDisk Technologies, Inc. Non-volatile memory and method with accelerated post-write read to manage errors
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
JP4746699B1 (ja) * 2010-01-29 2011-08-10 株式会社東芝 半導体記憶装置及びその制御方法
WO2011159805A2 (en) * 2010-06-15 2011-12-22 Fusion-Io, Inc. Apparatus, system, and method for providing error correction
JP4837121B1 (ja) * 2010-06-23 2011-12-14 株式会社東芝 データ記憶装置及びデータ書き込み方法
US8464135B2 (en) * 2010-07-13 2013-06-11 Sandisk Technologies Inc. Adaptive flash interface
US9069688B2 (en) 2011-04-15 2015-06-30 Sandisk Technologies Inc. Dynamic optimization of back-end memory system interface
US8819328B2 (en) 2010-12-30 2014-08-26 Sandisk Technologies Inc. Controller and method for performing background operations
US9135213B2 (en) * 2011-01-13 2015-09-15 Xilinx, Inc. Extending a processor system within an integrated circuit and offloading processes to process-specific circuits
TWI494948B (zh) * 2011-01-31 2015-08-01 Phison Electronics Corp 用於非揮發性記憶體的資料寫入方法、控制器與儲存裝置
TWI464581B (zh) * 2011-02-21 2014-12-11 Etron Technology Inc 非揮發性記憶體模組、非揮發性記憶體處理系統、與相關非揮發性記憶體管理方法
JP5259755B2 (ja) * 2011-02-25 2013-08-07 株式会社東芝 マルチチャネルを有するメモリ装置及び同装置におけるメモリアクセス方法
US9170878B2 (en) 2011-04-11 2015-10-27 Inphi Corporation Memory buffer with data scrambling and error correction
US8924630B2 (en) * 2011-06-21 2014-12-30 Taejin Info Tech Co., Ltd. Semiconductor storage device-based high-speed cache storage system
US8694719B2 (en) 2011-06-24 2014-04-08 Sandisk Technologies Inc. Controller, storage device, and method for power throttling memory operations
US9177609B2 (en) 2011-06-30 2015-11-03 Sandisk Technologies Inc. Smart bridge for memory core
US8432740B2 (en) 2011-07-21 2013-04-30 Sandisk Technologies Inc. Program algorithm with staircase waveform decomposed into multiple passes
US8750042B2 (en) 2011-07-28 2014-06-10 Sandisk Technologies Inc. Combined simultaneous sensing of multiple wordlines in a post-write read (PWR) and detection of NAND failures
US8775901B2 (en) 2011-07-28 2014-07-08 SanDisk Technologies, Inc. Data recovery for defective word lines during programming of non-volatile memory arrays
US8726104B2 (en) * 2011-07-28 2014-05-13 Sandisk Technologies Inc. Non-volatile memory and method with accelerated post-write read using combined verification of multiple pages
US9003102B2 (en) 2011-08-26 2015-04-07 Sandisk Technologies Inc. Controller with extended status register and method of use therewith
US8707104B1 (en) 2011-09-06 2014-04-22 Western Digital Technologies, Inc. Systems and methods for error injection in data storage systems
US9195530B1 (en) 2011-09-06 2015-11-24 Western Digital Technologies, Inc. Systems and methods for improved data management in data storage systems
US8713357B1 (en) 2011-09-06 2014-04-29 Western Digital Technologies, Inc. Systems and methods for detailed error reporting in data storage systems
US8700834B2 (en) * 2011-09-06 2014-04-15 Western Digital Technologies, Inc. Systems and methods for an enhanced controller architecture in data storage systems
US9053809B2 (en) * 2011-11-09 2015-06-09 Apple Inc. Data protection from write failures in nonvolatile memory
US8687421B2 (en) * 2011-11-21 2014-04-01 Sandisk Technologies Inc. Scrub techniques for use with dynamic read
JP2013114644A (ja) * 2011-12-01 2013-06-10 Fujitsu Ltd メモリモジュールおよび半導体記憶装置
JP5674630B2 (ja) * 2011-12-02 2015-02-25 株式会社東芝 暗号化演算装置を搭載する不揮発性半導体記憶装置
US8700961B2 (en) 2011-12-20 2014-04-15 Sandisk Technologies Inc. Controller and method for virtual LUN assignment for improved memory bank mapping
US9208070B2 (en) 2011-12-20 2015-12-08 Sandisk Technologies Inc. Wear leveling of multiple memory devices
KR20130076430A (ko) * 2011-12-28 2013-07-08 삼성전자주식회사 적응적 카피백 방법 및 이를 이용한 저장 장치
US9116620B2 (en) 2011-12-30 2015-08-25 Sandisk Technologies Inc. Controller and method for memory aliasing for different flash memory types
US9141308B2 (en) 2011-12-30 2015-09-22 Sandisk Technologies Inc. Controller and method for using a transaction flag for page protection
US20130205066A1 (en) * 2012-02-03 2013-08-08 Sandisk Technologies Inc. Enhanced write abort management in flash memory
US9223649B2 (en) * 2012-02-15 2015-12-29 Sandisk Technologies Inc. System and method of sending correction data to a buffer of a non-volatile memory
US8719493B2 (en) * 2012-03-21 2014-05-06 Dell Products L.P. Memory controller-independent memory sparing
US9053008B1 (en) 2012-03-26 2015-06-09 Western Digital Technologies, Inc. Systems and methods for providing inline parameter service in data storage devices
DE102012102856A1 (de) * 2012-04-02 2013-10-02 Minebea Co., Ltd. Vorrichtung und Verfahren zum Lesen und Speichern von Daten
US8811074B2 (en) * 2012-04-03 2014-08-19 Seagate Technology Llc Parametric tracking to manage read disturbed data
US8760922B2 (en) 2012-04-10 2014-06-24 Sandisk Technologies Inc. System and method for micro-tiering in non-volatile memory
US9311226B2 (en) 2012-04-20 2016-04-12 Memory Technologies Llc Managing operational state data of a memory module using host memory in association with state change
KR102072449B1 (ko) * 2012-06-01 2020-02-04 삼성전자주식회사 불휘발성 메모리 장치를 포함하는 저장 장치 및 그것의 리페어 방법
US9418700B2 (en) * 2012-06-29 2016-08-16 Intel Corporation Bad block management mechanism
US8566671B1 (en) 2012-06-29 2013-10-22 Sandisk Technologies Inc. Configurable accelerated post-write read to manage errors
TWI497515B (zh) * 2012-07-10 2015-08-21 Silicon Motion Inc 快閃記憶體控制器、快閃記憶體偵錯方法
CN103593252B (zh) * 2012-08-14 2017-06-13 旺宏电子股份有限公司 具有动态错误侦测及更正的存储器
WO2014081719A1 (en) * 2012-11-20 2014-05-30 Peddle Charles I Solid state drive architectures
US11037625B2 (en) * 2012-11-20 2021-06-15 Thstyme Bermuda Limited Solid state drive architectures
US9171620B2 (en) 2012-11-29 2015-10-27 Sandisk Technologies Inc. Weighted read scrub for nonvolatile memory
US10445229B1 (en) 2013-01-28 2019-10-15 Radian Memory Systems, Inc. Memory controller with at least one address segment defined for which data is striped across flash memory dies, with a common address offset being used to obtain physical addresses for the data in each of the dies
US10642505B1 (en) 2013-01-28 2020-05-05 Radian Memory Systems, Inc. Techniques for data migration based on per-data metrics and memory degradation
US11249652B1 (en) 2013-01-28 2022-02-15 Radian Memory Systems, Inc. Maintenance of nonvolatile memory on host selected namespaces by a common memory controller
US9652376B2 (en) 2013-01-28 2017-05-16 Radian Memory Systems, Inc. Cooperative flash memory control
KR102002901B1 (ko) * 2013-01-28 2019-07-23 삼성전자 주식회사 메모리 장치, 메모리 시스템 및 이의 제어 방법
US9098205B2 (en) 2013-01-30 2015-08-04 Sandisk Technologies Inc. Data randomization in 3-D memory
JP2014157391A (ja) * 2013-02-14 2014-08-28 Sony Corp 記憶制御装置、記憶装置、情報処理システムおよび記憶制御方法
US9478271B2 (en) * 2013-03-14 2016-10-25 Seagate Technology Llc Nonvolatile memory data recovery after power failure
US10452504B2 (en) * 2013-10-02 2019-10-22 Nxp B.V. Controller area network (CAN) device and method for emulating classic CAN error management
US20150121156A1 (en) 2013-10-28 2015-04-30 Sandisk Technologies Inc. Block Structure Profiling in Three Dimensional Memory
US9213601B2 (en) 2013-12-03 2015-12-15 Sandisk Technologies Inc. Adaptive data re-compaction after post-write read verification operations
US9454422B2 (en) 2014-01-30 2016-09-27 International Business Machines Corporation Error feedback and logging with memory on-chip error checking and correcting (ECC)
US9933980B2 (en) * 2014-02-24 2018-04-03 Toshiba Memory Corporation NAND raid controller for connection between an SSD controller and multiple non-volatile storage units
CN103927131B (zh) * 2014-03-25 2017-02-15 四川和芯微电子股份有限公司 同步闪存u盘的启动方法及其控制系统
US9483295B2 (en) * 2014-03-31 2016-11-01 International Business Machines Corporation Transparent dynamic code optimization
US9384128B2 (en) 2014-04-18 2016-07-05 SanDisk Technologies, Inc. Multi-level redundancy code for non-volatile memory controller
US8918577B1 (en) 2014-06-13 2014-12-23 Sandisk Technologies Inc. Three dimensional nonvolatile memory with variable block capacity
US9613715B2 (en) 2014-06-16 2017-04-04 Sandisk Technologies Llc Low-test memory stack for non-volatile storage
WO2016003449A1 (en) * 2014-07-01 2016-01-07 Hewlett-Packard Development Company, L.P. Memory controller
US9606882B2 (en) * 2014-07-17 2017-03-28 Sandisk Technologies Llc Methods and systems for die failure testing
US9710326B2 (en) * 2014-07-28 2017-07-18 SK Hynix Inc. Encoder by-pass with scrambler
US9495255B2 (en) * 2014-08-07 2016-11-15 Pure Storage, Inc. Error recovery in a storage cluster
US20160041762A1 (en) 2014-08-08 2016-02-11 Kabushiki Kaisha Toshiba Memory system, host device and information processing system
CN104199685A (zh) * 2014-08-13 2014-12-10 上海新储集成电路有限公司 一种i/o设备及具有该i/o设备的计算机系统
US10002044B2 (en) 2014-08-19 2018-06-19 Samsung Electronics Co., Ltd. Memory devices and modules
US10002043B2 (en) 2014-08-19 2018-06-19 Samsung Electronics Co., Ltd. Memory devices and modules
US9904626B2 (en) * 2014-08-29 2018-02-27 Samsung Electronics Co., Ltd. Semiconductor device, semiconductor system and system on chip
TWI512467B (zh) 2014-09-02 2015-12-11 Silicon Motion Inc 實體儲存對照表維護方法以及使用該方法的裝置
US9542118B1 (en) 2014-09-09 2017-01-10 Radian Memory Systems, Inc. Expositive flash memory control
US10552085B1 (en) 2014-09-09 2020-02-04 Radian Memory Systems, Inc. Techniques for directed data migration
US9836108B2 (en) * 2014-09-10 2017-12-05 Toshiba Memory Corporation Memory system and controller
US9477549B2 (en) * 2014-09-15 2016-10-25 Sandisk Technologies Llc Methods, systems, and computer readable media for address and data integrity checking in flash memory operations
US9652321B2 (en) * 2014-09-23 2017-05-16 Intel Corporation Recovery algorithm in non-volatile memory
US10008286B2 (en) 2014-11-07 2018-06-26 Elwha Llc Self-testing data storage devices and methods
TWI545433B (zh) 2015-03-04 2016-08-11 慧榮科技股份有限公司 實體儲存對照表維護方法以及使用該方法的裝置
KR102403266B1 (ko) 2015-06-22 2022-05-27 삼성전자주식회사 데이터 저장 장치와 이를 포함하는 데이터 처리 시스템
US20160378591A1 (en) * 2015-06-24 2016-12-29 Intel Corporation Adaptive error correction in memory devices
US9916091B2 (en) * 2015-07-13 2018-03-13 Samsung Electronics Co., Ltd. Memory system architecture
US10089196B2 (en) 2015-07-14 2018-10-02 Shannon Systems Ltd. Methods for reconfiguring a storage controller when control logic fails and apparatuses using the same
CN106648439B (zh) * 2015-07-14 2019-11-29 上海宝存信息科技有限公司 于控制逻辑错误时重新配置存储控制器的方法及装置
US10552058B1 (en) 2015-07-17 2020-02-04 Radian Memory Systems, Inc. Techniques for delegating data processing to a cooperative memory controller
US9577854B1 (en) 2015-08-20 2017-02-21 Micron Technology, Inc. Apparatuses and methods for asymmetric bi-directional signaling incorporating multi-level encoding
JP2017045405A (ja) * 2015-08-28 2017-03-02 株式会社東芝 メモリシステム
US10198061B2 (en) 2015-09-01 2019-02-05 Toshiba Memory Corporation Storage and storage system
KR20170050935A (ko) * 2015-11-02 2017-05-11 에스케이하이닉스 주식회사 온 칩 ecc 회로를 포함하는 메모리 장치 및 시스템
KR20170052066A (ko) * 2015-11-03 2017-05-12 에스케이하이닉스 주식회사 메모리 시스템 및 이의 동작 방법
US10210041B2 (en) * 2015-11-05 2019-02-19 SK Hynix Inc. Systems and methods for low latency copy operations in non-volatile memory
US10025664B2 (en) * 2015-12-22 2018-07-17 Western Digital Technologies, Inc. Selective buffer protection
US20170344262A1 (en) * 2016-05-25 2017-11-30 SK Hynix Inc. Data processing system and method for operating the same
US10318185B2 (en) * 2016-07-01 2019-06-11 Intel Corporation Method and apparatus to provide both storage mode and memory mode access to non-volatile memory within a solid state drive
US11449232B1 (en) * 2016-07-22 2022-09-20 Pure Storage, Inc. Optimal scheduling of flash operations
US10853233B2 (en) * 2016-10-18 2020-12-01 Toshiba Memory Corporation Reconstruction of address mapping in a host of a storage system
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
US10261876B2 (en) 2016-11-08 2019-04-16 Micron Technology, Inc. Memory management
US10430085B2 (en) 2016-11-08 2019-10-01 Micron Technology, Inc. Memory operations on data
CN108388405B (zh) 2017-02-02 2021-11-30 慧荣科技股份有限公司 数据储存装置以及其操作方法
TWI643072B (zh) * 2017-02-02 2018-12-01 慧榮科技股份有限公司 資料儲存裝置以及其操作方法
TWI663544B (zh) * 2017-03-02 2019-06-21 宏碁股份有限公司 容錯操作方法與使用此方法的電子裝置
US10592329B2 (en) 2017-03-02 2020-03-17 Acer Incorporated Method and electronic device for continuing executing procedure being aborted from physical address where error occurs
WO2018163258A1 (ja) * 2017-03-06 2018-09-13 株式会社日立製作所 フラッシュメモリモジュール、ストレージシステム、及びフラッシュメモリの制御方法
JP2018152146A (ja) 2017-03-09 2018-09-27 東芝メモリ株式会社 半導体記憶装置及びデータ読み出し方法
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
US11893265B2 (en) * 2017-05-02 2024-02-06 Google Llc Garbage collection for data storage
US10884926B2 (en) 2017-06-16 2021-01-05 Alibaba Group Holding Limited Method and system for distributed storage using client-side global persistent cache
JP6866785B2 (ja) * 2017-06-29 2021-04-28 富士通株式会社 プロセッサおよびメモリアクセス方法
US10497447B2 (en) * 2017-06-29 2019-12-03 SK Hynix Inc. Memory device capable of supporting multiple read operations
US20190035445A1 (en) * 2017-07-31 2019-01-31 CNEX Labs, Inc. a Delaware Corporation Method and Apparatus for Providing Low Latency Solid State Memory Access
US10915448B2 (en) 2017-08-22 2021-02-09 Seagate Technology Llc Storage device initiated copy back operation
US10860334B2 (en) 2017-10-25 2020-12-08 Alibaba Group Holding Limited System and method for centralized boot storage in an access switch shared by multiple servers
KR102469958B1 (ko) * 2017-10-27 2022-11-25 삼성전자주식회사 블록 주소 없이 액세스되는 불휘발성 메모리 장치 및 그 동작 방법
US10877898B2 (en) 2017-11-16 2020-12-29 Alibaba Group Holding Limited Method and system for enhancing flash translation layer mapping flexibility for performance and lifespan improvements
US10649656B2 (en) * 2017-12-28 2020-05-12 Micron Technology, Inc. Techniques to update a trim parameter in non-volatile memory
TWI658465B (zh) * 2018-02-02 2019-05-01 華邦電子股份有限公司 記憶體裝置以及其寫入/抹除方法
US10496548B2 (en) 2018-02-07 2019-12-03 Alibaba Group Holding Limited Method and system for user-space storage I/O stack with user-space flash translation layer
US10891239B2 (en) 2018-02-07 2021-01-12 Alibaba Group Holding Limited Method and system for operating NAND flash physical space to extend memory capacity
US10831404B2 (en) 2018-02-08 2020-11-10 Alibaba Group Holding Limited Method and system for facilitating high-capacity shared memory using DIMM from retired servers
US10725857B2 (en) 2018-02-27 2020-07-28 Western Digital Technologies, Inc. Data storage system for improving data throughput and decode capabilities
US11036578B2 (en) 2018-04-12 2021-06-15 Samsung Electronics Co., Ltd. Semiconductor memory devices and memory systems including the same
IT201800005506A1 (it) * 2018-05-18 2019-11-18 Sistema di elaborazione, relativo circuito integrato e procedimento
US11379155B2 (en) 2018-05-24 2022-07-05 Alibaba Group Holding Limited System and method for flash storage management using multiple open page stripes
US10921992B2 (en) 2018-06-25 2021-02-16 Alibaba Group Holding Limited Method and system for data placement in a hard disk drive based on access frequency for improved IOPS and utilization efficiency
US11816043B2 (en) 2018-06-25 2023-11-14 Alibaba Group Holding Limited System and method for managing resources of a storage device and quantifying the cost of I/O requests
US10871921B2 (en) 2018-07-30 2020-12-22 Alibaba Group Holding Limited Method and system for facilitating atomicity assurance on metadata and data bundled storage
US10996886B2 (en) 2018-08-02 2021-05-04 Alibaba Group Holding Limited Method and system for facilitating atomicity and latency assurance on variable sized I/O
US10747673B2 (en) 2018-08-02 2020-08-18 Alibaba Group Holding Limited System and method for facilitating cluster-level cache and memory space
US11120882B2 (en) 2018-08-24 2021-09-14 International Business Machines Corporation Error recovery of data in non-volatile memory during read
US11327929B2 (en) 2018-09-17 2022-05-10 Alibaba Group Holding Limited Method and system for reduced data movement compression using in-storage computing and a customized file system
US10607712B1 (en) 2018-09-28 2020-03-31 Toshiba Memory Corporation Media error reporting improvements for storage drives
US10656995B2 (en) * 2018-10-03 2020-05-19 Micron Technology, Inc. Copy-back operations in a memory device
US10852948B2 (en) 2018-10-19 2020-12-01 Alibaba Group Holding System and method for data organization in shingled magnetic recording drive
US10768837B2 (en) * 2018-10-31 2020-09-08 EMC IP Holding Company LLC Non-disruptive migration of a virtual volume in a clustered data storage system
US10795586B2 (en) 2018-11-19 2020-10-06 Alibaba Group Holding Limited System and method for optimization of global data placement to mitigate wear-out of write cache and NAND flash
EP3866016A4 (en) * 2018-11-20 2021-11-10 Huawei Technologies Co., Ltd. METHOD AND APPARATUS FOR DELETING INDEX ENTRY IN MEMORY
US10769018B2 (en) 2018-12-04 2020-09-08 Alibaba Group Holding Limited System and method for handling uncorrectable data errors in high-capacity storage
US11010067B2 (en) * 2018-12-28 2021-05-18 Intel Corporation Defense against speculative side-channel analysis of a computer system
US10977122B2 (en) 2018-12-31 2021-04-13 Alibaba Group Holding Limited System and method for facilitating differentiated error correction in high-density flash devices
US11061735B2 (en) 2019-01-02 2021-07-13 Alibaba Group Holding Limited System and method for offloading computation to storage nodes in distributed system
US11132291B2 (en) 2019-01-04 2021-09-28 Alibaba Group Holding Limited System and method of FPGA-executed flash translation layer in multiple solid state drives
US10976950B1 (en) * 2019-01-15 2021-04-13 Twitter, Inc. Distributed dataset modification, retention, and replication
US11113270B2 (en) 2019-01-24 2021-09-07 EMC IP Holding Company LLC Storing a non-ordered associative array of pairs using an append-only storage medium
KR102125350B1 (ko) * 2019-01-30 2020-06-22 연세대학교 산학협력단 오류 정정 코드를 이용한 적층형 메모리 장치 및 그 수리 방법
US10860420B2 (en) 2019-02-05 2020-12-08 Alibaba Group Holding Limited Method and system for mitigating read disturb impact on persistent memory
US11200337B2 (en) 2019-02-11 2021-12-14 Alibaba Group Holding Limited System and method for user data isolation
US10970212B2 (en) 2019-02-15 2021-04-06 Alibaba Group Holding Limited Method and system for facilitating a distributed storage system with a total cost of ownership reduction for multiple available zones
US10908996B2 (en) * 2019-02-22 2021-02-02 Intel Corporation Distribution of a codeword across individual storage units to reduce the bit error rate
US11061834B2 (en) 2019-02-26 2021-07-13 Alibaba Group Holding Limited Method and system for facilitating an improved storage system by decoupling the controller from the storage medium
US10783035B1 (en) 2019-02-28 2020-09-22 Alibaba Group Holding Limited Method and system for improving throughput and reliability of storage media with high raw-error-rate
US10891065B2 (en) 2019-04-01 2021-01-12 Alibaba Group Holding Limited Method and system for online conversion of bad blocks for improvement of performance and longevity in a solid state drive
US10922234B2 (en) 2019-04-11 2021-02-16 Alibaba Group Holding Limited Method and system for online recovery of logical-to-physical mapping table affected by noise sources in a solid state drive
US11079958B2 (en) 2019-04-12 2021-08-03 Intel Corporation Apparatus, system and method for offloading data transfer operations between source and destination storage devices to a hardware accelerator
US10908960B2 (en) 2019-04-16 2021-02-02 Alibaba Group Holding Limited Resource allocation based on comprehensive I/O monitoring in a distributed storage system
US11169873B2 (en) * 2019-05-21 2021-11-09 Alibaba Group Holding Limited Method and system for extending lifespan and enhancing throughput in a high-density solid state drive
US11243699B2 (en) 2019-05-22 2022-02-08 Micron Technology, Inc. System using a restricted operation mode memory indicator
US11169730B2 (en) 2019-06-06 2021-11-09 Micron Technology, Inc. Scrub rate control for a memory device
CN112099985B (zh) 2019-06-17 2023-09-12 慧荣科技股份有限公司 数据储存装置以及非挥发式存储器控制方法
TWI766194B (zh) * 2019-06-17 2022-06-01 慧榮科技股份有限公司 資料儲存裝置以及非揮發式記憶體控制方法
CN112100087B (zh) 2019-06-17 2024-04-02 慧荣科技股份有限公司 数据储存装置以及非挥发式存储器控制方法
FR3097987A1 (fr) * 2019-06-26 2021-01-01 STMicroelectronics (Alps) SAS Procede d’adressage d’un circuit integre sur un bus et dispositif correspondant
US10860223B1 (en) * 2019-07-18 2020-12-08 Alibaba Group Holding Limited Method and system for enhancing a distributed storage system by decoupling computation and network tasks
EP3993273A4 (en) * 2019-07-22 2022-07-27 Huawei Technologies Co., Ltd. METHOD AND DEVICE FOR DATA COMPRESSION IN A STORAGE SYSTEM, DEVICE AND READABLE STORAGE MEDIUM
US11074124B2 (en) 2019-07-23 2021-07-27 Alibaba Group Holding Limited Method and system for enhancing throughput of big data analysis in a NAND-based read source storage
KR20210020694A (ko) * 2019-08-16 2021-02-24 에스케이하이닉스 주식회사 스토리지 장치, 스토리지 장치의 동작 방법, 스토리지 장치 및 스토리지 장치를 제어하는 호스트 장치를 포함하는 컴퓨팅 장치 및 그것의 동작 방법
CN110531937B (zh) * 2019-08-30 2023-01-06 四川效率源信息安全技术股份有限公司 一种针对主控芯片的数据重组方法
US11126561B2 (en) 2019-10-01 2021-09-21 Alibaba Group Holding Limited Method and system for organizing NAND blocks and placing data to facilitate high-throughput for random writes in a solid state drive
US11617282B2 (en) 2019-10-01 2023-03-28 Alibaba Group Holding Limited System and method for reshaping power budget of cabinet to facilitate improved deployment density of servers
US11210167B2 (en) 2019-10-28 2021-12-28 Intel Corporation Memory wordline isolation for improvement in reliability, availability, and scalability (RAS)
US10997019B1 (en) 2019-10-31 2021-05-04 Alibaba Group Holding Limited System and method for facilitating high-capacity system memory adaptive to high-error-rate and low-endurance media
US11200159B2 (en) 2019-11-11 2021-12-14 Alibaba Group Holding Limited System and method for facilitating efficient utilization of NAND flash memory
US11119847B2 (en) 2019-11-13 2021-09-14 Alibaba Group Holding Limited System and method for improving efficiency and reducing system resource consumption in a data integrity check
KR102157571B1 (ko) * 2019-11-21 2020-09-18 주식회사 파두 메모리 시스템
US11175984B1 (en) 2019-12-09 2021-11-16 Radian Memory Systems, Inc. Erasure coding techniques for flash memory
JP2021099642A (ja) * 2019-12-20 2021-07-01 キヤノン株式会社 情報処理装置および情報処理装置の制御方法
US11615029B2 (en) 2019-12-30 2023-03-28 Micron Technology, Inc. Full multi-plane operation enablement
US11449455B2 (en) 2020-01-15 2022-09-20 Alibaba Group Holding Limited Method and system for facilitating a high-capacity object storage system with configuration agility and mixed deployment flexibility
US10872622B1 (en) 2020-02-19 2020-12-22 Alibaba Group Holding Limited Method and system for deploying mixed storage products on a uniform storage infrastructure
US10923156B1 (en) 2020-02-19 2021-02-16 Alibaba Group Holding Limited Method and system for facilitating low-cost high-throughput storage for accessing large-size I/O blocks in a hard disk drive
US11150986B2 (en) 2020-02-26 2021-10-19 Alibaba Group Holding Limited Efficient compaction on log-structured distributed file system using erasure coding for resource consumption reduction
US11144250B2 (en) 2020-03-13 2021-10-12 Alibaba Group Holding Limited Method and system for facilitating a persistent memory-centric system
US11200114B2 (en) 2020-03-17 2021-12-14 Alibaba Group Holding Limited System and method for facilitating elastic error correction code in memory
US11256617B2 (en) * 2020-04-01 2022-02-22 Micron Technology, Inc. Metadata aware copyback for memory devices
US11327884B2 (en) 2020-04-01 2022-05-10 Micron Technology, Inc. Self-seeded randomizer for data randomization in flash memory
US11385833B2 (en) 2020-04-20 2022-07-12 Alibaba Group Holding Limited Method and system for facilitating a light-weight garbage collection with a reduced utilization of resources
US11599546B2 (en) 2020-05-01 2023-03-07 EMC IP Holding Company LLC Stream browser for data streams
US11604759B2 (en) 2020-05-01 2023-03-14 EMC IP Holding Company LLC Retention management for data streams
US11262938B2 (en) 2020-05-05 2022-03-01 Silicon Motion, Inc. Method and apparatus for performing access management of a memory device with aid of dedicated bit information
US11281575B2 (en) 2020-05-11 2022-03-22 Alibaba Group Holding Limited Method and system for facilitating data placement and control of physical addresses with multi-queue I/O blocks
US11526279B2 (en) * 2020-05-12 2022-12-13 Intel Corporation Technologies for performing column architecture-aware scrambling
US11461262B2 (en) 2020-05-13 2022-10-04 Alibaba Group Holding Limited Method and system for facilitating a converged computation and storage node in a distributed storage system
US11494115B2 (en) 2020-05-13 2022-11-08 Alibaba Group Holding Limited System method for facilitating memory media as file storage device based on real-time hashing by performing integrity check with a cyclical redundancy check (CRC)
US11218165B2 (en) 2020-05-15 2022-01-04 Alibaba Group Holding Limited Memory-mapped two-dimensional error correction code for multi-bit error tolerance in DRAM
US11556277B2 (en) 2020-05-19 2023-01-17 Alibaba Group Holding Limited System and method for facilitating improved performance in ordering key-value storage with input/output stack simplification
US11507499B2 (en) 2020-05-19 2022-11-22 Alibaba Group Holding Limited System and method for facilitating mitigation of read/write amplification in data compression
US11263132B2 (en) 2020-06-11 2022-03-01 Alibaba Group Holding Limited Method and system for facilitating log-structure data organization
US11354200B2 (en) 2020-06-17 2022-06-07 Alibaba Group Holding Limited Method and system for facilitating data recovery and version rollback in a storage device
US11422931B2 (en) 2020-06-17 2022-08-23 Alibaba Group Holding Limited Method and system for facilitating a physically isolated storage unit for multi-tenancy virtualization
US11354233B2 (en) 2020-07-27 2022-06-07 Alibaba Group Holding Limited Method and system for facilitating fast crash recovery in a storage device
US11599420B2 (en) 2020-07-30 2023-03-07 EMC IP Holding Company LLC Ordered event stream event retention
US11372774B2 (en) 2020-08-24 2022-06-28 Alibaba Group Holding Limited Method and system for a solid state drive with on-chip memory integration
US11309052B2 (en) * 2020-08-25 2022-04-19 Micron Technology, Inc. Read voltage calibration for copyback operation
US11567665B2 (en) * 2020-08-31 2023-01-31 Micron Technology, Inc. Data dispersion-based memory management
US11556267B2 (en) * 2020-08-31 2023-01-17 Micron Technology, Inc. Data management during a copyback operation
US11513871B2 (en) 2020-09-30 2022-11-29 EMC IP Holding Company LLC Employing triggered retention in an ordered event stream storage system
US11755555B2 (en) 2020-10-06 2023-09-12 EMC IP Holding Company LLC Storing an ordered associative array of pairs using an append-only storage medium
US11599293B2 (en) 2020-10-14 2023-03-07 EMC IP Holding Company LLC Consistent data stream replication and reconstruction in a streaming data storage platform
KR20220060385A (ko) * 2020-11-04 2022-05-11 에스케이하이닉스 주식회사 저장 장치 및 그 동작 방법
US11487465B2 (en) 2020-12-11 2022-11-01 Alibaba Group Holding Limited Method and system for a local storage engine collaborating with a solid state drive controller
US11494111B2 (en) * 2020-12-17 2022-11-08 Micron Technology, Inc. Data operation based on valid memory unit count
US11734115B2 (en) 2020-12-28 2023-08-22 Alibaba Group Holding Limited Method and system for facilitating write latency reduction in a queue depth of one scenario
US11416365B2 (en) 2020-12-30 2022-08-16 Alibaba Group Holding Limited Method and system for open NAND block detection and correction in an open-channel SSD
US11556270B2 (en) * 2021-01-07 2023-01-17 EMC IP Holding Company LLC Leveraging garbage collection for raid transformation
US11816065B2 (en) 2021-01-11 2023-11-14 EMC IP Holding Company LLC Event level retention management for data streams
US20220222008A1 (en) * 2021-01-14 2022-07-14 Silicon Motion, Inc. Method for managing flash memory module and associated flash memory controller and memory device
CN114780014A (zh) * 2021-01-22 2022-07-22 伊姆西Ip控股有限责任公司 管理元数据存储单元的方法、电子设备和计算机程序产品
US11573854B2 (en) * 2021-02-02 2023-02-07 Nvidia Corporation Techniques for data scrambling on a memory interface
DE102021102777A1 (de) * 2021-02-05 2022-08-11 Infineon Technologies Ag Verarbeitung von in einem speicher gespeicherter daten
TWI766582B (zh) * 2021-02-17 2022-06-01 群聯電子股份有限公司 有效資料合併方法、記憶體儲存裝置及記憶體控制電路單元
US20220291858A1 (en) * 2021-03-15 2022-09-15 Pure Storage, Inc. Utilizing programming page size granularity to optimize data segment storage in a storage system
US11775197B2 (en) * 2021-03-25 2023-10-03 Kyocera Document Solutions Inc. Single command for reading then clearing dynamic random access memory
US11726699B2 (en) 2021-03-30 2023-08-15 Alibaba Singapore Holding Private Limited Method and system for facilitating multi-stream sequential read performance improvement with reduced read amplification
US11740828B2 (en) * 2021-04-06 2023-08-29 EMC IP Holding Company LLC Data expiration for stream storages
US12001881B2 (en) 2021-04-12 2024-06-04 EMC IP Holding Company LLC Event prioritization for an ordered event stream
US11740821B2 (en) * 2021-04-12 2023-08-29 EMC IP Holding Company LLC Cost-aware garbage collection for cloud storage
US11461173B1 (en) 2021-04-21 2022-10-04 Alibaba Singapore Holding Private Limited Method and system for facilitating efficient data compression based on error correction code and reorganization of data placement
US11954537B2 (en) 2021-04-22 2024-04-09 EMC IP Holding Company LLC Information-unit based scaling of an ordered event stream
US11476874B1 (en) 2021-05-14 2022-10-18 Alibaba Singapore Holding Private Limited Method and system for facilitating a storage server with hybrid memory for journaling and data storage
US11640253B2 (en) 2021-06-01 2023-05-02 Western Digital Technologies, Inc. Method to use flat relink table in HMB
US11681460B2 (en) 2021-06-03 2023-06-20 EMC IP Holding Company LLC Scaling of an ordered event stream based on a writer group characteristic
US11513720B1 (en) * 2021-06-11 2022-11-29 Western Digital Technologies, Inc. Data storage device having predictive analytics
US11543993B1 (en) * 2021-06-17 2023-01-03 Western Digital Technologies, Inc. Fast garbage collection in zoned namespaces SSDs
US11520510B1 (en) * 2021-07-21 2022-12-06 International Business Machines Corporation Extending the lifespan of a flash-based storage device
US11735282B2 (en) 2021-07-22 2023-08-22 EMC IP Holding Company LLC Test data verification for an ordered event stream storage system
US11733893B2 (en) 2021-07-28 2023-08-22 International Business Machines Corporation Management of flash storage media
US11902171B2 (en) * 2021-07-30 2024-02-13 Global Unichip Corporation Communication system between dies and operation method thereof
US11907564B2 (en) * 2021-08-03 2024-02-20 Yadro International Ltd. Method of and system for initiating garbage collection requests
US11922047B2 (en) * 2021-09-16 2024-03-05 EMC IP Holding Company LLC Using RPO as an optimization target for DataDomain garbage collection
JP2023044330A (ja) * 2021-09-17 2023-03-30 キオクシア株式会社 メモリシステムおよび制御方法
US11847334B2 (en) * 2021-09-23 2023-12-19 EMC IP Holding Company LLC Method or apparatus to integrate physical file verification and garbage collection (GC) by tracking special segments
US11971850B2 (en) 2021-10-15 2024-04-30 EMC IP Holding Company LLC Demoted data retention via a tiered ordered event stream data storage system
CN113986128B (zh) * 2021-10-26 2024-05-28 杭州宏杉科技股份有限公司 Lun数据复制方法及装置
US20230136274A1 (en) * 2021-11-04 2023-05-04 Softiron Limited Ceph Media Failure and Remediation
US11841766B2 (en) * 2021-12-10 2023-12-12 Micron Technology, Inc. Memory array error correction
US20230195351A1 (en) * 2021-12-17 2023-06-22 Samsung Electronics Co., Ltd. Automatic deletion in a persistent storage device
US12001706B2 (en) * 2022-01-21 2024-06-04 Micron Technology, Inc. Predictive sanitization of an array of memory with capacitive cells and/or ferroelectric cells
US12019899B2 (en) * 2022-03-03 2024-06-25 Western Digital Technologies, Inc. Data relocation with protection for open relocation destination blocks
US11886735B2 (en) * 2022-03-22 2024-01-30 Micron Technology, Inc. Data movement based on address table activity
US11934656B2 (en) * 2022-04-11 2024-03-19 Netapp, Inc. Garbage collection and bin synchronization for distributed storage architecture
US11941297B2 (en) 2022-04-11 2024-03-26 Netapp, Inc. Garbage collection and bin synchronization for distributed storage architecture
KR20230152501A (ko) * 2022-04-27 2023-11-03 한국과학기술원 플래시 기반 저장 장치 및 그 카피백 동작 방법
US11977779B2 (en) * 2022-05-11 2024-05-07 Bank Of America Corporation Smart queue for distributing user requests to automated response generating systems
US11947452B2 (en) * 2022-06-01 2024-04-02 Micron Technology, Inc. Controlling variation of valid data counts in garbage collection source blocks
US20240012579A1 (en) * 2022-07-06 2024-01-11 Samsung Electronics Co., Ltd. Systems, methods, and apparatus for data placement in a storage device
US20240103745A1 (en) * 2022-09-28 2024-03-28 Advanced Micro Devices, Inc. Scheduling Processing-in-Memory Requests and Memory Requests
US20240143512A1 (en) * 2022-11-01 2024-05-02 Western Digital Technologies, Inc. Write buffer linking for easy cache reads

Family Cites Families (135)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5268870A (en) 1988-06-08 1993-12-07 Eliyahou Harari Flash EEPROM system and intelligent programming and erasing methods therefor
US5430859A (en) 1991-07-26 1995-07-04 Sundisk Corporation Solid state memory system including plural memory chips and a serialized bus
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
US5404485A (en) 1993-03-08 1995-04-04 M-Systems Flash Disk Pioneers Ltd. Flash file system
US5799168A (en) 1996-01-05 1998-08-25 M-Systems Flash Disk Pioneers Ltd. Standardized flash controller
US5818757A (en) 1996-07-22 1998-10-06 Invox Technology Analog and multi-level memory with reduced program disturb
JP3565687B2 (ja) 1997-08-06 2004-09-15 沖電気工業株式会社 半導体記憶装置およびその制御方法
US5937425A (en) 1997-10-16 1999-08-10 M-Systems Flash Disk Pioneers Ltd. Flash file system optimized for page-mode flash technologies
US5943283A (en) 1997-12-05 1999-08-24 Invox Technology Address scrambling in a semiconductor memory
US6081851A (en) 1997-12-15 2000-06-27 Intel Corporation Method and apparatus for programming a remote DMA engine residing on a first bus from a destination residing on a second bus
US6034882A (en) 1998-11-16 2000-03-07 Matrix Semiconductor, Inc. Vertically stacked field programmable nonvolatile memory and method of fabrication
US6498851B1 (en) 1998-11-25 2002-12-24 Sandisk Corporation Data encryption and signal scrambling using programmable data conversion arrays
US6181599B1 (en) 1999-04-13 2001-01-30 Sandisk Corporation Method for applying variable row BIAS to reduce program disturb in a flash memory storage array
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
US6857061B1 (en) * 2000-04-07 2005-02-15 Nintendo Co., Ltd. Method and apparatus for obtaining a scalar value directly from a vector register
JP2001297038A (ja) 2000-04-11 2001-10-26 Toshiba Corp データ記憶装置および記録媒体並びに記録媒体制御方法
DE60037877T2 (de) 2000-04-13 2009-01-29 A-DATA TECHNOLOGY Co., Ltd., Chung Ho City Multi-Schnittstellenspeicherkarte und Anpassungsmodul dafür
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
US6266273B1 (en) 2000-08-21 2001-07-24 Sandisk Corporation Method and structure for reliable data copy operation for non-volatile memories
US20030120858A1 (en) 2000-09-15 2003-06-26 Matrix Semiconductor, Inc. Memory devices and methods for use therewith
US7020739B2 (en) 2000-12-06 2006-03-28 Tdk Corporation Memory controller, flash memory system having memory controller and method for controlling flash memory device
US6591330B2 (en) 2001-06-18 2003-07-08 M-Systems Flash Disk Pioneers Ltd. System and method for flexible flash file
JP4059473B2 (ja) 2001-08-09 2008-03-12 株式会社ルネサステクノロジ メモリカード及びメモリコントローラ
US6760805B2 (en) 2001-09-05 2004-07-06 M-Systems Flash Disk Pioneers Ltd. Flash management system for large page size
TW516118B (en) 2001-09-11 2003-01-01 Leadtek Research Inc Decoding conversion device and method capable of supporting multiple memory chips and their application system
GB0123412D0 (en) 2001-09-28 2001-11-21 Memquest Ltd Memory system sectors
US6859856B2 (en) 2001-10-23 2005-02-22 Flex P Industries Sdn. Bhd Method and system for a compact flash memory controller
US6704852B2 (en) 2001-11-16 2004-03-09 Key Technology Corporation Control device applicable to flash memory card and method for building partial lookup table
US6977847B2 (en) 2001-11-23 2005-12-20 M-Systems Flash Disk Pioneers Ltd. Detecting partially erased units in flash devices
TWI240861B (en) 2002-01-11 2005-10-01 Integrated Circuit Solution In Data access method and architecture of flash memory
US6683817B2 (en) 2002-02-21 2004-01-27 Qualcomm, Incorporated Direct memory swapping between NAND flash and SRAM with error correction coding
US20030206442A1 (en) 2002-05-02 2003-11-06 Jerry Tang Flash memory bridiging device, method and application system
US6721820B2 (en) 2002-05-15 2004-04-13 M-Systems Flash Disk Pioneers Ltd. Method for improving performance of a flash-based storage system using specialized flash controllers
JP4100968B2 (ja) 2002-06-06 2008-06-11 株式会社日立製作所 データマッピング管理装置
US7081377B2 (en) 2002-06-27 2006-07-25 Sandisk 3D Llc Three-dimensional memory
KR100448905B1 (ko) 2002-07-29 2004-09-16 삼성전자주식회사 낸드플래쉬메모리를 시스템구동 및 저장용으로 사용하는장치
US7171536B2 (en) 2002-10-28 2007-01-30 Sandisk Corporation Unusable block management within a non-volatile memory system
JP4518951B2 (ja) 2002-10-28 2010-08-04 サンディスク コーポレイション 不揮発性記憶システムにおける自動損耗均等化
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
US7069370B2 (en) 2003-01-31 2006-06-27 Toshiba Corporation USB memory storage apparatus with integrated circuit in a connector
EP1443519B1 (en) 2003-01-31 2007-11-14 STMicroelectronics S.r.l. Embeddable flash memory system for non-volatile storage of code, data and bit-streams for embedded FPGA configurations
JP4550439B2 (ja) * 2003-02-28 2010-09-22 東芝メモリシステムズ株式会社 Ecc制御装置
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
KR100560767B1 (ko) 2003-09-02 2006-03-13 삼성전자주식회사 탈착 가능한 저장 장치를 포함하는 시스템 및 그것의 제어방법
US7012835B2 (en) 2003-10-03 2006-03-14 Sandisk Corporation Flash memory data correction and scrub techniques
TWI226643B (en) 2003-10-31 2005-01-11 C One Technology Corp Simulated SmartMedia/xD-Picture memory card using any nonvolatile memory
US7594135B2 (en) 2003-12-31 2009-09-22 Sandisk Corporation Flash memory system startup operation
US7350044B2 (en) 2004-01-30 2008-03-25 Micron Technology, Inc. Data move method and apparatus
JP3892851B2 (ja) 2004-02-04 2007-03-14 株式会社東芝 メモリカード及び半導体装置
US7136973B2 (en) 2004-02-04 2006-11-14 Sandisk Corporation Dual media storage device
US8019928B2 (en) 2004-02-15 2011-09-13 Sandisk Il Ltd. Method of managing a multi-bit-cell flash memory
JP4398750B2 (ja) 2004-02-17 2010-01-13 株式会社東芝 Nand型フラッシュメモリ
US7818492B2 (en) 2004-02-26 2010-10-19 Supertalent Electronics, Inc. Source and shadow wear-leveling method and apparatus
KR100648243B1 (ko) 2004-03-19 2006-11-24 삼성전자주식회사 낸드 플래시 메모리를 사용하는 메모리 카드
US7177977B2 (en) 2004-03-19 2007-02-13 Sandisk Corporation Operating non-volatile memory without read disturb limitations
JP4357331B2 (ja) 2004-03-24 2009-11-04 東芝メモリシステムズ株式会社 マイクロプロセッサブートアップ制御装置、及び情報処理システム
US7406572B1 (en) 2004-03-26 2008-07-29 Cypress Semiconductor Corp. Universal memory circuit architecture supporting multiple memory interface options
US7057939B2 (en) 2004-04-23 2006-06-06 Sandisk Corporation Non-volatile memory and control with improved partial page program capability
KR100678047B1 (ko) * 2004-05-06 2007-02-02 삼성전자주식회사 낸드 플래시 메모리를 구비한 이동 통신 단말기 및 그의부팅 방법
US7159069B2 (en) * 2004-06-23 2007-01-02 Atmel Corporation Simultaneous external read operation during internal programming in a flash memory device
US7139199B2 (en) 2004-06-28 2006-11-21 Intel Corporation Flash memory file system with transacted operations
WO2006026645A2 (en) 2004-08-30 2006-03-09 Silicon Storage Technology, Inc. Systems and methods for providing nonvolatile memory management in wireless phones
JP4406339B2 (ja) 2004-09-21 2010-01-27 株式会社東芝 コントローラ、メモリカード及びその制御方法
US7149119B2 (en) 2004-09-30 2006-12-12 Matrix Semiconductor, Inc. System and method of controlling a three-dimensional memory
JP4828816B2 (ja) 2004-10-25 2011-11-30 株式会社東芝 メモリカード、半導体装置、及びメモリカードの制御方法
US20060239450A1 (en) 2004-12-21 2006-10-26 Michael Holtzman In stream data encryption / decryption and error correction method
US6980471B1 (en) 2004-12-23 2005-12-27 Sandisk Corporation Substrate electron injection techniques for programming non-volatile charge storage memory cells
US7177191B2 (en) 2004-12-30 2007-02-13 Sandisk 3D Llc Integrated circuit including memory array incorporating multiple types of NAND string structures
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
JP4896011B2 (ja) * 2005-03-31 2012-03-14 スパンション エルエルシー 半導体装置及びその制御方法
KR100673703B1 (ko) * 2005-06-14 2007-01-24 주식회사 하이닉스반도체 멀티 레벨 셀들을 포함하는 플래시 메모리 장치의 카피백동작 제어 방법
US7362604B2 (en) 2005-07-11 2008-04-22 Sandisk 3D Llc Apparatus and method for programming an array of nonvolatile memory cells including switchable resistor memory elements
US7345907B2 (en) 2005-07-11 2008-03-18 Sandisk 3D Llc Apparatus and method for reading an array of nonvolatile memory cells including switchable resistor memory elements
US7362611B2 (en) 2005-08-30 2008-04-22 Micron Technology, Inc. Non-volatile memory copy back
US7170788B1 (en) 2005-09-09 2007-01-30 Sandisk Corporation Last-first mode and apparatus for programming of non-volatile memory with reduced program disturb
US7218552B1 (en) 2005-09-09 2007-05-15 Sandisk Corporation Last-first mode and method for programming of non-volatile memory with reduced program disturb
US8291295B2 (en) 2005-09-26 2012-10-16 Sandisk Il Ltd. NAND flash memory controller exporting a NAND interface
US7631245B2 (en) * 2005-09-26 2009-12-08 Sandisk Il Ltd. NAND flash memory controller exporting a NAND interface
US7640424B2 (en) 2005-10-13 2009-12-29 Sandisk Corporation Initialization of flash storage via an embedded controller
US7379330B2 (en) 2005-11-08 2008-05-27 Sandisk Corporation Retargetable memory cell redundancy methods
US7349258B2 (en) 2005-12-06 2008-03-25 Sandisk Corporation Reducing read disturb for non-volatile storage
US7262994B2 (en) 2005-12-06 2007-08-28 Sandisk Corporation System for reducing read disturb for non-volatile storage
EP1895418B1 (en) 2005-12-09 2015-04-01 Panasonic Corporation Nonvolatile memory device, method of writing data, and method of reading out data
US7355889B2 (en) 2005-12-19 2008-04-08 Sandisk Corporation Method for programming non-volatile memory with reduced program disturb using modified pass voltages
US7355888B2 (en) 2005-12-19 2008-04-08 Sandisk Corporation Apparatus for programming non-volatile memory with reduced program disturb using modified pass voltages
KR20070076849A (ko) 2006-01-20 2007-07-25 삼성전자주식회사 메모리 카드의 카피백 동작을 수행하는 장치 및 방법
US7426137B2 (en) 2006-04-12 2008-09-16 Sandisk Corporation Apparatus for reducing the impact of program disturb during read
US7436713B2 (en) 2006-04-12 2008-10-14 Sandisk Corporation Reducing the impact of program disturb
US7499326B2 (en) 2006-04-12 2009-03-03 Sandisk Corporation Apparatus for reducing the impact of program disturb
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
US20100031270A1 (en) 2006-08-01 2010-02-04 Gansha Wu Heap manager for a multitasking virtual machine
US20080046641A1 (en) 2006-08-21 2008-02-21 Sandisk Il Ltd. NAND flash memory controller exporting a logical sector-based interface
US20080046630A1 (en) 2006-08-21 2008-02-21 Sandisk Il Ltd. NAND flash memory controller exporting a logical sector-based interface
US7904639B2 (en) * 2006-08-22 2011-03-08 Mosaid Technologies Incorporated Modular command structure for memory and memory system
KR100837274B1 (ko) * 2006-08-28 2008-06-11 삼성전자주식회사 오토 멀티-페이지 카피백 기능을 갖는 플래시 메모리 장치및 그것의 블록 대체 방법
US7848141B2 (en) * 2006-10-31 2010-12-07 Hynix Semiconductor Inc. Multi-level cell copyback program method in a non-volatile memory device
US7440323B2 (en) 2006-11-02 2008-10-21 Sandisk Corporation Reducing program disturb in non-volatile memory using multiple boosting modes
US7468911B2 (en) 2006-11-02 2008-12-23 Sandisk Corporation Non-volatile memory using multiple boosting modes for reduced program disturb
KR20090102788A (ko) 2006-12-06 2009-09-30 퓨전 멀티시스템즈, 인크.(디비에이 퓨전-아이오) 전단의 분산된 raid장치, 시스템 및 방법
US8127200B2 (en) 2006-12-24 2012-02-28 Sandisk Il Ltd. Flash memory device and system with randomizing for suppressing errors
US7468918B2 (en) 2006-12-29 2008-12-23 Sandisk Corporation Systems for programming non-volatile memory with reduced program disturb by removing pre-charge dependency on word line data
US7450430B2 (en) 2006-12-29 2008-11-11 Sandisk Corporation Programming non-volatile memory with reduced program disturb by using different pre-charge enable voltages
US7463531B2 (en) 2006-12-29 2008-12-09 Sandisk Corporation Systems for programming non-volatile memory with reduced program disturb by using different pre-charge enable voltages
US7433241B2 (en) 2006-12-29 2008-10-07 Sandisk Corporation Programming non-volatile memory with reduced program disturb by removing pre-charge dependency on word line data
US7984360B2 (en) 2006-12-31 2011-07-19 Ramot At Tel Aviv University Ltd. Avoiding errors in a flash memory by using substitution transformations
KR100813630B1 (ko) 2007-02-07 2008-03-14 삼성전자주식회사 독출 성능을 향상할 수 있는 플래시 메모리 시스템 및그것의 독출 방법
KR100918707B1 (ko) * 2007-03-12 2009-09-23 삼성전자주식회사 플래시 메모리를 기반으로 한 메모리 시스템
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
US8074034B2 (en) 2007-07-25 2011-12-06 Agiga Tech Inc. Hybrid nonvolatile ram
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
US8095851B2 (en) * 2007-09-06 2012-01-10 Siliconsystems, Inc. Storage subsystem capable of adjusting ECC settings based on monitored conditions
TW200915339A (en) * 2007-09-28 2009-04-01 Super Talent Electronics Inc Electronic data flash card with various flash memory cells
US8301912B2 (en) 2007-12-31 2012-10-30 Sandisk Technologies Inc. System, method and memory device providing data scrambling compatible with on-chip copy operation
US8271515B2 (en) * 2008-01-29 2012-09-18 Cadence Design Systems, Inc. System and method for providing copyback data integrity in a non-volatile memory system
US8185706B2 (en) * 2008-04-30 2012-05-22 Apple Inc. Copyback optimization for memory system
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
KR101086857B1 (ko) * 2008-07-25 2011-11-25 주식회사 팍스디스크 데이터 머지를 수행하는 반도체 스토리지 시스템의 제어 방법
US8281062B2 (en) 2008-08-27 2012-10-02 Sandisk Il Ltd. Portable storage device supporting file segmentation and multiple transfer rates
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
KR101515621B1 (ko) * 2008-09-26 2015-04-29 삼성전자주식회사 반도체 디스크 장치 및 그것의 랜덤 데이터 처리 방법
US20100161932A1 (en) * 2008-12-18 2010-06-24 Ori Moshe Stern Methods for writing data from a source location to a destination location in a memory device
US20110041039A1 (en) 2009-08-11 2011-02-17 Eliyahou Harari Controller and Method for Interfacing Between a Host Controller in a Host and a Flash Memory Device
US20110041005A1 (en) 2009-08-11 2011-02-17 Selinger Robert D Controller and Method for Providing Read Status and Spare Block Management Information in a Flash Memory System
US20110040924A1 (en) 2009-08-11 2011-02-17 Selinger Robert D Controller and Method for Detecting a Transmission Error Over a NAND Interface Using Error Detection Code
US7818525B1 (en) * 2009-08-12 2010-10-19 Texas Memory Systems, Inc. Efficient reduction of read disturb errors in NAND FLASH memory
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
US8187936B2 (en) 2010-06-30 2012-05-29 SanDisk Technologies, Inc. Ultrahigh density vertical NAND memory device and method of making thereof
JP2012137994A (ja) * 2010-12-27 2012-07-19 Toshiba Corp メモリシステムおよびその制御方法

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101653999B1 (ko) * 2015-04-02 2016-09-09 서울시립대학교 산학협력단 낸드 플래시 기반의 스토리지 시스템 및 데이터 보존 강화 방법
KR200490682Y1 (ko) 2018-10-25 2019-12-16 아틱스엔지니어링(주) 실차 시험용 소규모 풍동
KR20200124070A (ko) * 2019-04-23 2020-11-02 삼성전자주식회사 멀티 코어 솔리드 스테이트 드라이브의 운용 방법
US11237979B2 (en) 2019-04-23 2022-02-01 Samsung Electronics Co., Ltd. Method for management of multi-core solid state drive

Also Published As

Publication number Publication date
TWI514403B (zh) 2015-12-21
WO2011090545A3 (en) 2012-04-12
US8443263B2 (en) 2013-05-14
WO2011090545A2 (en) 2011-07-28
KR101735866B1 (ko) 2017-05-15
EP2519879B1 (en) 2013-10-23
EP2519879A2 (en) 2012-11-07
USRE46013E1 (en) 2016-05-24
CN102782654A (zh) 2012-11-14
CN102782654B (zh) 2015-03-11
US20110161784A1 (en) 2011-06-30
TW201135746A (en) 2011-10-16

Similar Documents

Publication Publication Date Title
USRE46013E1 (en) Method and controller for performing a copy-back operation
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
US20110041005A1 (en) Controller and Method for Providing Read Status and Spare Block Management Information in a Flash Memory System
USRE46201E1 (en) Method and controller for performing a sequence of commands
US8291295B2 (en) NAND flash memory controller exporting a NAND interface
US11175984B1 (en) Erasure coding techniques for flash memory
EP2183745B1 (en) Ecc functional block placement in a multi-channel mass storage device
KR101660150B1 (ko) 물리 페이지, 논리 페이지, 및 코드워드 대응
US10157012B2 (en) Zero read on trimmed blocks in a non-volatile memory system
JP5980798B2 (ja) 独立したシリコン素子の動的な上位レベルの冗長モード管理
US9304685B2 (en) Storage array system and non-transitory recording medium storing control program
TW201527953A (zh) 反及閘快閃記憶體系統中之頁退除
KR20140001924A (ko) 백그라운드 동작을 수행하기 위한 제어기 및 방법
US8607123B2 (en) Control circuit capable of identifying error data in flash memory and storage system and method thereof
US9213597B2 (en) Memory storage device, memory controller thereof, and method for programming data thereof
JP2019023936A (ja) 記憶装置及びメモリシステム
CN116126224A (zh) 执行自诊断的存储装置和包括该存储装置的存储系统

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant