KR20150022724A - 플래시 메모리의 저장 유닛에 액세스하기 위한 방법 및 그 방법을 사용하는 장치 - Google Patents

플래시 메모리의 저장 유닛에 액세스하기 위한 방법 및 그 방법을 사용하는 장치 Download PDF

Info

Publication number
KR20150022724A
KR20150022724A KR20140109942A KR20140109942A KR20150022724A KR 20150022724 A KR20150022724 A KR 20150022724A KR 20140109942 A KR20140109942 A KR 20140109942A KR 20140109942 A KR20140109942 A KR 20140109942A KR 20150022724 A KR20150022724 A KR 20150022724A
Authority
KR
South Korea
Prior art keywords
storage unit
storage
unit
ecc
data
Prior art date
Application number
KR20140109942A
Other languages
English (en)
Other versions
KR101641905B1 (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
Priority claimed from TW102148611A external-priority patent/TWI553656B/zh
Application filed by 실리콘 모션 인코포레이티드 filed Critical 실리콘 모션 인코포레이티드
Publication of KR20150022724A publication Critical patent/KR20150022724A/ko
Application granted granted Critical
Publication of KR101641905B1 publication Critical patent/KR101641905B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • 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/1076Parity data used in redundant arrays of independent storages, e.g. in RAID systems
    • G06F11/108Parity data distribution in semiconductor storages, e.g. in SSD
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0238Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
    • G06F12/0246Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/061Improving I/O performance
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0659Command handling arrangements, e.g. command buffers, queues, command scheduling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • G06F3/0679Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0683Plurality of storage devices
    • G06F3/0688Non-volatile semiconductor memory arrays
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C29/00Checking stores for correct operation ; Subsequent repair; Testing stores during standby or offline operation
    • G11C29/04Detection or location of defective memory elements, e.g. cell constructio details, timing of test signals
    • G11C2029/0411Online error correction

Abstract

적어도 다음의 단계들을 포함하는, 아비터에 의해 수행되는, 플래시 메모리의 저장 유닛에 액세스하기 위한 방법의 일 실시예가 개시된다. 데이터를 저장-유닛 액세스 인터페이스 중 하나에 각각 접속된 제1 저장 유닛에 제1 배취로 송신한 후에, 아비터는 각각의 제1 저장 유닛에 데이터 쓰기 커맨드를 발행하고, 그로써 각각의 제1 저장 유닛이 물리적 데이터 프로그래밍을 시작하는 것을 가능하게 한다. 각각의 제1 저장 유닛의 물리적 데이터 프로그래밍 동안, 데이터는 저장-유닛 액세스 인터페이스 중 하나에 각각 접속된 제2 저장 유닛에 제2 배취로 송신된다.

Description

플래시 메모리의 저장 유닛에 액세스하기 위한 방법 및 그 방법을 사용하는 장치{METHODS FOR ACCESSING A STORAGE UNIT OF A FLASH MEMORY AND APPARATUSES USING THE SAME}
관련 출원에 대한 상호 참조
본 출원은 2013년 8월 23일자로 출원된 미국 가출원 제61/869,561호의 이익을 주장하며, 그 전문은 참조에 의해 본 명세서에 편입되는 것이다. 본 출원은 2013년 12월 27일자로 출원된 대만 특허 출원 제102148611호의 우선권을 주장하며, 그 전문은 참조에 의해 본 명세서에 편입되는 것이다.
기술 분야
본 발명은 플래시 메모리에 관한 것으로, 구체적으로는 플래시 메모리의 저장 유닛에 액세스하기 위한 방법 및 그 방법을 사용하는 장치에 관한 것이다.
플래시 메모리의 메모리 셀은 수많은 액세스 후에는 오작동할 수 있다. 플래시 메모리 제조 시 입자 또는 마스크 결함은 저장 유닛의 전체 칼럼 또는 더 나쁘게는 액세스될 플래시 메모리의 전체 저장 유닛의 고장을 야기할 수 있다. 따라서, 필요로 되는 것은 전술한 문제가 나타날 때 내부에 저장된 데이터를 보호하도록 플래시 메모리의 저장 유닛에 액세스하기 위한 방법 및 그 방법을 사용하는 장치이다.
적어도 다음의 단계들을 포함하는, 아비터(arbiter)에 의해 수행되는, 플래시 메모리의 저장 유닛에 액세스하기 위한 방법의 일 실시예가 개시된다. 데이터를 저장-유닛 액세스 인터페이스 중 하나에 각각 접속된 제1 저장 유닛에 제1 배취(batch)로 송신한 후에, 아비터는 각각의 제1 저장 유닛에 데이터 쓰기 커맨드를 발행하고, 그로써 각각의 제1 저장 유닛이 물리적 데이터 프로그래밍을 시작하는 것을 가능하게 한다. 각각의 제1 저장 유닛의 물리적 데이터 프로그래밍 동안, 데이터는 저장-유닛 액세스 인터페이스 중 하나에 각각 접속된 제2 저장 유닛에 제2 배취로 송신된다.
플래시 메모리의 저장 유닛에 액세스하기 위한 장치의 일 실시예가 개시되는데, 적어도 다수의 저장-유닛 액세스 인터페이스 및 아비터를 포함한다. 저장-유닛 액세스 인터페이스에 결합된 아비터는, 데이터를 저장-유닛 액세스 인터페이스 중 하나에 각각 접속된 제1 저장 유닛에 제1 배취로 송신한 후에, 각각의 제1 저장 유닛에 데이터 쓰기 커맨드를 발행하고, 그로써 각각의 제1 저장 유닛이 물리적 데이터 프로그래밍을 시작하는 것을 가능하게 한다. 아비터는 더욱, 각각의 제1 저장 유닛의 물리적 데이터 프로그래밍 동안, 데이터를 저장-유닛 액세스 인터페이스 중 하나에 각각 접속된 제2 저장 유닛에 제2 배취로 송신한다.
상세한 설명은 이하의 실시예에서 첨부 도면을 참조하여 제공된다.
본 발명은 첨부 도면을 참조하여 다음의 상세한 설명 및 실시예를 읽음으로써 충분히 이해될 수 있다.
도 1은 본 발명의 일 실시예에 따른 플래시 메모리의 저장 유닛을 묘사한 도식적 선도;
도 2는 본 발명의 일 실시예에 따른 플래시 메모리의 시스템 아키텍처;
도 3은 본 발명의 일 실시예에 따른 플래시 스토리지의 저장 유닛으로의 인터페이스를 묘사한 도식적 선도;
도 4는 본 발명의 일 실시예에 따른 데이터 스토리지의 논리적 뷰를 도시한 도식적 선도;
도 5a는 본 발명의 일 실시예에 따라 각각의 섹터 내 적용된 데이터 스토리지의 논리적 뷰를 도시한 도식적 선도;
도 5b는 본 발명의 일 실시예에 따른 2-차원 ECC의 논리적 뷰를 도시한 도식적 선도;
도 6은 본 발명의 일 실시예에 따라 데이터를 프로그래밍하기 위한 시스템 블록 선도;
도 7a 및 도 7b는, 본 발명의 일 실시예에 따라, 프로세싱 유닛에 의해 수행되는, 데이터를 프로그래밍하기 위한 방법을 예시한 순서도;
도 8은 본 발명의 일 실시예에 따라, 저장-유닛 액세스 인터페이스에 의해 수행되는, 데이터를 프로그래밍하기 위한 방법을 예시한 순서도;
도 9는 본 발명의 일 실시예에 따라 데이터를 읽기 위한 시스템 블록 선도;
도 10은, 본 발명의 일 실시예에 따라, 섹터-디코딩 유닛에 의해 수행되는, 데이터를 읽기 위한 방법을 예시한 순서도;
도 11은, 본 발명의 일 실시예에 따라, 프로세싱 유닛에 의해 수행되는, 데이터를 읽기 위한 방법을 예시한 순서도;
도 12는 본 발명의 일 실시예에 따라 데이터를 프로그래밍하기 위한 시스템 블록 선도;
도 13은 본 발명의 일 실시예에 따른 저장 유닛의 TLC 블록을 도시한 도식적 선도;
도 14는, 본 발명의 일 실시예에 따라, 프로세싱 유닛에 의해 수행되는, 데이터를 프로그래밍하기 위한 방법을 예시한 순서도;
도 15는, 본 발명의 일 실시예에 따라, 프로세싱 유닛에 의해 수행되는, 데이터를 읽기 위한 방법을 예시한 순서도;
도 16a는 본 발명의 일 실시예에 따라 SLC 셀의 라지 파퓰레이션(large population)의 임계 전압의 분포를 예시한 도식적 선도;
도 16b는 본 발명의 일 실시예에 따라 MLC 셀의 라지 파퓰레이션의 임계 전압의 분포를 예시한 도식적 선도;
도 16c는 본 발명의 일 실시예에 따라 TLC 셀의 라지 파퓰레이션의 임계 전압의 분포를 예시한 도식적 선도;
도 17a 내지 도 17c는 본 발명의 일 실시예에 따라 3 라운드의 프로그래밍을 거친 워드라인 상의 TLC의 임계 전압 분포의 변화량을 예시한 도식적 선도;
도 18a는 본 발명의 일 실시예에 따라 RAID 그룹 내 RS(48, 45)의 수직 ECC와 데이터 배치의 도식적 선도;
도 18b는 본 발명의 일 실시예에 따라 RAID 그룹 내 RS(96, 93)의 수직 ECC와 데이터 배치의 도식적 선도;
도 19a는 메시지, 수평 ECC, 및/또는 수직 ECC를 포함하는 데이터 페이지를 저장 유닛의 워드라인 내에 프로그래밍하는 일례의 예시도;
도 19b는 본 발명의 일 실시예에 따라 데이터를 프로그래밍하기 위한 타이밍 선도;
도 20a 내지 도 20d는, 본 발명의 일 실시예에 따라, 프로세싱 유닛에 의해 수행되는, 데이터를 프로그래밍하기 위한 순서도;
도 21은 본 발명의 일 실시예에 따른 저장 유닛의 워드라인에 대한 프로그래밍 시퀀스를 묘사한 도식적 선도.
이하의 설명은 본 발명을 수행하는 최상으로 고려되는 모드에 대한 것이다. 이 설명은 본 발명의 일반적 원리를 예시하려는 목적이며, 한정적 의미로 받아들여서는 안 된다. 본 발명의 범위는 첨부 청구범위를 참조하여 최상으로 결정된다.
본 발명은 특정 실시예에 관하여 그리고 소정 도면을 참조하여 설명될 것이지만, 본 발명은 그에 국한되는 것이 아니며 청구범위에 의해 한정될 뿐이다. 용어 "포함하고 있다", "포함하고 있는", "포함한다" 및/또는 "포함하는"은, 본 명세서에서 사용될 때, 서술된 특징, 정수, 단계, 연산, 구성요소 및/또는 컴포넌트의 존재를 명시하지만, 하나 이상의 다른 특징, 정수, 단계, 연산, 구성요소, 컴포넌트 및/또는 그 그룹의 존재 또는 부가를 막지는 않음을 더욱 이해할 것이다.
청구항 구성요소를 수식하도록 청구범위에서 "제1", "제2", 및 "제3" 등과 같은 서수 용어의 사용은 그 자체로 방법의 행위가 수행되는 시간적 순서 또는 다른 구성요소 대비 하나의 청구항 구성요소의 어느 우선순위, 선행 또는 순서를 내포하지는 않으며, 단지 청구항 구성요소들을 구별하기 위해 소정 명칭을 갖는 하나의 청구항 구성요소를 (서수 용어의 사용이 아니었다면) 동일한 명칭을 갖는 다른 구성요소와 구별하는 라벨로서 사용될 뿐이다.
본 발명의 실시예들은 저장 유닛 내에 저장될 데이터를 인코딩하고 저장 유닛으로부터의 그 인코딩된 데이터를 디코딩하도록 플래시 메모리의 저장 유닛에 액세스하기 위한 방법 및 그 방법을 사용하는 장치를 도입한다. 도 1은 본 발명의 일 실시예에 따른 플래시 메모리의 저장 유닛을 묘사한 도식적 선도이다. 저장 유닛(10)은 M x N 메모리 셀로 이루어진 어레이를 포함하고, 각각의 메모리 셀은 적어도 하나의 정보 비트를 저장할 수 있다. 플래시 메모리는 NOR 또는 NAND 플래시 메모리 등일 수 있다. 소망 정보에 적합하게 액세스하기 위해서, 액세스에 적합한 행(row) 라인을 선택하도록 행-디코딩 유닛(120)이 사용된다. 유사하게, 출력을 위해 행 내 적합한 수의 바이트를 선택하도록 열(column)-디코딩 유닛(130)이 채용된다. 어드레스 유닛(140)은 메모리 셀 어레이(110)의 N개의 행 중 어느 것이 읽기 또는 쓰기를 위해 선택되어야 하는지 정의하는 행 정보를 행-디코딩 유닛(120)에 인가한다. 유사하게, 열-디코딩 유닛(130)은 메모리 셀 어레이(110)의 M개의 열 중 어느 것 또는 어느 것들이 선택되어야 하는지 정의하는 어드레스 정보를 수신한다. 행는 당업자에 의해 워드라인이라고 호환 지칭될 수 있고, 열은 비트라인이라고 호환 지칭될 수 있다. 메모리 셀 어레이(110)로부터 읽힌 또는 그에 인가될 데이터는 데이터 버퍼(150)에 저장된다. 메모리 셀은 SLC(Single-Level Cell), MLC(Multi-Level Cell) 또는 TLC(Triple-Level Cell)일 수 있다.
SLC에 있어서, 하나의 상태는 부동 게이트에서는 영 전하를 갖고 소거된 후 쓰이지 않은 셀 상태(보통 "1" 상태로 표현)이고, 다른 하나의 상태는 부동 게이트에서는 소정량의 음 전하를 갖는다(보통 "0" 상태로 표현). 게이트에서 음 전하를 갖는 것은 셀의 트랜지스터의 임계 전압(즉, 트랜지스터가 도전하게 야기하기 위해 트랜지스터의 제어 게이트에 인가되어야 하는 전압)이 증가하게 야기한다. 셀의 임계 전압을 체크함으로써 그 저장된 비트를 읽는 것이 실현가능하다. 임계 전압이 더 높은 상태에 있으면 그때 비트 값은 "0"이고, 임계 전압이 더 낮은 상태에 있으면 그때 비트 값은 "1"이다. 도 16a는 본 발명의 일 실시예에 따라 SLC 셀의 라지 파퓰레이션의 임계 전압의 분포를 예시한 도식적 선도이다. (예컨대, 실리콘 구조에서의 결함 또는 불순물 농도에서의 작은 편차에 기인하여) 플래시 메모리 내 메모리 셀은 그들 특성 및 거동이 정확히 똑같지는 않기 때문에, 메모리 셀의 전부에 동일 프로그래밍 연산을 적용하는 것이 메모리 셀의 전부가 정확히 동일한 임계 전압을 갖게 야기하지는 않는다. 그보다는, 임계 전압은 도 16a에 도시된 바와 같이 분포된다. "1" 값을 저장하는 SLC는 전형적으로 음의 임계 전압을 갖는데, 소수의 셀이 좌측 피크의 중심 전압보다 더 낮거나 더 높은 임계 전압을 가지면서 셀의 대다수가 좌측 피크의 중심 전압 값에 가까운 임계 전압을 갖는 그러한 것이다. 유사하게, "0" 값을 저장하는 SLC는 전형적으로 양의 임계 전압을 갖는데, 소수의 셀이 우측 피크의 중심 전압보다 더 낮거나 더 높은 임계 전압을 가지면서 셀의 대다수가 우측 피크의 중심 전압에 가까운 임계 전압을 갖는 그러한 것이다.
MLC가 문자 그대로는 2개보다 많은 레벨, 즉, 셀당 하나보다 많은 비트를 갖기는 하지만, 현재 가장 흔한 MLC는 셀당 2개의 비트를 갖는 것들이고, 그러한 예들이 아래에 주어진다. 2개의 정보 비트를 저장하는 단일 MLC는 4개의 다른 상태 중 하나의 상태에 있고, 이 경우 하나의 비트는 LSB(Least Significant Bit)로서 지정되고 다른 하나는 MSB(Most Significant Bit)로서 지정된다. 메모리 셀의 "상태"는 그 임계 전압으로 표현되므로, MLC는 그 임계 전압에 대해 4개의 다른 유효 범위를 지원한다. 도 16b는 본 발명의 일 실시예에 따라 MLC 셀의 라지 파퓰레이션의 임계 전압의 분포를 예시한 도식적 선도이다. 예상대로, 그것은 4개의 피크를 갖고, 각각의 피크는 하나의 상태에 대응한다. 유사하게, 3개의 정보 비트를 저장하는 단일 TLC는 8개의 다른 상태 중 하나의 상태에 있고, 이 경우 3개의 비트는 각자 LSB, CSB(Center Significant Bit) 및 MSB로서 지정된다. 단일 TLC는 그 임계 전압에 대해 8개의 다른 유효 범위를 지원한다. 도 16c는 본 발명의 일 실시예에 따라 TLC 셀의 라지 파퓰레이션의 임계 전압의 분포를 예시한 도식적 선도이다. 예상대로, 그것은 8개의 피크를 갖고, 각각의 피크는 하나의 상태에 대응한다. 그렇지만, 본 발명은 메모리 셀당 3개보다 많은 비트를 지원하는 플래시 메모리 디바이스에 동등하게 적용가능함을 이해해야 한다.
도 2는 본 발명의 일 실시예에 따른 플래시 메모리의 시스템 아키텍처이다. 플래시 메모리의 시스템 아키텍처(20)에는 저장 유닛(10)의 지정된 어드레스 내에 데이터를 쓰고 그것의 지정된 어드레스로부터 데이터를 읽도록 구성되어 있는 컨트롤러(200)가 들어있다. 구체적으로, 제어 유닛(210)은 저장-유닛 액세스 인터페이스(230)를 통해 저장 유닛(10)의 지정된 어드레스에 데이터를 쓰고 동일 인터페이스(230)를 통해 그것의 지정된 어드레스로부터 데이터를 읽는다. 시스템 아키텍처(20)는, 데이터 라인, 클록 신호 및 제어 라인을 포함하여, 컨트롤러(200)와 저장 유닛(10) 간 커맨드 및 데이터 전송을 조정하기 위한 수개의 전기 신호를 사용한다. 데이터 라인은 커맨드, 어드레스 및 쓰이고 읽힐 데이터를 전송하도록 채용된다. 제어 라인은 CE(Chip Enable), ALE(Address Latch Enable), CLE(Command Latch Enable), WE(Write Enable) 등과 같은 제어 신호를 발행하도록 이용된다. 저장-유닛 액세스 인터페이스(230)는 ONFI(open NAND flash interface), DDR 토글 또는 그 밖의 것들과 같이 SDR(Single Data Rate) 프로토콜 또는 DDR(Double Data Rate) 프로토콜을 사용하여 저장 유닛(10)과 통신할 수 있다. 제어 유닛(210)은 USB(Universal Serial Bus), ATA(Advanced Technology Attachment), SATA(Serial ATA), PCI-E(Peripheral Component Interconnect Express) 또는 그 밖의 것들과 같이 표준 프로토콜을 사용하여 프로세싱-유닛 액세스 인터페이스(250)를 통해 다른 전자 디바이스와 통신할 수 있다.
플래시 스토리지에는 다수의 저장 유닛(10)이 들어있을 수 있고, 각각의 저장 유닛은 단일 다이로 실시되어 저장-유닛 액세스 인터페이스(230)와 통신하도록 독립 또는 공유 인터페이스를 가질 수 있다. 저장 유닛 내외로 대용량 데이터의 액세스 연산, 예컨대 그에 데이터를 프로그래밍, 그로부터 데이터를 읽기 등은 효율을 개선하도록 파이프라인식일 수 있다. 도 3은 본 발명의 일 실시예에 따른 플래시 스토리지의 저장 유닛으로의 인터페이스를 묘사한 도식적 선도이다. 플래시 스토리지(300)는 j+1개의 채널을 제공하고 각각의 채널은 i+1개의 저장 유닛과 연관된다. 즉, i+1개의 저장 유닛은 제어 유닛과 통신하기 위해 동일 채널을 공유할 수 있다. 예컨대, 플래시 스토리지(300)에 의해 8개의 채널(j=7)이 제공되고 각각의 채널은 8개의 저장 유닛(i=7)과 연관된다고 가정하라: 플래시 스토리지(300)는 총 64개의 저장 유닛(10[0..j][0..i])을 갖는다. 컨트롤러의 제어 유닛은 지정된 저장 유닛 내에 데이터를 프로그래밍하고 그리고/또는 지정된 저장 유닛으로부터 데이터를 읽도록 플래시 스토리지(300)에 의해 제공되는 전기 신호(310[0..j][0..1]) 중 하나의 세트를 사용할 수 있다. 각각의 저장 유닛은 독립적 CE 제어 신호를 소유하고 동일 채널에서의 저장 유닛은 데이터 라인, 클록 신호 및 다른 제어 신호 라인을 공유할 수 있다. 즉, 연관 저장-유닛 액세스 인터페이스(또는 소위 채널)를 통해 지정된 저장 유닛으로의 데이터 액세스를 수행하려고 시도할 때 대응하는 CE 제어 신호를 활성화시키도록 제어 유닛이 필요하다. 플래시 스토리지(300)에는 어떠한 수의 채널이라도 제공될 수 있고, 각각의 채널은 어떠한 수의 저장 유닛과도 연관될 수 있음이 명백하고, 본 발명은 그에 국한되어서는 안 된다.
메시지의 정확도를 보증하도록, 그 저장된 메시지에 2-차원 ECC(Error Correction Code)가 첨부될 수 있다. 도 4는 본 발명의 일 실시예에 따른 데이터 스토리지의 논리적 뷰를 도시한 도식적 선도이다. (j+1)x(i+1) 저장 유닛은 ECC(소위 수직 ECC)를 저장하기 위한 l개의 저장 유닛을 포함할 수 있다. 각각의 수직 ECC는 다른 (j+1)x(i+1)-l개의 저장 유닛의 대응하는 어드레스에 저장된 값에 따라 발생된다. 일례에 있어서, i=7, j=7l=1을 가정하라: 마지막 저장 유닛(10[7][7])은 SPC(64, 63) 코드를 저장할 수 있고, 이 경우 SPC는 단일 패리티 체크의 약자이다. 또 다른 일례에 있어서, i=7, j=7l=2를 가정하라: 마지막 2개의 저장 유닛(10[7][6], 10[7][7])은 RS(64, 62) 코드를 저장할 수 있고, 이 경우 RS는 리드-솔로몬 코드를 나타낸다. 다른 일례에 있어서, i=7, j=7l=3를 가정하라: 마지막 3개의 저장 유닛(10[7][5], 10[7][6], 10[7][7])은 RS(64, 61) 코드를 저장할 수 있다. 위 예들은 총망라한 것은 아니며, 다른 유형의 ECC가 수직 ECC로서 다뤄질 수 있음을 이해해야 한다. 수직 ECC는 저장-유닛 레벨에서의 보호를 제공한다, 즉, 저장 유닛 중 하나가 오작동할 때, 다른 표준 저장 유닛에 저장된 값을 수반하는 수직 ECC는 그 표준 저장 유닛에서 총수의 에러가 바로잡힐 수 있으면 고장난 저장 유닛에 저장된 모든 값을 바로잡도록 사용될 수 있다. 프로세싱-유닛 액세스 인터페이스(250)를 통해 수신되는 메시지에 부가하여, 다른 저장 유닛은 수평 ECC를 저장한다. 각각의 저장 유닛 내 워드라인마다 k+1(예컨대, k=31)개의 섹터의 값을 저장할 수 있다. 단일 워드라인에 저장되는 전술한 섹터는 일괄하여 페이지라고 지칭될 수 있다. 예컨대, 지정된 워드라인에 대하여, 저장 유닛(10[0][0])은 섹터(410[0][0][0] 내지 410[0][0][k])의 값을 저장할 수 있고, 저장 유닛(10[0][i])은 섹터(410[0][i][0] 내지 410[0][i][k])의 값을 저장할 수 있고, 저장 유닛(10[j][i])은 섹터(410[j][i][0] 내지 410[j][i][k])의 값을 저장할 수 있다. 예시적 섹터(410[0][0][0] 내지 410[0][0][k], 410[0][i][0] 내지 410[0][i][k], 410[j][i][0] 내지 410[j][i][k] 등)의 각각은 CE 섹터라고 지칭될 수 있다. 도 5a는 본 발명의 일 실시예에 따라 각각의 섹터 내 적용된 데이터 스토리지의 논리적 뷰를 도시한 도식적 선도이다. 섹터(410[0..j][0..i][0..k]) 중 어느 하나에는 메시지(510) 및 수평 ECC(530)가 들어있을 수 있다. 메시지(510)의 길이는 1K 바이트와 같이 고정된다. 수평 ECC(530)는 메시지(510)에 저장된 값을 고려하여 발생되고, SPC 코드, RS 코드, 또는 메시지(510) 내 나타난 용인가능한 에러를 정정하도록 이용되는 유사하지만 다른 코드일 수 있다. 수평 ECC(530)는 섹터 레벨에서의 보호를 제공한다, 즉, 용인가능한 수의 에러가 메시지(510) 내에 일어날 때, 동일 메시지(510)에 저장된 다른 올바른 값을 수반하는 수평 ECC(530)는 그 에러를 바로잡도록 사용될 수 있다. 도 5b는 본 발명의 일 실시예에 따른 2-차원 ECC의 논리적 뷰를 도시한 도식적 선도이다. 각각의 섹터에는 적어도 메시지 및 수평 ECC가 들어있다, 예컨대, 섹터(410[0][0][0])에는 적어도 메시지(510[0][0][0]) 및 메시지(510[0][0][0])에 나타난 에러를 바로잡도록 채용되는 수평 ECC(530[0][0][0])가 들어있다. l=1, 즉, 단 하나의 저장 유닛만이 수직 ECC를 저장하도록 이용된다고 가정하라: 섹터(510[j][i][0])는 메시지(510[0][0][0] 내지 510[j-1][i][0])에 나타난 에러 비트를 바로잡도록 채용되는 수직 ECC를 저장하는 한편 섹터(530[j][i][0])는 수평 ECC(530[0][0][0] 내지 530[j-1][i][0])에 나타난 에러 비트를 바로잡도록 채용되는 수직 ECC를 저장한다. 대응하는 수평 ECC로 전형적 에러 정정 알고리즘이 사용되더라도 복구하기에 너무 많은 에러가 섹터에 들어있는 경우, 또는 하드웨어 고장이 일어난 경우에 있어서는, 이러한 섹터의 메시지를 복구하도록, 관련 섹터 내 다른 메시지 및 수직 ECC와 수반되어 전형적 에러 정정 알고리즘이 사용된다. 전술한 섹터 및 섹터 내 나타난 값을 정정하도록 채용되는 수직 ECC는 일괄하여 RAID(Redundant Array of Independent Disk) 그룹이라고 지칭될 수 있다.
도 6은 본 발명의 일 실시예에 따라 데이터를 프로그래밍하기 위한 시스템 블록 선도이다. 프로세싱 유닛(610)은, 본 명세서에서 나열되는 기능을 수행하도록 마이크로코드 또는 소프트웨어 명령어를 사용하여 프로그래밍되는 범용 하드웨어(예컨대, 단일 프로세서, 병렬 계산을 할 수 있는 그래픽 프로세싱 유닛 또는 다중 프로세서, 또는 그 밖의 것들)로, 또는 전용 하드웨어로 등 수많은 방법으로 구현될 수 있다. 쓰기가 소망되어 프로세싱-유닛 액세스 인터페이스(250)를 통해 또 다른 전자 디바이스로부터 수신된 메시지는 DMA(Direct Memory Access) 컨트롤러(623)에 의해 DRAM(Dynamic Random Access Memory)(620)에 저장된다. 저장 유닛(10[0][0] 내지 10[j][i]) 중 어느 하나에는 다수의 SLC가 들어있을 수 있다. 멀티플렉서(640)는 디폴트로서 DRAM(620)과 버퍼(640)를 결합시킬 수 있다. 32K 바이트와 같이 명시된 길이의 메시지가 DRAM(620)에 저장되었음을 검출한 후에, 프로세싱 유닛(610)은 DRAM(620) 내 메시지를 멀티플렉서(630)를 통해 버퍼(650) 내에, 그리고 RAID-인코딩 유닛(630)의 버퍼(도시하지 않음) 내에 동시에 저장하라고 DMA 컨트롤러(621)에 지시한다. RAID-인코딩 유닛(630)은, 현재 저장된 결과 및 새롭게 수신된 메시지에 따라, SPC(64,63), RS(64,62) 또는 RS(64,61) 코드, 또는 유사하지만 다른 코드와 같이 수직 ECC를 발생시키도록 어떠한 전형적 ECC 인코딩 알고리즘이라도 채용할 수 있다. 프로세싱 유닛(610)은 적어도 2개의 카운터를 포함할 수 있는데, 하나는 메시지 출력의 총수를 계산하기 위한 메시지 카운터이고, 다른 하나는 수직 ECC 출력의 총수를 계산하기 위한 ECC 카운터이다. 프로세싱 유닛(610)은, 메시지 카운터가 미리 정의된 임계값에 도달하였을 때, RAID-인코딩 유닛(630)을 버퍼(650)에 결합시키도록 멀티플렉서(640)를 제어하고, 인코딩된 수직 ECC를 하나 이상의 배취(batch)로 버퍼(650)에 출력하라고 RAID-인코딩 유닛(630)에 지시한다. 프로세싱 유닛(610)은 ECC 카운터가 미리 정의된 임계값에 도달하였을 때 후속 메시지 저장을 계속하도록 또다시 DRAM(620)을 버퍼(650)에 다시 결합시키도록 멀티플렉서(640)를 제어한다. 예컨대, RS(64, 61)가 채용된다고 가정하라: 프로세싱 유닛(610)은 메시지 카운터가 61까지 카운트하였을 때 RAID-인코딩 유닛(630)을 버퍼(650)에 결합시키도록 멀티플렉서(640)를 제어하고 메시지 카운터를 영으로 재설정한다. 그 후, 프로세싱 유닛(610)은 ECC 카운터가 3까지 카운트하였을 때 DRAM(620)을 버퍼(650)에 결합시키도록 멀티플렉서(640)를 제어하고 ECC 카운터를 영으로 재설정한다. 아비터(660)는, DRAM(620) 또는 RAID-인코딩 유닛(630)에 저장된 데이터가 버퍼(650)에 출력되었을 때마다, 버퍼(650)로부터 수직 ECC 또는 섹터의 값을 읽고 그리고 저장-유닛 액세스 인터페이스(230[0] 내지 230[j]) 중 연관된 하나와 같은 연관된 저장-유닛 액세스 인터페이스를 통해 저장 유닛(10[0][0] 내지 10[j][i]) 중 하나와 같은 지정된 저장 유닛 내에 그 값을 쓰라고 프로세싱 유닛(610)에 의해 지시받는다. 아비터(660)는 지정된 저장 유닛과 관련된 CE 제어 신호를 활성화시키고, 연관된 저장-유닛 액세스 인터페이스의 데이터 라인을 거쳐 그 지정된 저장 유닛에 그 값 및 어드레스를 송신할 수 있다. 버퍼(650)로부터 읽힌 값(메시지 또는 수직 ECC일 수 있음)에 따라 수평 ECC를 발생시킬 수 있는 수평 ECC 회로를 저장-유닛 액세스 인터페이스마다 더 포함한다. 구체적으로, 예컨대, 저장-유닛 액세스 인터페이스는, 1K 바이트와 같이, 명시된 길이의 메시지(510)가 버퍼(650)로부터 읽힌 후에 그에 따라 수평 ECC(530)를 발생시킨다. 그 후 저장-유닛 액세스 인터페이스는 메시지(510) 및 발생된 수평 ECC(530)를 지정된 저장 유닛의 지정된 어드레스에 프로그래밍한다.
도 7a 및 도 7b는, 본 발명의 일 실시예에 따라, 프로세싱 유닛에 의해 수행되는, 데이터를 프로그래밍하기 위한 방법을 예시한 순서도이다. RAID 그룹을 형성하기 위해, 프로세싱 유닛(610)은 데이터를 프로그래밍하도록 메시지 카운터를 영으로 그리고 ECC 카운터를 영으로 설정하고(단계(S711)), DRAM(620)을 버퍼(650)에 결합시키도록 멀티플렉서(640)를 제어하기 시작한다(단계(S713)). 다음으로, 단계(S721 내지 S731)를 포함하는 루프는 RAID 그룹 내 모든 메시지가 저장 유닛(10[0][0] 내지 10[j][i])과 같은 지정된 저장 유닛 내에 완전히 프로그래밍될 때까지 반복적으로 수행된다. 구체적으로, 32K 바이트와 같이 명시된 길이의 새로운 메시지가 DRAM(620)에 저장되었음을 검출한 후에(단계(S721)), 프로세싱 유닛(610)은 DRAM(620)의 메시지를 멀티플렉서(640)를 통해 버퍼(650)에 그리고 RAID-인코딩 유닛(630)의 버퍼(도시하지 않음)에 동시에 저장하라고 DMA 컨트롤러(621)에 지시한다(단계(S723)). 그 다음에, 프로세싱 유닛(610)은, 버퍼(650)의 값을 읽고 그리고 그 읽힌 값을, 저장-유닛 액세스 인터페이스(230[0] 내지 230[j]) 중 연관된 하나와 같이 연관된 저장-유닛 액세스 인터페이스를 통해, 저장 유닛(10[0][0] 내지 10[j][i]) 중 하나와 같이 지정된 저장 유닛에 프로그래밍하라고 아비터(660)에 지시한다(단계(S725)). 메시지 카운터를 1만큼 증분시킨 후에(단계(S727)), 프로세싱 유닛(610)은 메시지 카운터 값이 (j+1)x(i+1)-l-1과 같 미리 정의된 임계값을 초과하였는지 결정한다(단계(S731)). 그러하면, 프로세스는 RAID 그룹 내 하나 이상의 수직 ECC를 프로그래밍하도록 계속하여 다음 단계(S733 내지 S751)를 수행하고; 그러하지 않으면, 프로세스는 RAID 그룹 내 미완료된 메시지를 프로그래밍하도록 단계(S721)로 되돌아간다.
RAID 그룹 내 수직 ECC의 상세한 프로그래밍은 다음과 같이 예시된다. 프로세싱 유닛(610)은 RAID-인코딩 유닛(630)을 버퍼(650)에 결합시키도록 멀티플렉서(640)를 제어한다(단계(S733)). 다음으로, 단계(S741 내지 S751)를 포함하는 루프는 RAID 그룹 내 모든 수직 ECC가 저장 유닛(10[j][i-1+1] 내지 10[j][i])과 같은 지정된 저장 유닛 내에 완전히 프로그래밍될 때까지 반복적으로 수행된다. 구체적으로, 프로세싱 유닛(610)은 32K 바이트와 같이 명시된 길이의 수직 ECC를 멀티플렉서(640)를 통해 버퍼(650)에 출력하라고 RAID-인코딩 유닛(630)에 지시한다(단계(S741)). 그 다음에, 프로세싱 유닛(610)은, 버퍼(650)의 값을 읽고 그리고 그 읽힌 값을, 연관된 저장-유닛 액세스 인터페이스(230[j])와 같이 연관된 저장-유닛 액세스 인터페이스를 통해, 저장 유닛(10[j][i-l+1] 내지 10[j][i]) 중 하나와 같이 지정된 저장 유닛에 프로그래밍하라고 아비터(660)에 지시한다(단계(S743)). ECC 카운터를 1만큼 증분시킨 후에(단계(S745)), 프로세싱 유닛(610)은 ECC 카운터 값이 l-1과 같 미리 정의된 임계값을 초과하였는지 결정한다(단계(S751)). 그러하면, 프로세스는 다음의 RAID 그룹에 대한 프로그래밍을 계속하도록 단계(S711)로 다시 복귀하고; 그러하지 않으면, 프로세스는 RAID 그룹 내 미완료된 수직 ECC를 프로그래밍하도록 단계(S741)로 되돌아간다.
도 8은, 본 발명의 일 실시예에 따라, 저장-유닛 액세스 인터페이스에 의해 수행되는, 데이터를 프로그래밍하기 위한 방법을 예시한 순서도이다. 그 방법은 저장-유닛 액세스 인터페이스(230[0] 내지 230[j]) 중 하나에 적용될 수 있다. 저장-유닛 액세스 인터페이스가 32K-바이트 메시지와 같이 명시된 길이의 데이터를 지정된 저장 유닛에 프로그래밍하기 위한 명령어를 아비터(660)로부터 수신한 후에(단계(S811)), 단계(S821 내지 S831)를 포함하는 루프는 모든 데이터가 완전히 프로그래밍될 때까지 반복적으로 수행된다. 구체적으로, 데이터 프로그래밍의 각각의 실행에 대해, 저장-유닛 액세스 인터페이스는 1K 바이트와 같이 미리 설정된 길이의 데이터를 아비터(660)로부터 획득하고(단계(S821)), 획득된 데이터에 따라 수평 ECC를 발생시키고(단계(S823)), 그리고 획득된 데이터 및 발생된 수평 ECC를 지정된 저장 유닛의 다음 섹터의 어드레스 내에 프로그래밍한다(단계(S825)). 단계(S825)에서 그것이 프로그래밍의 제1 실행이면 그때는 읽힌 데이터 및 발생된 수평 ECC는 지정된 워드라인의 제1 섹터의 어드레스 내에 프로그래밍됨을 이해해야 한다. 다음으로, 저장-유닛 액세스 인터페이스는 모든 데이터가 완전히 프로그래밍되었는지 결정한다(단계(S831)). 그러하면, 프로세스는 종료되고; 그러하지 않으면, 그것은 프로그래밍의 다음 실행을 수행하도록 단계(S821)로 다시 복귀한다. 도 19a는 본 발명의 일 실시예에 따라 데이터를 프로그래밍하기 위한 타이밍 선도이다. 저장-유닛 액세스 인터페이스(230[0] 내지 230[3])는 각자 채널(CH0 내지 CH3)로서 표시되고, 각각의 저장-유닛 액세스 인터페이스와 연관된 저장 유닛은 각자 CE0 내지 CE3로서 표시된다. 도 19a는 메시지, 수평 ECC 및/또는 수직 ECC를 포함하는 데이터 페이지(PG0)를 저장 유닛(10[0][0] 내지 10[3][3])의 제1 워드라인(WL0) 내에 프로그래밍하는 일례를 도시하고 있다. 아비터(660)는 데이터 페이지(PG0)의 관련 부분을 각자 채널(CH0 내지 CH3)을 통해 제1 접속된 저장 유닛(CE0)의 버퍼(도시하지 않음)에 송신하고, 그 후, 물리적 데이터 프로그래밍을 시작하도록, 그 접속된 저장 유닛(CE0)에 데이터 쓰기 커맨드를 발행한다. 저장 유닛(CE0)은 데이터 쓰기 커맨드를 수신한 후에 버퍼에 저장된 데이터 페이지(PG0)를 워드라인(WL0) 상의 SLC 내에 프로그래밍하는 시간 기간 동안 사용 중 상태에 들어간다. 저장 유닛(CE0)이 물리적 데이터 프로그래밍을 수행할 때, 채널(CH0 내지 CH3)이 이용가능하고 아비터(660)는 데이터 페이지(PG0)의 관련 부분을 제2 접속된 저장 유닛(CE1)의 버퍼(도시하지 않음)에 송신하도록 채널(CH0 내지 CH3)을 채용할 수 있다. 당업자는 RAID 그룹에 대해 전술한 데이터 배치가 채널(CH0 내지 CH3) 상에서 스페어 시간 감축의 결과를 초래하고 저장 유닛으로의 송신에 있어서 더 양호한 데이터 스루풋을 내놓음을 관찰할 수 있다.
도 9는 본 발명의 일 실시예에 따라 데이터를 읽기 위한 시스템 블록 선도이다. 프로세싱 유닛(910)은, 이후 나열되는 기능을 수행하도록 마이크로코드 또는 소프트웨어 명령어를 사용하여 프로그래밍되는 범용 하드웨어(예컨대, 단일 프로세서, 병렬 계산을 할 수 있는 그래픽 프로세싱 유닛 또는 다중 프로세서, 또는 그 밖의 것들)로, 또는 전용 하드웨어로 등 수많은 방법으로 구현될 수 있다. 저장 유닛(10[0][0] 내지 10[j][i]) 중 어느 하나는 다수의 SLC를 포함할 수 있다. 지정된 저장 유닛으로부터 섹터의 값을 읽은 후에, 저장-유닛 액세스 인터페이스(230[0] 내지 230[j]) 중 하나와 같은 저장-유닛 액세스 인터페이스는 그 읽힌 값을 섹터-디코딩 유닛(960)에 송신한다. 섹터-디코딩 유닛(960)은 그 읽힌 메시지가 어떠한 에러라도 갖는지 그 읽힌 수평 ECC를 사용함으로써 검사하고, 그리고 그러하면, 수평 ECC로 전형적 에러 정정 알고리즘을 사용함으로써 에러 비트(들)를 정정하려 시도한다. 그 읽힌 메시지가 에러를 갖고 있지 않거나 정정이 성공적일 때, 섹터-디코딩 유닛(960)은 수평 ECC를 떨어뜨려 원래 또는 정정된 메시지를 버퍼(950)에 저장하고, 그로써 전자 디바이스가 프로세싱-유닛 액세스 인터페이스(250)를 거쳐 그 디코딩된 메시지를 읽는 것을 가능하게 한다. 그 읽힌 수평 ECC로 에러 정정 알고리즘이 사용되더라도 정정이 바로잡힐 수 없을 때, 섹터-디코딩 유닛(960)은 적어도 복구가능하지 않은 섹터의 어드레스에 관한 정보가 들어있는 메시지를 프로세싱 유닛(910)에 보낸다. 그 다음에, 프로세싱 유닛(910)은 수직 정정 프로시저를 활성화시킨다. 수직 정정 프로시저에 있어서, 프로세싱 유닛(910)은 어느 RAID 그룹에 복구가능하지 않은 섹터가 들어있는지에 관한 정보를 획득하고, 그 RAID 그룹 내 대응하는 수직 ECC를 저장하고 있는 것을 포함하는 다른 섹터에 대한 어드레스를 찾는다. 예컨대, 도 5b를 참조하라. 수평 ECC(530[0][0][0])로 전형적 에러 정정 알고리즘이 사용되더라도 복구가능하지 않은 에러를 섹터(410[0][0][0])의 메시지(510[0][0][0])가 갖고 있다고 가정하라: 메시지(510[0][0][0]) 내 나타난 에러 비트(들)를 바로잡도록 동일 RAID 그룹 내 다른 섹터, 섹터(410[0][1][0] 내지 410[j][i][0])가 에러 정정 알고리즘에 의해 채용될 수 있다. 다음으로, 프로세싱 유닛(910)은 수직 정정 프로시저가 활성화되었음을 섹터-디코딩 유닛(960)에 알려주고, 복구가능하지 않은 섹터에 대응하는 다른 섹터를 결정하고, 그 결정된 섹터의 값을 순차적으로 읽으라고 저장-유닛 액세스 인터페이스(230[0] 내지 230[j])에 지시한다. 수직 정정 프로시저가 활성화된 경우에 있어서, 섹터-디코딩 유닛(960)은 저장-유닛 액세스 인터페이스(230[0] 내지 230[j])를 통해 그 결정된 섹터의 값을 획득하고, 그리고, 메시지를 성공적으로 디코딩한 후에, 그 디코딩된 결과를 RAID-디코딩 유닛(930)에 송신한다. RAID-디코딩 유닛(930)은 이전에 복구가능하지 않은 에러를, 디코딩된 메시지 및 수직 ECC(들)를 포함하는, 다른 섹터의 디코딩된 결과에 따라 복구하여 그 결과를 버퍼(950)에 저장하고, 그로써 전자 디바이스가 프로세싱-유닛 액세스 인터페이스(250)를 통해 그 정정된 메시지를 읽는 것을 가능하게 한다. 실제로는 도 9의 프로세싱 유닛(910)과 도 6의 프로세싱 유닛(610)이 동일할 수 있으며, 본 발명은 그에 국한되어서는 안 됨을 주목해야 한다.
도 10은, 본 발명의 일 실시예에 따라, 섹터-디코딩 유닛에 의해 수행되는, 데이터를 읽기 위한 방법을 예시한 순서도이다. 저장-유닛 액세스 인터페이스(230[0] 내지 230[j]) 중 어느 하나를 통해 섹터의 값을 획득한 후에(단계(S1010)), 섹터-디코딩 유닛(960)은 그 읽힌 메시지가 올바른지 그 읽힌 수평 ECC를 사용함으로써 검사한다(단계(S1020)). 올바르면(단계(S1020)의 "예" 경로), 그때 섹터-디코딩 유닛(960)은 원래 메시지를 버퍼(950) 내에 저장하고(단계(S1070)); 그러하지 않으면(단계(S1020)의 "아니오" 경로), 그 읽힌 수평 ECC로 전형적 에러 정정 알고리즘을 사용함으로써 그 읽힌 메시지에 나타난 에러 비트(들)를 바로잡으려 시도한다(단계(S1030)). 그때, 섹터-디코딩 유닛(960)은 정정이 성공적인지 결정한다(단계(S1040)). 성공적이면(단계(S1040)의 "예" 경로), 섹터-디코딩 유닛(960)은 정정된 메시지를 버퍼(950) 내에 저장하고(단계(S1070)); 그러하지 않으면(단계(S1040)의 "아니오" 경로), 그것은 이 섹터에 나타난 에러가 그 읽힌 수평 ECC로 에러 정정 알고리즘에 의해 바로잡힐 수 없음을 프로세싱 유닛(910)에 알려주는 메시지를 보낸다(단계(S1050)).
도 11은, 본 발명의 일 실시예에 따라, 프로세싱 유닛에 의해 수행되는, 데이터를 읽기 위한 방법을 예시한 순서도이다. 섹터의 메시지 내 나타난 에러가 그 섹터의 대응하는 수평 ECC로 에러 정정 알고리즘에 의해 바로잡힐 수 없음을 나타내는 통지를 수신한 후에(단계(S1110)), 프로세싱 유닛(910)은 동일 RAID 그룹 내 다른 섹터의 어드레스를 결정한다(단계(S1120)). 예컨대, 도 5b를 참조하라. 수평 ECC(530[0][0][0])로 전형적 에러 정정 알고리즘이 사용되더라도 복구가능하지 않은 에러를 섹터(410[0][0][0])의 메시지(510[0][0][0])가 갖고 있다고 가정하라: 메시지(510[0][0][0]) 내 나타난 에러 비트(들)를 바로잡도록 동일 RAID 그룹 내 다른 섹터, 섹터(410[0][1][0] 내지 410[j][i][0])가 에러 정정 알고리즘에 의해 채용될 수 있다. 프로세싱 유닛(910)은 수직 정정 프로시저가 활성화되었음을 섹터-디코딩 유닛(960) 및 RAID-디코딩 유닛(930)에 알려준다(단계(S1130)). 정보를 수신한 후에, 섹터-디코딩 유닛(960)은 저장-유닛 액세스 인터페이스(230[0] 내지 230[j]) 중 하나를 통해 수신된 값을 읽고 디코딩하고, 그리고 디코딩된 결과의 출력을 버퍼(950)보다는 RAID-디코딩 유닛(930)으로 바꿀 것이다. 다음으로, 프로세싱 유닛(910)은 결정된 섹터를 읽으라고 저장-유닛 액세스 인터페이스(230[0] 내지 230[j])에 지시하기 위한 루프를 반복적으로 수행한다. 루프에서, 프로세싱 유닛(910)은 다음 섹터의 값을 읽으라고 연관된 저장-유닛 액세스 인터페이스에 지시한다(단계(S1140)). 지시받은 저장-유닛 액세스 인터페이스는 읽혀-나온 값을 섹터-디코딩 유닛(960)에 송신한다. 섹터-디코딩 유닛(960)은 그로부터의 메시지를 디코딩하고 그 디코딩된 메시지를 RAID-디코딩 유닛(930)에 송신하고, 그 후, RAID-디코딩 유닛(930)은 현재 저장된 결과 및 새롭게 수신된 메시지에 따라 새로운 메시지를 발생시키는데, 이 경우 현재 저장된 결과는 이전에 수신된 메시지의 집합으로부터 유도된다. 지시받은 저장-유닛 액세스 인터페이스로부터 데이터 읽기가 완료되었음을 나타내는 통지를 수신한 후에(단계(S1150)), 프로세싱 유닛(910)은 동일 RAID 그룹 내 모든 다른 섹터의 값이 완전히 읽혔는지 결정한다(단계(S1160)). 그러하면(단계(S1160)의 "예" 경로), 그때는 루프가 종료되고; 그러하지 않으면(단계(S1160)의 "아니오" 경로), 프로세싱 유닛(910)은 다음 섹터의 값을 읽으라고 연관된 저장-유닛 액세스 인터페이스에 지시한다(단계(S1140)). 루프가 종료된 후에, 프로세싱 유닛(910)은 수직 정정 프로시저가 종료되었음을 섹터-디코딩 유닛(960) 및 RAID-디코딩 유닛(930)에 알려준다(단계(S1170)). 정보를 수신한 후에, 섹터-디코딩 유닛(960)은 그 디코딩된 결과의 출력을 RAID-디코딩 유닛(930)보다는 다시 버퍼로 바꿀 것이다. 다른 한편, 정보를 수신한 후에, RAID-디코딩 유닛(930)은 복구 결과대로 버퍼(950)에 최신 메시지를 저장한다.
도 12는 본 발명의 일 실시예에 따라 데이터를 프로그래밍하기 위한 시스템 블록 선도이다. 프로세싱 유닛(1210)은, 이후 나열되는 기능을 수행하도록 마이크로코드 또는 소프트웨어 명령어를 사용하여 프로그래밍되는 범용 하드웨어(예컨대, 단일 프로세서, 병렬 계산을 할 수 있는 그래픽 프로세싱 유닛 또는 다중 프로세서, 또는 그 밖의 것들)로, 또는 전용 하드웨어로 등 수많은 방법으로 구현될 수 있다. 저장 유닛(10[0][0] 내지 10[j][i]) 중 어느 하나는 다수의 메모리 셀을 포함할 수 있고, 그 각각은 TLC로 실시된다. 프로세싱 유닛(1210)은 데이터를 하나의 워드라인씩 프로그래밍할 수 있고, 이 경우 각각의 워드라인은 수개 페이지의 값을 저장할 수 있다. 워드라인당 3개의 페이지가 포함되어 있는 것과 같이 이하의 절에서는 특정 특징을 갖는 실시예가 설명될 것이기는 하지만, 이들은 단지 예시적 특징이며 본 발명은 워드라인당 더 많거나 더 적은 페이지를 갖는 시스템에 동등하게 적용가능함을 주목해야 한다. 단일 페이지는 8K, 16K, 32K 또는 64K 바이트의 메시지를 저장할 수 있다. 워드라인의 각각의 TLC는 저장된 전하를 누설하거나 인근 워드라인(들)의 프로그래밍으로부터 초래되는 부가적 전하를 흡수하고 그리하여 그 임계 전압을 바꾸므로, 필요로 되는 것은 저장된 값을 예상대로 유지하도록 각각의 TLC를 여러 라운드 프로그래밍하기 위한 연산이다. 다음과 같이 설명될 프로그래밍 방법은 F&F(Foggy and Fine) 방식이라고 지칭될 수 있다. 도 17a 내지 도 17c는 본 발명의 일 실시예에 따라 3 라운드의 프로그래밍을 거친 워드라인 상의 TLC의 임계 전압 분포의 변화량을 예시한 도식적 선도이다. 제1 라운드의 프로그래밍 후에, 임계 전압 분포는 도 17a에서 실선으로 도시되어 있다. 처음에 거칠게 프로그래밍한 후에, 임계 전압 분포는 예상대로 8개의 구별 상태를 반영하지 않음을 도 17a로부터 관찰할 수 있다. 인근 워드라인의 후속 프로그래밍은 워드라인 상의 TLC의 이전에 저장된 전하에 영향을 미쳐, 도 17a의 파선으로 도시된 바와 같이, 임계 전압 분포를 더 나쁘게 만든다. 그 후, 저장된 전하를 수정하여 이상적 임계 전압을 달성하도록 동일 워드라인 상의 TLC에 제2 라운드의 프로그래밍이 수행된다. 그러한 후에, 임계 전압 분포는 도 17b의 실선으로 도시되어 있는데, 8개의 구별 상태를 반영한다. 그렇지만, 인근 워드라인의 후속 프로그래밍 후에, 임계 전압 분포의 인접 상태는 도 17b의 파선으로 도시된 바와 같이 오버랩에 의해 영향을 받을 수 있다. 그 후, 이상적 분포를 달성하기 위해, 임계 전압 분포의 어느 2개의 상태 간 더 넓은 간격을 산출하도록 동일 워드라인 상의 TLC에 제3 라운드의 프로그래밍이 수행된다. 3 라운드의 프로그래밍 후 결과적 임계 전압 분포는 도 17c를 참조할 수 있다. 도 12를 다시 참조하라. 전술한 한계를 극복하기 위해, 버퍼(1250)는 3개 페이지의 값을 저장하도록 구성되는 한편 DRAM(1240)은 프로세싱-유닛 액세스 인터페이스(250)를 통해 전자 디바이스로부터 수신된 9개 페이지의 값을 일시적으로 저장하도록 구성된다. 프로세싱 유닛(1210)은 프로세싱-유닛 액세스 인터페이스(250)로부터의 값을 DRAM(1240)의 지정된 어드레스 내에 저장하라고 DMA 컨트롤러(1220)에 지시할 수 있고, 이 경우 가장 최근 수신된 페이지의 값은 가장 일찍 수신된 값을 덮어쓸 수 있다. 덮어쓰인 페이지의 값은 다음과 같이 설명될 3 라운드의 프로그래밍 후에 지정된 메모리 셀에 정상 저장되었음을 이해해야 한다. DRAM(1240)은 적어도 컴포넌트(230[0..j], 250, 1210, 1230, 1250)를 포함하는 SOC(System On Chip) 내에 집적되거나 또는 독립적 칩으로 구현될 수 있다. 프로세싱 유닛(1210)은, DRAM(1240)으로부터 3개 페이지의 값을 읽고 그 읽힌 값을 버퍼(1250) 내에 저장하라고 DMA 컨트롤러(1230)에 지시하고, 그리고 지정된 저장 유닛의 지정된 워드라인의 지정된 TLC 내에 버퍼(1250)의 값을 프로그래밍하라고 저장-유닛 액세스 인터페이스(230[0] 내지 230[j]) 중 하나와 같이 연관된 저장-유닛 액세스 인터페이스에 지시할 수 있다. 도 13은 본 발명의 일 실시예에 따른 저장 유닛의 TLC 블록을 도시한 도식적 선도이다. TLC 블록(1300)은 PG0 내지 PG191의 라벨이 붙은 총 192개의 페이지의 값을 저장할 수 있다. 각각의 워드라인은 3개 페이지의 값을 저장할 수 있고 워드라인은 WL0 내지 WL63의 라벨이 붙여져 있다. 도 16c를 참조하라. 각각의 워드라인 상의 TLC의 모든 LSB는 일괄하여 1개 페이지의 값을 형성하는 한편 각각의 워드라인 상의 TLC의 모든 CSB 및 MSB는 각자 다른 2개의 페이지의 값을 일괄하여 형성한다. 저장 유닛의 프로그래밍된 값을 안정시키기 위해, 프로세싱 유닛(1210)은 DRAM(1240)에 저장되어 있는 가장 최근 수신된 3개 페이지의 값을 TLC 블록(1300) 내에 프로그래밍할 뿐만 아니라, 또한 저장 유닛 내에 프로그래밍된 DRAM(1240)으로부터의 이전 6개 페이지의 값을 2개의 배취로 읽고 그 읽힌 페이지를 지정된 저장-유닛 액세스 인터페이스를 통해 또다시 지정된 워드라인 상의 TLC 내에 프로그래밍도 한다. 예컨대, 워드라인(WL2) 상의 TLC 내에 페이지 값(PG6 내지 PG8)을 프로그래밍한 후에, 프로세싱 유닛(1210)은, DRAM(1240)으로부터 페이지 값(PG0 내지 PG2)을 읽고 그 읽힌 데이터를 버퍼(250) 내에 저장하라고 DMA 컨트롤러(1230)에 지시하고 그리고 버퍼(250)의 값을 워드라인(WL0) 상의 TLC 내에 프로그래밍하라고 지정된 저장-유닛 액세스 인터페이스에 지시하고, 그 후, DRAM(1240)으로부터 페이지 값(PG3 내지 PG5)을 읽고 그 읽힌 데이터를 버퍼(250) 내에 저장하라고 DMA 컨트롤러(1230)에 지시하고 그리고 버퍼(250)의 값을 워드라인(WL1) 상의 TLC 내에 프로그래밍하라고 지정된 저장-유닛 액세스 인터페이스에 지시한다. 도 21은 본 발명의 일 실시예에 따른 저장 유닛의 워드라인에 대한 프로그래밍 시퀀스를 묘사한 도식적 선도이다. 프로그래밍 시퀀스는 룩업 테이블(2100)에 레코딩될 수 있고, 그래서, 프로세싱 유닛(1210)은 그에 따라 각각의 배취에서 어느 워드라인 및 페이지가 프로그래밍될지 결정한다. 룩업 테이블(2100)에는 워드라인(WL0 내지 WL63)의 각각에 대해 제1, 제2 및 제3 라운드의 프로그래밍에 대한 순차 번호를 각자 레코딩하는 3개의 필드가 들어있다. TLC에 저장된 값이 명시된 라운드의 프로그래밍 때까지 안정적이지 않기 때문에, 프로세싱 유닛(1210)은 프로세싱-유닛 액세스 인터페이스(250)를 통해 전자 디바이스로부터 데이터 읽기 커맨드를 수신한 후에 요청된 값이 안정적으로 TLC 내에 프로그래밍되었는지 우선 결정한다. 그러하면, 프로세싱 유닛(1210)은 저장-유닛 액세스 인터페이스(230[0] 내지 230[j]) 중 하나와 같이 연관된 저장-유닛 액세스 인터페이스를 통해 지정된 저장 유닛의 지정된 어드레스로부터 값을 읽고, 그 읽힌 값으로 전자 디바이스에 회답하고; 그러하지 않으면, 그것은 DRAM(1240)으로부터 지정된 저장 유닛의 지정된 어드레스 내에 프로그래밍될 값을 읽고 전자 디바이스에 회답한다. DRAM(1240) 또는 레지스터(도시하지 않음)는 DRAM(1240)에 일시적으로 저장되는 값이 어느 저장 유닛의 어느 어드레스 내에 프로그래밍될 것이라는 사실에 관한 정보를 저장할 수 있고, 프로세싱 유닛(1210)은 저장된 정보를 고려하여 요청된 값이 TLC 내에 안정적으로 프로그래밍되었는지 결정할 수 있음을 주목해야 한다. 구체적으로, 요청된 값의 어드레스가 DRAM(1240) 또는 레지스터(도시하지 않음)에 저장된 정보에 따라 DRAM(1240)의 값에 대해 프로그래밍될 어드레스 내에 들어가면, 그때 프로세싱 유닛(1210)은 요청된 값이 TLC 내에 안정적으로 프로그래밍되지 않았다고 결정한다.
도 14는, 본 발명의 일 실시예에 따라, 프로세싱 유닛에 의해 수행되는, 데이터를 프로그래밍하기 위한 방법을 예시한 순서도이다. 프로세싱-유닛 액세스 인터페이스(250)를 통해 전자 디바이스로부터 데이터 쓰기 커맨드 및 데이터 쓰기 어드레스를 수신한 후에(단계(S1410)), 프로세싱 유닛(1210)은 프로세싱-유닛 액세스 인터페이스(250)로부터 획득되는 프로그래밍될 값을 DRAM(1240) 내에 저장하라고 DMA 컨트롤러(1220)에 지시한다(단계(S1420)). 명시된 수의 페이지 값, 예컨대, n번째 페이지 내지 (n+2)번째 페이지의 값이 완전히 수신되었는지 결정된다(단계(S1430)). 그러하면, 프로세싱 유닛(1210)은 물리적 데이터 프로그래밍을 수행하고(단계(S1440 내지 S1470)); 그러하지 않으면, 그것은 프로세싱-유닛 액세스 인터페이스(250)로부터 남아있는 페이지 값을 계속 수신한다(단계(S1410 내지 S1420)). 물리적 데이터 프로그래밍에 있어서, 프로세싱 유닛(1210)은 DRAM(1240)의 가장 최근 3개 페이지의 값을 버퍼(1250) 내에 저장하라고 DMA 컨트롤러(1230)에 지시하고(단계(S1440)), 그리고 지정된 저장 유닛의 지정된 워드라인의 TLC 내에 버퍼(1250)의 값을 프로그래밍하라고 저장-유닛 액세스 인터페이스(230[0] 내지 230[j]) 중 하나와 같이 연관된 저장-유닛 액세스 인터페이스에 지시한다(단계(S1450)). 인근 워드라인에 대한 데이터 프로그래밍에 의해 영향을 받는 것으로부터 저장 유닛의 프로그래밍된 값을 안정시키기 위해, 프로세싱 유닛(1210)은 최근에 프로그래밍된 DRAM(1240)의 이전 6개 페이지의 값을 또다시 2개의 배취로 버퍼(1250) 내에 저장하라고 DMA 컨트롤러(1230)에 더 지시하고, 각각의 배취 동안, 또다시 지정된 워드라인 상의 TLC 내에 버퍼(1250)의 값을 프로그래밍하라고 저장-유닛 액세스 인터페이스(230[0] 내지 230[j]) 중 하나와 같이 연관된 저장-유닛 액세스 인터페이스에 지시한다. 구체적으로, 프로세싱 유닛(1210)은, (n-3)번째 내지 (n-1)번째 페이지와 같이, DRAM(1240)으로부터 획득되는, 단계(S1450)에서 프로그래밍되는 것 이전 마지막 3번째 내지 마지막 페이지의 값을 버퍼(1250) 내에 저장하라고 DMA 컨트롤러(1230)에 지시하고, 또다시 지정된 저장 유닛의 지정된 워드라인 상의 TLC 내에 버퍼(1250)의 값을 프로그래밍하라고 연관된 저장-유닛 액세스 인터페이스에 지시한다(단계(S1460)). 그 다음에, 프로세싱 유닛(1210)은 (n-6)번째 내지 (n-4)번째 페이지와 같이, DRAM(1240)으로부터 획득되는, 단계(S1450)에서 프로그래밍되는 것 이전 마지막 6번째 내지 마지막 4번째 페이지의 값을 버퍼(1250) 내에 저장하라고 DMA 컨트롤러(1230)에 지시하고, 또다시 지정된 저장 유닛의 지정된 워드라인 상의 TLC 내에 버퍼(1250)의 값을 프로그래밍하라고 연관된 저장-유닛 액세스 인터페이스에 지시한다(단계(S1470)).
도 15는, 본 발명의 일 실시예에 따라, 프로세싱 유닛에 의해 수행되는, 데이터를 읽기 위한 방법을 예시한 순서도이다. 프로세싱-유닛 액세스 인터페이스(250)를 통해 전자 디바이스로부터 데이터 읽기 커맨드 및 데이터 읽기 어드레스를 수신한 후에(단계(S1510)), 프로세싱 유닛(1210)은 요청된 값이 TLC 내에 안정적으로 프로그래밍되지 않았는지 결정한다(단계(S1520)). 그러하면, 프로세싱 유닛(1210)은 DRAM(1240)으로부터 그 요청된 값을 읽으라고 DMA 컨트롤러(1220)에 지시하고 프로세싱-유닛 액세스 인터페이스(250)를 통해 그 읽힌 값으로 그 요청하는 전자 디바이스에 회답하고(단계(S1530)); 그러하지 않으면, 그것은 연관된 저장-유닛 액세스 인터페이스를 통해 지정된 저장 유닛의 데이터 읽기 어드레스로부터 값을 읽고(단계(S1540)), 그리고 프로세싱-유닛 액세스 인터페이스(250)를 통해 그 읽힌 값으로 그 요청하는 전자 디바이스에 회답한다(단계(S1550)).
TLC를 갖는 플래시 메모리는 저장된 데이터(메시지 및 수평 ECC를 포함)를 보안하여 2-차원 ECC 보호를 형성하도록 수직 ECC를 더 저장할 수 있다. 본 발명의 일 실시예는 데이터 프로그래밍의 효율을 개선하도록 메시지 및 ECC에 대한 배치를 도입한다. i=3, j=3이고 각각의 워드라인은 수직 ECC, 또는 수평 ECC를 갖는 3개 페이지의 메시지를 저장한다고 가정하라: 도 18a는 본 발명의 일 실시예에 따라 RAID 그룹 내 RS(48, 45)의 수직 ECC와의 데이터 배치의 도식적 선도이다. RAID 그룹은 16개의 저장 유닛(10[0][0] 내지 10[3][3])의 제1 워드라인(WL0) 상에 48개의 페이지를 포함하고 있도록 형성되고, 이 경우 음영으로 도시된 바와 같은 저장 유닛(10[3][3])의 제1 워드라인(WL0)은 3개 페이지의 수직 ECC를 저장한다. 도 18b는 본 발명의 일 실시예에 따라 RAID 그룹 내 RS(96, 93)의 수직 ECC와의 데이터 배치의 도식적 선도이다. RAID 그룹은 16개의 저장 유닛(10[0][0] 내지 10[3][3])의 제1 및 제2 워드라인(WL0, WL1) 상에 96개의 페이지를 포함하고 있도록 형성되고, 이 경우 음영으로 도시된 바와 같은 저장 유닛(10[3][3])의 제2 워드라인(WL1)은 3개 페이지의 수직 ECC를 저장한다. 수평 ECC를 갖는 페이지 값, 및 RAID 그룹 내 연관된 수직 ECC가 서로 다른 물리적 저장 유닛에 흩어져 있기 때문에 저장 유닛(10[0][0] 내지 10[3][3]) 중 하나와 같이 플래시 메모리의 어느 저장 유닛 전체가 고장날 때 그 저장된 값이 복구가능할 수 있다. 그에 더하여, 전술한 배치가 또한 데이터 프로그래밍의 효율을 개선할 수 있다. 도 6을 참조하라. 프로세싱 유닛(610)은 페이지 값을 미리 정의된 시퀀스로 각각의 저장 유닛의 제1 워드라인 내에 프로그래밍하라고 아비터(660)에 지시할 수 있다. 도 19b는 본 발명의 일 실시예에 따라 데이터를 프로그래밍하기 위한 타이밍 선도이다. 저장-유닛 액세스 인터페이스(230[0] 내지 230[3])는 각자 채널(CH0 내지 CH3)로서 표시되고, 각각의 저장-유닛 액세스 인터페이스와 연관된 저장 유닛은 각자 CE0 내지 CE3로서 표시된다. 도 19b는 메시지, 수평 ECC, 및/또는 수직 ECC를 포함하는 3개의 데이터 페이지(PG0, PG1, PG2)를 저장 유닛(10[0][0] 내지 10[3][3])의 제1 워드라인(WL0) 내에 프로그래밍하는 일례를 도시하고 있다. 아비터(660)는 데이터 페이지(PG0, PG1, PG2)의 관련 부분을 각자 채널(CH0 내지 CH3)을 통해 제1 접속된 저장 유닛(CE0)의 버퍼(도시하지 않음)에 송신하고, 그 후, 물리적 데이터 프로그래밍을 시작하도록, 그 접속된 저장 유닛(CE0)에 데이터 쓰기 커맨드를 발행한다. 저장 유닛(CE0)은 데이터 쓰기 커맨드를 수신한 후에 버퍼에 저장된 데이터 페이지(PG0, PG1, PG2)를 워드라인(WL0) 상의 TLC 내에 프로그래밍하는 시간 기간 동안 사용 중 상태에 들어간다. 저장 유닛(CE0)이 물리적 데이터 프로그래밍을 수행할 때, 채널(CH0 내지 CH3)이 이용가능하고 아비터(660)는 데이터 페이지(PG0, PG1, PG2)의 관련 부분을 제2 접속된 저장 유닛(CE1)의 버퍼(도시하지 않음)에 송신하도록 채널(CH0 내지 CH3)을 채용할 수 있다. 당업자는 RAID 그룹에 대해 전술한 데이터 배치가 채널(CH0 내지 CH3) 상에서 스페어 시간 감축의 결과를 초래하고 저장 유닛으로의 송신에 있어서 더 양호한 데이터 스루풋을 내놓음을 관찰할 수 있다.
도 6의 저장 유닛(10[0][0] 내지 10[j][i])은 다수의 TLC를 포함하고 있도록 고안될 수 있다. 도 20a 및 도 20b는, 본 발명의 일 실시예에 따라, 프로세싱 유닛에 의해 수행되는, 데이터를 프로그래밍하기 위한 순서도이다. RAID 그룹에 대한 데이터 프로그래밍 동안, 프로세싱 유닛(610)은 메시지 카운터를 영으로 그리고 ECC 카운터를 영으로 설정하고(단계(S2011)), DRAM(620)을 버퍼(650)에 결합시키도록 멀티플렉서(640)를 제어한다(단계(S2013)). 후속하여, 단계(S2021 내지 S2087)를 포함하는 루프는 RAID 그룹 내 모든 메시지가 지정된 저장 유닛, 예컨대, 도 18a에 도시된 바와 같은 저장 유닛(10[0][0] 내지 10[j][i])의 워드라인(WL0), 또는 도 18b에 도시된 바와 같은 저장 유닛(10[0][0] 내지 10[j][i])의 워드라인(WL0, WL1) 내에 완전히 프로그래밍될 때까지 반복적으로 수행된다.
단계(S2021 내지 S2031)는 모든 저장 유닛의 지정된 워드라인 내에 데이터를 프로그래밍하기 위한 준비 단계이다. 프로세싱 유닛(610)은 현재 데이터 프로그래밍에 어느 저장-유닛 액세스 인터페이스가 사용되는지 레코딩하도록 변수(q)를 그리고 현재 데이터 프로그래밍에 대해 사용된 저장-유닛 액세스 인터페이스와 연관된 어느 저장 유닛이 프로그래밍되어야 하는지 레코딩하도록 변수(p)를 채용한다. 저장 유닛의 프로그래밍되는 값을 안정시키기 위해, 도 14에 도시된 바와 같이 워드라인 상에 값을 프로그래밍하기 위해 설명된 방법은 각각의 워드라인이 적어도 3회 반복적으로 프로그래밍될 수 있음을 보장하도록 채택될 수 있고, 각각의 라운드의 프로그래밍은 인근 워드라인의 것과 인터레이싱된다. 제1 저장 유닛의 제1 워드라인에 대한 데이터 프로그래밍의 시작에서, 프로세싱 유닛(610)은 p=0 그리고 q=0으로 설정한다(단계(S2021)). 그 후 프로세싱 유닛(610)은 어느 워드라인 또는 페이지가 프로그래밍되어야 하는지 결정한다, 예컨대, 워드라인(WL0) 또는 페이지(PG0 내지 PG2)(단계(S2023)). 메시지 카운터는 영으로 유지되거나 MAXixMAXjxn로 설정되고, ECC 카운터는 영으로 설정되며, 이 경우 상수(MAXj)는 저장-유닛 액세스 인터페이스의 총수를 나타내고, 상수(MAXi)는 하나의 저장-유닛 액세스 인터페이스와 연관된 저장 유닛의 총수를 나타내고, 변수(n)는 이 RAID 그룹에 대하여 완료된 워드(들)의 총수를 나타낸다(단계(S2025)). 도 18b에 도시된 바와 같이 수직 RS(96, 93) ECC를 갖는 RAID 그룹에 대한 데이터 배치를 일례로 취하면, 메시지 카운터는, 데이터 프로그래밍이 제1 워드라인(WL0)과 관련되면 영으로 유지되고, 그리고 데이터 프로그래밍이 제2 워드라인(WL1)과 관련되면 4x4x1=16으로 설정된다.
메시지 및 수평 ECC를 지정된 저장 유닛(10[q][p]) 내에 프로그래밍하도록 단계(S2031 내지 S2035)가 수행된다. 프로세싱 유닛(610)은 DRAM(620)의 3개 페이지의 메시지를 멀티플렉서(640)를 통해 버퍼(650) 내에, 그리고 RAID-인코딩 유닛(630)의 버퍼(도시하지 않음) 내에 동시에 저장하라고 DMA 컨트롤러(621)에 지시한다(단계(S2031)). 다음으로, 프로세싱 유닛(610)은, 버퍼(650)의 값을 읽고 저장-유닛 액세스 인터페이스(230[q])에 명령하여 그 읽힌 값을 저장 유닛(10[q][p]) 내에 프로그래밍하라고 아비터(660)에 지시한다(단계(S2033)). 그 후에, 프로세싱 유닛(610)은 메시지 카운터를 3만큼 증분시킨다(단계(S2035)). 각각의 저장 유닛에 대한 프로그래밍 타이밍은 도 19의 설명에서 참조될 수 있다.
어느 저장-유닛 액세스 인터페이스 및 저장 유닛이 다음 데이터 프로그래밍에 사용되어야 하는지 결정하도록 단계(S2041, S2081, S2087)가 수행된다. 메시지 카운터 값이 임계값보다 더 낮다고 결정한 후에(단계(S2041)의 "아니오" 경로), 프로세싱 유닛(610)은 변수(q)를 1만큼 증분시킨다(단계(S2081)). 도 18b에 도시된 바와 같이 수직 RS(96, 93) ECC를 갖는 RAID 그룹에 대한 데이터 배치를 일례로 취하면, 메시지 카운터 값이 임계값(예컨대, 93)보다 더 낮다는 것은 RAID 그룹 내 메시지가 완전히 프로그래밍되지는 않았음을 나타낸다. 그 후, 변수(q)가 상수(MAXj)와 같거나 초과하는지 결정된다(단계(S2083)). 그러하지 않으면, 프로세스는 단계(S2031)로 진행하고; 다른 경우에는, 프로세싱 유닛(610)은 변수(p)를 1만큼 증분시키고 변수(q)를 영으로 설정하고(단계(S2085)) 변수(p)가 상수(MAXi)와 같거나 초과하는지 결정한다(단계(S2087)). 변수(p)가 상수(MAXi)와 같거나 초과할 때(단계(S2087)의 "예" 경로), 그것은 모든 저장 유닛의 지정된 워드라인이 완전히 프로그래밍됨을 나타내고 프로세스는 단계(S2021)로 진행하여 다음 워드라인에 대한 데이터 프로그래밍을 계속한다. 그러하지 않으면(단계(S2087)의 "아니오" 경로), 프로세스는 단계(S2031)로 진행한다.
수직 ECC가 안정적으로 되기 위해 적어도 3회 프로그래밍될 것을 요건으로 하기 때문에, 본 발명의 일 실시예는, 처음에 발생된 수직 ECC를 DRAM(620) 내에 저장하고 그리고, 수직 ECC를 또다시 계산하기보다는, 후속의 리프로그래밍을 위해 DRAM(620)으로부터 그 발생된 수직 ECC를 획득하기 위한 프로시저를 도입한다. 도 18b에 도시된 바와 같이 수직 RS(96, 93) ECC를 갖는 RAID 그룹에 대한 데이터 배치를 일례로 취하면, 수직 ECC를 리프로그래밍하기 위한 또 다른 구현에 있어서, RAID-인코딩 유닛(630)은 저장 유닛(10[3][3])의 워드라인(WL1)을 제외하고 16개 저장 유닛의 워드라인(WL0, WL1)의 값을 리로딩하고, 그에 따라 저장 유닛(10[3][3])의 워드라인(WL1)에서 리프로그래밍될 수직 ECC를 재발생시키지만, 그것은 그렇게 하기 위해 과잉 시간을 소비한다. 수직 ECC를 지정된 저장 유닛(10[q][p])에 프로그래밍하도록 단계(S2051 내지 S2079)가 수행된다. 메시지 카운터 값이 임계값보다 더 높거나 같다고 결정한 후에(단계(S2041)의 "예" 경로), 프로세싱 유닛(610)은 변수(p)를 1만큼 증분시킨다(단계(S2051)). 다음으로, 프로세싱 유닛(610)은 RAID 그룹 내 수직 ECC가 발생되었는지 결정한다(단계(S2053)). 그러하면, 프로세싱 유닛(610)은, DRAM(620)에 일시적으로 저장된 이전에 계산된 결과를 획득하여 그 획득된 결과를 저장 유닛(10[q][p]) 내에 프로그래밍하라고 저장-유닛 액세스 인터페이스(230[q])에 지시하고(단계(S2061 내지 S2068)); 그러하지 않으면, 그것은, RAID-인코딩 유닛(630)에 의한 인코딩 결과를 획득하여 그 획득된 결과를 저장 유닛(10[q][p]) 내에 프로그래밍하라고 저장-유닛 액세스 인터페이스(230[q])에 지시한다(단계(S2071 내지 S2079)).
단계(S2071 내지 S2079)를 포함하는 루프는 RAID-인코딩 유닛(630)에 의해 발생된 수직 ECC가 지정된 저장 유닛 내에 완전히 프로그래밍될 때까지 반복적으로 수행된다. 구체적으로, 프로세싱 유닛(610)은 RAID-인코딩 유닛(630)을 버퍼(650)에 결합시키도록 멀티플렉서(640)를 제어하고(단계(S2071)), 멀티플렉서(640)를 거쳐 버퍼(650)에 3개 페이지의 수직 ECC를 출력하라고 RAID-인코딩 유닛(630)에 지시하고, RAID-인코딩 유닛(630)의 버퍼(도시하지 않음)의 계산된 결과를 DRAM(620) 내에 저장하라고 DMA 컨트롤러(621)에 지시한다(단계(S2073)). 다음으로, 프로세싱 유닛(610)은, 버퍼(650)의 값을 읽고 그 값을 저장 유닛(10[q][p])의 지정된 워드라인 내에 프로그래밍하도록 저장-유닛 액세스 인터페이스(230[q])에 명령하라고 아비터(660)에 지시한다(단계(S2075)). ECC 카운터를 3만큼 증분시킨 후에(단계(S2076)), 프로세싱 유닛(610)은 ECC 카운터 값이 임계값 예컨대 상수(l)보다 더 높거나 같은지 결정한다(단계(S2077)). 그러하면, 프로세스는 단계(S2069)로 진행하고; 그러하지 않으면, 변수(p)가 1만큼 증분된 후에(단계(S2079)), 프로세스는 미완료된 수직 ECC에 대한 프로그래밍을 계속하도록 단계(S2073)로 되돌아간다.
단계(S2061 내지 S2068)를 포함하는 루프는 DRAM(620)에 일시적으로 저장된 모든 수직 ECC가 지정된 저장 유닛 내에 완전히 프로그래밍될 때까지 반복적으로 수행된다. 구체적으로, 프로세싱 유닛(610)은 DRAM(620)에 일시적으로 저장된 3개 페이지의 수직 ECC를 멀티플렉서(640)를 거쳐 버퍼(650) 내에 저장하라고 DMA 컨트롤러(621)에 지시한다(단계(S2061)). 다음으로, 프로세싱 유닛(610)은, 버퍼(650)의 값을 읽고 그 값을 저장 유닛(10[q][p])의 지정된 워드라인 내에 프로그래밍하도록 저장-유닛 액세스 인터페이스(230[q])에 명령하라고 아비터(660)에 지시한다(단계(S2063)). ECC 카운터를 3만큼 증분시킨 후에(단계(S2065)), 프로세싱 유닛(610)은 ECC 카운터 값이 임계값 예컨대 상수(l)보다 더 높거나 같은지 결정한다(단계(S2067)). 그러하면, 프로세스는 단계(S2069)로 진행하고; 그러하지 않으면, 변수(p)가 1만큼 증분된 후에(단계(S2068)), 프로세스는 미완료된 수직 ECC에 대한 프로그래밍을 계속하도록 단계(S2061)로 되돌아간다. 마지막으로, 프로세싱 유닛(610)은 전자 디바이스에 의해 요청된 전체 데이터 프로그래밍이 완료되는지 결정한다(단계(S2069)). 그러하면, 프로세스는 종료되고; 그러하지 않으면, 멀티플렉서(640)는 DRAM(620)을 버퍼(650)에 결합시키도록 제어되고(단계(S2080)), 프로세스는 다음 RAID 그룹에 대한 데이터 프로그래밍을 계속하도록 단계(S2021)로 되돌아간다. 단계(S2033, S2063, S2075)의 상세는 도 8의 설명을 참조할 수 있다.
실시예는 도 1 내지 도 3, 도 6, 도 9 및 도 12에서 특정 구성요소를 갖는 것으로 설명되었지만, 본 발명의 취지로부터 벗어남이 없이 더 나은 성능을 달성하도록 부가적 구성요소가 포함될 수 있음을 주목해야 한다. 도 7a 내지 도 7b, 도 8, 도 10 내지 도 11, 도 14 내지 도 15 및 도 20a 내지 도 20d에 설명된 프로세스 흐름은 특정 순서로 일어나는 것으로 보이는 소정 수의 연산을 포함하지만, 이들 프로세스는 (예컨대, 병렬 프로세서 또는 멀티-스레딩 환경(multi-threading environment)을 사용하여) 병렬로 또는 직렬로 실행될 수 있는 더 많거나 더 적은 연산을 포함할 수 있음이 명백한 것이다.
본 발명이 예에 의해 그리고 바람직한 실시예의 관점에서 설명되었지만, 본 발명은 그 개시된 실시예로 한정되는 것은 아님을 이해해야 한다. 반대로, (당업자에게 명백하게 될 바와 같이) 다양한 수정 및 유사한 배열을 망라하려는 의도이다. 따라서, 첨부 청구범위의 범위는 모든 그러한 수정 및 유사한 배열을 아우르도록 가장 넓은 해석에 따라야 한다.

Claims (18)

  1. 아비터(arbiter)에 의해 수행되는, 플래시 메모리의 저장 유닛에 액세스하기 위한 방법으로서,
    데이터를 복수의 저장-유닛 액세스 인터페이스 중 하나에 각각 접속된 복수의 제1 저장 유닛에 제1 배취(batch)로 송신한 후에, 각각의 상기 제1 저장 유닛에 데이터 쓰기 커맨드를 발행하고, 그로써 각각의 상기 제1 저장 유닛이 물리적 데이터 프로그래밍을 시작하는 것을 가능하게 하는 단계; 및
    각각의 상기 제1 저장 유닛의 상기 물리적 데이터 프로그래밍 동안, 상기 데이터를 상기 저장-유닛 액세스 인터페이스 중 하나에 각각 접속된 복수의 제2 저장 유닛에 제2 배취로 송신하는 단계를 포함하는, 플래시 메모리의 저장 유닛에 액세스하기 위한 방법.
  2. 제1항에 있어서, 상기 제1 저장 유닛 및 상기 제2 저장 유닛 중 어느 하나는 복수의 SLC(Single-Level Cell) 또는 복수의 TLC(Triple-Level Cell)를 포함하되, 각각의 SLC는 하나의 정보 비트를 저장하고, 각각의 TLC는 3개의 정보 비트를 저장하는 것인, 플래시 메모리의 저장 유닛에 액세스하기 위한 방법.
  3. 제1항에 있어서, 상기 제1 저장 유닛 및 상기 제2 저장 유닛 중 하나에 송신되는 상기 데이터는 메시지 또는 수직 ECC(Error Correction Code)를 포함하는 것인, 플래시 메모리의 저장 유닛에 액세스하기 위한 방법.
  4. 제3항에 있어서, 각각의 상기 저장-유닛 액세스 인터페이스는 상기 메시지 또는 상기 수직 ECC에 따라 수평 ECC를 발생시키고, 상기 메시지 및 상기 메시지와 연관된 상기 발생된 수평 ECC, 또는 상기 수직 ECC 및 상기 수직 ECC와 연관된 상기 발생된 수평 ECC를 상기 제1 저장 유닛 또는 상기 제2 저장 유닛에 프로그래밍하는 것인, 플래시 메모리의 저장 유닛에 액세스하기 위한 방법.
  5. 제4항에 있어서, 상기 메시지, 상기 수직 ECC, 및 상기 메시지 및 상기 수직 ECC의 각각과 연관된 상기 수평 ECC는 RAID 그룹을 형성하는 것인, 플래시 메모리의 저장 유닛에 액세스하기 위한 방법.
  6. 제1항에 있어서, 상기 데이터 쓰기 커맨드를 수신한 후에, 상기 제1 저장 유닛 및 상기 제2 저장 유닛 중 어느 하나는 상기 데이터를 워드라인의 메모리 셀 내에 프로그래밍하도록 사용 중 상태에 들어가는 것인, 플래시 메모리의 저장 유닛에 액세스하기 위한 방법.
  7. 제1항에 있어서, 상기 제1 저장 유닛 중 하나에 송신되는 상기 데이터는 메시지를 포함하고, 상기 제2 저장 유닛 중 하나에 송신되는 상기 데이터는 수직 ECC(Error Correction Code)를 포함하는 것인 방법.
  8. 제7항에 있어서, 상기 제1 저장 유닛 중 하나 및 상기 제2 저장 유닛 중 하나는 서로 다른 다이에 구현되는 것인, 플래시 메모리의 저장 유닛에 액세스하기 위한 방법.
  9. 제1항에 있어서, 상기 제1 저장 유닛 중 하나 및 상기 제2 저장 유닛 중 하나는 독립적 CE(Chip Enable) 제어 신호를 갖는 것인, 플래시 메모리의 저장 유닛에 액세스하기 위한 방법.
  10. 플래시 메모리의 저장 유닛에 액세스하기 위한 장치로서,
    복수의 저장-유닛 액세스 인터페이스; 및
    상기 저장-유닛 액세스 인터페이스에 결합된 아비터로서, 데이터를 상기 저장-유닛 액세스 인터페이스 중 하나에 각각 접속된 복수의 제1 저장 유닛에 제1 배취로 송신한 후에, 각각의 상기 제1 저장 유닛에 데이터 쓰기 커맨드를 발행하고, 그로써 각각의 상기 제1 저장 유닛이 물리적 데이터 프로그래밍을 시작하는 것을 가능하게 하고, 각각의 상기 제1 저장 유닛의 상기 물리적 데이터 프로그래밍 동안, 상기 데이터를 상기 저장-유닛 액세스 인터페이스 중 하나에 각각 접속된 복수의 제2 저장 유닛에 제2 배취로 송신하는, 상기 아비터를 포함하는, 플래시 메모리의 저장 유닛에 액세스하기 위한 장치.
  11. 제10항에 있어서, 상기 제1 저장 유닛 및 상기 제2 저장 유닛 중 어느 하나는 복수의 SLC(Single-Level Cell) 또는 복수의 TLC(Triple-Level Cell)를 포함하되, 각각의 SLC는 하나의 정보 비트를 저장하고, 각각의 TLC는 3개의 정보 비트를 저장하는 것인, 플래시 메모리의 저장 유닛에 액세스하기 위한 장치.
  12. 제10항에 있어서, 상기 제1 저장 유닛 및 상기 제2 저장 유닛 중 하나에 송신되는 상기 데이터는 메시지 또는 수직 ECC(Error Correction Code)를 포함하는 것인, 플래시 메모리의 저장 유닛에 액세스하기 위한 장치.
  13. 제12항에 있어서, 각각의 상기 저장-유닛 액세스 인터페이스는 상기 메시지 또는 상기 수직 ECC에 따라 수평 ECC를 발생시키고, 상기 메시지 및 상기 메시지와 연관된 상기 발생된 수평 ECC, 또는 상기 수직 ECC 및 상기 수직 ECC와 연관된 상기 발생된 수평 ECC를 상기 제1 저장 유닛 또는 상기 제2 저장 유닛에 프로그래밍하는 것인, 플래시 메모리의 저장 유닛에 액세스하기 위한 장치.
  14. 제13항에 있어서, 상기 메시지, 상기 수직 ECC, 및 상기 메시지 및 상기 수직 ECC의 각각과 연관된 상기 수평 ECC는 RAID 그룹을 형성하는 것인, 플래시 메모리의 저장 유닛에 액세스하기 위한 장치.
  15. 제14항에 있어서, 상기 데이터 쓰기 커맨드를 수신한 후에, 상기 제1 저장 유닛 및 상기 제2 저장 유닛 중 어느 하나는 상기 데이터를 워드라인의 메모리 셀 내에 프로그래밍하도록 사용 중 상태에 들어가는 것인, 플래시 메모리의 저장 유닛에 액세스하기 위한 장치.
  16. 제10항에 있어서, 상기 제1 저장 유닛 중 하나에 송신되는 상기 데이터는 메시지를 포함하고, 상기 제2 저장 유닛 중 하나에 송신되는 상기 데이터는 수직 ECC(Error Correction Code)를 포함하는 것인, 플래시 메모리의 저장 유닛에 액세스하기 위한 장치.
  17. 제16항에 있어서, 상기 제1 저장 유닛 중 하나 및 상기 제2 저장 유닛 중 하나는 서로 다른 다이에 구현되는 것인, 플래시 메모리의 저장 유닛에 액세스하기 위한 장치.
  18. 제10항에 있어서, 상기 제1 저장 유닛 중 하나 및 상기 제2 저장 유닛 중 하나는 독립적 CE(Chip Enable) 제어 신호를 갖는 것인, 플래시 메모리의 저장 유닛에 액세스하기 위한 장치.
KR1020140109942A 2013-08-23 2014-08-22 플래시 메모리의 저장 유닛에 액세스하기 위한 방법 및 그 방법을 사용하는 장치 KR101641905B1 (ko)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US201361869561P 2013-08-23 2013-08-23
US61/869,561 2013-08-23
TW102148611 2013-12-27
TW102148611A TWI553656B (zh) 2013-08-23 2013-12-27 存取快閃記憶體中儲存單元的方法以及使用該方法的裝置

Publications (2)

Publication Number Publication Date
KR20150022724A true KR20150022724A (ko) 2015-03-04
KR101641905B1 KR101641905B1 (ko) 2016-07-22

Family

ID=52481498

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020140109942A KR101641905B1 (ko) 2013-08-23 2014-08-22 플래시 메모리의 저장 유닛에 액세스하기 위한 방법 및 그 방법을 사용하는 장치

Country Status (3)

Country Link
US (2) US9977714B2 (ko)
KR (1) KR101641905B1 (ko)
CN (2) CN110175088B (ko)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11614893B2 (en) 2010-09-15 2023-03-28 Pure Storage, Inc. Optimizing storage device access based on latency
CN110175088B (zh) * 2013-08-23 2022-11-11 慧荣科技股份有限公司 存取快闪存储器中储存单元的方法以及使用该方法的装置
TWI588833B (zh) * 2015-11-27 2017-06-21 群聯電子股份有限公司 資料程式化方法與記憶體儲存裝置
CN107193751B (zh) * 2017-05-19 2020-12-08 浪潮集团有限公司 一种Nandflash阵列的文件信息存储方法
US11314583B2 (en) 2020-08-18 2022-04-26 Micron Technology, Inc. Memory data correction using multiple error control operations
CN112634979B (zh) * 2021-01-18 2021-07-23 深圳市安信达存储技术有限公司 一种批量测试usb电子盘的方法及系统

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20090118031A (ko) * 2007-06-28 2009-11-17 인터내셔널 비지네스 머신즈 코포레이션 메모리 시스템에서의 에러 정정 및 검출을 위한 시스템 및 방법
KR20130051909A (ko) * 2011-11-09 2013-05-21 애플 인크. 비휘발성 메모리 내의 기입 실패로부터의 데이터 보호

Family Cites Families (71)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH06282449A (ja) * 1993-03-29 1994-10-07 Nec Corp メモリコントローラ
JP3264465B2 (ja) 1993-06-30 2002-03-11 株式会社日立製作所 記憶システム
EP0755055B1 (en) 1995-07-14 2002-01-16 Sony Corporation Transmitting recording and reproducing data
JP3430193B2 (ja) 1997-01-20 2003-07-28 株式会社日立製作所 ディジタル信号再生装置及びディジタル信号再生方法
US5991911A (en) 1997-11-14 1999-11-23 Cirrus Logic, Inc. Concurrent generation of ECC error syndromes and CRC validation syndromes in a DVD storage device
JP3307579B2 (ja) * 1998-01-28 2002-07-24 インターナショナル・ビジネス・マシーンズ・コーポレーション データ記憶システム
US8266367B2 (en) * 2003-12-02 2012-09-11 Super Talent Electronics, Inc. Multi-level striping and truncation channel-equalization for flash-memory system
US6622222B2 (en) 2001-04-26 2003-09-16 International Business Machines Corporation Sequencing data on a shared data bus via a memory buffer to prevent data overlap during multiple memory read operations
JP4049297B2 (ja) 2001-06-11 2008-02-20 株式会社ルネサステクノロジ 半導体記憶装置
KR100856399B1 (ko) 2002-01-23 2008-09-04 삼성전자주식회사 디코딩 방법 및 그 장치
US6871257B2 (en) * 2002-02-22 2005-03-22 Sandisk Corporation Pipelined parallel programming operation in a non-volatile memory system
DE10216999A1 (de) 2002-04-16 2003-11-06 Thomson Brandt Gmbh ECC-Block-Enkodierer und -Dekodierer mit reduziertem RAM-Speicherbedarf
KR20030000017A (ko) 2002-11-29 2003-01-03 (주) 라모스테크놀러지 플래시 메모리 제어 장치 및 플래시 메모리 제어 방법
US7136986B2 (en) 2002-11-29 2006-11-14 Ramos Technology Co., Ltd. Apparatus and method for controlling flash memories
US7020757B2 (en) 2003-03-27 2006-03-28 Hewlett-Packard Development Company, L.P. Providing an arrangement of memory devices to enable high-speed data access
KR100606812B1 (ko) 2004-03-08 2006-08-01 엘지전자 주식회사 비디오 디코딩 시스템
JP4410188B2 (ja) 2004-11-12 2010-02-03 株式会社東芝 半導体記憶装置のデータ書き込み方法
US7212436B2 (en) 2005-02-28 2007-05-01 Micron Technology, Inc. Multiple level programming in a non-volatile memory device
US7451380B2 (en) * 2005-03-03 2008-11-11 International Business Machines Corporation Method for implementing enhanced vertical ECC storage in a dynamic random access memory
US20060256615A1 (en) 2005-05-10 2006-11-16 Larson Thane M Horizontal and vertical error correction coding (ECC) system and method
JP2007286813A (ja) 2006-04-14 2007-11-01 Sony Corp メモリ制御装置、メモリ制御方法
US7617368B2 (en) 2006-06-14 2009-11-10 Nvidia Corporation Memory interface with independent arbitration of precharge, activate, and read/write
US8046629B1 (en) 2006-07-24 2011-10-25 Marvell World Trade Ltd. File server for redundant array of independent disks (RAID) system
KR20080017982A (ko) * 2006-08-23 2008-02-27 삼성전자주식회사 플래시 메모리 시스템 및 그 프로그램 방법
US7904783B2 (en) * 2006-09-28 2011-03-08 Sandisk Corporation Soft-input soft-output decoder for nonvolatile memory
US9495241B2 (en) * 2006-12-06 2016-11-15 Longitude Enterprise Flash S.A.R.L. Systems and methods for adaptive data storage
US9116823B2 (en) 2006-12-06 2015-08-25 Intelligent Intellectual Property Holdings 2 Llc Systems and methods for adaptive error-correction coding
US7567471B2 (en) * 2006-12-21 2009-07-28 Intel Corporation High speed fanned out system architecture and input/output circuits for non-volatile memory
KR100866625B1 (ko) * 2007-02-26 2008-11-03 삼성전자주식회사 Mmc 또는 sd 프로토콜을 사용하는 다수의 메모리장치들을 인터페이스하는 방법 및 시스템
JP2008287404A (ja) 2007-05-16 2008-11-27 Hitachi Ltd 読み出しによる非アクセスメモリセルのデータ破壊を検出及び回復する装置、及びその方法
JP5045242B2 (ja) * 2007-05-30 2012-10-10 富士通セミコンダクター株式会社 半導体メモリ、半導体メモリの動作方法およびシステム
TW200921384A (en) 2007-11-15 2009-05-16 Genesys Logic Inc NOR interface flash memory device and access method thereof
JP2009187139A (ja) 2008-02-04 2009-08-20 Hitachi Ltd ストレージシステム
US8275945B2 (en) 2008-02-05 2012-09-25 Spansion Llc Mitigation of flash memory latency and bandwidth limitations via a write activity log and buffer
JP2009217640A (ja) 2008-03-11 2009-09-24 Ricoh Co Ltd データ転送制御装置
CN101286947B (zh) 2008-05-30 2010-12-01 杭州华三通信技术有限公司 数据输出控制方法和装置
CN101656104B (zh) * 2008-08-22 2012-07-04 群联电子股份有限公司 快闪存储器储存系统及其数据写入方法
US20100082854A1 (en) 2008-09-27 2010-04-01 Lars Rossen Real-Time/Batch Interface Arbiter
CN101930799B (zh) 2009-06-23 2013-05-29 北京兆易创新科技股份有限公司 具有检错/纠错电路的非挥发存储器及其读写数据的方法
US8839255B2 (en) 2009-07-23 2014-09-16 Empire Technology Development Llc Scheduling of threads by batch scheduling
US7856528B1 (en) 2009-08-11 2010-12-21 Texas Memory Systems, Inc. Method and apparatus for protecting data using variable size page stripes in a FLASH-based storage system
US8473677B2 (en) 2009-09-29 2013-06-25 Cleversafe, Inc. Distributed storage network memory access based on memory state
US8176220B2 (en) 2009-10-01 2012-05-08 Oracle America, Inc. Processor-bus-connected flash storage nodes with caching to support concurrent DMA accesses from multiple processors
US9092340B2 (en) 2009-12-18 2015-07-28 Sandisk Technologies Inc. Method and system for achieving die parallelism through block interleaving
US8208337B2 (en) 2009-12-21 2012-06-26 Macronix International Co., Ltd. Operation method and leakage controller for a memory and a memory applying the same
US8355280B2 (en) 2010-03-09 2013-01-15 Samsung Electronics Co., Ltd. Data storage system having multi-bit memory device and operating method thereof
TWI436363B (zh) 2010-05-11 2014-05-01 Silicon Motion Inc 資料儲存裝置以及快閃記憶體之資料寫入方法
US8503233B2 (en) 2010-07-07 2013-08-06 Skymedi Corporation Method of twice programming a non-volatile flash memory with a sequence
TWI442222B (zh) * 2010-07-21 2014-06-21 Silicon Motion Inc 快閃記憶裝置與快閃記憶裝置管理方法
KR101732030B1 (ko) 2010-12-22 2017-05-04 삼성전자주식회사 데이터 저장 장치 및 그것의 동작 방법
US8644104B2 (en) * 2011-01-14 2014-02-04 Rambus Inc. Memory system components that support error detection and correction
KR20120110672A (ko) 2011-03-30 2012-10-10 주식회사 히타치엘지 데이터 스토리지 코리아 낸드 플래시 메모리의 관리 데이터 기록 장치 및 방법
CN102779548A (zh) 2011-05-09 2012-11-14 深圳市晶凯电子技术有限公司 用闪存介质作为存储体进行分级管理的固态存储装置及其构建方法
TWI459389B (zh) 2011-06-09 2014-11-01 Winbond Electronics Corp 半導體記憶體裝置、記憶體裝置讀取程式以及方法
KR101785007B1 (ko) 2011-06-14 2017-11-07 삼성전자주식회사 멀티-비트 메모리 장치를 포함한 데이터 저장 시스템 및 그것의 온-칩 버퍼 프로그램 방법
KR20130010343A (ko) 2011-07-18 2013-01-28 삼성전자주식회사 플래시 메모리 장치
US8856616B1 (en) * 2011-07-29 2014-10-07 Proton Digital Systems, Inc. Two dimensional encoding for non-volatile memory blocks
JP5524279B2 (ja) 2011-09-13 2014-06-18 株式会社東芝 情報処理装置および情報処理方法
JP2013089082A (ja) 2011-10-19 2013-05-13 Toshiba Corp メモリコントローラ、半導体記憶システムおよびメモリ制御方法
TWI430092B (zh) 2011-10-27 2014-03-11 Silicon Motion Inc 三階儲存單元的快閃記憶體裝置及其控制方法
JP5768022B2 (ja) * 2012-03-19 2015-08-26 株式会社東芝 メモリコントローラ、記憶装置、誤り訂正装置および誤り訂正方法
JP5597224B2 (ja) * 2012-05-11 2014-10-01 株式会社東芝 情報記憶装置およびメモリ異常処理方法
US8996960B1 (en) 2012-06-26 2015-03-31 Inphi Corporation Vertical error correction code for DRAM memory
KR102147359B1 (ko) 2012-06-29 2020-08-24 삼성전자 주식회사 비휘발성 메모리 장치의 관리 방법 및 비휘발성 메모리 장치
US20150160999A1 (en) 2012-07-13 2015-06-11 Samsung Electronics Co., Ltd. Solid state drive controller, solid state drive, data processing method of solid state drive, multi-channel solid state drive, raid controller and computer-readable recording medium having recorded therein computer program for providing sequence information to solid state drive
US8464095B1 (en) 2012-11-15 2013-06-11 DSSD, Inc. Method and system for multi-dimensional raid reconstruction and defect avoidance
US9141299B2 (en) 2013-03-14 2015-09-22 Intel Corporation Method for reducing power consumption in solid-state storage device
CN110175088B (zh) 2013-08-23 2022-11-11 慧荣科技股份有限公司 存取快闪存储器中储存单元的方法以及使用该方法的装置
TWI649760B (zh) 2013-08-23 2019-02-01 慧榮科技股份有限公司 存取快閃記憶體中儲存單元的方法以及使用該方法的裝置
KR102065665B1 (ko) 2013-10-17 2020-01-13 삼성전자 주식회사 더미 워드라인을 포함하는 불휘발성 메모리 장치, 메모리 시스템 및 메모리 시스템의 동작방법
US9093158B2 (en) 2013-12-06 2015-07-28 Sandisk Technologies Inc. Write scheme for charge trapping memory

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20090118031A (ko) * 2007-06-28 2009-11-17 인터내셔널 비지네스 머신즈 코포레이션 메모리 시스템에서의 에러 정정 및 검출을 위한 시스템 및 방법
KR20130051909A (ko) * 2011-11-09 2013-05-21 애플 인크. 비휘발성 메모리 내의 기입 실패로부터의 데이터 보호

Also Published As

Publication number Publication date
US9977714B2 (en) 2018-05-22
CN104425018B (zh) 2019-07-23
US20180239670A1 (en) 2018-08-23
CN110175088A (zh) 2019-08-27
CN104425018A (zh) 2015-03-18
CN110175088B (zh) 2022-11-11
KR101641905B1 (ko) 2016-07-22
US10552262B2 (en) 2020-02-04
US20150058662A1 (en) 2015-02-26

Similar Documents

Publication Publication Date Title
KR101677533B1 (ko) 플래시 메모리의 저장 유닛에 액세스하기 위한 방법 및 그 방법을 사용하는 장치
KR101606389B1 (ko) 플래시 메모리의 저장 유닛에 액세스하기 위한 방법 및 그 방법을 사용하는 장치
KR101606392B1 (ko) 플래시 메모리의 저장 유닛에 액세스하기 위한 방법 및 그 방법을 사용하는 장치
KR101677534B1 (ko) 플래시 메모리의 저장 유닛에 액세스하기 위한 방법 및 그 방법을 사용하는 장치
KR101606192B1 (ko) 플래시 메모리의 저장 유닛에 액세스하기 위한 방법 및 그 방법을 사용하는 장치
KR101641905B1 (ko) 플래시 메모리의 저장 유닛에 액세스하기 위한 방법 및 그 방법을 사용하는 장치

Legal Events

Date Code Title Description
A201 Request for examination
AMND Amendment
E601 Decision to refuse application
AMND Amendment
X701 Decision to grant (after re-examination)
GRNT Written decision to grant