KR101202620B1 - 복수-스트림 업데이팅을 갖는 비휘발성 메모리 및 방법 - Google Patents

복수-스트림 업데이팅을 갖는 비휘발성 메모리 및 방법 Download PDF

Info

Publication number
KR101202620B1
KR101202620B1 KR1020077015224A KR20077015224A KR101202620B1 KR 101202620 B1 KR101202620 B1 KR 101202620B1 KR 1020077015224 A KR1020077015224 A KR 1020077015224A KR 20077015224 A KR20077015224 A KR 20077015224A KR 101202620 B1 KR101202620 B1 KR 101202620B1
Authority
KR
South Korea
Prior art keywords
data
block
page
memory
sectors
Prior art date
Application number
KR1020077015224A
Other languages
English (en)
Other versions
KR20070101264A (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 US11/016,285 external-priority patent/US7315916B2/en
Application filed by 쌘디스크 코포레이션 filed Critical 쌘디스크 코포레이션
Publication of KR20070101264A publication Critical patent/KR20070101264A/ko
Application granted granted Critical
Publication of KR101202620B1 publication Critical patent/KR101202620B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C16/00Erasable programmable read-only memories
    • G11C16/02Erasable programmable read-only memories electrically programmable
    • G11C16/06Auxiliary circuits, e.g. for writing into memory
    • G11C16/34Determination of programming status, e.g. threshold voltage, overprogramming or underprogramming, retention
    • 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/0638Organizing or formatting or addressing of data
    • G06F3/064Management of blocks
    • 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
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0614Improving the reliability of storage systems
    • G06F3/0616Improving the reliability of storage systems in relation to life time, e.g. increasing Mean Time Between Failures [MTBF]
    • 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
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C16/00Erasable programmable read-only memories
    • G11C16/02Erasable programmable read-only memories electrically programmable
    • G11C16/06Auxiliary circuits, e.g. for writing into memory
    • G11C16/10Programming or data input circuits
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/72Details relating to flash memory management
    • G06F2212/7203Temporary buffering, e.g. using volatile buffer or dedicated buffer blocks
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C16/00Erasable programmable read-only memories
    • G11C16/02Erasable programmable read-only memories electrically programmable
    • G11C16/06Auxiliary circuits, e.g. for writing into memory
    • G11C16/10Programming or data input circuits
    • G11C16/102External programming circuits, e.g. EPROM programmers; In-circuit programming or reprogramming; EPROM emulators

Abstract

페이지 단위로 프로그램될 수 있고 각 페이지가 1회 프로그램가능한 복수의 섹터들을 갖는 메모리에서, 연속적 기입들이 순차적일지라도, 업데이트 블록에 기록된 데이터는 단편화되어 비순차적일 수 있다. 업데이트 블록에 업데이트 데이터를 기록하는 대신에, 데이터는 적어도 2개의 인터리빙 스트림들에 기록되고 있다. 완전 페이지의 데이터가 이용가능할 때, 업데이트 블록에 기록된다. 그렇지 않다면, 완전 페이지의 데이터가 업데이트 블록에 옮길 수 있게 될 때까지 스크래치 패드 블록에 임시로 기록된다. 바람직하게, 파이프라인 동작은 호스트 기입 명령이 완전 페이지가 기입될 수도 있을 것임을 나타내는 즉시로 업데이트 블록에의 기록이 셋업될 수 있게 한다. 실제 기입 데이터가 중단에 기인하여 완전하지 않다면, 셋업은 취소될 것이고 대신에 기록은 스크래치 패드 블록에 행해진다.
비휘발성, 메모리, 업데이트,

Description

복수-스트림 업데이팅을 갖는 비휘발성 메모리 및 방법{NON-VOLATILE MEMORY AND METHOD WITH MULTI-STREAM UPDATING}
이 발명은 일반적으로 비휘발성 플래시 메모리 시스템들의 동작에 관한 것으로, 특히 비휘발성 플래시 메모리 내에서 데이터를 프로그램하는 보다 효율적인 방법들에 관한 것이다.
하나 이상의 집적회로 칩들 상에 형성된 플래시 EEPROM(전기적 소거가능 및 프로그램가능 독출전용 메모리) 셀들의 어레이를 채용하는, 특히 소형 폼 팩터 카드들 형태로 최근 사용되는 많은 상업적으로 성공한 비휘발성 메모리 제품들이 있다. 메모리 제어기는 통상적으로 반드시 별도의 집적회로 칩 상에 있을 필요는 없으나, 카드가 착탈가능하게 접속되는 호스트와 인터페이스하여 카드 내 메모리 어레이의 동작을 제어한다. 이러한 제어기는 통상적으로 마이크로프로세서, 어떤 비휘발성 독출전용 메모리(ROM), 휘발성 랜덤 액세스 메모리(RAM) 및 이를테면 데이터의 프로그래밍 및 독출동안 데이터가 제어기를 통과할 때 데이터로부터 오류정정 코드(ECC)를 계산하는 회로와 같은 하나 이상의 특별한 회로들을 포함한다. 시판되는 카드들 중 일부는 CF(CompactFlash™) 카드, MMC(MultiMedia cards), SD(Secure Digital 카드, P-tag(Personal tags) 및 메모리 스틱 카드이다. 호스트들은 개인용 컴퓨터들, 노트북 컴퓨터들, PDA들, 각종 데이터 통신 디바이스들, 디지털 카메라들, 셀룰라 전화들, 휴대 오디오 플레이어들, 자동차 사운드 시스템들, 및 유사 유형의 장비를 포함한다. 어떤 시스템들에서, 착탈가능 카드는 제어기를 포함하지 않으며 호스트가 카드 내 메모리 어레이의 동작을 제어한다. 이러한 유형의 메모리 시스템의 예들은 스마트 미디어 카드 및 xD 카드를 포함한다. 이에 따라, 메모리 어레이의 제어는 카드 내 제어기 상의 소프트웨어에 의해서 혹은 호스트 내 제어 소프트웨어에 의해 달성될 수 있다. 메모리 카드 구현 외에도, 이러한 유형의 메모리는 대안적으로 각종 유형들의 호스트 시스템들에 내장될 수 있다. 착탈가능 및 내장된 애플리케이션들 모두에서, 호스트 데이터는 메모리 제어 소프트웨어에 의해 구현되는 저장 방법에 따라 메모리 어레이에 저장될 수 있다.
2가지 일반적인 메모리 셀 어레이 구조들이 NOR 및 NAND로서 상업적으로 적용될 수 있다. 전형적인 NOR 어레이에서, 메모리 셀들은 워드라인들에 접속된 게이트들이 셀들의 행들을 따라 확장하면서 열 방향으로 확장하는 비트라인 소스 확산부와 드레인 확산부 사이에 접속된다. 메모리 셀은 소스와 드레인 사이의 셀 채널영역의 적어도 일부 상에 위치한 적어도 하나의 저장소자를 포함한다. 이에 따라 저장소자들에 전하의 프로그램되는 레벨이 셀들의 동작특징을 제어하며, 그러면 어드레스된 메모리 셀에 적합한 전압들을 인가함으로써 독출될 수 있다. 이러한 셀들, 메모리 시스템들에 이들의 사용들 및 이들을 제조하는 방법들의 예들은 미국특허 5,070,032, 5,095,344, 5,313,421, 5,315,541, 5,343,063, 5,661,053, 6,222,762에 주어져 있다. 이들 특허들은 이 출원에 언급된 모든 다른 특허들 및 특허출원과 함께 전부를 참조문헌으로 여기 포함시킨다.
NAND 어레이는 셀들의 열들을 형성하기 위해 개개의 비트라인들과 기준전위 간에 하나 이상의 선택 트랜지스터들과 함께 접속된, 이를테면 16 혹은 32개의, 3이상의 메모리 셀들의 직렬 스트링들을 이용한다. 워드라인들은 상당수의 이들 열들 내 셀들을 가로질러 확장한다. 열 내의 개개의 셀은 스트링에 흐르는 전류가 어드레스된 셀 내 저장된 전하레벨에 따르도록 스트링 내 나머지 셀들이 확실히 턴 온 되게 함으로써 프로그래밍 동안 독출 및 검증된다. 메모리 시스템의 일부로서 NAND 구조 및 이들의 동작의 예들은 미국특허 5,570,315, 5,774,397, 6,046,935, 및 6,522,580에서 볼 수 있다.
앞에 언급된 특허들에서 논해진 바와 같이, 현 플래시 EEPROM 어레이들의 전하 저장 소자들은 통상적으로 도전성의 도핑된 폴리실리콘 물질로부터 형성되는, 가장 일반적으로 전기적으로 도전성의 플로팅 게이트들이다. 플래시 EEPROM 시스템들에서 유용한 대안적 유형의 메모리 셀은 비휘발성으로 전하를 저장하기 위해 도전성 플로팅 게이트 대신 비도전성 유전물질을 이용한다. 산화실리콘, 질화실리콘, 산화실리콘(ONO)으로 형성되는 3중층 유전체가 메모리 셀 채널 위에 반도전성 기판의 표면과 도전성 제어 게이트 사이에 개재된다. 셀은 셀 채널로부터 질화물에 전자들을 주입함으로써 프로그램되며, 이들은 제한된 영역에 트랩되어 저장되고, 이 질화물에 핫 정공들을 주입함으로써 소거된다. 유전 저장소자들을 채용하는 몇몇의 특정의 셀 구조들 및 어레이들은 Harari 등의 미국특허출원공개 2003/0109093에 기술되어 있다.
대부분의 모든 집적회로 애플리케이션들에서처럼, 일부 집적회로 기능을 구현하는데 요구되는 실리콘 기판 면적을 축소시키려는 압력이 플래시 EEPROM 메모리 셀 어레이들에서도 존재한다. 주어진 크기의 메모리 카드와 다른 유형들의 패키지들의 저장용량을 증가시키기 위해서, 혹은 용량을 증가시킴과 아울러 크기를 감소시키기 위해서, 실리콘 기판의 주어진 면적 내에 저장될 수 있는 디지털 데이터량을 증가시키는 것이 계속적으로 요망된다. 데이터의 저장밀도를 증가시키는 한 방법은 메모리 셀당 및/또는 저장단위 혹은 소자당 2이상 비트의 데이터를 저장하는 것이다. 이것은 저장소자의 전하 레벨 전압범위의 윈도우를 3이상 상태들로 분할함으로써 달성된다. 이러한 4상태들의 사용으로 각 셀은 2비트 데이터를, 8상태는 저장소자당 3비트의 데이터를, 등등을 행할 수 있게 된다. 플로팅 게이트들을 사용하는 복수상태 플래시 EEPROM 구조들 및 이들의 동작은 미국특허 5,043,940 및 5,172,338에 기술되어 있고, 유전 플로팅 게이트들을 사용하는 구조들에 대해선 언급한 미국특허출원공개 20030109093에 기재되어 있다. 복수상태 메모리 셀 어레이의 선택된 부분들은 미국특허 5,930,167 및 6,456,528에 기술된 방식으로, 여러 가지 이유로 2상태(바이너리)로 동작될 수도 있으며, 이들 특허는 이 출원에 인용된 모든 특허들 및 특허출원들과 함께 전부를 참조문헌으로 여기 포함시킨다.
전형적인 플래시 EEPROM 어레이의 메모리 셀들은 함께 소거되는 이산 블록들의 셀들로 분할된다(소거블록). 즉, 소거블록은 소거단위로서 동시에 소거될 수 있는 최소 수의 셀들이다. 각 소거블록은 통상적으로 1이상의 페이지들의 데이터를 저장하며, 페이지는 프로그래밍 및 독출의 최소단위이며, 그러나 2이상 페이지가 서로 다른 서브-어레이들 혹은 플레인들에서 병렬로 프로그램 혹은 독출될 수도 있다. 통상적으로 각 페이지는 하나 이상의 섹터들의 데이터를 저장하고, 섹터 크기는 호스트 시스템에 의해 정의된다. 예로서의 섹터는 자기 디스크 드라이브들에 대해 설정된 표준에 따라, 512바이트의 사용자 데이터와, 이에 더하여 사용자 데이터 및/또는 이들이 저장된 소거블록에 관한 몇 바이트의 오버헤드 정보를 포함한다. 통상적으로 이러한 메모리들은 각 소거 블록 내에 16, 32 이상의 페이지들로 구성되고, 각 페이지는 하나 혹은 소수의 호스트 섹터들의 데이터를 저장한다.
사용자 데이터를 메모리 어레이에 프로그램하고 이로부터 사용자 데이터를 독출하는 동안 병행도를 증가시키기 위해서, 통상적으로 어레이는, 섹터들의 데이터가 몇몇의 혹은 모든 플레인들 각각에 프로그램되거나 이로부터 독출이 동시에 행해지도록 병행 동작이 될 수 있게 하는 이들 자신의 레지스터들 및 그 외 회로를 내장한 일반적으로 플레인이라고 칭하는 서브-어레이들로 분할된다. 단일 집적회로 상의 어레이는 물리적으로 플레인들로 분할될 수도 있고, 혹은 각 플레인은 별도의 하나 이상의 집적회로 칩들로부터 형성될 수도 있다. 이러한 메모리 구현의 예들은 미국특허 5,798,968 및 5,890,192에 기술되어 있다.
메모리를 더욱 효율적으로 관리하기 위해서, 소거블록들은 가상의 블록들 혹은 메타블록들을 형성하게 함께 링크될 수 있다. 즉, 각 메타블록은 각 플레인으로부터 소거블록 하나를 포함하게 정의된다. 메타블록의 사용자는 미국특허 6,763,424에 기술되어 있다. 메타블록은 데이터를 프로그래밍 및 독출하기 위한 목적지로서 호스트 논리 블록 어드레스에 의해 확인된다. 유사하게, 메타블록의 모든 소거블록들은 함께 소거된다. 메타블록은 메타블록 내 각 소거블록으로부터 한 페이지를 포함하는 메타페이지 단위로 프로그램될 수 있다. 이러한 큰 블록들 및/또는 메타블록들에 대해 동작되는 메모리 시스템 내 제어기는 호스트로부터 수신된 논리블록 어드레스들(LBA)과 메모리 셀 어레이 내 물리 블록번호들(PBN)간의 변환을 포함한 다수의 기능들을 수행한다. 통상적으로 소거블록들 내 개개의 페이지들은 블록 어드레스 내 오프셋들에 의해 확인된다. 어드레스 변환은 흔히 논리 블록번호(LBN)와 논리 페이지의 중간 텀들(terms)의 사용을 수반한다. 메타블록들을 사용하는 메모리 시스템에서, 메타블록은 메모리 어레이의 소거의 유효한 최소단위일 수 있다. 이에 따라, 최소단위의 소거(블록)는 메모리 구조에 따라 소거블록일 수도 있고 혹은 메타블록일 수도 있다. "블록"이라는 용어는 구조에 따라 소거블록을 지칭할 수도 있고 아니면 메타블록을 지칭할 수도 있다. 유사하게, "페이지"라는 용어는 메모리 시스템의 최소단위의 프로그래밍을 지칭할 수 있다. 이것은 단일 소거블록 내 페이지일 수도 있고 아니면 메모리 시스템의 구조에 따라 몇몇 소거블록들에 걸쳐 확장하는 메타페이지일 수도 있다.
메타블록에 저장된 데이터는 종종 업데이트되며, 업데이트할 가능성은 메타블록의 데이터 용량이 증가함에 따라 증가한다. 한 메타블록의 업데이트된 섹터들은 정규로 또 다른 메타블록에 기입된다. 변경되지 않은 섹터들은 데이터를 결합(consolidate)하기 위해서, 동일 프로그래밍 동작의 일부로서, 원 메타블록에서 새로운 메타블록으로 카피된다. 대안적으로, 변경되지 않은 데이터는 업데이트된 데이터로 단일 메타블록에 나중에 다시 결합할 때까지 원 메타블록 내 남아있을 수 도 있다. 현 데이터를 새로운 블록에 결합하고 폐용 데이터만을 내포한 블록을 소거하는 동작들을 일반적으로 "가비지 수거(garbage collection)" 동작이라 한다.
소거된 블록 풀(pool)에 어떤 가외의 블록들을 유지하여 큰 블록 혹은 메타블록 시스템들을 동작시키는 것이 일반적이다. 블록의 용량 미만의 하나 이상의 페이지들의 데이터가 업데이트되고 있을 때, 업데이트된 페이지들을 풀로부터 소거된 블록에 기입하고 이어서 변경되지 않은 페이지들의 데이터를 원 블록에서 소거 풀 블록에 카피하는 것이 통상적이다. 이 기술의 변형예들이 언급한 미국특허 6,763,424에 기술되어 있다. 시간이 지남에 따라, 호스트 데이터 파일들이 재기입되고 업데이트된 결과로서, 많은 블록들은 비교적 소수의 자신의 페이지들이 유효 데이터를 내포하고 나머지 페이지들은 더 이상 현재 것이 아닌 데이터를 내포하는 결과로 될 수 있다. 어레이의 데이터 저장용량을 효율적으로 사용할 수 있기 위해서, 유효 데이터의 논리적으로 관계된 데이터 페이지들은 수시로 복수의 블록들 중의 단편들을 함께 모아 소수의 블록들에 함께 결합한다. 이 프로세스를 일반적으로 "가비지 수거"라고 한다.
어떤 메모리 시스템들에서, 물리적 메모리 셀들은 2이상의 존(zone)들로 그룹으로 분할된다. 존은 논리 블록의 명시된 범위가 맵핑되는 물리 메모리 혹은 메모리 시스템의 어떤 분할된 부분집합일 수 있다. 예를 들면, 64메가바이트의 데이터를 저장할 수 있는 메모리 시스템은 존 당 16메가바이트 데이터를 저장하는 4개의 존들로 분할될 수도 있다. 논리 블록 어드레스들의 범위는 4개의 그룹들로 분할되고 한 그룹은 4개 존들 각각의 물리 블록들에 할당된다. 논리 블록 어드레스들은 전형적인 구현에서, 각각의 데이터가 논리 블록 어드레스들이 맵핑되는 단일 물리 존 외부에 결코 기입되지 않게 구속된다. 플레이들 각각이 자신의 어드레싱, 프로그래밍 및 독출회로들을 갖는 이들 플레인들로 분할되는 메모리 셀 어레이에서, 각 존은 바람직하게는 통상적으로 플레인들 각각으로부터 동일 수의 블록들로 복수의 존들로부터의 블록들을 포함한다. 존들은 주로, 논리를 물리로의 변환과 같은 어드레스 관리를 단순화하여 변환 테이블들을 보다 작게 함으로써 이들 테이블들을 유지하는데 필요한 RAM 메모리를 적게 하고 메모리의 현 활성영역을 어드레스하는 액세스 시간들을 보다 빠르게 하는데 사용되는데, 그리나 이들의 각각의 특성 때문에 마모 레벨링은 최적에 못 미칠 수 있다.
개개의 플래시 EEPROM 셀들은 1이상 비트들의 데이터를 나타내는 전하 저장소자 혹은 단위에 전하량을 저장한다. 저장소자의 전하 레벨은 셀의 저장상태를 독출하는 토대로서 사용되는 메모리 셀의 임계전압(일반적으로 VT라 함)을 제어한다. 임계 전압 윈도우는 메모리 셀의 2이상의 저장상태들의 각각에 하나씩으로 일반적으로 다수의 범위들로 분할된다. 이들 범위들은 개개의 셀들의 저장상태들을 판정할 수 있게 하는 공칭 센싱 레벨을 포함하는 가드밴드들에 의해 분리된다. 이들 저장레벨들은 이웃 혹은 다른 관계된 메모리 셀들, 페이지들 혹은 블록들에서 수행되는 전하 교란 프로그래밍, 독출 혹은 소거동작들의 결과로서 시프트한다. 그러므로 오류 정정 코드들(ECC)은 통상적으로 제어기에 의해 계산되고 프로그램되는 호스트 데이터와 함께 저장되어 데이터를 검증하고 필요하다면 어떤 레벨의 데이터 정정을 수행하기 위해 독출시 사용된다. 또한, 전하레벨들을 시프트하는 것은 교란동작들 이 이들을 이들의 정의된 범위들을 완전히 벗어나 시프트하게 하여 이에 따라 오류 데이터가 독출되게 하기 전에, 수시로 이들의 상태 범위들의 중앙들로 다시 복구될 수 있다. 데이터 리프레시 혹은 스크러브라 하는 이러한 프로세스는 미국특허 5,532,962 및 5,909,449에 기술되어 있다.
어떤 메모리 어레이들에서, 페이지는 복수 섹터들의 데이터를 유지할 수 있는 소거블록의 부분으로 구성될 수 있다. 일단 페이지가 기입되었으면, 추가의 기입이 가능하게 되면 이미 기입된 데이터를 변질시킬 수 있다. 이러한 시스템을 사용하는 메모리 어레이들에 있어서, 페이지는 동일 워드라인에 접속된 한 세트의 메모리 셀들에 의해 정의될 수 있다. 이러한 메모리 어레이들은 페이지의 크기미만인 량들로 데이터가 수신되는 경우 비효율적으로 프로그램될 수 있다. 예를 들면, 데이터가 한 번에 한 섹터로 수신되는 경우, 단지 한 섹터만이 페이지에 프로그램될 수 있다. 이미 저장된 데이터의 섹터를 변질시킬 위험이 없이는 어떠한 추가의 데이터도 페이지에 프로그램될 수 없다. 종종 일련의 단일 섹터들이 이들 사이에 어떤 지연을 갖고 수신될 수 있다. 이 경우, 각 섹터는 메모리 어레이의 별도의 페이지에 기입된다. 이에 따라, 섹터들은 메모리 어레이에서 공간 이용 방법에 비효율적인 방식으로 저장된다. 복수레벨 로직이 사용되는 경우, 메모리 셀들은 근처 셀들의 추후 프로그래밍의 영향에 특히 민감하다. 또한, 복수레벨 셀들의 프로그래밍은 일반적으로 일 그룹의 셀들을 제1 페이지의 데이터로 프로그램하고 나중에 셀들을 제2 페이지의 데이터로 프로그램함으로써 행해진다. 제2 페이지의 데이터의 프로그래밍은 어떤 경우들에 있어선 제1 페이지의 데이터의 변질을 야기할 수 있다. 그러므로, 페이지 미만의 량들로 메모리 어레이가 데이터를 수신할 때 복수섹터 페이지를 구비하는 메모리 어레이에 데이터를 저장하는 보다 효율적인 방법에 대한 필요성이 있다. 일 그룹의 복수 레벨 셀들을 프로그램할 때 후속 페이지의 프로그래밍시 제1 페이지의 데이터의 변조를 방지하는 방법에 대한 필요성도 있다.
<요약>
블록을 소거단위로서 갖는 메모리 어레이에서, 하나 이상의 블록들은 스크래치 패드 블록들로서 지정될 수 있고 메모리 시스템의 성능을 향상시키는데 사용될 수 있다. 스크래치 패드 블록은 데이터가 낮은 병행도로 스크래치 패드 블록에 기입되고 이어서 고 병행도로 메모리 어레이 내 또 다른 위치에 카피되도록 버퍼로서 동작할 수 있다. 데이터는 또 다른 위치에 보다 효율적으로 기입될 수 있을 때까지 스크래치 패드 블록에 축적될 수 있다. 복수-섹터 페이지들을 갖는 메모리들에서, 섹터들은 완전 페이지가 시스템의 최대 병행성을 사용하여 기입될 수 있을 때까지 축적될 수 있다. 복수-레벨 셀 메모리들에서, 하위 페이지는 상위 및 하위 페이지들이 함께 저장되게 상위 페이지가 입수될 수 있을 때까지 스크래치 패드 블록에 저장될 수 있다.
특정 프로그램 동작의 병행도는 함께 프로그램되는 데이트의 비트수에 비례한다. 이에 따라, 대량의 데이터를 함께 프로그램하는 것은 높은 병행성의 기입으로 간주되고 소량의 데이터를 함께 프로그램하는 것은 낮은 병행성인 것으로 간주된다. 페이지 미만의 병행성이 사용될 때, 메모리 어레이 내 공간은 낭비될 수 있고 이 낭비된 공간은 가비지 수거가 보다 자주 수행되어야 하고 따라서 메모리 시 스템의 효율에 악영향을 미침을 의미한다. 때때로, 소량의 데이터가 메모리 시스템에 저장되어야 한다. 이들 적은 수의 기입들을 한 위치의 스크래치 패드 블록에 기입하고, 나중에 이들을 함께 또 다른 위치에 높은 병행성으로 함께 기입함으로써, 메모리 시스템의 효율이 향상될 수 있다.
복수 섹터들의 데이터로 구성된 페이지의 최소 단위의 프로그램을 갖는 메모리 시스템에서, 1 페이지 미만인 량들로 수신되는 데이터를 저장하는 방법이 개시된다. 스크래치 패드 블록으로서 지정된 블록은 완전 페이지가 플래시 메모리 어레이에 기입될 수 있을 때까지, 수신된 섹터들을 저장하는데 사용된다. 제1 섹터는 스크래치 패드 블록의 제1 페이지에 저장된다. 이어서, 수신된 섹터들은 스크래치 패드 블록의 추가 페이지들에 저장될 수 있다. 개별적으로 수신된 섹터들 혹은 그룹들의 섹터들은 이들이 수신될 때 스크래치 패드 블록의 새로운 페이지에 저장된다. 스크래치 패드 블록 내 다른 페이지들로부터 이전에 저장된 섹터들은 새로운 데이터와 함께 가장 최근의 페이지에 카피될 수 있다. 따라서, 섹터들의 데이터는 스크래치 패드 블록의 페이지에 완전 페이지의 새로운 데이터 미만인 한 스크래치 패드 블록에 축적된다. 섹터들은 블록에 대한 최대 가용 병행성보다 낮은 병행도로 스크래치 패드 블록에 기입된다. 섹터들은 스크래치 패드 블록에 저장되는 동안 업데이트될 수 있다. 완전 페이지의 데이터가 프로그래밍에 사용될 수 있게 하는 새로운 섹터의 데이터가 수신될 때, 스크래치 패드 블록에 이전에 저장된 새로운 섹터 및 섹터들은 메모리 어레이의 또 다른 블록에 동일 페이지에 함께 프로그램될 수 있다. 이 페이지는 데이터로 완전히 채워지고 최대 가용 병행성으로 기입된다. 스크래치 패드 블록에 저장된 데이터는 페용으로 마크될 수 있고 편리한 때에 소거될 수 있다. 이에 따라, 플래시 메모리 내 공간이 보다 효율적으로 사용되고 가비지 수거 동작의 빈도가 감소된다.
복수-레벨 셀들을 갖는 메모리들에서, 스크래치 패드 블록은 활성블록에도 기입되는 한 페이지의 데이터를 저장할 수 있다. 저장된 페이지는 두 페이지들의 데이터가 활성 블록 내 이들의 목적지에 함께 기입될 수 있게 또 다른 한 페이지의 데이터가 수신될 때까지 스크래치 패드 블록에 유지될 수 있다. 이들은 고 병행도를 사용하여, 이들이 개별적으로 기입되었을 경우보다 낮은 데이터 변질 위험을 갖고, 상위 및 하위 페이지로서 기입될 수 있다. 스크래치 패드 블록은 파워 유실이 있을 경우 하위 페이지 내 데이터가 스크래치 패드 블록으로부터 복구될 수 있게 연관된 상위 페이지의 프로그래밍동안 이전에 프로그램된 하위 페이지의 카피를 보존하는데 사용될 수 있다.
스크래치 패드 블록은 또 다른 위치에 기입할 데이터의 임의 저장을 할 수 있게 한다. 데이터는 블록의 섹터들의 데이터의 업데이트 동안 스크래치 패드 블록에 저장될 수 있다. 블록 내 페이지가 다른 파일들로부터의 섹터들의 데이터를 내포하는 경우, 페이지는 어느 한 블록이 업데이트될 때 업데이트된다. 복수-파일 페이지의 두 개의 카피들이 필요할 수 있으므로 종래의 방법들을 사용하여 두 파일들로부터 업데이트된 데이터를 저장하기 위해 2이상 블록을 필요로 할 수 있다. 스크래치 패드 블록을 사용함으로써 한 파일로부터 페이지의 일부는 페이지(다른 파일로부터의)의 나머지가 입수될 때까지 저장될 수 있다. 그러면 완전한 업데이트된 페이지가 이의 목적지에 최대 병행성을 사용하여 프로그램된다.
스크래치 패드 블록은 관계되지 않은 데이터의 섹터들을 내포할 수 있다. 호스트 데이터 섹터들 및 제어 데이터 섹터들 모두가 스크래치 패드 블록에 저장될 수 있다. 호스트 데이터 섹터들 및 제어 데이터 섹터들 모두는 스크래치 패드 블록 내 동일 페이지에 저장될 수 있다. 2개의 서로 다른 파일들 혹은 동일 파일의 논리적으로 멀리 떨어진 부분들로부터의 섹터들은 스크래치 패드 블록의 동일 페이지에 저장될 수 있다. 이것은 데이터가 수신될 때 고속이 유지되도록 최대 병행성으로 스크래치 패드 블록의 프로그래밍을 할 수 있게 한다. 저속으로 데이터가 수신되는 경우, 페이지 내 추가의 공간은 제어 데이터를 내포하는 섹터들로 점유될 수 있다. 이것은 제어 데이터 구조가 덜 빈번하게 업데이트되게 하고 따라서 가비지 수거 빈도를 줄인다.
일반적으로, 스크래치 패드 블록의 동일 페이지에 저장된 섹터들은 서로 다른 파일들에 속할 필요가 없다. 독립적 데이터 객체들로서, 이들은 예를 들면 2개의 논리 섹터들의 동일 페이지일 필요만이 있으나 서로 다른 기입명령들에 의해 기입된다.
스크래치 패드는 제어기가 쉽게 확인할 수 있게 마킹된 섹터에 의해 확인될 수 있다. 스크래치 패드 블록에 저장된 데이터의 인덱스는 자체가 스크래치 패드 블록에 저장되는 인덱스 섹터에 유지될 수 있다. 새로운 섹터들이 스크래치 패드 블록에 저장될 때 인덱스 섹터는 이전 인덱스 섹터를 새로운 인덱스 섹터로 대치함으로써 업데이트된다. 마찬가지로, 스크래치 패드 블록 내 섹터들이 다른 위치들에 카피될 때, 인덱스 섹터는 스크래치 패드 블록 내 이들 섹터들이 폐용됨을 표시하기 위해 업데이트될 수 있다.
스크래치 패드 및 업데이트 블록들에 대한 개선된 인덱싱-스크래치 패드 블록들에 유지되는 SPBI/CBI
발명의 또 다른 면에 따라서, 스크래치 패드 블록이 업데이트 블록에 더하여 채용될 때, 연관된 패드 블록 인덱스("SPBI")는 스크래치 패드 블록에 기록된 업데이트 섹터들을 주시하기 위해 사용된다. 이것은 업데이트 블록에 기록된 논리 섹터들을 주시하는데 사용되는 인덱스(예를 들면, "CBI")에 더한 것이다. 사용자 데이터가 스크래치 패드 블록의 부분적 페이지에 저장되어 있을 때는 언제나, 적어도 페이지의 마지막 슬롯이 채워지지 않음을 의미한다. 일 실시예에서, SPBI는 스크래치 패드 블록에 부분적 페이지의 마지막 슬롯에 저장될 수 있다. 바람직한 실시예에서, SPBI 및 CBI는 SPBI/CBI 섹터 내에 패키지되어 여하튼 사용되지 않은 스크래치 패드 블록 내 부분적 페이지의 마지막 슬롯에 저장될 수 있다. 새로운 부분적 페이지가 기입될 때마다, 업데이트된 SPBI/CBI 섹터는 끝 슬롯에 기입되어 모든 이전 버전들을 폐용되게 한다.
동시에, 인덱싱 방법은 비휘발성 메모리에 인덱스를 저장하기 위해 스크래치 패드 블록에 미사용 저장소를 이용한다.
발명의 또 다른 면에 따라서, 메모리 블록에 저장된 데이터는 데이터에 의해 점유되지 않은 부분적 페이지의 부분에 그의 인덱스를 저장하고 있다. 따라서, 한 페이지의 메모리 유닛들이 함께 프로그램될 수 있고 한 블록의 메모리 페이지들이 함께 소거될 수 있는 메모리 유닛들로 조직된 메모리에서, 부분적으로 채워진 페이지들은 메모리 단위들로 저장된 데이터 단위들이 소정의 순서에 따라 페이지에 정렬될 때, 그리고 특히 페이지가 소거 후 1회 프로그램가능하다면 존재할 것이다. 블록에 대한 인덱스는 업데이트 데이터가 채워지지 않는 부분적 페이지에 저장된다. 부분적 페이지는 현 블록 혹은 또 다른 블록에 있을 수 있다.
복수-스트림 업데이트 추적-2이상 스트림들간의 동기화
발명의 또 다른 면에 따라서, 복수의 메모리 블록들에 존재할 수 있는 가장 최근에 기입된 데이터 버전을 확인할 수 있게 하는 동기화 정보와 함께 비휘발성 메모리에 업데이트 데이터를 기입하는 방법이 제공된다. 호스트로부터 업데이트 데이터는 복수 스트림들을 통해 복수 블록들에 보내질 수 있다. 동기화 정보의 유지는 스트림들 중 적어도 하나의 모든 업데이트시에 스트림/블록들이 얼마나 채워졌는가에 관한 정보를 저장함으로써 달성된다.
바람직한 실시예에서, 블록 내 제1 빈 위치를 가리키는 기입 포인터는 블록이 얼마나 채워졌는가를 나타낼 것이다. 예를 들면, 두 개의 스트림들 사이에, 제2 블록에 대한 기입 포인터의 값은 기입 포인터가 제1 블록에 기입될 때 제2 블록을 얼마나 채웠는가를 나타낸다. 또한, 기입 포인터가 제1 블록에 저장되는 위치는 이 때 제1 블록이 얼마나 채워졌는가를 나타낸다.
발명은 특히, 각 메모리 단위가 논리 단위의 데이터를 저장하기 위한 것이고 각 블록은 하나 이상의 페이지들로 조직되는 것인, 소거가능 블록들의 메모리 단위들로 조직된 비휘발성 메모리에 적용될 수 있다. 또한, 각 페이지는 복수의 논리 단위들로 소거 후에 1회 프로그램가능하며, 소정의 순서의 각 논리 단위는 소정의 페이지 오프셋을 갖는다. 방법은 필수로 일 그룹의 논리 단위들의 업데이트 데이터를 저장 혹은 버퍼링하기 위한 2개의 블록들(예를 들면, 업데이트 블록 및 스크래치 패드 블록)을 제공하며, 가장 최근에 기입된 버전의 논리 단위가 제1 혹은 제2 블록에 위치하여 있는지를 확인하는데 도움을 주기 위한 동기화 정보를 유지한다.
바람직한 실시예에 따라서, 기입 포인터 형태의 동기화 정보는 스크래치 패드 블록에 버퍼되고 있을 때마다 호스트 데이터와 함께 저장된다. 기입 포인터는 기입 포인터가 스크래치 패드 블록에 저장될 때 업데이트 블록 내 다음 기입을 위한 위치의 어드레스를 주는 업데이트-블록 기입 포인터이다. 특히, 이것은 호스트 데이터를 여하튼 저장하는데 이용되지 않는 스크래치 패드 블록의 부분에 저장된다. 바람직하게, 업데이트-블록 기입 포인트는 스크래치 패드 블록의 부분적 페이지에 저장된 인덱스 SPBI/CBI에 포함된다. 업데이트-블록 기입 포인터는 스크래치 패드 블록에 버퍼된 주어진 논리 섹터가 업데이트 블록에 후속 기입들에 의해 폐용으로 되었는지 여부에 관한 판정을 할 수 있게 할 것이다.
발명의 또 다른 실시예에 따라서, 스크래치 패드 블록에 버퍼된 주어진 논리 섹터가 업데이트 블록에 후속 기입들에 의해 폐용으로 되었는지를 판정할 수 있게 할 동기화 정보가 유지된다. 이것은 동기화 정보가 업데이트 블록의 페이지에 저장될 때 스크래치 패드 블록에 다음 기입을 위한 위치의 어드레스를 주는 스크래치 패드 기입 포인터를 포함함으로써 달성된다.
또 다른 실시예에서, 동기화 정보는 가장 최근의 버전이 정확하게 발견될 수 있도록 복수의 스트림들에 기입된 데이터 섹터들에 대한 시간 스탬프들로서 엔코딩될 수 있다.
바람직한 실시예에서, 시간 스탬프 정보는 기입되는 페이지 내 섹터들 중 적어도 하나의 오버헤드 부분에 저장된다.
파이프라인 동작에 의한 복수-스트림 업데이트
발명의 또 다른 면에 따라서, 비휘발성 메모리를 업데이트하는 방법은 업데이트 데이터를 기록하기 위한 제1 블록(업데이트 블록) 및 업데이트 블록에 기록하기 전에 업데이트 데이터의 일부를 임시 저장하기 위한 제2 블록(스크래치 패드 블록)을 사용하는 것을 포함한다. 비휘발성 메모리는 소거가능한 블록들의 메모리 단위들로 조직되고, 각 메모리 단위들은 논리 단위의 데이터를 저장하기 위한 것이며, 각 블록은 하나 이상의 페이지들로 조직되며, 각 페이지는 일정 페이지 오프셋들을 갖는 복수의 논리 단위들을 저장할 수 있고 소거 후에 함께 1회 프로그램될 수 있다. 방법은 또한, 호스트로부터 논리 단위들을 수신하고 수신된 논리단위들을 페이지 단위로 정렬시켜 수신된 논리 단위가 페이지 끝 오프셋을 갖는 소정의 조건 이 만족되었을 때 수신된 논리단위 및 임의의 선행 논리단위들을 적합하게 페이지가 정렬된 업데이트 블록 내 페이지에 저장하고, 그렇지 않다면, 스크래치 패드 블록 내 부분적 페이지에 임의의 나머지 수신된 논리단위들을 임시 저장하는 것을 포함한다. 결국, 스크래치 패드 블록에 논리단위들은 소정의 조건이 만족되었을 때 업데이트 블록에 전송된다.
바람직한 실시예에서, 업데이트 데이터가 수신되고 제1 블록(예를 들면, 업데이트 블록)에 전송하기 위해 페이지 단위로 파싱된다. 임의의 나머지 부분적 페이지의 버퍼된 데이터는 제2 블록(예를 들면, 스크래치 패드 블록)에 전송되고 완전 페이지의 데이터가 제1 기록에 기록을 위해 사용가능하게 될 때까지 잔류하게 될 것이다. 수신된 데이터가 제2 블록에 전송될 때, 기록되는 페이지가 수신된 데이터로 단지 부분적으로 채워질지라도, 페이지 단위로 기록된다. 부분적 페이지 내 예비 공간 - 통상적으로 미사용된- 은 사용하여 제2 블록 및 제1 블록에서 데이터를 찾아내기 위한 인덱스를 저장하는데 사용된다.
또 다른 바람직한 실시예에 따라서, 업데이트 블록에 기록하기 위한 소정의 조건이 확인될 때까지 기다리지 않고, 기입하고자 하는 데이터 단위들에 의해 소정의 조건이 아마도 만족될 것이라고 호스트 기입 명령이 나타내는 즉시로 업데이트 블록은 기입되게 셋업되는 예측 파이프라인 동작이 구현된다. 이에 따라, 셋업은 호스트로부터 올 데이터 단위들을 기다리는 동안 도약 시작을 취할 수도 있을 것이다. 수신된 실제 데이터 단위들이 종국에 소정의 조건을 만족하였을 때, 업데이트 블록에 페이지의 프로그래밍은 셋업을 기다릴 필요없이 즉시로 행해질 수 있고, 그 럼으로써 기입 수행을 향상시킨다. 호스트 기입이 중단되고 수신된 실제 데이터 단위들이 더 이상 소정의 조건을 만족하지 못한 경우, 업데이트 블록에 기록을 위한 셋업은 단념될 것이며, 대신 데이터 단위들은 스크래치 패드 블록에 기록될 것이다.
또 다른 바람직한 실시예에서, 데이터가 수신되고 있을 때 그리고 수신된 데이터를 제1 혹은 제2 저장소에 기록할지 초기에 불확실성이 있을 때, 수신된 데이터는 제1 및 제2 저장소 둘 다를 위해 프로그래밍 회로들의 데이터 래치들에 로딩된다. 그러므로, 데이터는 언제든, 제1 혹은 제2 저장소 어느 하나를 프로그래밍하는데 즉시 사용될 수 있을 것이다. 특별한 경우에, 제1 및 제2 저장소들은 동일 한 세트의 데이터 래치들을 공유한다. 예를 들면, 제1 및 제2 저장소들이 동일 메모리 플레인들에 있을 때, 이들은 동일 한 세트의 감지 증폭기들 및 데이터 래치들을 구비한 동일 한 세트의 프로그래밍 회로들에 의해 서비스될 수도 있을 것이다. 이 경우, 데이터는 제1 혹은 제2 저장소가 프로그램될 것인지에 관계없이 한 세트의 내정 데이터 래치들에 로딩될 것이다.
본 발명의 추가의 특징들 및 잇점들은 첨부한 도면과 함께 취해진 바람직한 실시예들의 다음의 설명으로부터 이해될 것이다.
도 1a 및 도 1b는 각각, 함께 동작하는 비휘발성 메모리 및 호스트 시스템의 블록도들이다.
도 2는 도 1a의 메모리 어레이의 제1 예의 조직을 도시한 것이다.
도 3은 도 1a의 메모리 어레이에 저장된 오버헤드 데이터를 가진 호스트 데이터 섹터 예를 도시한 것이다.
도 4는 도 1a의 메모리 어레이의 제2 예의 조직을 도시한 것이다.
도 5는 도 1a의 메모리 어레이의 제3 예의 조직을 도시한 것이다.
도 6은 도 1a의 메모리 어레이의 제3 예의 확장을 도시한 것이다.
도 7은 한 특정 구성으로 도 1a의 어레이의 일 그룹의 메모리 셀들의 회로도이다.
도 8은 도 1a의 메모리 어레이와 같은 일 블록의 메모리 어레이 내 섹터들의 데이터의 저장소를 도시한 것이다.
도 9는 도 1a의 메모리 어레이와 같은 일 블록의 메모리 어레이 내 섹터들의 데이터의 대안적 저장소를 도시한 것이다.
도 10a는 가비지 수거 동작동안 또 다른 블록에 카피 후에 도 8 혹은 도 9의 섹터들의 데이터를 도시한 것이다.
도 10b는 제2 가비지 수거 동작동안 또 다른 블록에 카피 후에 도 10a의 섹터들의 데이터를 도시한 것이다.
도 10c는 더 많은 섹터들의 데이터가 수신된 후에 도 10b의 블록을 도시한 것이다.
도 11a는 도 10a 및 도 10b의 섹터들의 데이터를 저장하기 위해 2개의 소거블록들, 활성블록 및 스크래치 패드 블록을 사용한 대안적 저장소 구성을 도시한 것이다.
도 11b는 도 10a 및 도 10b의 섹터들의 데이터를 저장하기 위해 2개의 메타블록들, 활성블록 및 스크래치 패드 블록을 사용한 대안적 저장소 구성을 도시한 것이다.
도 12a는 가비지 수거 동작을 유발하게 함이 없이 저장되면서 섹터들의 데이터가 업데이트될 수 있게 섹터들의 데이터를 저장하는데 사용되는, 2개의 블록들, 활성블록 및 스크래치 패드 블록을 도시한 것이다.
도 12b는 가비지 수거 동작을 유발하게 함이 없이 저장되면서 페이지의 모든 섹터들이 업데이트될 수 있게 하는 도 12a의 것에 대한 대안적 저장소 시스템을 도시한 것이다.
도 12c는 스크래치 패드 볼록(1250)을 사용한 데이터 업데이트의 또 다른 예를 도시한 것이다.
도 13은 복수-레벨 셀에 2비트 데이터를 저장하는데 사용되는 4 임계 전압 범위들을 도시한 거이다.
도 14는 두 블록들의 복수-레벨 셀들, 활성블록 및 스크래치 패드 블록 -스크래치 패드 블록은 활성블록의 하위 페이지의 카피를 유지한다- 를 도시한 것이다.
도 15는 블록에 저장된 2개의 파일들로부터 섹터들의 데이터 및 2개의 파일들이 메모리 어레이에 2이상 블록의 공간을 요구하여 업데이트될 때 섹터들의 데이터의 후속 저장소를 도시한 것이다.
도 16은 어떤 섹터들이 활성블록에 카피되기 전에 스크래치 패드 블록이 이 들 섹터들을 저장하는 도 15의 섹터들의 데이터를 업데이트하는 대안적 시스템을 도시한 것이다.
도 17은 동일 페이지 내 무관한 데이터의 섹터들을 저장하는 스크래치 패드 블록 및 다른 위치들에 이 데이터의 후속 카피를 도시한 것이다.
도 18은 복수 업데이트되는 무관한 데이터의 섹터들을 저장하는 스크래치 패드 블록을 도시한 것이다.
도 19는 마킹 섹터에 의해 확인되는 스크래치 패드 블록을 도시한 것이다.
도 20은 일 그룹의 섹터들 및 인덱스 섹터를 저장하는 도 19의 스크래치 패드 블록을 도시한 것이다.
도 21은 제2 그룹의 섹터들과, 제1 인덱스 섹터를 교체하는 제2 인덱스 섹터를 저장하는 도 20의 스크래치 패드 블록을 도시한 것이다.
도 22는 제3 그룹의 섹터들과, 제2 인덱스 섹터를 교체하는 제3 인덱스 섹터를 저장하는 도21의 스크래치 패드 블록을 도시한 것이다.
도 23은 그룹이 또 다른 블록에 카피될 때 제3 인덱스 섹터를 교체하는 제4 인덱스 섹터를 가진 도 22의 스크래치 패드 블록을 도시한 것이다.
도 24는 종래의 방식으로 업데이트되어 단일 섹터 페이지들을 갖는 업데이트 블록에 저장되는 논리 그룹 내 섹터들의 예를 도시한 것이다.
도 25는 페이지들이 복수-섹터 및 아마도 1회 기입될 수 있는 메모리에 적용되는 도 24에 도시한 동일 시퀀스의 기입들을 도시한 것이다.
도 26은 발명의 일반적인 실시예에 따라, 저장된 데이터의 인덱스가 제2 블 록에 저장되고, 제2 메모리 블록과 함께 제1 메모리 블록을 채용함으로써 데이터를 업데이트하는 방법을 도시한 흐름도이다.
도 27a는 발명의 바람직한 실시예에 따라, 스크래치 패드 블록과 함께 업데이트 블록을 채용함으로써 데이터를 업데이트하고 인덱스들을 유지하는 구체적 예를 도시한 것이다.
도 27b는 발명의 바람직한 실시예에 따라, 스크래치 패드 블록과 함께 업데이트 블록을 채용함으로써 유지되는 데이터 업데이트의 순차적 순서화의 또 다른 예를 도시한 것이다.
도 28은 블록의 부분적 페이지에 업데이트 데이터를 저장하기 위해 메모리 블록의 인덱스를 저장하는 바람직한 방법을 도시한 것이다.
도 29는 몇 개의 논리 그룹들이 동시에 업데이트되는 복수-스트림 업데이트에서 사용되는 스크래치 패드 블록을 개략적으로 도시한 것이다.
도 30은 한 시퀀스의 입력 데이터를 블록에 기입하는 종래의 경우를 도시한 것이다.
도 31a는 발명의 바람직한 실시예에 따라, 서로 다른 기입들이 두 블록들에 걸쳐 인터리빙되었을 때라도 기록순서 혹은 우선도를 주시하는 방법을 도시한 것이다.
도 31b는 기입들이 두 블록들에 걸쳐 기록될 때 기록순서를 주시하는 또 다른 실시예를 도시한 것이다.
도 32a는 발명의 일반적인 실시예에 따라, 두 데이터 스트림들간 기록 시퀀 스를 동기화하는 방법을 도시한 흐름도이다.
도 32b는 기입 포인터를 사용하는 실시예에 따라, 두 데이터 스트림들간 기록 시퀀스를 동기화하는 방법을 도시한 흐름도이다.
도 33a는 제1 시퀀스에 따라 두 호스트 기입들 #1 및 #2 후에 스크래치 패드 블록 및 업데이트 블록의 상태를 도시한 것이다.
도 33b는 도 33a에 도시된 제1 시퀀스의 역인 제2 시퀀스에 따라 두 호스트 기입들 #1 및 #2 후에 스크래치 패드 블록 및 업데이트 블록의 상태를 도시한 것이다.
도 34a는 스크래치 패드 블록 인덱스(SPBI)의 바람직한 데이터 구조를 도시한 것이다.
도 34b는 도 33a에 도시된 호스트 기입 #1에 대한 스크래치 패드 블록 인덱스 내 값들의 예를 도시한 것이다.
도 35a 및 도 35b는 각각, 도 33a 및 도 33b의 연속적 호스트 기입들 후에 스크래치 패드 기입 포인터에 대한 스크래치 패드 블록 및 업데이트 블록의 중간 상태를 도시한 것이다.
도 36은 업데이트 블록에 기록되는 섹터의 오버헤드 부분에 저장되는 스크래치 패드 기입 포인터를 도시한 것이다.
도 37은 2개의 업데이트 스트림들간 기록 시퀀스를 주시하는 시간 스탬프들의 사용을 도시한 것이다.
도 38은 발명의 일반적인 실시예에 따라, 각 메모리 블록은 복수-섹터 페이 지들을 갖는 것으로서, 업데이트 데이터를 두 개의 메모리 블록들에 동시에 기록 및 인덱싱하는 방법을 도시한 흐름도이다.
도 39는 스크래치 패드 블록 및 업데이트 블록을 채용하는 도 37의 방법의 보다 구체적 구현을 도시한 흐름도이다.
도 40a는 본 발명의 구현되는 맥락을 제공하는 것으로 한 뱅크의 독출/기입 회로들을 구비한 메모리 디바이스를 개략적으로 도시한 것이다.
도 40b는 도 40a에 도시된 메모리 디바이스의 바람직한 구성을 도시한 것이다.
도 41은 도 40a에 도시된 감지 모듈을 상세히 도시한 것이다.
도 42는 바람직한 실시예에 따라, 예측 파이프라인 방법을 채용하는 복수-스트림 업데이트를 도시한 흐름도이다.
도 43은 또 다른 실시예에 따라, 정확한 목적지 어드레스가 보내지기 전에 프로그램 데이터가 로딩되는 복수-스트림 업데이트를 예시한 흐름도이다.
메모리 구조들 및 이들의 동작
먼저 도 1a를 참조하면, 플래시 메모리는 메모리 셀 어레이 및 제어기를 포함한다. 도시된 예에서, 2개의 집적회로 디바이스들(칩들)(11, 13)은 메모리 셀들의 어레이(15) 및 각종 논리 회로들(17)을 포함한다. 논리 회로들(17)은 데이터, 명령 및 상태회로들을 통해 별도의 칩 상의 제어기(19)와 인터페이스하며, 또한 어 드레싱, 데이터 전송과 센싱, 및 어레이(13)에의 그 외의 지원을 제공한다. 다수의 메모리 어레이 칩들은 제공된 저장용량에 따라, 1내지 다수일 수 있다. 제어기 및 부분 혹은 전체 어레이는 대안적으로 단일 집적회로 칩에 조합도리 수 있으나 이것은 현재는 경제적인 대안은 아니다.
전형적인 제어기(19)는 마이크로프로세서(21), 주로 펌웨어를 저장하는 독출전용 메모리(ROM)(23) 및 주로 메모리 칩들(11, 13)에 기입 혹은 이로부터 독출되는 사용자 데이터의 임시저장을 위한 버퍼 메모리(RAM)(25)를 포함한다. 회로들(27)은 메모리 어레이 칩(들)과 인터페이스하며 회로들(29)은 접속들(31)을 통해 호스트와 인터페이스한다. 데이터의 무결성은 이 예에서는 코드 계산에만 사용되는 회로들로 ECC를 계산함으로써 결정된다. 사용자 데이터가 호스트에서 저장을 위한 플래시 메모리 어레이에 전송되고 있을 때, 회로는 데이터로부터 ECC를 계산하고 코드가 메모리에 저장된다. 사용자 데이터가 나중에 메모리로부터 독출될 때, 이들은 다시 동일 알고리즘에 의해 ECC를 계산하여 이 코드를 계산되어 데이터와 함께 저장된 것과 비교하는 회로(33)를 거치게 된다. 이들이 일치한다면, 데이터의 무결성이 확인된다. 이들이 다르다면 이용되는 특정의 ECC 알고리즘에 따라, 오류의 이들 비트들은 알고리즘에 의해 지원되는 개수까지, 확인되어 정정될 수 있다.
도 1a의 메모리의 접속들(31)은 호스트 시스템의 접속들(31')과 짝을 이루는 것으로, 이의 예가 도 1b에 주어져 있다. 도 1a의 호스트와 메모리간 데이터 전송들은 인터페이스 회로들(35)을 통해 전송된다. 전형적인 호스트는 마이크로프로세서(37), 펌웨어 코드를 저장하기 위한 ROM(39) 및 RAM(41)을 포함한다. 그 외의 회 로들 및 서브-시스템들(43)은 흔히 특정 호스트 시스템에 따라, 고용량 자기 데이터 저장 디스크 드라이브, 키보드용 인터페이스 회로들, 모니터 등을 포함한다. 이러한 호스트들의 일부 예들은 데스크탑 컴퓨터들, 랩탑 컴퓨터들, 휴대 컴퓨터들, 팜탑 컴퓨터들, PDA들, MP3 및 이외 오디오 플레이어들, 디지털 카메라들, 비디오 카메라들, 전자게임기들, 무선 및 유선 전화 디바이스들, 자동응답기들, 음성 레코더들, 네트워크 라우터들 및 등을 포함한다.
도 1a의 메모리는 도 1b의 호스트에 착탈가능하게 접속될 수 있는 형태로 제어기 및 이의 모든 메모리 어레이 회로 디바이스들을 내장한 소형 내장형 카드로서 구현될 수 있다. 즉, 메이팅 접속들(31, 41')은 카드를 분리시켜 다른 호스트로 옮길 수 있게 하거나, 다른 카드를 호스트에 접속함으로써 교체될 수 있게 한다. 대안적으로, 메모리 어레이 디바이스들은 제어기 및 접속들(31)을 내장한 카드에 전기적으로 및 기계적으로 접속될 수 있는 별도의 카드에 내장될 수 있다. 또 다른 대안으로서, 도 1a의 메모리는 접속들(31, 31')이 영구적으로 된, 도 1b의 호스트 내 내장될 수 있다. 이 경우, 메모리는 통상 다른 성분들과 함께 호스트의 엔클로저 내 내장된다.
도 2는 각 소거블록의 셀들이 언제나 동시에, 단일 소거동작의 일부로서 함께 소거될 수 있는 것인 소거블록들로 메모리 셀들이 그룹으로 분할되는 메모리 어레이의 부분을 도시한 것이다. 소거블록은 이러한 유형의 메모리에서 소거의 최소단위이다.
도 2의 개개의 메모리 셀 소거블록들의 크기는 다양할 수 있으나 상업적으로 실시되는 한 형태는 개개의 소거블록 내 단일 섹터의 데이터를 포함한다. 이러한 데이터 섹터의 내용들이 도 3에 도시되었다. 사용자 데이터(51)는 통상적으로 512바이트이다. 사용자 데이터 외에도, 사용자 데이터로부터 계산되는 ECC(53), 섹터 데이터 및/또는 섹터가 프로그램되는 소거블록에 관계된 파라미터들(55) 및 파라미터들(55)로부터 계산되는 ECC(57)를 포함하는 오버헤드 데이터 및 포함될 수도 있을 이외 어떤 다른 오버헤드 데이터이다.
하나 이상의 플래그들은 상태를 나타내는 파라미터들(55)에 포함될 수도 있다. 소거블록을 프로그래밍 및/또는 소거하는데 사용될 전압레벨들의 표시들 또한 파라미터들(55) 내에 저장될 수 있고, 이들 전압들은 소거블록에 의해 경험되는 사이클들의 수 및 그 외 인자들이 변경될 때 업데이트된다. 파라미터들(55)의 다른 예들은 소거블록 내 어떤 결함 셀들의 식별, 이 물리적 소거블록에 맵핑되는 소거블록의 논리 어드레스 및 주 소거블록이 결함이 있는 경우에 임의의 대용 소거블록의 어드레스를 포함한다. 임의의 메모리 시스템에서 사용되는 파라미터들(55)의 특정 조합은 설계에 따라 다양할 것이다. 또한, 오버헤드 데이터의 일부 혹은 전부는 사용자 데이터를 내포하거나 오버헤드 데이터가 관계된 소거블록이 아니라, 이러한 기능의 전용의 소거블록에 저장될 수 있다.
도 4의 복수-섹터 소거블록은 도 2의 단일 데이터 섹터 소거블록과는 다르다. 여전히 최소단위의 소거인, 예로서의 소거블록(59)은 4개의 페이지들 0-3을 내포하고, 그 각각은 최소 단위의 프로그래밍이다. 하나 이상의 호스트 섹터들의 데이터는 통상적으로 섹터의 데이터로부터 계산된 적어도 ECC를 포함하는 오버헤드 데이터와 함께 각 페이지에 저장되고 도 3의 데이터 섹터 형태일 수 있다.
전체 블록의 데이터를 재-기입하는 것은 통상, 한 블록의 소거블록 풀에 새로운 데이터를 프로그래밍하는 것을 수반하며, 이 때 원 블록은 소거되고 소거 풀에 놓여진다. 블록의 모든 페이지들 미만의 데이터가 업데이트될 때, 업데이트된 데이터는 통상적으로 소거된 블록 풀로부터 한 페이지의 블록에 저장되고 남은 변경되지 않은 페이지들 내 데이터는 원 블록에서 새로운 블록으로 카피된다. 이어서 원 블록은 소거된다. 이 큰 블록 관리 기술의 변형예들은 원 블록으로부터 데이터를 옮기거나 이를 소거하지 않고 한 페이지의 또 다른 블록에 업데이트된 데이터를 기입하는 것을 포함한다. 이에 따라 복수의 페이지들은 동일 논리 어드레스를 갖게 된다. 가장 최근의 한 페이지의 데이터는 섹터 혹은 페이지 오버헤드 데이터 내 필드로서 기록되는 프로그래밍 시간과 같은 어떤 간편한 기술에 의해 확인된다.
또 다른 복수-섹터 블록 구성이 도 5에 도시되었다. 여기에서, 총 메모리 셀 어레이는 물리적으로 2이상의 플레인들로 분할되며 4개의 플레인들 0-3이 도시되었다. 각 플레인은 다른 플레인들과는 크게 무관하게 동작할 수 있기 위해서 자신의 데이터 레지스터들, 감지 증폭기들, 어드레싱 디코더들, 등을 구비하는 메모리 셀들의 서브-어레이이다. 모든 플레인들은 단일 집적회로 디바이스 혹은 복수의 디바이스들 상에 제공될 수 있고, 예는 하나 이상의 별개의 집적회로 디바이스들로부터 각 플레인을 형성하는 것이다. 도 5의 예로서의 시스템에서 각 블록은 16 페이지들 P0-P15를 내포하고 각 페이지는 1, 2 혹은 그 이상의 호스트 데이터 섹터들 및 어떤 오버헤드 데이터의 용량을 갖는다.
또 다른 메모리 셀 구성이 도 6에 도시되었다. 각 플레인은 많은 수의 소거 블록들의 셀들을 내포한다. 동작의 병행도를 증가시키기 위해서, 서로 다른 플레인들 내 소거블록들은 논리적으로 링크되어 메타블록들을 형성한다. 한 이러한 메타블록은 플레인 0의 소거블록 3, 플레인 1의 소거블록 1, 플레인 2의 소거블록 2 및 플레인 3의 소거블록 2로 형성되는 것으로서 도 6에 도시되었다. 각 메타블록은 논리적으로 어드레스가능하고 메모리 제어기는 개개의 메타블록들을 형성하는 소거블록들을 할당하고 이들을 주시한다. 호스트 시스템은 개개의 메타블록들의 용량과 동일한 데이터의 단위들로 메모리 시스템과 인터페이스한다. 도 6의 이러한 논리 데이터 블록(61)은, 예를 들면, 제어기에 의해 메타블록을 구성하는 블록들의 물리 블록 번호들(PBN)에 맵핑되는 논리 블록 어드레스들(LBA)에 의해 확인된다. 메타블록의 모든 소거블록들은 함께 소거되며, 각 소거블록으로부터의 페이지들은 바람직하게는 동시에 프로그램되고 독출된다. 메타블록은 이러한 식으로 소거블록들이 링크되는 시스템에서 소거단위로서 간주될 수 있다. 메타블록 구조를 갖는 일부 메모리 어레이들에서, 페이지들은 메타블록의 다른 페이지들과 병렬로 프로그램될 수 있을 뿐이다. 이들 메모리 어레이들에서, 메타페이지는 메타블록의 각 플레인으로부터 페이지를 구성하는 메타블록의 프로그래밍의 최소단위이다.
도 2-6에 관하여 위에 기술된 메모리들을 구현하기 위해 채용될 수 있는 서로 다른 메모리 어레이 구조들, 구성들 및 특정의 셀 구조들이 있다. NAND 유형의 메모리 어레이의 한 소거블록이 도 7에 도시되었다. 직렬 접속된 메모리 셀들의 다 수의 열 방향의 스트링들이, 전압(VSS)의 공통 소스(65)와 비트라인들(BL0-BLN) 중 한 비트라인 사이에 접속되고 어드레스 디코더들, 드라이버들, 독출 감지 증폭기들 등을 내장한 회로들(67)에 접속된다. 구체적으로, 한 이러한 스트링은 스트링들의 서로 대향한 양 끝에 선택 트랜지스터들(77, 79) 사이에 직렬로 접속된 전하 저장 트랜지스터들(70, 71 . . .72 및 74)을 내포한다. 이 예에서, 각 스트링은 16개의 저장 트랜지스터들을 내포하나 다른 개수도 가능하다. 워드라인들(WLO - WL15)은 각 스트링의 하나의 저장 트랜지스터에 걸쳐 확장하고 어드레스 디코더들 및 워드라인들의 전압원 드라이버들을 내포한 회로들(81)에 접속된다. 라인들(83, 84) 상의 전압들은 선택 트랜지스터들을 통해 전압원(65) 및/또는 비트라인들(BL0-BLN)에 함께 소거 블록 내 모든 스트링들의 접속을 제어한다. 데이터 및 어드레스들은 메모리 제어기로부터 온다.
소거블록의 각 행의 전하 저장 트랜지스터들(메모리 셀들)은 함께 프로그램 및 독출되는 페이지를 형성할 수 있다. 데이터를 프로그래밍 혹은 독출하기 위해 이러한 페이지의 워드라인(WL)에 적합한 전압이 인가되고 이 때 나머지 워드라인에 인가되는 전압들은 이들의 각각의 저장 트랜지스터들을 도통이 되게 하기 위해 선택된다. 저장 트랜지스터들의 한 행(페이지)을 프로그래밍 혹은 독출하는 중에, 비선택된 행들 상의 이전에 저장된 전하레벨들은 모든 스트링들 및 이들의 워드라인들에 인가된 전압들 때문에 교란될 수 있다. 이것은 행 내 다른 셀들이 프로그램된 후에 특정 행의 셀들의 프로그래밍을 방지할 수 있다. 복수 상태의 플래시 메모리 들은 특히 교란에 민감하다. 증가된 수의 논리 상태들은 개개의 상태들에 대해 좁은 임계전압이 되게 하므로 전하 레벨에 작은 변화들은 논리 상태에 변화를 야기할 수 있다. 데이터 저장 밀도가 셀 내 증가된 수의 논리 상태들을 사용함으로써 증가될 때, 교란에 대한 민감도가 증가한다. 이에 따라, 행 내 다른 셀들이 프로그램된 셀들의 데이터를 변조함이 없이 프로그램된 후에 한 행의 셀들에 데이터를 프로그램하는 것은 가능하지 않을 수도 있다. 따라서, 이웃 셀들의 후속 프로그래밍으로부터의 교란은 페이지 크기를 정의할 수도 있다. 한 행의 셀들이 동일 행의 다른 셀들을 프로그래밍하는 것에 이어 프로그램되지 않을 수도 있다면, 이 행은 프로그래밍의 최소단위를 정의한다. 따라서, 한 행의 셀들은 한 페이지의 데이터를 내포할 수 있다. 이러한 메모리 어레이에서, 행의 한 그룹의 셀들이 프로그램된다면, 행의 일부 셀들이 아무 데이터로 내포하지 않는 경우라도 행은 프로그램된 것으로 간주된다. 메모리 어레이에서 후속하여 프로그램될 수 없는 빈 셀들을 갖는 것은 효율적이지 않다.
프로그램된 페이지에 빈 셀들은 한번에 메모리 시스템에 의해 수신되는 작은 수의 섹터들에 기인할 수 있다. 예를 들면, 단일 섹터는 호스트에 의해 메모리 시스템에 보내질 수 있다. 섹터는 한 페이지의 플래시 메모리 어레이에 저장된다. 섹터는 이 페이지에 후속하여 기입하는 것을 방지한다. 페이지가 복수 섹터들을 보유하는 메모리 시스템에서, 이것은 비효율적일 수 있다. 예를 들면, 페이지가 4개의 데이터 섹터들을 포함하는 경우, 3 섹터들의 데이터를 보유할 수도 있을 메모리 어레이의 부분은 단일 섹터가 페이지에 기입될 때 빈 상태로 남겨진다. 페이지 크기 들이 증가함에 따라, 이러한 부분적으로 채워지는 페이지들로부터 낭비되는 공간이 증가한다. 메타페이지들은 많은 수의 섹터들을 내포할 수 있으므로 저장은 메타블록을 사용하는 메모리 어레이들에서 특히 비효율적일 수 있다. 문제는 2이상의 섹터들이 수신되나 수신되는 섹터들의 수가 페이지의 섹터들의 수미만인 경우와 유사하다. 이러한 부분적 페이지들은 전체 한 페이지의 데이터가 수신될 때까지 스크래치 패드 블록에 저장될 수 있다.
부분적으로 채워지는 페이지들의 데이터를 기입하는 것에 이어, 부분적으로 채워진 페이지들로부터 채워진 페이지들에 데이터를 결합하기 위해 저장된 데이터의 결합이 수행될 수 있다. 이것은 주기적으로 수행되는 가비지 수거의 일부로서 행해질 수 있다. 이러한 데이터의 결합은 부분적으로 채워진 페이지들로부터 데이터를 다른 소거블록 내 있는 완전 페이지들로 카피한다. 부분적으로 채워진 페이지들을 보유하는 소거블록들은 이들이 소거되어 재사용될 수 있게 폐용으로서 마크된다. 이러한 동작은 다른 기능들을 위해 사용될 수도 있을 시스템 자원들을 취할 수도 있다.
메모리에 단일 섹터 기입들의 예
도 8은 페이지가 4 섹터들의 데이터로 구성되는 메모리 시스템 내 메모리 어레이의, 활성블록(800)으로 지정된 소거블록을 도시한 것이다. 페이지들 0-5가 도시되었고 각각은 수평방향으로 확장한다. 각 페이지는 섹터 0, 섹터 1, 섹터 2 및 섹터 3으로서 지정된 4섹터들의 데이터를 내포할 수 있다. 호스트는 단일 섹터들의 데이터를 메모리 시스템에 보내고, 이들은 활성블록(800)에 저장된다. 섹터 X가 수신되어 페이지 0의 섹터 0으로서 저장된다. 이것은 페이지 0의 후속의 프로그래밍을 방지한다. 따라서, 페이지 0의 섹터들 1, 2, 3은 프로그램되지 않고 빈 상태로 남는다(소거된다). 페이지 0이 프로그램된 후에, 섹터(X+1)이 수신된다. 섹터(X+1)은 페이지 1의 섹터 0으로서 저장되다. 페이지 1의 섹터들 1, 2, 3은 빈 상태로 남는다. 섹터(X+1)이 프로그램된 후에, 섹터(X+2)가 수신된다. 섹터(X+2)는 페이지 2의 섹터 0으로서 저장된다. 페이지 2의 섹터들 1, 2, 3은 빈 상태로 남는다. 섹터(X+2)가 프로그램된 후에, 섹터(X+3)이 수신된다. 섹터(X+3)은 페이지 3의 섹터 0으로서 저장된다. 페이지 3의 섹터들 1, 2, 3은 빈 상태로 남는다.
도 9는 활성블록(900)으로 지정된, 소거블록에 섹터들을 저장하는 대안적 방법을 도시한 것이다. 여기에서는 페이지당 단지 하나의 섹터를 저장하는 대신에, 이전에 저장된 섹터들은 보다 최근에 수신된 섹터에 저장되는 경우 동일 소거블록에 새로운 페이지에 카피된다. 섹터(X)는 전처럼 페이지 0의 섹터 0으로서 저장된다. 이어서, 섹터(X)가 페이지 1의 섹터 0의 페이지 0으로부터 카피되는 상태에서 섹터(X+1)이 수신되고 페이지 1의 섹터 1로서 저장된다. 이에 따라, 섹터(X) 및 섹터(X+1) 둘 다가 페이지 1에 저장된다. 이어서, 섹터(X+2)가 수신되고 페이지 2의 섹터 2로서 저장된다. 섹터(X)가 페이지 2의 섹터 0으로서 저장되고 섹터(X+1)이 페이지 2의 섹터 1으로서 저장된다. 이에 따라, 섹터들(X, X+1, X+2)가 페이지 2에 함께 저장된다. 이어서, 섹터(X+3)이 수신되고 페이지 3의 섹터 3으로서 저장된다. 섹터(X)가 섹터 0으로서 저장되고 섹터(X+1)가 섹터 1로서 저장되고 섹터(X+2)가 페이지 3의 섹터 2로서 저장된다. 이에 따라 4섹터들의 데이터가 페이지 3에 저장되므로 페이지 3에 데이터가 완전히 차지하게 된다.
도 8에 혹은 도 9에 도시한 섹터들의 저장에 이어서, 데이터가 결합될 수 있다. 도 8 혹은 도 9의 섹터들(X, X+1, X+2, X+3)은 새로운 소거블록의 단일 페이지에 카피될 수 있다. 이것은 편리할 때에 가비지 수거의 일부로서 행해질 수 있다. 도 10a는 지정된 활성블록(100)의 페이지 0에 저장된 섹터들(X, X+1, X+2, X+3)을 도시한 것이다. 소거블록(1000)의 페이지 0은 데이터로 채워진다. 활성블록(1100)의 페이지 0이 섹터들(X, X+1, X+2, X+3)로 프로그램될 때, 섹터들(X, X+1, X+2, X+3)은 이들이 카피되었던 소거블록으로부터 소거될 수 있다. 활성블록들(800, 900)은 소거될 수 있고 이들의 내용들이 가비지 수거동안 결합될 때 새로운 데이터의 저장에 사용될 수 있게 할 수 있다.
페이지 0의 프로그램에 이어, 섹터(X+4)가 수신되어 활성블록(1000)의 페이지 1의 섹터 0으로서 저장된다. 이어서, 섹터들(X+5, X+6, X+7)이 개별적으로 수신되어 각각 페이지들 2, 3, 4에 저장된다. 섹터들의 결합은 섹터들(X+4, X+5, X+6, X+7)을 단일 페이지에 결합하기 위해 필요로 될 수 있다. 섹터들의 이러한 결합은 호스트 데이터가 기입되지 않을 수 있는 기간을 취한다. 또 다른 소거블록의 데이터의 두 번째 결합 후에, 이들이 카피되는 소거블록(1000)은 폐용으로서 마크되어 후속하여 소거될 수 있다.
도 10b는 제2 가비지 수거 동작이 이전 활성블록(1000)으로부터 데이터를 재 배치한 후에 활성블록(1010)을 도시한 것이다. 섹터들(X+4 내지 X+7)은 활성블록(1010)의 단일 페이지(페이지 1)에 결합된다. 이어서, 보다 많은 섹터들이 수신되어 활성블록(1010)에 저장될 수 있다. 이러한 섹터들이 단일 섹터들의 형태로 수신된다면, 단일 섹터가 전처럼 페이지에 저장될 수 있다.
도 10c는 페이지들 2-5에 저장된 추가의 섹터들(X+* 내지 X+11)을 가진 활성블록(1010)을 도시한 것이다. 또 다른 가비지 수거동작이 이 때 섹터들(x+8 내지 X+11)을 결합하는데 필요로 될 수 있다. 이에 따라 단일 섹터들로서 호스트로부터 수신된 섹터들을 효율적으로 저장하기 위해서, 이 방법은 한 소거블록에서 또 다른 소거블록으로 데이터를 전송하는 것과 제1 소거블록을 소거하는 것을 요구하는 복수의 가비지 수거동작들을 사용한다. 보다 큰 소거블록들에 있어서, 가비지 수거동작의 수는 더 크다. 메타블록들을 사용하는 메모리 시스템들에서, 일 그룹의 소거블록들이 링크될 수 있으므로 이들은 함께 소거되고 함께 프로그램된다. 데이터는 많은 섹터들을 내포한 메타페이지들에 프로그램될 수 있다. 그러므로, 단일 섹터들을 저장하는 것은 필요한 가비지 수거량 때문에 매우 비효율적이게 된다.
도 11a는 데이터를 저장하는 대안적 방법을 도시한 것이다. 도 11a는 메모리 어레이의 2개의 소거블록들을 도시한 것이다. 활성블록(1110)은 장기간 저장을 위해 데이터가 프로그램될 수 있는 소거블록이다. 스크래치 패드 블록(1120)은 데이터가 단기간 저장을 위해 프로그램될 수 있는 소거블록이다. 적은 수의 섹터들이 수신되었을 때, 이들은 먼저 스크래치 패드 블록(1120)에 저장된다. 섹터들은 충분한 섹터들이 수신되어 한 페이지의 데이터를 채울 때까지 스크래치 패드 블 록(1120)에 계속하여 저장된다. 이어서 이들 섹터들은 한 페이지의 활성블록(1110)에 카피된다.
섹터(X)가 수신되고 전처럼 스크래치 패드 블록(112)에 페이지 0의 섹터 0으로서 프로그램된다. 이어서, 섹터(X)가 페이지 1의 섹터 0에 카피된 상태에서 섹터(X+1)이 수신되어 스크래치 패드 블록(1120)의 페이지 1의 섹터 1로서 저장된다. 이어서, 섹터(X, X+1)가 각각 페이지 2의 섹터 0및 섹터 1에 카피된 상태에서 섹터(X+2)이 수신되어 스크래치 패드 블록(1120)의 페이지 2의 섹터 2로서 저장된다. 스크래치 패드 블록(1120)에 섹터(X+2)의 저장에 이어서, 섹터(X+3)가 수신된다. 이 때, 섹터들(X, X+l, X+2, X+3)은 활성블록(1110)의 페이지 0에 기입된다. 이들 4개의 섹터들은 완전한 한 페이지의 데이터를 형성한다. 이에 따라, 섹터들(X, X+l, X+2, X+3)은 활성블록(1110)의 페이지 0에 효율적으로 저장된다. 이어서, 섹터들(X+4, X+5, X+6, X+7)은 개별적으로 수신된다. 섹터들(X+4, X+5, X+6)은 스크래치 패드 블록(1120)의 페이지들 3, 4, 5에 저장되며 섹터(X+7)이 수신되었을 때 활성블록(1110)의 페이지 1의 섹터들 0, 1, 2에 카피된다. 섹터(X+7)은 활성블록(1110)의 페이지 1의 섹터 3에 직접 프로그램된다. 이 때, 스크래치 패드 블록(1120)은 데이터를 저장하기 위한 사용가능한 페이지들은 없어 소거될 준비된 것으로서(폐용) 지정될 수 있다. 새로운 소거블록은 수신이 되게 다음 섹터를 위한 스크래치 패드 블록으로서, 혹은 일 그룹의 섹터들로서 지정될 수 있다. 이 예는 단일 섹터들이 수신되는 것을 보이고 있으나, 이 방법은 일 그룹의 섹터들이 페이지 내 섹터들의 수보다 적은 섹터들을 갖는 그룹들의 섹터들에 대해 사용될 수 있 다. 또한, 위의 예들이 최대 병행성을 갖고 활성블록에 스크래치 패드 블록으로부터 데이터를 기입하는 것을 보이고 있으나, 이러한 기입은 최대 미만의 병행성으로 행해질 수도 있고 여전히 효율 잇점을 제공한다. 이에 따라, 섹터들은 일 병행도를 갖고 스크래치 패드 블록에 기입되고 이어서 보다 높은 병행도로 또 다른 블록에 기입되므로 데이터는 보다 밀집되게 팩되어 덜 빈번한 가비지 수거를 요구한다.
스크래치 패드 블록은 메타블록들을 사용하는 메모리 어레이들에서도 사용될 수 있다. 예를 들면 도 11b는 2개의 메타블록들로서, 활성블록(1130) 및 스크래치 패드 블록(1140)을 도시하고 있다. 활성블록(1130) 및 스크래치 패드 블록(1140) 둘 다는 플레인들 0-3으로 표기한 4개의 플레인들을 갖는다. 각 플레인은 한 섹터 폭이므로, 4개의 섹터들이 한 메타페이지의 블록(1130 혹은 1140)에 저장된다. 두 블록들은 메타페이지 0-6으로 표시한 6개의 메타페이지들을 갖는다. 효율적으로 데이터를 저장하기 위한 기술은 소거블록들에 관하여 위에 기술된 바와 동일하다. 섹터들은 한 메타페이지 전체의 데이터가 입수될 때까지 -이 때 전체 메타페이지가 활성블록(1130)에 프로그램된다- 스크래치 패드 블록(1140)에 축적된다. 예를 들면, 섹터(X-3)가 수신되었을 때, 전체 한 메타페이지(섹터들(X, X+1, X+2, X+3))이 활성블록(1130)의 메타페이지 0에 프로그램된다. 메타페이지는 메타블록들이 많은 플레인들을 가질 수 있고 플레인들은 몇 개의 페이지 폭일 수 있기 때문에 많은 섹터들을 가질 수 있다. 위에 기술된 기술은 이 기술이 아니면 낭비되었을 수도 있을 메모리 어레이 내 많은 량의 공간 때문에 이러한 큰 메타페이지들에 대해 특히 유용하다. 도 11a 및 11b에 관하여 보인바와 같이, 소거블록 구조를 사용한 예들에 관하여 기술된 이 발명의 면은 메타블록 구조에 적용될 수도 있고 그 역으로도 적용될 수 있다. "블록"이라는 용어는 메모리 어레이의 구성에 따라 소거블록 혹은 메타블록을 지칭할 수 있다. 어느 경우이든, 블록은 이 구성에서 사용된 소거단위이다. 마찬가지로, "페이지"라는 용어는 단일 소거블록 내 페이지 혹은 한 메타페이지의 메타블록을 지칭할 수 있다. 어느 경우이든, 페이지는 이 구성에 있어 프로그래밍 단위이다.
페이지 내 섹터들의 수 이상을 갖는 일 그룹의 섹터들이 수신되는 경우, 섹터들은 먼저 스크래치 패드 블록에 저장되지 않고 메모리 어레이의 활성블록에 직접 프로그램될 수 있다. 이에 따라, 완전한 페이지들의 데이터가 높은 병행도로 활성블록에 직접 프로그램될 수 있고, 부분적 페이지들의 데이터는 이들이 완전한 한 페이지 프로그램의 일부로서 활성블록에 기입될 수 있을 때까지 낮은 병행도로 스크래치 패드 블록에 프로그램된다. 제어기는 특정 섹터 혹은 일 그룹의 섹터들에 대한 목적지를 결정할 수 있다. 활성블록에 일 그룹의 섹터들을 기입하는 것이 부분-페이지 혹은 완전-페이지 기입들 모두를 포함할 경우, 완전-페이지들은 활성블록에 기입되고 부분 페이지는 스크래치 패드 블록에 기입될 수 있다.
도 12a는 호스트로부터의 섹터들이 스크래치 패드 블록에 저장되면서 업데이트되는 다른 예를 도시한 것이다. 제1 섹터(X0)이 수신되고 스크래치 패드 블록(1250)의 페이지 0에 저장된다. 이 예에서 페이지는 4 섹터들의 데이터를 저장한다. X1로서 나타낸 X0에 대한 교체가 수신된다. 이 예에서 섹터들은 이들의 논리 어 드레스에 따라 숫자가 매겨졌고, 첨자는 섹터가 업데이트인지를 그리고 그러하다면 어떤 버전인지를 나타낸다. 따라서, 섹터(X1)은 논리 어드레스 X를 가진 섹터이며 이 섹터의 제1 업데이트된 버전이다. 이것은 X0와 동일한 논리 어드레스를 갖는 한 섹터의 데이터이나 어떤 업데이트된 정보를 반영하는 다른 데이터를 내포할 수 있다. 섹터(X1)은 스크래치 패드 블록(1250)의 페이지 1에 기입된다. 제어기는 어떤 섹터들이 현재이고 어떤 것이 폐용인지를 주시한다. 스크래치 패드 블록(1250)에서, 특정 논리 어드레스를 가진 섹터의 가장 최근에 기입된 카피가 현재 버전이다. 이외 임의의 다른 버전은 폐용이다. 이에 따라 X0는 X1이 프로그램될 때 폐용으로 된다. 섹터(X1)을 수신하는 것에 이어, 섹터(X+1)0이 수신된다. 이것은 섹터(X1)에 논리적으로 순차인 섹터이다. 섹터들(X1 및 (X+1)0) 둘 다가 페이지 2에 기입된다. 이어서, 섹터(X+1)0이 (X+1)1로 교체된다. 이것이 섹터(X+1)0을 교체하는 섹터(X+1)0의 업데이트된 버전이다. 섹터(X+1)1이 섹터(X1)과 함께 페이지 3에 기입된다. 이어서, 섹터(X+2)0이 수신되고 페이지 4에 기입된다. 이어서 섹터(X+2)0이 섹터(X+2)1으로 교체되고 섹터들(X1 및 (X+1)1)과 함께 페이지 5에 기입된다. 이어서, 섹터(X+3)0이 수신된다. 이에 따라, 한 페이지의 데이터(섹터들(X1, (X+1)1, (X+2)1, (X+3)0)이 이용될 수 있다. 섹터들(X1, (X+1)1, (X+2)1, (X+3)0)이 활성블록(1252)으 로서 지정된 블록에 기입된다. 섹터들(X1, (X+1)1, (X+2)1, (X+3)0)이 완전 페이지 기입의 병행성으로 활성블록(1252)에 기입된다. 이것은 이 경우 최대 가능한 병행이다. 따라서, 섹터들(X1, (X+1)1, (X+2)1, (X+3)0)이 낮은 병행도를 갖고 스크래치 패드 블록(1250)에 기입되었을지라도, 이어서 이들은 높은 병행도를 갖고 활성블록(1252)에 기입된다. 이것은 섹터들(X1, (X+1)1, (X+2)1, (X+3)0)이 활성블록에 보다 효율적으로 저장됨을 의미한다. 보다 효율적 저장으로 가비지 수거는 덜 빈번하게 필요해져, 수행을 향상시킨다.
대안적 예가 도 12b에 제공된다. 이 예는 도 12a에 도시된 것과 유사하나 여기에서 섹터(X+3)0은 활성블록(1252)에 카피되기에 앞서 스크래치 패드 블록(1250)에 저장된다. 이것은 (X+3)0이 활성블록(1252)에 기입되기 전에 이것이 업데이트되게 한다. 섹터(X+3)0은 섹터(X+3)1에 의해 교체됨으로써 업데이트됨을 보였다. 완전한 한 페이지의 데이터(섹터들(X1, (X+1)1, (X+2)1, (X+3)1))은 어떤 트리거 이벤트까지는 스크래치 패드 블록(1250)에 보존되어 업데이트될 준비가 되어 있다. 이 경우, 섹터(X+4)0)이 수신되어 트리거 이벤트를 제공한다. 섹터들(X1, (X+1)1, (X+2)1, (X+3)1)은 최대 병행성으로 이 때 활성블록(1252)에 기입된다. 섹터(X+4)0은 스크래치 패드 블록(1250)에 다음 이용가능 페이지(페이지 8)에 기입된다.
도 12c는 스크래치 패드 블록(1250)을 사용하여 데이터를 업데이트하는 또 다른 예를 도시한 것이다. 섹터들의 데이터(X0 내지 (X+15)0)가 원 블록(1254)에 저장된다. 호스트는 섹터(X+6)0과 동일한 논리 어드레스를 가진 업데이트된 섹터인 (X+6)1를 보낸다. 이에 따라, 섹터(X+6)1이 (X+6)0을 교체하는 것이다. 섹터(X+6)0을 교체하기 위해서, 원 블록(1254)의 페이지 1(섹터들(X+4)0 내지 (X+7)0을 내포함)이 섹터(X+6)1과 조합되어 조합이 스크래치 패드 블록(1250)의 페이지 0에 기입된다. 이들 섹터들을 조합하는 것은 제어기 RAM(25)과 같은 랜덤 액세스 메모리에서 행해질 수 있고 혹은 메모리 어레이에 접속된 메모리 레지스터들에서 행해질 수도 있다. 업데이트된 페이지 데이터는 이것을 어떤 시간동안 활성블록에 기입함이 없이 스크래치 패드 블록(1250)에 유지될 수 있다. 후속의 업데이트된 섹터(X+5)1이 호스트로부터 수신되는 경우, 데이터는 섹터(X+5)1을 카피된 섹터들(X+4)0, (X+6)1, (X+7)0과 함께 또 다른 페이지의 스크래치 패드 블록(1250)(이 경우, 페이지 1)에 기입함으로써 스크래치 패드 블록(1250)에서 업데이트될 수 있다. 스크래치 패드 블록(1250)에 한 페이지의 데이터의 복수의 업데이트들은 이러한 방식으로 수행될 수 있다. 업데이트는 업데이트된 한 섹터의 혹은 섹터들의 데이터를 교체하고 새로운 한 페이지의 스크래치 패드 블록(1250)에 변경되지 않은 섹터들의 데이터의 카피에 의해 수행된다. 카피된 섹터들은 동일 플레인 내에서 카피되므로 카피하는 것이 효율적으로 수행될 수 있다. 이어서, 업데이트된 한 페이지의 데이터가 메모리 어레이 내 활성블록(1252)에 카피될 수 있다. 비순차적 업데이트들은 혼돈된 업데 이트 블록을 요구함이 없이 이러한 식으로 수행될 수 있다. 예를 들면, 업데이트된 섹터들((X+6)1 및 (X+5)1)은 위의 예에서 비순차적으로 수신되나, 활성블록(1252)는 순차적이다. 복수 페이지들의 데이터는 이러한 식으로 스크래치 패드 블록에 동시에 유지되고 업데이트될 수 있다. 페이지는 페이지가 더 이상 업데이트되지 않을 것으로 보일 때 활성블록에 카피될 수 있다.
복수-레벨 셀 프로그래밍의 예
어떤 종류들의 메모리들은 플로팅 게이트 메모리 셀의 임계 전압 범위를 3이상 레벨들로 분할함으로써 메모리 어레이의 각 셀에 2이상 비트의 데이터를 저장할 수 있다. 도 13은 서로 다른 논리 상태들을 나타내는 복수의 임계전압들을 제공하게 이러한 복수-레벨 셀(MLC) 메모리들이 어떻게 프로그램될 수 있는가의 예를 도시한 것이다. 4개의 서로 다른 임계 전압들은 A, B, C, D로 표기하여 도시되었다. 복수의 셀들은 각 전압으로 프로그램된다. 도 13은 셀 상태들의 분포를 나타낸 것으로 수직축은 셀 수를 나타낸다. 각 임계전압 A, B, C, D는 상이한 논리 상태를 나타낸다. 4상태들은 나타낸 바와 같이 하측 페이지의 데이터로부터의 1비트와 상측 페이지의 데이터로부터 1비트인 2비트의 데이터를 나타낸다. 어떤 예들에서, 하측 페이지가 먼저 프로그램될 수 있다. 하측 페이지의 프로그래밍 후에, 셀은 상태 A 혹은 B에 있다. 이어서, 상측 페이지는 셀이 상태들 A 혹은 B에 머물러 있거나 (상측 비트=1에 대해서) 상태들 C 혹은 D로 수정되도록(상측 비트=0에 대해서) 프로그램될 수 있다. 이들 4개의 상태들 각각은 비교적 좁은 전압 윈도우들을 갖기 때문에, MLC 메모리들은 특히, 임계전압들에 비교적 작은 변화들로부터 데이터가 변질되기가 쉽다. 어떤 예들에 있어서는 하측 페이지와 상측 페이지를 동시에 프로그램하는 것이 잇점이 있을 수 있다. 이것은 상측 페이지 데이터의 프로그래밍동안 일어날 수도 있는 것으로 이웃 셀들의 프로그래밍에 의해 야기되는 셀 내 데이터의 변질을 감소시키는데 도움을 줄 수 있다.
도 14는 MLC 메모리들에서 데이터의 변질을 감소시키는데 있어 스크래치 패드 블록(1460)이 어떻게 사용될 수 있는가의 예를 도시한 것이다. 도 14는 MLS 메모리의 블록들로서 활성블록(1462) 및 스크래치 패드 블록(1460) 둘 다를 도시한 것이다. 두 블록들의 페이지들은 번호가 매겨져 있고 페이지의 데이터의 비트들을 저장하기 위해 어떤 임계 전압 상태들이 사용되는가에 따라 "상측" 혹은 "하측"으로서 도시되었다. 이 예에서, 메모리는 먼저 섹터들(X 내지 X+3)을 수신하고 이들 섹터들을 스크래치 패드 블록(1460)의 하측 페이지 0에 저장한다. 이어서, 메모리는 섹터들(X+4 내지 X+7)을 수신한다. 이 때, 하측 페이지(섹터들(X 내지 X+3)) 및 상측 페이지(X+4 내지 X+7)는 활성블록(1462)에 동시에 기입된다. 이것은 활성블록(1462)의 상측 페이지 0의 프로그래밍동안 활성블록(1462)의 하측 페이지 0의 변질을 피할 수 있다. 통상적으로, 상측 및 하측 페이지들을 함께 프로그램하는 필요한 시간은 상측 페이지만을 프로그램하는데 필요한 시간과 동일하므로 이 시스템은 시간 페널티가 없다. 섹터들(X 내지 X+7)을 가진 활성블록(1462)의 하측 페이지 0 과 상측 페이지 0의 프로그래밍에 이어서, 섹터들(X+8 내지 X+11)이 수신되고 스크래치 패드 블록(1460)의 상측 페이지 0에 프로그램된다. 섹터들(X+12 내지 X+15)이 수신되었을 때, 섹터들(X+8 내지 X+ll) 및 섹터들(X+12 내지 X+15)는 활성블록의 상측 페이지 1과 하측 페이지 1과 병렬로 프로그램된다. 이 시스템은 도시된 바와 같이 데이터의 후속 섹터들에 대해 계속된다. 이에 따라, 한 페이지의 데이터가 스크래치 패드 블록(1460)에 기입되고 이어서 이 페이지는 동일 한 그룹의 메모리 셀들의 상측 및 하측 페이지들로서 활성블록(1462)에 추가의 페이지와 함께 기입된다. 스크래치 패드 블록(1460)에 프로그래밍하는 것은 페이지의 병행으로 행해지고 활성블록(1462)에의 프로그래밍은 페이지의 병행으로 2중으로 발생한다.
대안적 실시예에서, 상측 페이지 및 하측 페이지는 서로 다른 시간들에서 활성블록에 기입될 수 있으나 하측 페이지의 카피는 활성블록 내 하측 페이지가 상측 페이지의 프로그래밍동안 변질될 수 있는 경우 스크래치 패드 블록에 유지된다. 도 14에서, 섹터들(X 내지 X+3)이 수신되어 활성 블록(1462)의 하측 페이지 0과 스크래치 패드 블록(1460)의 하측 페이지 0 둘 다에 동시에 프로그램될 수 있다. 이어서, 섹터들(X+4 내지 X+7)이 수신되어 활성블록(1462)의 상측 페이지 0에 프로그램된다. 섹터들(X+4 내지 X+7)은 스크래치 패드 블록(1460)에 저장되지 않는다. 활성블록(1462)의 상측 페이지 0에 X+4 내지 X+7의 프로그래밍동안 어떤 문제가 있다면(이를테면 파워 상실), 활성블록(1462)의 하측 페이지 0에 데이터가 변질될 수도 있을 것이다. 즉, 프로그램되는 셀들의 임계전압은 이들 셀들이 더 이상 하측 페이지의 데이터를 나타내는 상태에 있지 않게 수정될 수도 있을 것이지만 상측 페이지 의 데이터를 나타내는 상태로 완전히 프로그램되지 않았다. 예를 들면, 도 13에서 상태 A에서 상태 D로 프로그램되고 있는 셀은 프로그래밍이 중지되었을 때 상태 B 혹은 C에 있을 수도 있을 것이다. 데이터가 이렇게 하여 변질된다면 기입되고 있는 상측 페이지의 데이터는 카피되고 있는 위치로부터 복구될 수도 있다. 그러나, 대부분의 경우들에 있어서, 하측 페이지의 어떤 다른 카피도 존재하지 않는다. 여기서, 하측 페이지의 카피는 상측 페이지의 프로그래밍이 완료될 때까지 스크래치 패드 블록(1460)에 유지된다. 이에 따라, 하측 페이지의 변질되지 않은 카피는 하측 페이지의 데이터를 복구하는데 사용될 수 있다.
복수 파일들의 예들
2이상의 호스트 데이터 파일로부터의 데이터가 단일 블록에 저장될 수 있다. 파일들간의 단절은 페이지 내에서 일어날 수 있으므로 페이지의 부분은 한 파일로부터의 데이터를 내포하고 페이지의 부분은 또 다른 파일로부터의 데이터를 내포한다. 도 15는 원 블록(1570)의 페이지 0 내지 i-1가 제1 파일(파일 1)로부터의 데이터를 내포하고 페이지 i+1 내지 페이지 n-1이 제2 파일(파일 2)로부터의 데이터를 내포하는 예를 도시한 것이다. 페이지 i는 파일 1로부터 섹터들((i*4) 및 (i*4)+1)과 파일 2로부터의 섹터들((i*4)+2 및 (i*4)+3)를 내포한다. 파일 2의 섹터들은 두 파일들로부터의 섹터들이 있음을 보이기 위해서 빗금으로 표시되었다.
도 15는 파일 2가 새로운 블록(1572)으로 업데이트됨을 도시한 것이다. 새로 운 블록(1572)의 제1 페이지(페이지 0)는 원 블록(1570)의 페이지 i의 내용들로 기입된다. 이에 따라, 새로운 블록(1572)의 페이지 0은 파일 2 및 파일 1 둘 다로부터의 섹터들을 내포한다. 파일 1로부터의 섹터들((i*4) 및 (i*4)+1)은 이 때 업데이트되지 않고 전체 한 페이지의 데이터를 프로그램하기 위해서 카피될 수 있다. 업데이트된 파일 2의 나머지는 새로운 블록(1572)의 페이지 1 내지 i-1에 프로그램된다. 이어서, 파일 1이 업데이트된다. 섹터 0 내지 섹터 (i*4)-1은 페이지 i 내지 페이지 n-1에 저장된다. 그러나, 섹터들((i*4) 및 (i*4)+1)도 파일 1의 일부이고 업데이트되어야 한다. 새로운 블록(1572)이 이 때 충만되므로, 업데이트된 섹터들((i*4) 및 (i*4)+1)은 다른 블록에 프로그램된다. 이어서, 섹터들((i*4) 및 (i*4)+1) 및 새로운 블록(1572) 내 섹터들은 가비지 수거 동작의 일부로서 단일 블록에 결합될 수 있다. 그러나, 이것은 시간이 걸리고 시스템 자원들을 취하므로 일반적으로 바람직하지 않다.
도 16은 두 개의 서로 다른 파일들로부터의 섹터들을 포함하는 도 15의 원(original) 블록(1570)의 섹터들을 엡데이트하기 위한 대안적 기술을 도시한 것이다. 이 기술은 업데이트된 섹터들이 시스템의 최대 병행성으로 업데이트된 완전 페이지의 일부로서 기입될 수 있는 시간까지 상기 업데이트된 섹터들을 저장하기 위해 스크래치 패드 블록(1674)를 이용한다. 파일 2가 업데이트될 때, 업데이트된 섹터들((i*4)+2 및 (i*4)+3)은 스크래치 패드 블록(1674)에 기입된다. 여기서, 이들은 스크래치 패드 블록(1674)의 페이지 0에 기입되고 낮은 병행도가 사용되도록 페이지의 나머지에는 어떠한 데이터도 기입되지 않는다. 파일 2의 나머지 섹터들 (섹터들((i*4)+4 to N-i))은 새로운 블록(1676)의 페이지들 0 내지 n-i에 카피된다. 이들 섹터들은 최대 병행을 사용하여 완전-페이지 기입들로 모두 기입된다. 이어서, 파일 1이 업데이트된다. 섹터들(0 내지 (i*4)-l)은 최대 병행으로 페이지들 n-i+1 내지 n-2에 프로그램된다. 이어서, 파일 1의 섹터들((i*4) 및 (i*4)+1)이 새로운 블록(1676)의 페이지 n-1에 섹터들((i*4)+2 및 (i*4)+3)의 카피와 병행하여 기입된다. 이에 따라, 원 블록(1570)에 이전에 보유되었던 모든 섹터들의 업데이트된 카피는 이제 새로운 블록(1676)에 보유되고 새로운 블록(1676)에 어떠한 폐용 데이터도 보유되지 않는다. 일반적으로 새로운 블록(1676)과 같은 블록을 가비지 수거할 필요성이 없다. 새로운 블록(1676)의 각 페이지는 블록에 데이터의 최대 밀도를 달성하기 위해 최대 병행으로 프로그램된다. 스크래치 패드 블록(1674) 내 섹터들((i*4)+2 및 (i*4)+3)은 이 때 폐용으로서 마크될 수 있다. 그러나, 스크래치 패드 블록(1674)는 스크래치 패드 블록이 현 및 폐용 데이터 둘 다를 루틴하게 내포하기 때문에 가비지 수거 동작을 요구함이 없이 다른 동작들에 사용될 수 있다.
데이터의 비순차적 섹터들을 저장하는 예
이전 일부 예들에서, 데이터의 섹터들은 완전 페이지를 기입하는 것 미만의 병행도로 스크래치 패드 블록에 기입된다. 이러한 예들에서, 기입되고 있는 스크래치 패드 블록의 페이지 내 남은 공간은 이미 저장된 데이터를 교란함이 없이 나중에 프로그램하는 것이 가능하지 않기 때문에 빈 상태로 남아 있을 수 있다. 어떤 경우들에 있어서, 이 다른 빈 공간 및 다른 미사용된 프로그램 대역폭을 동일 페이지에 무관한 데이터를 저장하는데 사용하는 것이 가능하다. 예를 들면, 메모리 시스템이 단일 섹터들에 호스트 데이터 혹은 페이지 미만의 그룹들의 섹터들을 수신하는 경우, 호스트 데이터의 이들 섹터들은 관계없는 호스트 데이터 혹은 제어 데이터의 섹터들과 같은 관계없는 데이터를 보유하는 페이지들 내 스크래치 패드 블록에 저장될 수 있다. 유사하게, 완전 페이지의 일부로서 나중에 저장하기 위해 스크래치 패드 블록에 저장되고 있는 파일의 시작부터 섹터들은 논리적으로 관계되지 않은 동일 스크래치 패드 블록 페이지에 추가 섹터들을 저장시킬 수 있다.
도 17은 섹터들(X, X+1, X+2)이 이전 예들에서처럼 스크래치 패드 블록(1780)에 저장되는 예를 도시한 것이다. 그러나, 여기에서 섹터들(X, X+1, X+2)을 보유하는 스크래치 패드 블록의 페이지들에 남은 공간은 다른 데이터를 저장하는데 사용된다. 섹터들(Y, Y+1, Y+2)은 페이지 0에 섹터(X)와 함께 저장된다. 섹터들(Y, Y+1, Y+2)은 섹터들(X, X+1, X+2)에 논리적으로 관계되지 않을 수 있다. 이들은 또 다른 호스트 데이터 파일로부터 오거나 동일 파일 내 또 다른 한 클러스터의 섹터들로부터 올 수 있다. 섹터들(Y, Y+1, Y+2)은 섹터들(X, X+1, X+2)과는 비순차적일 수 있고 논리적 어드레스 공간에서 분리되어 있을 수 있다. 유사하게, 섹터들(Z, Z+1)은 섹터들(X, X+1)을 가진 페이지 1에 저장된다. 섹터들(Z, Z+1)은 섹터들(X, X+1, X+2) 및 섹터들(Y, Y+1, Y+2) 둘 다에 논리적으로 관계되지 않을 수 있다. 이어서, 섹터들(X, X+1, X+2, X+3)은 섹터(X+3)가 수신되었을 때 또 다른 블록의 페이지에 기입된다. 섹터들(Y, Y+1, Y+2, Y+3)은 섹터(Y+3)가 수신되었을 때 또 다른 블록의 페이지에 기입된다. 이에 따라, 관계되지 않은 데이터는 사용가능 자원들을 보다 효율적으로 사용하기 위해 스크래치 패드 블록의 동일 페이지에 저장될 수 있다.
도 18은 스크래치 패드 블록(1890)에 저장된 관계없는 데이터의 또 다른 예를 도시한 것이다. 여기서, 섹터들(X, X+l, X+2)은 전처럼 저장되고 업데이트된다. 그러나, 여기에서 섹터(Y) 또한 병행하여 저장되고 업데이트된다. 업데이트된 섹터들은 어떤 버전이 저장되는가를 표시하는 첨자로 표기되었다. 예를 들면, 섹터(X0)은 섹터(X)의 원 버전이고, Xi는 섹터(X)의 제1 업데이트된 버전이다. 섹터(Y)는 한 섹터의 호스트 데이터 혹은 빈번하게 업데이트되는 한 섹터의 제어 데이터일 수 있다. 일부 시스템들에서, FAT 정보와 같은 제어 데이터는 호스트 데이터가 저장될 때 업데이트된다. 소량의 호스트 데이터가 수신되는 경우 스크래치 패드 블록(1890)에 제어 데이터를 업데이트하는 것이 잇점이 있을 수 있다. 이것은 단일 섹터의 제어 데이터만이 업데이트되는 제어구조를 업데이트하는 것을 피하게 할 수 있다. 추후에, 제어 데이터 구조들은 스크래치 패드 블록으로부터 제어 데이터를 사용하여 업데이트될 수 있다.
스크래치 패드 블록 관리
스크래치 패드 블록은 메모리 어레이 내 지정된 블록일 수 있다. 고정된 물 리적 위치가 스크래치 패드 블록으로서 선택될 수 있다. 그러나, 이럴 경우 메모리 어레이의 마모는 고르지 않게 된다. 대안적으로, 지정된 블록은 스크래치 패드 블록이 폐용 데이터로 채워지게 되었을 때, 스크래치 패드 블록으로서 또 다른 소거블록이 선택되도록 수시로 변경될 수 있다. 이 경우, 메모리 제어기에 의해 사용되는 데이터 구조들은 스크래치 패드 블록의 위치를 확인할 수 있고 혹은 지정된 스크래치 패드 블록에 마크하여 제어기가 메모리 어레이의 소거블록들을 스캔할 경우 어떤 소거블록이 스크래치 패드 블록인지를 결정하게 할 수도 있다. 스크래치 패드 블록은 스크래치 패드 블록으로서 확인하게 섹터를 사용하여 마크될 수도 있다. 예를 들면, 도 19는 제1 섹터의 스크래치 패드 블록(2100)으로서 섹터(2110)를 마크하는 것을 도시한 것이다. 카드에 전원이 들어왔을 때, 메모리 어레이의 소거블록들(혹은 메모리 어레이의 부분)은 스크래치 패드 볼록 혹은 스크래치 패드 블록들의 위치를 판정하기 위해 스캐닝될 수 있다. 도 19의 예에서, 제1 섹터의 각 소거블록은 스크래치 패드 블록을 표시하는 마킹된 섹터인지를 알기 위해 판독된다.
데이터는 데이터 그룹으로서 스크래치 패드 블록에 기입될 수 있다. 데이터 그룹은 호스트로부터 수신된 논리적으로 순차적인 한 그룹의 섹터들이다. 데이터 그룹이 스크래치 패드 블록에 저장될 때, 저장된 데이터 그룹에 관한 정보를 제공하는 인덱스 섹터도 기입된다. 데이터 그룹의 섹터들의 위치들은 인덱스 섹터에 저장될 수 있다. 도 19의 스크래치 패드 블록(2100)과 같은 스크래치 패드 블록은 복수의 데이터 그룹들을 저장하는데 사용될 수 있다. 도 10은 한 데이터 그룹을 저장하는 스크래치 패드(2100)를 도시한 것이다. 데이터 그룹 1은 2개의 섹터들(2220, 2221)로 구성된다. 이들 섹터들, 즉 마킹된 섹터(2110) 및 인덱스 섹터(2230)가 스크래치 패드(2100)에 저장된다. 인덱스 섹터(2230)는 그룹 1에 관한 정보를 저장한다.
도 21은 두 섹터들(2340, 2341)로 구성된 데이터 그룹 2이 프로그램된 후에 도 20의 스크래치 패드 블록(2100)을 도시한 것이다. 인덱스 섹터(2350)은 그룹 1 및 그룹 2에 관한 정보를 저장하는 새로운 인덱스 섹터이다. 이에 따라, 인덱스 섹터(2230)은 인덱스 섹터(2340)이 그룹 1을 포함하는 스크래치 패드 블록(2100)의 데이터 그룹들의 완전한 기록을 내포하기 때문에 폐용이다.
도 22는 섹터들(2460, 2461, 2462로 구성된 데이터 그룹 3의 프로그래밍 후에 도 21의 스크래치 패드 블록(2100)을 도시한 것이다. 인덱스 섹터(2470)은 데이터 그룹들 1, 2, 3에 관한 정보를 저장하는 새로운 인덱스 섹터이다. 인덱스 섹터(2470)은 스크래치 패드 블록(2100)의 데이터의 완전한 기록을 내포하며 따라서 인덱스 섹터(2350)를 폐용으로 한다.
도 23은 데이터 그룹 1 및 데이터 그룹 2가 스크래치 패드 블록(2100)으로부터 독출되고 메모리 어레이의 또 다른 블록에 단일 페이지로서 기입된 후에 도 22의 스크래치 패드 블록(2100)을 도시한 것이다. 인덱스 섹터(2560)는 데이터 그룹 3에 관한 정보를 저장한다. 스크래치 패드(2100) 내 데이터 그룹 1 및 데이터 그룹 2은 폐용되며 이들은 다른 어떤 곳에 저장되기 때문에 인덱싱을 요하지 않는다. 이에 따라, 인덱스 섹터(2560)는 스크래치 패드 블록(2100) 내 모든 현 데이터의 완전한 기록을 내포한다.
호스트가 메모리 어레이로부터 섹터 혹은 섹터들의 데이터를 요청할 때, 제어기는 먼저 요청된 섹터들이 스크래치 패드 블록에 있는지를 체크할 수 있다. 섹터들이 스크래치 패드 블록에 없다면, 섹터들은 정규의 방식으로 찾아질 수 있다. 이에 따라, 스크래치 패드는 메모리 어레이 내 섹터들의 데이터의 위치들을 주시하는데 사용되는 정규 미디어 관리에의 변경들을 요구하지 않는다.
복수-스트림 업데이트 및 인덱싱
도 24는 통상의 방식으로 단일 섹터 페이지들을 갖는 업데이트 블록에 업데이트들을 저장함으로써 논리 그룹 내 섹터들이 업데이트되는 예를 도시한 것이다. 데이터는 논리 섹터들로 패킹되어 모든 논리 섹터들의 메타블록이 함께 소거될 수 있는 메타블록들(또한 간단히 "블록들"이라 함)에 저장된다. 데이터는 블록 페이지별로 기록되며, 각 페이지 내 모든 논리적 섹터들은 함께 프로그램될 수 있다. 예는 통상적으로 약 512 바이트 크기인 각 섹터를 가진 단일 섹터 페이지를 도시한 것이다. 어떤 경우에, '원' 블록(10)은 소정의 순서, 이를테면 오름차순 논리 섹터 번호들의 순서에 따라 그에 저장된 전체 논리적 한 그룹의 섹터들로 형성된다. 이러한 블록은 바람직하게는 순차적인 순서로 논리 그룹의 인택트(intact) 모든 섹터들을 갖는 인택트 블록으로서 간주된다.
그후에, 호스트가 논리 그룹의 이들 논리 섹터들 중 일부의 가장 최근 버전들로서 업데이트들을 보낼 때, 업데이트된 섹터들은 논리 그룹 전용의 업데이트 블 록(20)에 기입된다. 업데이트 데이터가 소정의 순서로 된 것으로 나타나면, 업데이트 블록에 순차적으로 기록될 수도 있을 것이다. 업데이트 블록은 인택트 블록이 될 가능성을 가진 순차 업데이트 블록인 것으로 간주된다. 한편, 업데이트 섹터들이 순차적 순서로 되어 있지 않을 때, 업데이트 블록은 비순차적, 혹은 "혼돈"인 것으로서 간주된다. 이 경우, 섹터들의 임의의 가장 최근 버전이 결국 다른 어떤 곳에 카피되어 새로운 인택트 블록을 형성할 것이다.
호스트 기입 #1에서, 업데이트된 논리 섹터(LS10')이 메모리에 보내져 업데이트 블록(20)의 페이지 0에 기록된다. 호스트 기입 #2에서, 업데이트된 논리 섹터(SL11')이 메모리에 보내져 업데이트 블록(20) 내 다음 사용가능 위치, 페이지 1에 기록된다. 호스트 기입 #3에서, 업데이트된 논리 섹터들(LS6' 및 LS7')이 각각 페이지 2 및 페이지 3에 기록된다. 마지막으로, 호스트 기입 #4에서, 업데이트된 논리 섹터(L10'')이 메모리에 보내져 업데이트 블록의 페이지 4에 기록된다. 논리 그룹의 업데이트는 호스트로부터 업데이트 블록에 업데이트 데이터가 스트림되는 스트림, 예를 들면 STREAM 1을 형성하게 된다. 일반적으로, 원 블록 및 업데이트 블록간에 분포된 논리 섹터의 복수의 버전들이 있다면, 가장 최근에 기입된 버전만이 모든 이전 버전들을 폐용이 되게 하는 유효한 버전일 것이다. 예를 들면, 도 24는 가장 최근에 기입된 버전인, 업데이트 블록의 페이지 4에 기록된 LS10''을 도시한 것으로 논리 섹터 번호 10의 데이터에 대해 현 유효한 섹터이다. 이전 버전들인 원 블록(10) 내 LS10과 업데이트 블록(20) 내 LS10'은 폐용이다.
결국, 업데이트 블록은 폐쇄될 것이고 업데이트 블록과 원 블록간 유효한 섹 터들(논리 섹터들의 가장 최근의 버전)은 소정의 순서로 결합되어 새로운 원 블록을 형성할 것이다. 폐용 원 블록 및 업데이트 블록은 라사이클될 것이다.
도 25는 페이지들이 복수-섹터 및 아마도 1회 기입가능인 메모리에 적용되는 도 24에 도시한 동일 기입 시퀀스를 도시한 것이다. 예로서의 페이지 구조는 각 페이지가 하나가 아니라 4개의 섹터들을 내포하고, 일 실시예에서, 소거후 1회만 기입될 수 있을 뿐인 점에서 도 24에 도시한 것과는 다르다. 현존 술어에 맞추어, 메모리 디바이스에 부과된 최소 단위의 프로그래밍을 '물리 페이지'라 하고 시스템에 부과된 최소 단위의 프로그래밍을 복수의 물리 페이지들로부터 구성될 수 있는 '메타페이지'라 하도록 한다. 편의상, '메타페이지' 및 '페이지'는 다른 것이 명시되지 않는 한, 상호교환적으로 사용될 것이다.
전처럼, 각 논리 섹터는 원래는 원 블록(10)에 오름차순 논리 번호순으로 순차로 저장된다. 블록이 4섹터 페이지 구조를 갖는다면, 블록은 페이지들로 더 분할될 것이며 각 논리 섹터는 바람직하게는 각 페이지에 일정 페이지 오프셋을 갖는다. 예를 들면, 페이지 P0는 이에 저장된 논리 섹터들(LS0-LS3)을 갖는다. 이에 따라, LS0는 페이지의 4개의 슬롯들 중 첫 번째에 저장되고 LS1는 제2 슬롯들에 저장되고, 등등으로 저장된다. 4섹터 페이지의 예에서, 주어진 섹터(LSn)에 대한 페이지 오프셋은 블록의 제1 논리 섹터가 LS0으로서 번호가 매겨졌다면 MOD [(n + 1), 4]에 의해 주어질 것이다.
호스트가 메모리에 기입할 때마다, 다수의 데이터 단위들로서 통상적으로 논리 섹터들을 기입하라는 기입명령을 발행하고 논리 섹터들 자신들의 전송이 이어진 다. 데이터 유실을 방지하기 위해서, 호스트와 메모리간 프로토콜은 현 기입 데이터가 성공적으로 메모리에 기입된 후까지 다음 호스트 기입이 시작되지 않게 하는 프로토콜이다.
앞서 설명된 바와 같이, 복수-섹터 페이지들을 가진 메모리 구조에서, 섹터 정렬을 구현하는 것은 이것이 가비지 수거동안 재정렬할 필요성을 피하게 하므로 구현하는 것이 바람직하다. 따라서, 각 호스트 기입으로부터 수신된 섹터들은 정렬되었을 때 업데이트 블록에 정수개의 페이지들을 채우는 것은 필요하지 않다. 이것은 부분적으로 채워진 페이지가 프로그램되는 결과를 초래할 수도 있을 것이다. 부분적으로 채워진 페이지는 호스트 데이터 전 혹은 후에 갭들을 가질 수도 있을 것이다. 이들 갭들은 가능한 한 순차적 순서를 보존하기 위해서 현존 논리 섹터들로 선(pre)-패딩되거나 후(post)-패딩될 수 있다. 다음 호스트 기입이 다음 논리 섹터인 경우 부분적 페이지를 후-패딩하는 것은 일반적으로 바람직하지 않다. 그러나, 1회기입가능 페이지들을 가진 메모리 구조의 경우에, 일단 기입되면 부분적 페이지의 채워지지 않은 부분을 재기입할 옵션은 없다.
예들에서 업데이트 스트림들(SPB) 중 하나에 유효 페이지들의 수는 옵션으로 1로 제한되었다. 이것은 원리를 예시하는 것으로 충분하나, 2이상 페이지가 SPB에 저장될 수 있고 이 경우 보다 많은 정보(예를 들면 이전 기입-포인터들)가 가장 최근에 기입된 섹터들을 발견하기 위해 분석될 필요가 있는 것에 유의한다.
예를 들면 도 25에서, 호스트 기입 #1에서, 업데이트된 섹터들(LS10')이 업데이트 블록(20)의 페이지 P0의 제3 오프셋에 저장된다. 옵션으로, 완전함을 위해 서 제1 두 개의 슬롯들은 원 블록(10)으로부터 LS8 및 LS9와 같은 유효 데이터로 패딩될 수 있다. 그러나, 여전히 이것은 호스트 기입 #1의 끝에서 페이지(P0)가 저장될 때 제4 슬롯을 채워지지 않은 채로 남겨두게 된다. 부분적 페이지는 옵션으로 LS11의 가장 최근의 버전으로 후-패딩될 수 있다. 페이지는 1회기입 가능하기 때문에, 채워지지 않은 제4 슬롯은 차후 프로그래밍에 대해 폐쇄될 것이다.
호스트 기입 #2에서, 명령은 마지막 섹터 LS10'부터 순차적 순서인 것으로 나타나는 수신된 업데이트된 섹터(LS11')를 기입하라는 것이다. 이상적으로, 이것은 P0에 LS10' 뒤의 다음 슬롯에 기록될 것이다. 그러나 P0는 차후 기입들에 대해 폐쇄되고 그러므로, LS11'은 적합한 페이지 오프셋인 마지막 슬롯에서 다음 빈 페이지(P1)에 저장된다. 제1 세 개의 슬롯들의 P1은 순차로 LS11'에 선행하는 논리 섹터들의 유효 버전들인 LS8, LS9, LS10'으로 패딩된다.
호스트 기입 #3에서, 명령은 LS6' 및 LS7'를 기입하라는 것이다. 이들은 이것은 각각 제3 슬롯 및 제4 슬롯에서 업데이트 블록 내 다음 빈 페이지인 P2에 기입된다. 제1 슬롯 및 제2 슬롯은 LS4 및 LS5와 같은 유효 데이터로 패딩되고 있다.
마지막으로, 호스트 기입 #4에서, 명령은 LS10''을 기입하라는 것으로 이것은 P3, 슬롯 3에 저장되고 슬롯들 1 및 2는 각각 LS8 및 LS9로 패딩되고 슬롯 4는 빈 상태로 남는다.
업데이트 블록은 각각의 1회 프로그램가능 페이지 내에서 섹터 정렬을 유지하려고 하면서 더 많은 패딩 및 데드 공간들로 비효율적으로 사용됨을 알 수 있다. 바람직하지 못한 특징은 호스트가 순차로 기입한다면(두개의 개별적 기입명령들로 섹터(10), 이어서 섹터(11)) 업데이트 블록은 순차로 됨을 중지하고 어떤 폐용 데이터를 갖기 때문에 인택트가 될 수 없다는 것이다.
위에 언급된 문제들을 피하기 위해서 그리고 과도한 패딩뿐만 아니라 부분적으로 채워진 페이지들에 기인하여 업데이트 블록(20)에 비효율적 저장을 최소화하기 위해서, 추가의 스크래치 패드 블록(30)을 사용하는 것이 앞에서 기술되었다. 스크래치 패드 블록(SPB)(30)은 완전 페이지의 데이터가 업데이트 블록(20)에 기입되기 전에 스테이지될 수 있도록 들어오는 데이터에 대한 임시 버퍼 및 스테이지 영역으로서 기능한다. 위에 4섹터 페이지 예에서, 섹터들은 4섹터들이 업데이트 블록에 한 페이지를 완전히 채우게 기입되도록 스테이지된다. 호스트가 개별적 기입들로 순차적 데이터를 기입할 경우, SPB는 부분적 페이지 기입들을 버퍼링하여 업데이트 블록을 순차로 유지할 수 있게 한다. 그러나, 유효 데이터가 원 블록 및 업데이트 블록 외에도 이제 SPB에도 분포될 수 있음을 의미한다.
편의상, 스크래치 패드 블록의 페이지 크기는 업데이트 블록의 크기와 동일하나, 이들은 일반적으로 다를 수 있다. 예를 들면, 스크래치 패드 블록의 페이지들은 메모리 시스템이 물리 페이지 레벨에서 프로그래밍을 지원한다면 물리 페이지의 크기를 가질 수 있다.
스크래치 패드 블록 및 업데이트 블록 인덱스 관리
2004년 8월 13일 출원된 미국특허출원 10/917,725는 블록관리를 갖춘 메모리 시스템을 개시하고 있고 개시된 전부를 참조문헌으로 여기 포함시킨다. 블록관리는 업데이트 하에 각 논리적 일 그룹의 데이터에 연관될 업데이트 블록을 제공한다. 원 블록 혹은 업데이트 블록에 놓여져 있을 수 있는 유효 데이터를 찾는 각종 인덱싱 방법들의 예들이 개시되어 있다. 특히, 업데이트 블록이 비순차적 순서로 논리 섹터들을 내포할 때, "혼돈 업데이트 블록"인 것으로 간주된다. 혼돈 업데이트 블록 인덱스("CBI")는 혼돈 업데이트 블록에 기록된 논리 섹터들을 주시하는데 사용된다.
스크래치 패드 블록에 저장된 SPBI/CBI 인덱스들
발명의 또 다른 면에 따라, 스크래치 패드 블록이 업데이트 블록에 더하여 채용될 때, 연관된 스크래치 패드 블록 인덱스("SPBI")는 스크래치 패드 블록에 기록된 업데이트 섹터들을 주시하는데 사용된다. 이것은 업데이트 블록에 기록된 논리 섹터들을 주시하는데 사용되는 인덱스(예를 들면, "CBI")에 더하여 추가된 것이다. 사용자 데이터가 스크래치 패드 블록의 부분적 페이지에 저장될 때는 언제나, 페이지의 적어도 마지막 슬롯은 채워지지 않음을 의미한다. 일 실시예에서, SPBI는 스크래치 패드 블록에 부분적 페이지의 마지막 슬롯에 저장될 수 있다. 바람직한 실시예에서, SPBI 및 CBI는 SPBI/CBI 섹터 내에 패키지될 수 있고 여하튼 사용되지 않은 스크래치 패드 블록 내 부분적 페이지의 마지막 슬롯에 저장될 수 있다. 새로운 부분적 페이지가 기입될 때마다, 업데이트된 SPBI/CBI 섹터는 끝 슬롯에 기입되 어, 모든 이전 버전들을 폐용이 되게 한다.
도 26은 발명의 일반적인 실시예에 따라, 제2 블록에 저장된 데이터의 인덱스로, 제2 메모리 블록과 함께 제1 메모리 블록을 채용함으로써 데이터를 업데이트하는 방법을 예시한 흐름도이다.
단계 80: 각각 순차적 데이터 기록을 위한 제1 및 제2 비휘발성 저장소들을 제공하는 단계.
단계 81: 제1 및 제2 비휘발성 저장소에 기록된 적어도 한 인덱스의 데이터를 유지하는 단계.
단계 82: 입력 데이터를 수신하는 단계.
단계 84: 버퍼된 입력 데이터를 제1 저장소에 기록에 있어 제1 소정의 조건이 만족되는지 판정하는 단계. 만족된다면, 단계85로 진행하고 그렇지 않다면 단계 86으로 진행한다.
단계 85: 버퍼된 입력 데이터를 제1 저장소에 기록하는 단계. 단계 88로 진행한다.
단계 86: 버퍼된 입력 데이터를 적어도 한 인덱스와 함께 제2 저장소에 기록하는 단계. 단계 88로 진행한다.
단계 88: 처리할 입력 데이터가 더 있다면 단계 72로 진행한다.
도 27a는 발명의 바람직한 실시예에 따라, 스크래치 패드 블록과 함께 업데이트 블록을 채용함으로써 데이터를 업데이트하고 인덱스들을 유지하는 특정의 예를 도시한 것이다. 각 블록은 이의 모든 메모리 위치들이 함께 소거될 수 있는 메 타블록이다. 블록은 페이지 내 모든 메모리 위치들이 함께 프로그램될 수 있는 페이지들로 조직된다. 또한, 각 페이지는 2이상의 섹터를 저장하고 블록이 소거되었을 때마다 1회 기입될 수 있는 크기를 가진다.
업데이트 블록("UB")(20)에 더하여 스크래치 패드 블록("SPB")(30)이 제공된다. 'STREAM 1'이 업데이트 블록(20)에 데이터의 흐름을 표시하는데 사용된다면, 스크래치 패드 블록(30)에의 대응하는 흐름은 'STREAM 0'으로서 표시될 것이다.
도 24 및 도 25에서 동일 호스트 기입들의 예는 도 27a에 도시된 발명의 잇점을 예시하는데 사용될 것이다. 호스트 기입 #1에서, 명령은 LS10'을 기입하라는 것이다. LS10'은 슬롯 3을 점유할 것이기 때문에, 완전 페이지가 업데이트 블록(20)에 기입되지 않을 수도 있을 것이다. 대신에, SPB(30)의 새로운 페이지에 버퍼됨으로써 스테이지된다. 이에 따라, LS10'이 SPB(30)의 다음 이용가능 부분적 페이지(PP0)의 슬롯 3에 저장된다. 동시에, 슬롯 1 및 슬롯 2는 옵션으로 LS8 및 LS9로 각각 패딩된다. 또한, 발명의 특징에 따라서, SPBI 및 CBI 둘 다 섹터, 즉 인덱스 섹터 SPBI/CBI1(50) 내에 패키지되고, 인덱스 섹터(50)는 부분적 페이지(PP0)의 마지막 미사용 슬롯에 잇점이 있게 저장된다.
호스트 기입 #2에서, 명령은 LS11'을 기입하라는 것이다. LS11'이 페이지 끝에 있는 슬롯 4에 속하기 때문에, SPB(30)으로부터 순차적 LS8, LS9, LS10'로 선-패딩된 완전 페이지는 업데이트 블록(20)의 다음 이용가능 페이지(P0)에 기입될 수 있다. 이 경우, SPBI/CBI에 대한 인덱스 섹터는 SPB(30) 내 부분적 페이지에 기입되고 있지 않기 때문에 업데이트되지 않는다. SPB에 선-패딩뿐만 아니라, 정렬이 바람직하나 옵션이다.
호스트 기입 #3에서, 명령은 LS6' 및 LS7'을 기입하라는 것이다. 이들은 각각 슬롯 3 및 슬롯 4에 속한다. 따라서, 업데이트 블록(20)의 또 다른 완전 페이지 P1는 선행 슬롯들이 LS4 및 LS5로 패딩될 때 기입된다. 다시, SPBI/CBI에 대한 인덱스 섹터는 SPB(30)에 부분적 페이지에 기입하고 있지 않기 때문에 업데이트되지 않는다.
호스트 기입 #4에서, 명령은 LS10''을 기입하라는 것이다. LS10''은 슬롯 3에 속하기 때문에, SPB(30)의 다음 부분적 페이지(PP1)에 기입될 것이다. 유사하게, 선행 슬롯들 1 및 2는 LS8 및 LS9로 패딩되고 마지막 슬롯은 인덱스 섹터 SPBI/CBI3의 가장 최근의 업데이트로 저장될 것이다.
도 27a에 도시된 방법은 호스트 기입 #4의 끝에서 업데이트 블록(20)의 사용을 도 25의 것과 비교하여 명백한 바와 같이 업데이트 블록의 보다 효율적 이용이다. 동일 호스트 기입들에 있어서, 도 27a에 도시된 방법은 스크래치 패드 블록(30)의 희생에도 불구하고 저장소를 덜 소비하고 업데이트 블록에 패딩을 덜 요구한다. 동시에, 인덱싱 방법은 비휘발성 메모리에 인덱스를 저장하기 위해 스크래치 패드 블록에 미사용 저장소를 이용한다.
발명의 한 중요한 특징 및 잇점은 업데이트 블록에 업데이트 섹터들의 순차적 순서가 도 25에 도시한 예와는 달리, 순차적 논리 섹터들의 일련의 개별적 호스트 기입들 동안 유지된다는 것이다. 이것은 도 27b에 도시된 예로부터 명백할 것이 다.
도 27b는 발명의 바람직한 실시예에 따라 스크래치 패드 볼록과 함께 업데이트 블록을 채용함으로써 유지되는 데이터 업데이트의 순차적 순서화의 또 다른 예를 도시한 것이다. 이 예에서, 논리 섹터들(LS10'-LS16')은 순서대로 그러나 다수의 개별적 호스트 기입들로 기입된다.
호스트 기입 #1에서, LS10'이 기입된다. 이것은 페이지 끝의 슬롯이 아닌 페이지의 슬롯 3을 점유할 것이기 때문에, 스크래치 패드 블록(30)의 슬롯 3에 기록된다. 동시에, 인덱스 SPBI/CBI1이 페이지 끝 슬롯에 기록된다.
호스트 기입 #2에서, LS11'이 기입된다. 이것은 페이지 끝 슬롯을 점유할 것이기 때문에, 업데이트 블록(20)에 새로운 페이지의 마지막 슬롯에 직접 기록된다. 동시에, 임시로 스크래치 패드 블록에 저장된 LS10'은 슬롯 3에 카피되고 슬롯 1 및 슬롯 2는 원 혹은 인택트 블록(10)으로부터 LS8 및 LS9로 선-패딩된다.
호스트 기입 #3에서, LS12'-LS14'가 기입된다. 이들 중 어느 것도 끝-페이지 오프셋을 갖지 않기 때문에, 이들은 스크래치 패드 블록에 새로운 페이지의 슬롯들 1-3에 저장된다. 동시에, 업데이트된 인덱스 SPBI/CBI3이 페이지 끝 슬롯에 기록된다.
호스트 기입 #4에서, LS15' 및 LS16'이 기입된다. LS15'은 페이지 끝 슬롯에 놓이기 때문에, 업데이트 블록 내 다음 페이지의 마지막 슬롯에 직접 기입된다. 동시에, 슬롯들 1-3은 각각 스크래치 패드 블록으로부터 LS12'-LS14'로 채워진다.
순차적 논리적 섹터들(SL10'-SL1')은 이들이 몇몇의 개별적 호스트 기입들로 기입될지라도 순차적으로 업데이트 블록에 기록됨을 알 것이다.
바람직한 실시예에서, 한 유효한 부분적 페이지(예를 들면, 마지막으로 기입된 부분적 페이지)는 스크래치 패드 블록에 논리 그룹마다 유지된다. 발명은 스크래치 패드 블록에 논리 그룹마다 유지되는 2이상의 유효 부분적 페이지를 갖는 것에 똑같이 적용될 수 있다. 이 경우, 2이상 페이지로부터 인덱스 정보는 기록된 섹터들을 찾기 위해 분석될 필요가 있다.
스크래치 패드 블록의 페이지 내에서 섹터 정렬과 패딩은 바람직하나 옵션이다. 정렬 및 패딩은 업데이트 블록에 후속의 전송을 용이하게 할 것이다.
업데이트 블록의 페이지 내에서 절대 섹터 정렬은 어떤 메모리 구조에서는 인덱싱 및 카피를 단순화시킬 것이다. 페이지 내 섹터들은 페이지에 모든 순차 섹터들이 어떤 수의 슬롯들만큼 순환 시프트될 때라도 페이지 정렬된 것으로서 간주된다. 이 경우, 페이지에 제1 논리 섹터의 위치를 나타내는 페이지 태그는 오프셋 어드레스를 제공할 것이다.
도시된 바람직한 실시예들은 2개의 서로 다른 소거가능 블록들로서 2개의 저장소를 갖는다. 일반적으로 발명은 메모리의 2개의 부분들인 2개의 저장소에 똑같이 적용될 수 있다.
발명은 1비트 데이터를 저장하는 각 메모리 셀들을 구비하는 2상태 메모리들과 2이상 비트의 데이터를 저장할 수 있는 각 메모리 셀들을 구비한 복수-상태 메모리들에 똑같이 적용될 수 있다. 복수-페이지 저장소를 지원하는 복수-상태 메모 리들에 있어서, 하위 페이지가 스크래치 패드 블록의 저장동작에 바람직하게 사용된다. 부분적 페이지는 기입할 제1 섹터가 복수-슬롯 페이지의 슬롯 1 위치로부터 시작하지 않는다면 선-패딩되는 것이 바람직하다.
페이지 레벨 인덱싱은 혼돈 블록들에 대해 사용되고 섹터-레벨의 인덱싱은 스크래치 패드 블록에 대해 사용된다. 모든 혼돈 블록들 및 스크래치 패드 블록을 액세스하는데 모든 필요한 인덱싱 정보, 즉 SPBI/CBI는 빠른 액세스 및 처리를 위해 제어기 SRAM에 유지된다. 새로운 부분적 페이지가 기입될 때는 언제나 스크래치 패드 블록에 주기적으로 기입된다.
일반적으로, 부분적 메타-페이지 재배치 데이터는 프로그래밍 사이클 수를 줄이기 위해 입력되는 데이터와 함께 프로그램된다. 스크래치 패드 블록(SPB)은 이것이 충만되었을 때 완전히 채워진다. SPB 충만은 새로운 블록에 모든 유효 데이터의 재배치이다. SPB에 UB당 유효 데이터를 가진 단지 하나의 페이지를 갖기 때문에, 이들 페이지들을 새로운 페이지에 카피하는 것만이 필요하다. 업데이트 블록당 유효 데이터를 가진 복수의 페이지들이 있다면 이들은 서로 다른 혹은 동일 논리 어드레스들을 내포할 수도 있을 것이고, 후자에서는 이들을 결합하는 것이 바람직하다.
부분적 페이지에 저장된 업데이트 블록 인덱스
발명의 또 다른 면에 따라서, 메모리 블록에 저장된 데이터는 데이터에 의해 점유되지 않은 부분적 페이지의 부분에 저장된 그의 인덱스를 갖는다. 이에 따라, 한 페이지의 메모리 유닛들이 함께 프로그램가능하고 한 블록의 메모리 페이지들이 함께 소거가능한 메모리 단위들로 조직된 메모리에서, 부분적으로 채워진 페이지들은 메모리 단위들에 저장된 데이터 단위들이 소정의 순서에 따라 페이지에 정렬될 때, 그리고 특히 페이지가 각 소거 후에 1회 프로그램 가능한 경우라면 존재할 것이다. 블록에 대한 인덱스는 업데이트 데이터로 채워지지 않은 부분적 페이지에 저장된다. 부분적 페이지는 현재 블록 혹은 또 다른 블록에 있을 수 있다.
도 28은 블록의 부분적 페이지에 업데이트 데이터를 저장하기 위해 메모리 블록의 인덱스를 저장하는 바람직한 방법을 도시한 것이다.
단계 90: 비휘발성 메모리를 메모리 단위들의 소거가능 블록들로 조직하는 단계, 각 메모리 단위는 데이터의 논리 단위를 저장하는 것으로, 각 블록은 하나 이상의 페이지들로 조직되며, 각 페이지 내 메모리 단위들은 소정의 페이지 오프셋들을 가지며 소거 후 함께 1회 프로그램될 수 있다.
단계 92: 논리 단위들의 데이터의 업데이트 버전들을 기록하기 위한 업데이트 블록으로서 블록을 제공하는 단계.
단계 94: 호스트로부터 데이터의 논리 단위들의 데이터를 수신하는 단계.
단계 96: 업데이트 블록 내 데이터에 대한 인덱스를 유지하는 단계.
단계 98: 수신된 데이터가 이들의 페이지 오프셋들에 따라 페이지에 정렬되어, 페이지별로 업데이트 블록에 기록하고, 기록할 페이지가 데이터에 의해 점유되지 않은 부분을 가질 때, 데이터에 의해 점유되지 않은 부분에 인덱스를 기록하는 단계:
복수-스트림 추적 및 동기화
도 29는 몇 개의 논리 그룹들이 동시에 업데이트되고 있는 복수-스트림 업데이트에서 사용되는 스크래치 패드 블록을 개략적으로 도시한 것이다. 예를 들면, 업데이트되는 k개의 논리 그룹들이 있다면, k 업데이트 블록들(20-1,...,20-k)를 사용한 k 업데이트 스트림들이 있을 것이다. 업데이트 블록들 중에 부분적 페이지들을 피하기 위해서, k 업데이트 블록들에 대한 k개의 대응하는 부분적 페이지들에 데이터를 버퍼링하기 위해 또 다른 스트림(스트림 0)에 스크래치 패드 블록(30)이 사용된다. 이에 따라, 개방된 k+1 블록들, 및 k 업데이트 블록들에 k 논리 그룹들의 논리 단위들을 동시에 업데이트하게 기능하는 k 부분적 페이지들이 있게 될 것이다. 보인 예는 스크래치 패드 블록에 업데이트 블록당 하나의 유효한 페이지가 있는 바람직한 실시예를 위한 것이다.
유효 섹터들이 업데이트 및 스크래치 패드 블록들 간에 분포된 상황에서, 동일 논리 섹터들의 서로 다른 카피들이 업데이트 및 스크래치 패드 블록들 모두에서 발견될 수 있는 파워 사이클들의 경우에 섹터들의 가장 최근에 기입된 버전을 확인함에 있어 문제가 일어날 수 있다. 파워 리셋 후에 업데이트 블록에 관한 메모리 스캔은 업데이트 블록의 위치들이 일정한 순서로 채워지기 때문에 논리 섹터의 복수의 버전들(있다면)의 우선도를 설정할 것이다. 유사하게 스크래치 패드 블록을 스캐닝시, 논리 섹터의 마지막 기입된 버전이 확인될 수 있다. 그러나, 스크래치 패드 블록에 가장 최근의 버전과 업데이트 블록에 가장 최근의 버전이 있다면, 어떤 것이 그 가장 최근의 것인지가 쉽게 판정되지 않는다. 예를 들면, 도 27a에서 섹터들(LS8-LS10)은 두 스트림들에서 발견될 수 있다. 도 27a에서와 같이 데이터의 동일 패턴이, LS8'-LS10'를 기입하고, LS8''-LS10''를 기입하고, LS8''-LS11'''를 기입하고, LS4'-LS7'를 기입하는 다른 명령 시퀀스에 의해 생성될 수 있다. 이 경우 유효 섹터들은 스크래치 패드 블록이 아닌 업데이트 블록 내 위치할 것이다.
발명의 또 다른 면에 따라서, 복수의 메모리 블록들에 존재할 수 있는 가장 최근에 기입된 버전을 확인할 수 있게 하는 동기화 정보와 함께 비휘발성 메모리에 업데이트 데이터를 기입하는 방법이 제공된다.
도 30은 입력 데이터 시퀀스를 블록에 기입하는 종래의 경우를 도시한 것이다. 비휘발성 메모리 블록(22)은 일정 순서로 채워지게 조직된다. 이것이 맨 위부터 채워지는 것으로서 개략적으로 도시되었다. 따라서, 데이터 세그먼트들 "A", "B", "C", "A"'의 연속적 기입이 순차적으로 블록에 놓여진다. 따라서, 예를 들면 "A"'이 "A"의 또 다른 버전이라면, 이것이 "A"를 대치하는 나중 버전이라는 것이 블록(22) 내 기록된 위치로부터 판정될 수 있다. 이하의 실시예들은, 효과적일지라도, 한 한정된 스트림의 업데이트시에 스트림들이 얼마나 채워져 있었는지에 관한 정보를 저장하는 보다 넓은 생각의 단지 특별한 경우들이다.
도 31a는 발명의 바람직한 실시예에 따라, 두 블록들에 걸쳐 서로 다른 기입들이 인터리브되어 있을 때라도 기록순서 혹은 우선도를 주시하는 방법을 도시한 것이다. 데이터 세그먼트들 "A", "B", "C" 및 "A"'와 같은 각 기입은 제1 블록(예를 들면, 블록(22))에 혹은 하나 이상의 소정의 조건들에 따라 제2 블록(예를 들면, 블록(32))에 기록될 수도 있을 것이다. 예에서, "A"는 제1 기입에서 제2 블록(32)에 기록된다. 이에 이어 "B"가 제1 블록(22)에 기록되는 제2 기입과, "C"가 제2 블록(32)에 기록되는 제3 기록과 마지막으로 "A"가 제1 블록(22)에 기록되는 제4 기입이 이어진다.
도시된 도면에서, STREAM 0은 제2 블록(32)에 기록하는 데이터 스트림이고, STREAM 1은 제1 블록(22)에 기록하는 데이터 스트림이다. 2이상의 스트림들에서 동일 논리 데이터의 인터리브된 업데이트의 경우, 가장 최근에 기록된 데이터의 위치들을 정의하는 업데이트들의 우선도를 주시하는 것은 필수이다. 바람직한 실시예에서, 이것은 적어도 소정의 스트림이 기록되고 있을 때마다 우선도 정보를 저장해 둠으로써 달성된다.
우선도 정보는 STREAM 0에 기입 데이터가 블록(32)에 기록되고 있을 때마다 이 기입 데이터와 함께 저장되고 있다. 바람직한 실시예에서, 우선도 정보는 제1 블록(22) 내 다음 빈 위치(즉, 다음 기록 위치의 어드레스)를 가리키는 기입 포인터(40)이다. 기입 포인터는 STREAM 0에 저장되고 있는 데이터와 함께 저장된다.
이에 따라, 기입 "A" 동작에서, 블록(22) 내 다음 빈 위치를 가리키는 포인터 PA(40-A)는 STREAM 0에 블록(32)에 "A"와 함께 저장된다. 기입 "B" 동작에서, 기입은 STREAM 1에 블록(22)에 기입이므로 어떠한 포인터도 저장되지 않는다. 기입 "C"에서, STREAM 0에 블록(32)에 "C"와 함께 포인터 PC(40-C)가 저장된다. 블록(22)에의 기입 "A"에서, STREAM 1에 어떠한 포인터도 저장되지 않고 있다.
기입 "A"의 끝에서, 메모리가 파워 중단 후에 리셋된다면, 제어기 RAM 내 어떤 인덱스들이 유실될 것이고 메모리를 스캐닝함으로써 재구축되어야 할 것이다. 역방향으로 스캐닝함으로써, 블록들(22, 32) 각각은 데이터 "A"의 마지막 기입된 버전을 찾았을 것이다. 기입 포인터(40)는 두 블록들 중 가장 최근의 버전을 판정하는데 사용될 수 있다. 예를 들면, 포인터 PC는 "A"'의 기록에 앞서 블록(22) 내 위치를 가리키며 따라서 "A"'는 "C" 다음에 기록된다. 또한, "C"는 "A" 다음의 위치에 블록(32)에 기록되기 때문에, "A"'는 "A"의 나중 버전인 것으로 결론을 내릴 수 있다.
UB당 SPB에 2이상 유효 페이지가 있는 또 다른 실시예에서, 가장 최근에 기입된 데이터를 검출하기 위해서, 2이상 기입 포인터가 분석되어야 할 것이다.
도 31b는 기입들이 두 블록들에 걸쳐 기록될 때 기록순서를 주시하는 또 다른 실시예를 도시한 것이다. 이 실시예는 기입 포인터가 블록(32) 내 다음 빈 위치를 가리키고 블록(22)에 저장되는 것을 제외하고 도 31a에 도시된 것과 유사하다. STREAM 0은 제2 블록(예를 들면, 블록(32))에 기록되고 있고 STREAM 1은 제1 블록(예를 들면, 블록(22))에 기록되고 있다. STREAM 1이 제1 블록에 기록되고 있을 때마다, 제2 블록(22) 내 다음 기록 위치의 어드레스를 주는 제2 블록 기입 포인터(40')는 그와 함께 저장되고 있다. 이 예에서, 포인터들 P'B(40'-B)는 "B"와 함께 기록되고 있다. 마찬가지로, 포인터 P'A(40'-A')는 STREAM 1에 제1 블록(22)에 "A"와 함께 기록되고 있다.
도 32a는 발명의 일반적인 실시예에 따라, 두 데이터 스트림들간 기록 시퀀스를 동기화하는 방법을 도시한 흐름도이다.
단계 100: 각각 순차적 데이터 기록을 위한 제1 및 제2 비휘발성 저장소들을 제공하는 단계.
단계 102: 우선도 정보를 위한 저장소로서 제1 혹은 제2 저장소를 지정하는 단계. 우선도 정보는 제1 저장소 내 제1 데이터 단위가 제2 저장소 내 제2 데이터 단위 전 혹은 후에 기록되었는지를 판정하는데 사용된다.
단계 110: 입력 데이터를 수신하는 단계.
단계 120: 수신된 입력 데이터를 제1 저장소에 기록함에 있어 소정의 조건이 만족되는지를 판정하는 단계. 만족된다면, 단계 130'로 진행하고, 그렇지 않다면 단계 140'로 진행한다.
단계 130: 수신된 입력 데이터를 제1 저장소에 기록하는 단계. 동시에, 제1 저장소가 지정된 저장소라면, 추가적으로 제1 저장소에 우선도 정보를 기록하는 단계. 단계 150으로 진행한다.
단계 140: 수신된 입력 데이터를 제2 저장소에 기록하는 단계. 동시에, 제2 저장소가 지정된 저장소라면, 추가적으로 제2 저장소에 우선도 정보를 기록하는 단계. 단계 150으로 진행한다.
단계 150: 처리할 입력 데이터 더 있다면 단계 110으로 진행하고, 그렇지 않다면 프로세스를 종료한다.
바람직한 실시예에서, 우선도 정보는 기입 포인터이며, 이는 비지정된 저장소에서 다음 기록이 행해질 위치의 어드레스이다.
도 32b는 기입 포인터를 사용한 실시예에 따라, 두 데이터 스트림들간에 기록 시퀀스를 동기화하는 방법을 도시한 흐름도이다.
단계 100': 각각 순차적 데이터 기록을 위한 제1 및 제2 비휘발성 저장소들을 제공하는 단계.
단계 110': 입력 데이터를 수신하는 단계.
단계 120': 수신된 입력 데이터를 제1 저장소에 기록함에 있어 소정의 조건이 만족되는지를 판정하는 단계. 만족된다면, 단계 130'로 진행하고, 그렇지 않다면 단계 140'로 진행한다.
단계 130': 제2 저장소에서 다음 기록이 행해질 위치의 어드레스를 얻는 단계.
단계 132': 어드레스 및 수신된 입력 데이터를 제1 저장소에 기록하는 단계. 단계 150'로 진행한다.
단계 140': 수신된 입력 데이터를 제2 저장소에 기록하는 단계. 단계 150'로 진행한다.
단계 150': 처리한 입력 데이터가 더 있으면 단계 110으로 진행하고, 그렇지 않다면 프로세스를 종료한다.
발명은 각 메모리 단위가 논리 단위의 데이터를 저장하기 위한 것이고 각 블록이 1이상의 페이지들로 조직된 것으로 소거가능 블록들의 메모리 단위들로 조직되는 비휘발성 메모리에 특히 적용될 수 있다. 또한, 각 페이지는 복수의 논리 단위들로 소거 후에 1회 프로그램가능하며, 소정의 순서의 각 논리 단위는 소정의 페이지 오프셋을 갖는다. 방법은 필수로 일 그룹의 논리 단위들의 업데이트 데이터를 저장 혹은 버퍼링하기 위한 2개의 블록들(예를 들면, 업데이트 블록 및 스크래치 패드 블록)을 제공하며, 가장 최근에 기입된 버전의 논리 단위가 제1 혹은 제2 블록에 위치하여 있는지를 확인하는데 도움을 주기 위한 동기화 정보를 유지한다. 도 29에 관하여, 도 31a에 도시된 실시예는 SPB 내 한 곳에 모든 기입 포인터들을 저장하는 것이 더 편리하기 때문에, 복수의 스트림들이 있다면 바람직하다.
업데이트-블록 기입 포인터 실시예
바람직한 실시예에 따라, 기입 포인터 형태의 동기화 정보는 스크래치 패드 블록에 버퍼되고 있을 때마다 호스트 데이터와 함께 저장된다. 기입 포인터는 기입 포인터가 스크래치 패드 블록에 저장될 때 업데이트 블록 내 다음 기입을 위한 위치의 어드레스를 주는 업데이트-블록 기입 포인터이다. 특히, 이것은 호스트 데이터를 여하튼 저장하는데 이용되지 않는 스크래치 패드 블록의 부분에 저장된다. 바람직하게, 업데이트-블록 기입 포인트는 스크래치 패드 블록의 부분적 페이지에 저장된 인덱스 SPBI/CBI에 포함된다. 업데이트-블록 기입 포인터는 스크래치 패드 블 록에 버퍼된 주어진 논리 섹터가 업데이트 블록에 후속 기입들에 의해 폐용으로 되었는지 여부에 관한 판정을 할 수 있게 할 것이다.
파워 리셋이 있고, 관련 논리 섹터의 2개의 버전들이 두 블록들 중에 발견된다면, 기입 포인터는 어떤 버전이 가장 최근의 것인지의 결단을 내릴 수 있게 할 것이다. 예를 들면, 지정된 위치 다음에 업데이트 블록 내 논리 섹터가 기록된다면, SPB에 부분적 페이지에 버전을 대치시킬 것이다. 한편, 논리 섹터가 업데이트 블록에서 발견되지 않거나 더 이전의 위치에 기록되었다면, 결론은 스크래치 패드 블록의 부분적 페이지에 버퍼된 버전이 여전히 유효하다는 것이 될 것이다.
도 33a는 제1 시퀀스에 따라 두 개의 호스트 기입들 #1 및 #2 후에 스크래치 패드 블록 및 업데이트 블록의 상태를 도시한 것이다. 제1 시퀀스는 호스트 기입 #1이 LS10'을 기입하고 호스트 기입 #2이 LS10'' 및 LS11'를 기입하는 것이다.
호스트 기입 #1에서, 명령은 LS10'을 기입하라는 것이다. LS10'은 페이지 경계에 있지 않으므로, 이것은 LS8 및 LS9로 선-패딩되고 현 인덱스 SPBI/CBI1으로 끝이 난 스크래치 패드 블록(30)의 부분적 페이지(PP0)에 기록된다. 부분적 페이지(PP0)가 기입되었을 때, 기입 포인터(40)는 현 인덱스 SPBI/CBI1(50) 내 포함되고, 이것은 마지막 슬롯에 저장된다. 기입 포인터(40)는 업데이트 블록(20)에 제1 빈 페이지(P0)를 가리킨다.
호스트 기입 #2에서, 명령은 LS10'' 및 LS11을 기입하라는 것이다. LS11'은 페이지 끝에 있기 때문에, 이것은 업데이트 블록(20) 내 P0의 마지막 슬롯(슬롯 4) 에 직접 기입된다. 동시에, 슬롯 3에 LS10'이 기입되고 슬롯 1 및 슬롯 2는 LS8 및 LS9로 각각 패딩된다.
메모리가 파워 중단으로 RAM에 유지된 인덱싱 정보를 유실하였다면, 물리 메모리의 역방향 스캔으로 인덱싱 정보를 재구축하려 할 것이다. 업데이트 블록 및 스크래치 패드 블록(SPB) 둘 다 이들의 LS10의 가장 최근의 버전들, 즉 LS10' 및 LS10''을 제공할 것임을 알 것이다. 그러나, LS10''은 SPB의 PP0에 기록된 기입 포인터 다음에 기록되기 때문에, 이것이 LS10'보다 나중의 버전이라고 결론을 내릴 수 있다.
도 33b는 도 33a에 도시된 제1 시퀀스의 역인 제2 시퀀스에 따라 2개의 호스트 기입들 #1 및 #2 다음에 스크래치 패드 블록 및 업데이트 블록의 상태를 도시한 것이다. 역 시퀀스는 호스트 기입 #1이 LS10' 및 LS22'을 기입하고 호스트 기입 #2이 LS10''을 기입하는 것이다.
호스트 기입 #1에서, 명령은 LS10' 및 LS11'을 기입하라는 것이다. LS11'은 페이지 끝에 있기 때문에, 이것은 업데이트 블록(20)의 P0의 마지막 슬롯(슬롯 4)에 직접 기입된다. 동시에, 슬롯 3은 LS10'이 기입되고 슬롯 1 및 슬롯 2는 LS8 및 LS9가 각각 패딩된다.
호스트 기입 #1에 이은 호스트 기입 #2에서, 명령은 LS10''을 기입하라는 것이다. LS10''은 페이지 경계에 있지 않기 때문에, 이것은 LS8 및 LS9로 선-패딩되고 현 인덱스 SPBI/CBI2으로 끝이 난 스크래치 패드 블록(30)의 부분적 페이지(PP0) 에 기록된다. 부분적 페이지(PP0)가 기입되었을 때, 기입 포인터(40)는 현 인덱스 SPBI/CBI2(50) 내 포함되고, 이것은 마지막 슬롯에 저장된다. 기입 포인터(40)는 업데이트 블록(20)에 제1 빈 페이지(P1)를 가리킨다.
이 경우, 파워 리셋 후에, 예를 들면 업데이트 블록 내 논리 섹터(LS10')은 업데이트 블록(20)의 지정된 위치 앞에 기록된 것으로 발견된다. 그러면 업데이트 블록(20) 내 LS10'의 가장 최근의 버전은 스크래치 패드 블록(30)의 부분적 페이지 내 있는 또 다른 버전 LS10''으로 대치된다고 결론을 내릴 수 있다.
도 34a는 스크래치 패드 블록 인덱스(SPBI)의 바람직한 데이터 구조를 도시한 것이다. SPBI 정보는 k 업데이트 블록들 각각에 대해 다음의 필드들을 내포한다. 이것은 논리 그룹/UB당 하나의 유효한 페이지를 가진 SPB의 특별한 경우이다.
논리 그룹 번호는 주어진 스트림에서 업데이트되는 논리 그룹을 확인한다. 바람직하게, 눌 값 "FFFF"는 자유 업데이트 블록들, 혹은 유효 스크래치 패드 데이터가 없는 업데이트 블록들에 대해 저장된다.
페이지 시작 섹터는 스크래치 패드 블록에 기입된 부분적 페이지의 제1 논리 섹터이다.
섹터 런 렝스는 스크래치 패드 페이지에 기입된 부분적 페이지의 유효 섹터들의 수이다.
유효 페이지 번호는 스크래치 패드 블록에 기입된 유일한 유효(유일한 유효) 부분적 페이지를 식별한다. 이것은 스크래치 패드 블록 내 마지막 기입된 부분적 페이지일 것이다. 대안적으로, 어드레싱은 업데이트 블록에 대해 부분적 페이지의 제1 유효 섹터를 가리키는 섹터 오프셋으로 구현될 수 있다. 섹터 오프셋은 블록의 시작에 관하여 카운트된다. 바람직한 실시예에서, 단지 하나의 물리 페이지만이 주어진 업데이트 블록에 대한 유효 데이터를 내포한다. FFFF는 스크래치 패드 블록에 기입되지 않은 섹터들에 대해 저장된다.
업데이트-블록 기입 포인터(40)는 스크래치 패드가 마지막 기입되었을 때 대응하는 업데이트 블록의 제1 미기입된 섹터 위치의 섹터 어드레스이다. 이 섹터 위치로부터 업데이트 블록에 기입된 어떠한 섹터들이든 스크래치 패드 블록에 기입된 섹터들을 대치할 것이다.
도 34b는 도 33a에 도시된 호스트 기입 #1에 대한 스크래치 패드 블록 인덱스 내 값들의 예를 도시한 것이다. 이 예에서, 논리 그룹 번호는 "1"이고, 이것은 논리 섹터들(LS0 내지 LSN-1)을 내포한다. 동반된 업데이트 블록과 스크래치 패드 블록으로 STREAM 1에서 업데이트되고 있다. 부분적 페이지는 PP0이고 LS8 또는 "8"로 시작하며 "3"의 런을 가져 LS10'으로 끝나고 있다. 유효 부분적 페이지 번호는 "0"이다. 마지막으로, 기입 포인터는 "0"의 섹터 오프셋을 갖는 업데이트 블록 내 다음 기입 위치를 가리킨다.
업데이트된 인덱스가 스크래치 패드 블록에만 저장되고, 스크래치 패드 블록이 데이터가 업데이트 블록에 직접 기입될 때마다 기입되지 않는다면 인덱스는 이들 환경들 하에서 무효로 될 것임이 명백할 것이다.
일반적으로, CBI 인덱스 정보뿐만 아니라 전체 SPB 인덱스 정보가 항시 제어 기 SRAM에 데이터 구조에 유지된다. SPB내 유효 섹터들은 섹터-레벨 인덱스 정보에 기초하여 액세스된다. 바람직한 실시예에서, SPBI/CBI 인덱스들은 스크래치 패드 블록 내 비휘발성 메모리에 저장된다. 특히 부분적 페이지가 스크래치 패드 블록(SPB)에 기입될 때마다, 최신의 SPBI/CBI가 부분적 페이지의 마지막 섹터에 저장된다.
SPB는 소정 수(예를 들면, 8)의 업데이트 블록들까지 지원한다. SPB 블록 내 부분적 페이지 데이터는 호스트가 페이지의 마지막 섹터를 기입할 때 연관된 업데이트 블록에 결합된다. 데이터는 주어진 경우에 논리 그룹에 대해 PSB에 2이상 부분적 페이지에 존재할 수 있지만 마지막 기입된 부분적 페이지에 대한 데이터만이 유효하다. 마찬가지로, SPBI/CBI 섹터의 복수의 카피들이 SPB에 존재할 수 있으나 마지막 기입된 카피만이 유효하다. 섹터들이 SPB에 기입될 필요가 있고 SPB가 충만되었을 때, 블록은 먼저 새로운 SPB 블록에 카피되고 이전 SPB는 소거되고, 이후에 섹터들은 새로운 SPB에 기입된다. SPB는 또한 순차적 업데이트 블록이 혼돈으로 되기 때문에, 혹은 이전에 스크래치 패드 데이터를 내포한 업데이트 블록이 폐쇄되기 때문에 SPBI/CBI가 업데이트될 필요가 있을 때 기입된다.
바람직한 실시예에서, 스크래치 패드 블록(SPB) 기입은 한 번에 한 페이지이다. 스트림/논리.그룹/업데이트 블록당 페이지들 수는 1로 제한되고, 따라서 유효한 카피가 UB에 혹은 SPB 어디에 있는가에 관해 의문이 있을 수 있는 단지 하나의 논리 페이지만이 있기 때문에 가장 최근의 SPBI만이 필요로 된다. 마찬가지로, SPB에 UB당 페이지들 수가 2이상이라면, 이전 SPBI들도 분석될 필요가 있게 될 것이 다.
위에 기술된 실시예는 스크래치 패드 블록의 가장 최근의 부분적 페이지에 SPBI/CBI 섹터의 일부로서 업데이트-블록 기입 포인터를 저장한다. 대안적 실시예들은 복수의 블록들 중에 존재할 수 있는 복수의 버전들로부터 논리 섹터의 유효 버전을 식별하는 것이 가능하다. 또한, 스크래치 패드 블록에 스트림당 2이상 페이지를 갖거나 논리 그룹당 2이상 업데이트 블록 혹은 스트림을 갖는 것이 가능하다.
스크래치-패드-블록 기입 포인터 실시예
발명의 또 다른 실시예에 따라서, 스크래치 패드 블록에 버퍼된 주어진 논리 섹터가 업데이트 블록에 후속 기입들에 의해 폐용으로 되었는지를 판정할 수 있게 할 동기화 정보가 유지된다. 이것은 동기화 정보가 업데이트 블록의 페이지에 저장될 때 스크래치 패드 블록에 다음 기입을 위한 위치의 어드레스를 주는 스크래치 패드 기입 포인터를 포함함으로써 달성된다.
도 35a 및 도 35b는 도 33a 및 도 33b의 연속적 호스트 기입들 후에 스크래치 패드 기입 포인터에 대한 스크래치 패드 블록 및 업데이트 블록의 중간 상태를 각각 도시한 것이다.
도 35a는 호스트 기입 #1 후에 스크래치 패드 블록 및 업데이트 블록의 상태를 도시한 것이다. 호스트 기입 #1에서, 논리 섹터(LS10')은 페이지의 슬롯 3에 속하고 페이지 경계에 없으므로 스크래치 패드 블록(30) 내 부분적 페이지(PP0)에 기 록된다. 옵션으로 LS8 및 LS9로 선-패딩되고 현 인덱스 SPBI/CBI1로 끝을 이룬다. 메모리는 파워 차단 후에 재기동되었다면, 논리 섹터(LS10')의 이전 버전은 SPBI/CBI1 인덱스에 의해 정확하게 찾아질 것이다. 이것은 업데이트 블록(20)에 어느 것도 기입되지 않았기 때문에 그러하다.
도 35b는 호스트 기입 #1에 이은 호스트 기입 #2를 도시한 것으로 명령은 LS11'을 기입하라는 것이다. LS11'은 페이지 경계에 있기 때문에(슬롯 4), 채워진 페이지(P0)의 제4 슬롯에 기록되고, LS8, LS9 및 LS10으로 선-패딩된다. 동기화 정보는 SPB(30)에 다음 빈 위치를 가리키는 SPB 기입 포인터(40') 형태이다. 앞선 실시예와는 달리, SPB 기입 포인터(40')는 SPB(30) 내 SPBI/CBI 인덱스에 포함되지 않는다. 대신에, 업데이트 블록(20)에 현재 기록되는 페이지 내 섹터의 헤더 부분에 저장된다. 메모리가 파워 차단 후에 재기동하였다면, 논리 섹터(LS10')의 유효 버전은 SPB 내 LS10의 버전이 SPB 기입 포인터(40')가 가리키는 위치 전에 기록되었기 때문에 업데이트 블록(20)에서 정확하게 찾아낼 것이다.
도 36은 업데이트 블록에 기록되는 섹터의 오버헤드 부분에 저장되는 스크래치 패드 기입 포인터를 도시한 것이다. 스크래치 패드 기입 포인터(40')는 업데이트 블록에 현재 기록되는 페이지 내 섹터들 중 적어도 하나에 저장된다. 바람직한 실시예에서, 기입되는 페이지 내 섹터들 중 적어도 하나의 오버헤드 부분에 저장된다.
시간 스탬프 실시예
또 다른 실시예에서, 동기화 정보는 가장 최근의 버전이 정확하게 발견될 수 있도록 복수의 스트림들에 기입된 데이터 섹터들에 대한 시간 스탬프들로서 엔코딩될 수 있다.
도 37은 두 업데이트 스트림들간 기록 시퀀스를 주시하기 위해 시간 스탬프들의 사용을 도시한 것이다. 전과같이, 업데이트 데이터의 각 세그먼트는 제1 블록(STREAM 1) 혹은 제2 블록(STREAM 2)에 기록될 수 있다. 예는 시간 T1에서, "A"가 제1 블록에 기록되고, T2에서 "B"가 제2 블록에 기록되고, T3에서, "C"가 제1 블록에 기록되고, T4에서 "A"'가 제2 블록에 기록됨을 보여준다.
모든 새로운 데이터 업데이트 부분에 대해 적어도 하나의 시간 스탬프가 저장된다. 이에 따라, "A"는 시간 스탬프 TS1을 가지며, "B"는 TS2를, "C"는 TS3를 "A"'는 TS4를 가진다. 따라서, 예를 들면, "A"'는 "A"의 나중 시간 스탬프를 가지므로 "A"의 나중 버전이다. 바람직한 실시예에서, 시간 스탬프 정보는 기입되는 페이지 내 섹터들 중 적어도 하나의 오버헤드 부분에 저장된다.
복수-섹터 페이지들을 가진 블록들의 복수-스트림 업데이트
발명의 또 다른 면에 따라서, 비휘발성 메모리를 업데이트하는 방법은 업데이트 데이터를 기록하기 위한 제1 블록(업데이트 블록) 및 업데이트 블록에 기록하 기 전에 업데이트 데이터의 일부를 임시 저장하기 위한 제2 블록(스크래치 패드 블록)을 사용하는 것을 포함한다. 비휘발성 메모리는 소거가능한 블록들의 메모리 단위들로 조직되고, 각 메모리 단위들은 논리 단위의 데이터를 저장하기 위한 것이며, 각 블록은 하나 이상의 페이지들로 조직되며, 각 페이지는 일정 페이지 오프셋들을 갖는 복수의 논리 단위들을 저장할 수 있고 소거 후에 함께 1회 프로그램될 수 있다. 방법은 또한, 호스트로부터 논리 단위들을 수신하고 수신된 논리단위들을 페이지 단위로 정렬시켜 수신된 논리 단위가 페이지 끝 오프셋을 갖는 소정의 조건이 만족되었을 때 수신된 논리단위 및 임의의 선행 논리단위들을 적합하게 페이지가 정렬된 업데이트 블록 내 페이지에 저장하고, 그렇지 않다면, 스크래치 패드 블록 내 부분적 페이지에 임의의 나머지 수신된 논리단위들을 임시 저장하는 것을 포함한다. 결국, 스크래치 패드 블록에 논리단위들은 소정의 조건이 만족되었을 때 업데이트 블록에 전송된다.
바람직한 실시예에서, 업데이트 데이터가 수신되고 제1 블록(예를 들면, 업데이트 블록)에 전송하기 위해 페이지 단위로 파싱된다. 임의의 나머지 부분적 페이지의 버퍼된 데이터는 제2 블록(예를 들면, 스크래치 패드 블록)에 전송되고 완전 페이지의 데이터가 제1 기록에 기록을 위해 사용가능하게 될 때까지 잔류하게 될 것이다. 버퍼된 데이터가 제2 블록에 전송될 때, 기록되는 페이지가 수신된 데이터로 단지 부분적으로 채워질지라도, 페이지 단위로 기록된다. 부분적 페이지 내 예비 공간 - 통상적으로 미사용된- 은 사용하여 제2 블록 및 제1 블록에서 데이터를 찾아내기 위한 인덱스를 저장하는데 사용된다.
도 38은 발명의 일반적인 실시예에 따라, 각 메모리 블록은 복수-섹터 페이지들을 갖는 것으로서, 2개의 메모리 블록들에 업데이트 데이터를 동시에 기록하고 인덱싱하는 방법을 도시한 흐름도이다.
단계 200: 비휘발성 메모리를 소거가능한 블록들의 메모리 단위들로 조직하는 단계, 각 메모리 단위는 논리 단위의 데이터를 저장하기 위한 것이며, 각 블록은 하나 이상의 페이지들로 조직되고, 각 페이지는 복수의 메모리 단위들을 내포하고 소거 후 함께 1회 프로그램가능하다.
단계 210: 논리 단위들의 데이터의 완전 페이지 업데이트 버전들을 기록하기 위한 제1 블록을 제공하는 단계.
단계 220: 호스트로부터 수신된 논리 단위들의 데이터의 업데이트 버전들을 버퍼하기 위한 제2 블록을 제공하는 단계.
단계 232: 호스트로부터 논리 단위들로 데이터를 수신하는 단계.
단계 234: 수신된 논리 단위들을 페이지 끝 오프셋을 가진 임의의 논리 단위들을 찾아냄으로써 페이지 단위로 파싱하는 단계.
단계 236: 선행 논리 단위들의 가장 최근의 버전들을 새로운 페이지를 채우면서 페이지 끝 오프셋을 갖는 논리단위들 각각을 제1 블록에 새로운 페이지에 기록하고, 임의의 나머지 수신된 논리 단위들을 제2 블록 내 부분적 페이지에 기록하는 단계.
도 39는 스크래치 패드 블록 및 업데이트 블록을 채용하는 도 37의 방법의 보다 특정의 구현을 도시한 흐름도이다.
단계 310: 각 논리단위는 소정의 순서에 따라 소정의 페이지 오프셋을 갖는 것으로서 완전 페이지 단위로, 논리단위들의 업데이트 버전들을 기록하기 위한 업데이트 블록(UB)을 제공하는 단계.
단계 322: 페이지 단위로 보내져 온 업데이트들을 임시 버퍼하기 위한 스크래치 패드 블록(SPB)를 제공하는 단계.
단계 324: SPB에서 유효(가장 최근의 버전) 데이터를 찾아내기 위한 SPBI 인덱스를 제공하는 단계.
단계 332: 논리 단위 별로 현 기입 요청의 데이터를 수신하는 단계.
단계 334: 현 논리단위가 페이지 끝에서 오프셋되어 있다면, 단계 340으로 진행하고, 그렇지 않다면 단계 336으로 진행한다.
단계 336: 기입요청이 수신할 데이터를 더 갖고 있다면, 단계 332로 진행하고, 그렇지 않다면 단계 350으로 진행한다.
단계 340: 새로운 페이지의 UB를 페이지 끝에 현 논리단위로 기록하고 페이지의 나머지를 소정의 순서에 따라 유효(가장 최근의 버전들) 논리단위들로 채우는 단계. 단계 336으로 진행한다.
단계 350: 모든 수신된 데이터가 기록되었다면, 단계 180으로 진행하고, 그렇지 않다면 단계 360으로 진행한다.
단계 360: 기록되지 않은 수신된 데이터가 SPB 내 임의의 존재하는 유효(가장 최근의 버전) 데이터와 동일한 페이지에 속하지 않는다면, 단계 370로 진행하고, 그렇지 않다면 단계 362로 진행한다.
단계 362: SPB 인덱스를 업데이트하는 단계.
단계 364: 기록되지 않은 수신된 데이터와 이들의 페이지 오프셋들에 임의의 존재하는 유효 데이터를 SPB의 새로운 페이지에 기록하고, SPB 인덱스로 끝을 이루게 하는 단계. 단계 380로 진행한다.
단계 370: 현존의 유효 데이터를 SPB의 현 페이지에서 UB의 새로운 페이지에 결합에 의해 재배치하는 단계.
단계 372: SPB 인덱스를 업데이트하는 단계.
단계 374: 기록되지 않은 수신된 데이터를 이의 페이지 오프셋들에 SPB의 새로운 페이지에 기입하고, SPB 인덱스로 끝을 이루게 하는 단계.
단계 380: 현 기입 요청의 끝.
SPB는 소정 수(예를 들면, 8)의 업데이트 블록들까지를 지원한다. SPB 블록 내 부분적 페이지의 데이터는 호스트가 페이지의 마지막 섹터를 기입할 때 연관된 업데이트 블록에 결합된다. 데이터는 주어진 경우에 논리 그룹에 대해 SPB 내에 2이상의 부분적 페이지에 존재할 수 있으나 바람직한 실시예에서는 마지막 기입된 부분적 페이지에 대한 데이터만이 유효하다. 유사하게, SPBI/CBI의 복수의 카피들은 SPB에 존재할 수 있으나 마지막 기입된 카피만이 유효하다. 동일 결합에 의해서, SPB 내 UB당 유효 페이지들의 수가 1로 제한된다면 마지막 기입 포인터만이 필요로 된다. 섹터들이 SPB에 기입될 필요가 있고 SPB가 충만하여 있다면, 블록은 먼저 새로운 SPB 블록에 카피되고 이전 SPB는 소거되며, 이후에 섹터들은 새로운 SPB에 기입된다. SPB는 순차적 업데이트 블록이 혼돈으로 되기 때문에, 혹은 이전에 스크래치 패드 데이터를 내포한 업데이트 블록이 폐쇄되기 때문에, SPBI/CBI가 업데이트될 필요가 있을 때 기입된다.
일반적으로, 전에 언급한 바와 같이, 각 업데이트 블록마다 2이상 SPB 부분적 페이지들이 유효 데이터를 저장하는데 사용될 수 있다. 따라서, 부분적 페이지는 다음 호스트가 페이지 밖에 섹터를 기입한다면 새로운 것을 위해 결합될 필요는 없다.
복수-스트림 업데이트 방법은 업데이트 블록의 보다 효율적 이용을 가능하게 한다. 이것은 1회 기입가능한 복수-섹터 페이지들을 가진 블록에 있어선 특히 그러하다. 이 방법은 저장소를 덜 소비하고 업데이트 블록에 패딩을 덜 요구한다. 보다 중요하게는, 업데이트 블록 내 업데이트 섹터들의 순차적 순서는 순차적 논리 섹터들의 일련의 개별적 호스트 기입들 동안 유지된다.
예측 파이프라인 동작에 의한 복수-스트림 업데이트
위에 기술된 복수-스트림 업데이트 방법에서, 호스트 기입이 있을 때마다, 수신된 호스트 데이터를 업데이트 블록에 혹은 스크래치 패드 블록에 기록에 관하여 판단해야 할 것이다. 호스트로부터의 데이터 단위들은 끝-페이지 오프셋을 가진 것이 수신될 때까지 이들이 수신될 때 하나씩 모니터될 수도 있을 것이다. 이때, 가능한 선-패딩에도 불구하고, 완전 페이지를 기입하기 위한 소정의 조건이 확인된다.
업데이트 블록에 기입하기 위해서, 기입될 페이지는 프로그래밍을 위해 셋업될 필요가 있다. 이것은 페이지를 어드레스하는 것과 이어서 페이지를 위한 데이터를 데이터 래치들에 로딩하는 것을 수반한다.
바람직한 실시예에 따라서, 업데이트 블록에 기록하기 위한 소정의 조건이 확인될 때까지 기다리지 않고, 기입하고자 하는 데이터 단위들에 의해 소정의 조건이 아마도 만족될 것이라고 호스트 기입 명령이 나타내는 즉시로 업데이트 블록은 기입되게 셋업되는 예측 파이프라인 동작이 구현된다. 이에 따라, 셋업은 호스트로부터 올 데이터 단위들을 기다리는 동안 도약 시작을 취할 수도 있을 것이다. 수신된 실제 데이터 단위들이 종국에 소정의 조건을 만족하였을 때, 업데이트 블록에 페이지의 프로그래밍은 셋업을 기다릴 필요없이 즉시로 행해질 수 있고, 그럼으로써 기입 수행을 향상시킨다. 호스트 기입이 중단되고 수신된 실제 데이터 단위들이 더 이상 소정의 조건을 만족하지 못한 경우, 업데이트 블록에 기록을 위한 셋업은 단념될 것이며, 대신 데이터 단위들은 스크래치 패드 블록에 기록될 것이다.
도 40a는 본 발명이 구현되는 맥락을 제공하는, 한 뱅크의 독출/기입 회로들을 구비한 메모리 디바이스를 개략적으로 도시한 것이다. 메모리 디바이스는 2차원 어레이의 메모리 셀들(400), 제어회로(410), 및 독출/기입 회로들(370)을 포함한다. 메모리 어레이(400)는 행 디코더(430)를 통해 워드라인들에 의해서, 그리고 열 디코더(460)를 통해 비트라인들에 의해 어드레스될 수 있다. 독출/기입회로들(470)은 한 뱅크의 감지 모듈들(480)(도시생략)로서 구현되고, 한 그룹("페이지"라고도 함)의 메모리 셀들이 병렬로 독출 혹은 프로그램될 수 있게 한다. 병렬로 동작하는 전체 한 뱅크의 p 감지 모듈들(480)은 행을 따른 한 페이지의 p 셀들이 병렬로 독출 혹은 프로그램될 수 있게 한다. 일 예의 메모리 어레이는 p =512바이트(512x 8 비트)를 가질 수 있다. 바람직한 실시예에서, 블록은 전체 한 행의 셀들의 런이다. 또 다른 실시예에서, 블록은 행 내 셀들의 부분집합이다. 예를 들면, 셀들의 부분집합은 전체 행의 반 혹은 전체 행의 1/4일 수도 있을 것이다. 셀들의 부분집합은 인접한 셀들의 런 혹은 하나의 모든 다른 셀, 혹은 하나의 모든 소정 수의 셀들일 수도 있을 것이다. 따라서, 바람직한 실시예에서, 페이지는 인접한 한 행의 메모리 셀들로부터 구성된다. 또 다른 실시예에서, 한 행의 메모리 셀들이 복수의 페이지들로 분할되는 경우, 독출/기입 회로들(470)을 개개의 페이지들로 멀티플렉스하기 위해 페이지 멀티플렉서(350)가 제공된다.
제어회로(410)는 메모리 어레이(400)에서 메모리 동작들을 수행하기 위해 독출/기입 회로들(470)과 협동한다. 제어회로(410)는 상태 머신(412), 온-칩 어드레스 디코더(414) 및 파워 제어 모듈(416)을 포함한다. 상태 머신(412)은 메모리 동작들의 칩 레벨 제어를 제공한다. 온-칩 어드레스 디코더(414)는 호스트 혹은 메모리 제어기에 의해 사용되는 것과 디코더들(330, 370)에 의해 사용되는 하드웨어 어드레스간의 어드레스 인터페이스를 제공한다. 파워 제어 모듈(416)은 메모리 동작들 동안 워드라인들 및 비트라인들에 공급되는 파워 및 전압들을 제어한다.
도 40b는 도 40a에 도시된 메모리 디바이스의 바람직한 구성을 도시한 것이다. 각종 주변회로들에 의한 메모리 어레이(400)에의 액세스는 각 측에 액세스 라인들 및 회로가 반으로 줄어들게 어레이의 서로 대향하는 양측에, 대칭형태로 이행 된다. 따라서, 행 디코더는 행 디코더들(430A, 430B)로 분할되고 열 디코더는 열 디코더들(460A, 460B)로 분할된다. 한 행의 메모리 셀들이 복수의 블록들로 분할되는 실시예에서, 페이지 멀티플렉서(450)는 페이지 멀티플렉서들(450A, 450B)로 분할된다. 마찬가지로, 독출/기입 회로들은 밑에서부터 비트라인들을 연결하는 독출/기입 회로들(470A)와 어레이(400)의 위로부터 비트라인들에 연결하는 독출/기입회로들(470B)로 분할된다. 그러므로, 독출/기입모듈들의 밀도, 따라서 한 뱅크의 감지 모듈들(480)의 밀도는 근본적으로 반으로 감소된다. 어레이의 상부에 놓인 독출/기입모듈들에 보내지는 데이터는 위에서 I/O를 통해 전송될 것이다. 마찬가지로, 어레이의 하부에 놓인 독출/기입모듈들에 보내지는 데이터는 밑에 I/O를 통해 전송될 것이다.
도 41은 도 40a에 도시된 감지 모듈을 상세히 도시한 것이다. 각 감지 모듈(480)은 근본적으로 메모리 셀의 도통상태를 감지하기 위한 감지 증폭기(482), 감지된 데이터 혹은 프로그램될 데이터를 저장하기 위한 한 세트의 데이터 래치들(484), 및 외부와 통신하기 위한 I/O 회로(486)을 포함한다. 바람직한 감지 증폭기는 미국특허공개 2004-0109357-A1에 개시되어 있고 이를 참조문헌으로 여기 포함시킨다.
프로그램 동작 중에, 먼저, 선택된 워드라인들 및 비트라인들이 어드레스된다. 이에 이어 프로그램할 데이터를 IO 포트를 통해 각각의 데이터 래치들에 전송한다. 이어서, 비트라인들은 워드라인들에 프로그래밍 전압들의 인가에 의해 프로그래밍이 시작되기 전에 프리차지된다. 프로그래밍 전압의 실제 인가에 선행하는 단계들은 프로그램 셋업으로서 간주될 수 있다. 페이지 크기가 클 때, 프로그램 데이터를 데이터 래치들에 전송하는 필요한 시간도 클 것이다.
호스트 기입동안, 호스트는 먼저 기입하고자 하는 일 범위의 데이터 단위들을 메모리 디바이스에 표시하는 호스트 기입 명령을 보낸다. 이에 이어 범위의 끝에 도달할 때까지 데이터 단위씩으로, 범위 내 데이터 단위들을 전송한다. 프로토콜에 따라, 전송이 예기치 않게 중단되고 나머지 데이터 단위들이 새로운 기입 명령에서 보내질 수 있는 것이 있을 수 있다.
기입수행을 향상시키기 위해서, 데이터 단위들이 여전히 수신되고 있는 중에 프로그램 셋업 프로세스가 행해질 수 있는 파이프라인 동작을 갖는 것이 바람직할 것이다. 그러나, 데이터 단위들이 어떤 데이터 단위들이 수신되는지에 따라 복수의 저장소 중 어느 것에 기록될 수 있을 복수-스트림 방식에서, 주어진 저장소에 기록하기 위해 어드레싱하는 것은 어떤 데이터 단위들이 중단없이 실제로 수신될 때까지는 확실하기 않을 것이다.
이 문제를 극복하기 위해서, 예측 파이프라인 방법이 채용된다. 주어진 저장소에 기록을 일으키는 이들 어떤 데이터 단위들이 호스트 기입명령에 의해 지시된 범위 내에서 발견된다면, 주어진 저장소는 프로그래밍을 위해 즉시로 셋업될 것이다. 이들 어떤 데이터 단위들이 실제로 수신되었을 때, 주어진 저장소는 프로그램 셋업에 기인한 지연없이 데이터 단위들을 프로그램할 위치에 있게 될 것이다. 한편, 이들 어떤 데이터 단위들이 중단에 기인하여 구현되지 못하면, 주어진 저장소에 대한 프로그램 셋업은 포기될 것이고, 대신 또 다른 저장소가 셋업 및 이에 이 은 프로그래밍을 위해 선택될 것이다.
도 42는 바람직한 실시예에 따라, 예측 파이프라인 방법을 채용하는 복수-스트림 업데이트를 도시한 흐름도이다.
단계 500: 호스트 데이터 단위들을 기록하기 위한 제1 및 제2 저장소를 제공하는 단계. 예를 들면, 제1 저장소는 업데이트 데이터 저장 전용의 소거가능한 블록인 업데이트 블록이며, 제2 저장소는 업데이트 블록으로 전송 중에 업데이트 데이터를 임시로 버퍼하기 위한 또 다른 소거가능한 블록인 스크래치 패드 블록이다.
단계 510: 기입될 데이터 범위를 나타내는 호스트 기입 명령을 수신하는 단계.
단계 512: 한 범위의 데이터 단위들이 제1 저장소에 데이터 단위들을 기록하기 위한 소정의 조건을 만족하는 것들이라면, 단계 520으로 진행하고, 그렇지 않다면 단계 530으로 진행한다. 예를 들면, 소거가능 블록은 페이지들로 조직되고, 각 페이지는 함께 프로그램될 수 있는 복수의 데이터 단위들을 저장할 수 있다. 데이터 단위들은 각 데이터 단위가 소정의 페이지 오프셋을 갖도록 논리적으로 순차적 순서로 페이지에 저장된다. 업데이트 블록에 기록하기 위한 소정의 조건은 완전 페이지가 기록될 수 있을 때이다. 충분한 조건은 끝-페이지 오프셋을 가진 데이터 단위가 존재할 때이며, 여기서 완전 페이지는 필요하다면 페이지에 임의의 선행하는 데이터 단위를 선-패딩함으로써 형성된다. 소정의 조건이 만족되지 않는다면, 호스트 데이터는 스크래치 패드 블록에 기록될 것이다.
단계 520: 제1 저장소에 기록하기 위한 준비로 어드레스들을 셋업하는 단계. 예를 들면, 범위가 끝-페이지 오프셋을 가진 데이터 단위를 포함한다면, 완전 페이지는 업데이트 블록에 기록된 것으로 가정될 것이다. 어느 경우이든, 업데이트 블록 내 새로운 페이지가 기록을 위해 어드레싱될 것이다.
단계 522: 제1 저장소에 기록하기 위한 준비로 수신된 데이터를 데이터 래치들에 로딩하는 단계. 데이터 단위들이 호스트로부터 수신되는 즉시로, 이들은 새로운 페이지를 프로그래밍하기 위해 데이터 래치들에 로딩될 것이다.
단계 524: 소정의 조건을 만족한 데이터 단위들이 실제로 수신된다면, 단계 540으로 진행하고, 그렇지 않다면 단계 526으로 진행한다. 예를 들면, 끝-페이지 오프셋을 가진 데이터 단위가 호스트로부터 실제로 수신되었을 때, 예측된 완전 페이지가 명확히 형성될 수 있다.
단계 526: 제1 저장소에 기록하기 위해 셋업을 중지하는 단계. 단계 530으로 진행한다. 예를 들면, 끝-페이지 오프셋을 가진 예상된 데이터 단위가 중단에 기인하여 결코 도달하지 않는다면, 업데이트 블록에 기록될 완전 데이터에 대한 예측은 더 이상 진실이 아니다. 이 경우, 업데이트 블록을 위한 프로그램 셋업은 포기되어야 할 것이다. 대신, 스크래치 패드 블록이 프로그래밍을 위해 이제 셋업될 것이다.
단계 530: 제2 저장소에 기록하기 위한 준비로 어드레스들을 셋업하는 단계. 예를 들면, 업데이트 블록에 완전 페이지를 기록하기 위한 소정의 조건이 만족되지 않을 때, 호스트 데이터는 스크래치 패드 블록에 기록될 것이다. 어느 경우이든, 스크래치 패드 블록에 새로운 페이지가 기록을 위해 어드레스될 것이다.
단계 532: 제2 저장소에 기록하기 위한 준비로 수신된 데이터를 데이터 래치들에 로딩하는 단계. 데이터 단위들이 호스트로부터 수신되는 즉시로, 이들은 새로운 페이지를 프로그래밍하기 위해 데이터 래치들에 로딩될 것이다.
단계 540: 데이터 래치들 내 데이터를 어드레스된 저장소에 프로그램한다. 예를 들면, 업데이트 블록에 혹은 스크래치 패드 블록에 예측된 기록이 수신된 데이터 단위들에 의해 확인되었을 때, 셋업 블록은 지체없이 프로그램될 수 있다.
단계 550: 현 호스트 기입을 종료하는 단계.
메모리 구조에 따라, 단계 520 및 530은 이를테면 단계 522 혹은 단계 532에서 데이터 래치들의 로딩 후에 어드레스들이 선택될 수 있는 등, 다른 순서로 될 수도 있다.
또 다른 바람직한 실시예에서, 데이터가 수신되고 있을 때 그리고 수신된 데이터를 제1 혹은 제2 저장소에 기록할지 초기에 불확실성이 있을 때, 수신된 데이터는 제1 및 제2 저장소 둘 다를 위해 프로그래밍 회로들의 데이터 래치들에 로딩된다. 그러므로, 데이터는 언제든, 제1 혹은 제2 저장소 어느 하나를 프로그래밍하는데 즉시 사용될 수 있을 것이다. 특별한 경우에, 제1 및 제2 저장소들은 동일 한 세트의 데이터 래치들을 공유한다. 예를 들면, 제1 및 제2 저장소들이 동일 메모리 플레인들에 있을 때, 이들은 동일 한 세트의 감지 증폭기들 및 데이터 래치들을 구비한 동일 한 세트의 프로그래밍 회로들에 의해 서비스될 수도 있을 것이다. 이 경우, 데이터는 제1 혹은 제2 저장소가 프로그램될 것인지에 관계없이 한 세트의 내정 데이터 래치들에 로딩될 것이다.
예를 들면 동일 플레인의 서로 다른 메모리 페이지들 혹은 서로 다른 메모리 플레인들에 있는 경우들에서처럼, 제1 및 제2 저장소들이 서로 다른 세트들의 데이터 래치들에 의해 서비스되는 경우에, 데이터는 두 세트들의 데이터 래치들에 로딩될 수도 있을 것이다.
도 43은 또 다른 실시예에 따라 정확한 목적지 어드레스가 보내지기 전에 프로그램 데이터가 로딩되는 복수-스트림 업데이트를 도시한 흐름도이다.
단계 600: 호스트 데이터 단위들을 기록하기 위한 제1 및 제2 저장소를 제공하는 단계.
단계 610: 호스트 데이터를 수신하는 단계.
단계 620: 수신되고 있는 데이터를 제1 저장소를 프로그램하는데 사용되는 데이터 래치들에 그리고 제2 저장소를 프로그램하는데 사용되는 데이터 래치들에 로딩하는 단계.
단계 630: 수신된 데이터가 소정의 조건을 만족하는지에 따라 기록을 위해 제1 혹은 제2 저장소를 어드레싱하는 단계.
단계 640: 어드레스된 저장소에 데이터 래치들로부터 데이터를 프로그래밍하는 단계.
단계 650: 현 호스트 기입 종료.
발명이 각종 실시예들에 관하여 기술되었지만, 첨부한 청구항들의 전체 범위내에서 발명이 보호됨을 알 것이다.

Claims (61)

  1. 호스트로부터 데이터 단위들을 기록하는 방법에 있어서,
    비휘발성의 제1 및 제2 저장소들을 제공하는 단계;
    기입될 상기 데이터 단위들을 나타내는 호스트 기입 명령을 수신하는 단계;
    상기 기입될 데이터 단위들에 근거하여 소정의 조건이 만족되었는지에 따라 기록을 위해 선택된 저장소로 상기 제1 저장소 혹은 상기 제2 저장소를 선택하는 단계;
    기록을 위해 상기 선택된 저장소를 셋업하는 단계;
    상기 데이터 단위들이 상기 호스트로부터 수신될 때 셋업되는 상기 저장소에 상기 데이터 단위들을 보내는 단계; 및
    수신된 상기 데이터 단위들에 근거하여 소정의 조건이 확인되었을 때 상기 셋업된 저장소에 상기 데이터 단위들을 기록하고, 그렇지 않다면 상기 제2 저장소를 이미 셋업되어 있지 않으면 셋업하고 수신된 상기 데이터 단위들을 상기 제2 저장소에 기록하는 단계를 포함하는, 방법.
  2. 제1항에 있어서, 상기 셋업은 상기 선택된 저장소를 어드레싱하는 단계를 포함하는, 방법.
  3. 제1항에 있어서, 상기 저장소에 상기 데이터 단위들을 보내는 단계는 상기 선택된 저장소를 프로그램하기 위한 한 세트의 데이터 래치들에 상기 데이터 단위들을 보내는 단계를 포함하는, 방법.
  4. 제1항에 있어서, 소정의 순서를 갖는 데이터 단위들로 상기 데이터를 조직하는 단계; 및
    각각의 페이지는 소정의 페이지 오프셋들을 갖는 복수의 데이터 단위들을 함께 프로그램하기 위한 것으로, 이들 페이지들로 상기 제1 및 제2 저장소들을 조직하는 단계를 더 포함하고,
    상기 소정의 조건은 상기 데이터 단위들 중 하나가 페이지-끝 오프셋을 가질 때이며;
    상기 제1 저장소에 상기 데이터를 기록하는 상기 단계는 페이지-끝 데이터 단위 및 상기 페이지 내 임의의 선행 데이터 단위들을 상기 제1 저장소의 페이지에 기록하는 단계를 포함하는, 방법.
  5. 제4항에 있어서, 상기 제1 및 제2 저장소 각각은 함께 소거될 수 있는 한 블록의 메모리 단위들을 저장하기 위한 것인, 방법.
  6. 제4항에 있어서, 상기 호스트로부터의 상기 데이터는 일 그룹의 데이터 단위들에 대한 업데이트 데이터이며;
    상기 제1 저장소는 상기 업데이트 데이터를 저장하기 위한 것이며;
    상기 제2 저장소는 상기 제1 저장소에 전송되기 전에 상기 업데이트 데이터를 버퍼링하기 위한 것인, 방법.
  7. 제4항에 있어서, 소정의 순서를 갖는 데이터 단위들로 상기 데이터를 조직하는 단계; 및
    각각의 페이지는 소정의 페이지 오프셋들을 갖는 복수의 데이터 단위들을 함께 프로그램하기 위한 것으로, 이들 페이지들로 상기 제1 및 제2 저장소들을 조직하는 단계를 더 포함하는, 방법.
  8. 제7항에 있어서, 각 페이지는 소거 후에 1회 프로그램가능한, 방법.
  9. 제7항에 있어서, 데이터를 상기 제2 저장소에 기록하는 상기 단계는 이의 페이지에 상기 제2 저장소에 저장된 데이터의 적어도 한 인덱스를 기록하는 단계를 포함하는, 방법.
  10. 제9항에 있어서, 상기 제2 저장소에 저장된 상기 데이터의 적어도 한 인덱스는 페이지-끝 오프셋을 갖는 상기 페이지의 위치에 기록되는, 방법.
  11. 제7항에 있어서, 데이터를 상기 제2 저장소에 기록하는 상기 단계는 이의 페이지에 상기 제1 및 제2 저장소들에 저장된 데이터의 적어도 한 인덱스를 기록하는 단계를 포함하는, 방법.
  12. 제11항에 있어서, 상기 제1 및 제2 저장소들에 저장된 상기 데이터의 적어도 한 인덱스는 페이지-끝 오프셋을 갖는 상기 페이지의 위치에 기록되는, 방법.
  13. 제7항에 있어서, 데이터를 상기 제2 저장소에 기록하는 상기 단계는 이의 페이지에 상기 제1 저장소의 다음 기록위치를 가리키는 포인터를 기록하는 단계를 포함하는, 방법.
  14. 제13항에 있어서, 상기 포인터는 상기 페이지-끝 오프셋을 갖는 페이지의 위치에 기록되는, 방법.
  15. 제1항 내지 제14항 중 어느 한 항에 있어서, 상기 제1 및 제2 저장소들은 개별적으로 1비트 데이터를 저장하는 메모리 셀들로부터 구성되는, 방법.
  16. 제1항 내지 제14항 중 어느 한 항에 있어서, 상기 제1 및 제2 저장소들은 개별적으로 2 비트 이상의 데이터를 저장하는 메모리 셀들로부터 구성되는, 방법.
  17. 비휘발성 메모리에 있어서,
    각 블록은 함께 소거될 수 있는 복수의 메모리 단위들이며, 각 메모리 단위는 논리 단위의 데이터를 저장하기 위한 것으로서, 복수의 블록으로 조직된 메모리;
    상기 블록의 동작들을 제어하기 위한 제어기;
    각각이 호스트로부터 데이터를 기록하기 위한 것인 제1 및 제2 블록;
    상기 호스트로부터 데이터를 수신하기 위한 버퍼;
    상기 제어기는, 기입될 데이터 단위들에 근거하여 소정의 조건이 만족되었는지에 따라 상기 제1 블록 혹은 상기 제2 블록을 기록을 위해 셋업하고;
    상기 데이터 단위들이 상기 호스트로부터 수신될 때 셋업되는 상기 블록에 상기 데이터 단위들을 보내고;
    수신된 상기 데이터 단위들에 근거하여 소정의 조건이 확인되었을 때 셋업된 상기 블록에 상기 데이터 단위들을 기록하고, 그렇지 않다면 상기 제2 블록을 이미 셋업되어 있지 않으면 셋업하고 수신된 상기 데이터 단위들을 상기 제2 블록에 기록하는 것을 포함하는, 비휘발성 메모리.
  18. 제17항에 있어서, 상기 비휘발성 메모리는 착탈가능 메모리 카드 형태인, 비휘발성 메모리.
  19. 제17항에 있어서, 상기 호스트로부터의 상기 데이터는 일 그룹의 데이터 단위들에 대한 업데이트 데이터이며;
    상기 제1 블록은 상기 업데이트 데이터를 저장하기 위한 것이며;
    상기 제2 블록은 상기 제1 블록에 전송되기 전에 상기 업데이트 데이터를 버퍼링하기 위한 것인, 비휘발성 메모리.
  20. 제17항에 있어서, 상기 데이터는 소정의 순서를 갖는 데이터 단위들로 조직되고;
    각각의 페이지는 소정의 페이지 오프셋들을 갖는 복수의 데이터 단위들을 함께 프로그램하기 위한 것으로, 상기 제1 및 제2 블록들이 이들 페이지들로 조직되는, 비휘발성 메모리.
  21. 제20항에 있어서, 각 페이지는 소거 후에 1회 프로그램가능한, 비휘발성 메모리.
  22. 제17항에 있어서, 상기 소정의 조건은 상기 수신된 데이터 단위들 중 하나가 페이지-끝 오프셋을 가질 때이며;
    상기 제1 블록에 상기 데이터 기록을 제어하는 상기 제어기는 페이지-끝 데이터 단위 및 상기 페이지 내 임의의 선행 데이터 단위들을 상기 제1 블록의 페이지에 기록하는 것을 포함하는, 비휘발성 메모리.
  23. 제17항에 있어서, 데이터를 상기 제2 블록에 기록을 제어하는 상기 제어기는 이의 페이지에 상기 제2 블록에 저장된 데이터의 적어도 한 인덱스를 기록하는 것을 포함하는, 비휘발성 메모리.
  24. 제23항에 있어서, 상기 제2 블록에 저장된 상기 데이터의 적어도 한 인덱스는 페이지-끝 오프셋을 갖는 상기 페이지의 위치에 기록되는, 비휘발성 메모리.
  25. 제17항에 있어서, 상기 데이터를 상기 제2 블록에 기록을 제어하는 상기 제어기는 이의 페이지에 상기 제1 블록 및 제2 블록에 저장된 상기 데이터의 적어도 한 인덱스를 기록하는 것을 포함하는, 비휘발성 메모리.
  26. 제25항에 있어서, 상기 제1 블록 및 제2 블록에 저장된 상기 데이터의 적어도 한 인덱스는 페이지-끝 오프셋을 갖는 상기 페이지의 위치에 기록되는, 비휘발성 메모리.
  27. 제17항에 있어서, 상기 데이터를 상기 제2 블록에 기록하는 것을 제어하는 상기 제어기는 이의 페이지에 상기 제1 블록의 다음 기록위치를 가리키는 포인터를 기록하는 단계를 포함하는, 비휘발성 메모리.
  28. 제27항에 있어서, 상기 포인터는 페이지-끝 오프셋을 갖는 페이지의 위치에 기록되는, 비휘발성 메모리.
  29. 비휘발성 메모리에 있어서,
    각 블록은 함께 소거될 수 있는 복수의 메모리 단위들이며, 각 메모리 단위는 논리 단위의 데이터를 저장하기 위한 것으로서, 복수의 블록들로 조직된 메모리;
    상기 블록들의 동작들을 제어하기 위한 제어기;
    각각이 호스트로부터 데이터를 순차로 기록하기 위한 것인 제1 및 제2 블록들;
    상기 호스트로부터 데이터를 수신하기 위한 버퍼;
    소정의 조건이 만족되었는가에 따라 각각 상기 제1 블록에 데이터를 기록하거나 상기 소정의 조건의 만족되지 않았을 때 상기 제2 블록에 상기 데이터를 기록하는 것을 제어하는 수단을 포함하는, 비휘발성 메모리.
  30. 제17항 내지 제29항 중 어느 한 항에 있어서, 상기 제1 블록 및 제2 블록은 비휘발성(nonvolatile)이며, 상기 제1 블록 및 제2 블록은 개별적으로 1비트 데이터를 저장하는 메모리 셀들로부터 구성되는, 비휘발성 메모리.
  31. 제17항 내지 제29항 중 어느 한 항에 있어서, 상기 제1 블록 및 제2 블록은 비휘발성(nonvolatile)이며, 상기 제1 블록 및 제2 블록은 개별적으로 2 비트 이상의 데이터를 저장하는 메모리 셀들로부터 구성되는, 비휘발성 메모리.
  32. 삭제
  33. 삭제
  34. 삭제
  35. 삭제
  36. 삭제
  37. 삭제
  38. 삭제
  39. 삭제
  40. 삭제
  41. 삭제
  42. 삭제
  43. 삭제
  44. 삭제
  45. 삭제
  46. 삭제
  47. 삭제
  48. 삭제
  49. 삭제
  50. 삭제
  51. 삭제
  52. 삭제
  53. 삭제
  54. 삭제
  55. 삭제
  56. 삭제
  57. 삭제
  58. 삭제
  59. 삭제
  60. 삭제
  61. 삭제
KR1020077015224A 2004-12-16 2005-12-08 복수-스트림 업데이팅을 갖는 비휘발성 메모리 및 방법 KR101202620B1 (ko)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US11/016,285 2004-12-16
US11/016,285 US7315916B2 (en) 2004-12-16 2004-12-16 Scratch pad block
US11/191,686 US7412560B2 (en) 2004-12-16 2005-07-27 Non-volatile memory and method with multi-stream updating
US11/191,686 2005-07-27
PCT/US2005/044720 WO2006065668A2 (en) 2004-12-16 2005-12-08 Non-volatile memory and method with multi-stream updating

Publications (2)

Publication Number Publication Date
KR20070101264A KR20070101264A (ko) 2007-10-16
KR101202620B1 true KR101202620B1 (ko) 2012-11-19

Family

ID=36127498

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020077015224A KR101202620B1 (ko) 2004-12-16 2005-12-08 복수-스트림 업데이팅을 갖는 비휘발성 메모리 및 방법

Country Status (7)

Country Link
US (2) US7412560B2 (ko)
EP (2) EP2336891A1 (ko)
JP (1) JP4431175B2 (ko)
KR (1) KR101202620B1 (ko)
IL (1) IL183978A0 (ko)
TW (1) TWI417717B (ko)
WO (1) WO2006065668A2 (ko)

Families Citing this family (133)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7877543B2 (en) * 2004-12-03 2011-01-25 Hewlett-Packard Development Company, L.P. System and method for writing data and a time value to an addressable unit of a removable storage medium
US7412560B2 (en) * 2004-12-16 2008-08-12 Sandisk Corporation Non-volatile memory and method with multi-stream updating
US20060184718A1 (en) * 2005-02-16 2006-08-17 Sinclair Alan W Direct file data programming and deletion in flash memories
US9104315B2 (en) 2005-02-04 2015-08-11 Sandisk Technologies Inc. Systems and methods for a mass data storage system having a file-based interface to a host and a non-file-based interface to secondary storage
US20060184719A1 (en) * 2005-02-16 2006-08-17 Sinclair Alan W Direct data file storage implementation techniques in flash memories
US7877539B2 (en) * 2005-02-16 2011-01-25 Sandisk Corporation Direct data file storage in flash memories
JP2006285600A (ja) * 2005-03-31 2006-10-19 Tokyo Electron Device Ltd 記憶装置、メモリ管理装置、メモリ管理方法及びプログラム
US7949845B2 (en) * 2005-08-03 2011-05-24 Sandisk Corporation Indexing of file data in reprogrammable non-volatile memories that directly store data files
US7669003B2 (en) * 2005-08-03 2010-02-23 Sandisk Corporation Reprogrammable non-volatile memory systems with indexing of directly stored data files
US7480766B2 (en) * 2005-08-03 2009-01-20 Sandisk Corporation Interfacing systems operating through a logical address space and on a direct data file basis
US7409489B2 (en) * 2005-08-03 2008-08-05 Sandisk Corporation Scheduling of reclaim operations in non-volatile memory
US7814262B2 (en) * 2005-10-13 2010-10-12 Sandisk Corporation Memory system storing transformed units of data in fixed sized storage blocks
US7529905B2 (en) 2005-10-13 2009-05-05 Sandisk Corporation Method of storing transformed units of data in a memory system having fixed sized storage blocks
WO2007066720A1 (ja) * 2005-12-09 2007-06-14 Matsushita Electric Industrial Co., Ltd. 不揮発性記憶装置並びにデータ書込み方法及びデータ読み出し方法
US7877540B2 (en) * 2005-12-13 2011-01-25 Sandisk Corporation Logically-addressed file storage methods
US20070143566A1 (en) * 2005-12-21 2007-06-21 Gorobets Sergey A Non-volatile memories with data alignment in a directly mapped file storage system
US7769978B2 (en) * 2005-12-21 2010-08-03 Sandisk Corporation Method and system for accessing non-volatile storage devices
US7747837B2 (en) 2005-12-21 2010-06-29 Sandisk Corporation Method and system for accessing non-volatile storage devices
US7793068B2 (en) 2005-12-21 2010-09-07 Sandisk Corporation Dual mode access for non-volatile storage devices
US20070143567A1 (en) * 2005-12-21 2007-06-21 Gorobets Sergey A Methods for data alignment in non-volatile memories with a directly mapped file storage system
JP4418439B2 (ja) * 2006-03-07 2010-02-17 パナソニック株式会社 不揮発性記憶装置およびそのデータ書込み方法
CA2660087C (en) * 2006-08-05 2014-09-23 Benhov Gmbh, Llc Memory configuration and method for calibrating read/write data based on performance characteristics of the memory configuration
US8745315B2 (en) * 2006-11-06 2014-06-03 Rambus Inc. Memory Systems and methods supporting volatile and wear-leveled nonvolatile physical memory
KR100816761B1 (ko) * 2006-12-04 2008-03-25 삼성전자주식회사 낸드 플래시 메모리 및 에스램/노어 플래시 메모리를포함하는 메모리 카드 및 그것의 데이터 저장 방법
JP2008152464A (ja) * 2006-12-15 2008-07-03 Toshiba Corp 記憶装置
US8166267B2 (en) * 2006-12-26 2012-04-24 Sandisk Technologies Inc. Managing a LBA interface in a direct data file memory system
US7739444B2 (en) 2006-12-26 2010-06-15 Sandisk Corporation System using a direct data file system with a continuous logical address space interface
US8209461B2 (en) 2006-12-26 2012-06-26 Sandisk Technologies Inc. Configuration of host LBA interface with flash memory
US7917686B2 (en) 2006-12-26 2011-03-29 Sandisk Corporation Host system with direct data file interface configurability
US8046522B2 (en) * 2006-12-26 2011-10-25 SanDisk Technologies, Inc. Use of a direct data file system with a continuous logical address space interface and control of file address storage in logical blocks
US20080155175A1 (en) * 2006-12-26 2008-06-26 Sinclair Alan W Host System That Manages a LBA Interface With Flash Memory
US7953954B2 (en) 2007-01-26 2011-05-31 Micron Technology, Inc. Flash storage partial page caching
KR100877609B1 (ko) * 2007-01-29 2009-01-09 삼성전자주식회사 버퍼 메모리의 플래그 셀 어레이를 이용하여 데이터 오류 정정을 수행하는 반도체 메모리 시스템 및 그 구동 방법
US20080189473A1 (en) * 2007-02-07 2008-08-07 Micron Technology, Inc Mlc selected multi-program for system management
KR100866959B1 (ko) * 2007-02-13 2008-11-05 삼성전자주식회사 불휘발성 메모리 장치의 부분 페이지 데이터 기입 방법
JP4398988B2 (ja) * 2007-03-26 2010-01-13 株式会社東芝 構造化文書を管理する装置、方法およびプログラム
US8713283B2 (en) * 2007-06-08 2014-04-29 Sandisk Technologies Inc. Method of interfacing a host operating through a logical address space with a direct file storage medium
US20080307156A1 (en) * 2007-06-08 2008-12-11 Sinclair Alan W System For Interfacing A Host Operating Through A Logical Address Space With A Direct File Storage Medium
US8239639B2 (en) * 2007-06-08 2012-08-07 Sandisk Technologies Inc. Method and apparatus for providing data type and host file information to a mass storage system
ES2692209T3 (es) * 2007-08-29 2018-11-30 Lifescan Scotland Limited Sistema de gestión de datos y método
JP4949176B2 (ja) * 2007-09-10 2012-06-06 ソニー株式会社 情報処理装置、記録方法およびコンピュータプログラム
US8566504B2 (en) * 2007-09-28 2013-10-22 Sandisk Technologies Inc. Dynamic metablocks
US7855916B2 (en) 2007-10-24 2010-12-21 Rao G R Mohan Nonvolatile memory systems with embedded fast read and write memories
US20090109755A1 (en) * 2007-10-24 2009-04-30 Mori Edan Neighbor block refresh for non-volatile memory
CN101425338B (zh) * 2007-10-29 2011-05-18 群联电子股份有限公司 非易失性存储器的写入方法及使用此方法的控制器
US8880483B2 (en) * 2007-12-21 2014-11-04 Sandisk Technologies Inc. System and method for implementing extensions to intelligently manage resources of a mass storage system
US20090164745A1 (en) * 2007-12-21 2009-06-25 Alan Sinclair System and Method for Controlling an Amount of Unprogrammed Capacity in Memory Blocks of a Mass Storage System
TWI363966B (en) * 2008-01-23 2012-05-11 Phison Electronics Corp Method, system and controller for transmitting and dispatching data stream
JP2009211233A (ja) * 2008-03-01 2009-09-17 Toshiba Corp メモリシステム
JP4691122B2 (ja) * 2008-03-01 2011-06-01 株式会社東芝 メモリシステム
JP4653817B2 (ja) * 2008-03-01 2011-03-16 株式会社東芝 メモリシステム
KR101032671B1 (ko) 2008-03-01 2011-05-06 가부시끼가이샤 도시바 메모리 시스템
CN101604291B (zh) * 2008-06-12 2012-07-18 联阳半导体股份有限公司 增进多级单元非挥发性内存的数据存取可靠度的方法
US8762654B1 (en) 2008-07-02 2014-06-24 Marvell International Ltd. Selectively scheduling memory accesses in parallel based on access speeds of memory
TWI413984B (zh) * 2008-10-16 2013-11-01 Silicon Motion Inc 快閃記憶體裝置以及資料更新方法
US7827336B2 (en) * 2008-11-10 2010-11-02 Freescale Semiconductor, Inc. Technique for interconnecting integrated circuits
US7830700B2 (en) * 2008-11-12 2010-11-09 Seagate Technology Llc Resistive sense memory array with partial block update capability
US8452940B2 (en) * 2008-12-30 2013-05-28 Sandisk Technologies Inc. Optimized memory management for random and sequential data writing
US8094500B2 (en) 2009-01-05 2012-01-10 Sandisk Technologies Inc. Non-volatile memory and method with write cache partitioning
US8040744B2 (en) 2009-01-05 2011-10-18 Sandisk Technologies Inc. Spare block management of non-volatile memories
US8244960B2 (en) 2009-01-05 2012-08-14 Sandisk Technologies Inc. Non-volatile memory and method with write cache partition management methods
US8700840B2 (en) 2009-01-05 2014-04-15 SanDisk Technologies, Inc. Nonvolatile memory with write cache having flush/eviction methods
WO2010078222A1 (en) * 2009-01-05 2010-07-08 Sandisk Corporation Non-volatile memory and method with write cache partitioning
US8832353B2 (en) * 2009-04-07 2014-09-09 Sandisk Technologies Inc. Host stop-transmission handling
US8555141B2 (en) * 2009-06-04 2013-10-08 Lsi Corporation Flash memory organization
EP2264604A1 (en) * 2009-06-15 2010-12-22 Thomson Licensing Device for real-time streaming of two or more streams in parallel to a solid state memory device array
US8307241B2 (en) * 2009-06-16 2012-11-06 Sandisk Technologies Inc. Data recovery in multi-level cell nonvolatile memory
JP5209793B2 (ja) * 2009-08-21 2013-06-12 パナソニック株式会社 不揮発性記憶装置、アクセス装置、及び不揮発性記憶システム
JP4956593B2 (ja) * 2009-09-08 2012-06-20 株式会社東芝 メモリシステム
KR101616100B1 (ko) * 2009-09-25 2016-04-28 삼성전자주식회사 메모리 시스템 및 그것의 동작 방법
TWI417889B (zh) * 2009-12-30 2013-12-01 Silicon Motion Inc 快閃記憶體之寫入逾時控制方法及其記憶裝置
TWI446349B (zh) * 2010-03-04 2014-07-21 Phison Electronics Corp 非揮發性記憶體存取方法、系統,與非揮發性記憶體控制器
JP2012128643A (ja) * 2010-12-15 2012-07-05 Toshiba Corp メモリシステム
KR101686010B1 (ko) 2010-12-21 2016-12-13 삼성전자주식회사 실시간 멀티코어 시스템의 동기화 스케쥴링 장치 및 방법
US8848445B2 (en) * 2011-05-17 2014-09-30 Sandisk Technologies Inc. System and method for minimizing write amplification while maintaining sequential performance using logical group striping in a multi-bank system
US8924629B1 (en) * 2011-06-07 2014-12-30 Western Digital Technologies, Inc. Mapping table for improving write operation efficiency
KR101904581B1 (ko) 2011-11-18 2018-10-04 샌디스크 테크놀로지스 엘엘씨 고장난 워드 라인 스크린 및 데이터 복원을 갖는 비휘발성 저장장치
KR20130078973A (ko) * 2012-01-02 2013-07-10 삼성전자주식회사 메모리 장치의 불량 저장 영역 관리 방법 및 이를 이용한 저장 장치
US9202577B2 (en) 2012-03-30 2015-12-01 Intel Corporation Solid state drive management in power loss recovery
WO2013147894A1 (en) * 2012-03-30 2013-10-03 Intel Corporation Solid state drive management in power loss recovery
JP2013229086A (ja) * 2012-04-27 2013-11-07 Sony Corp メモリ装置、メモリ制御装置、メモリ制御方法
US20140258347A1 (en) * 2013-03-11 2014-09-11 Microsoft Corporation Grouping files for optimized file operations
US9600550B2 (en) 2013-03-15 2017-03-21 Uda, Llc Optimization for real-time, parallel execution of models for extracting high-value information from data streams
US10698935B2 (en) 2013-03-15 2020-06-30 Uda, Llc Optimization for real-time, parallel execution of models for extracting high-value information from data streams
US10204026B2 (en) 2013-03-15 2019-02-12 Uda, Llc Realtime data stream cluster summarization and labeling system
US10599697B2 (en) 2013-03-15 2020-03-24 Uda, Llc Automatic topic discovery in streams of unstructured data
US9037902B2 (en) 2013-03-15 2015-05-19 Sandisk Technologies Inc. Flash memory techniques for recovering from write interrupt resulting from voltage fault
US10430111B2 (en) * 2013-03-15 2019-10-01 Uda, Llc Optimization for real-time, parallel execution of models for extracting high-value information from data streams
KR20150015621A (ko) * 2013-07-31 2015-02-11 에스케이하이닉스 주식회사 데이터 저장 장치 및 그것의 동작 방법
US8631325B1 (en) 2013-08-09 2014-01-14 Zoomdata, Inc. Real-time data visualization of streaming data
TWI498899B (zh) * 2013-08-23 2015-09-01 Phison Electronics Corp 資料寫入方法、記憶體控制電路單元與記憶體儲存裝置
KR102074329B1 (ko) 2013-09-06 2020-02-06 삼성전자주식회사 데이터 저장 장치 및 그것의 데이터 처리 방법
US20150186257A1 (en) * 2013-12-26 2015-07-02 Anand S. Ramalingam Managing a transfer buffer for a non-volatile memory
US9466383B2 (en) * 2013-12-30 2016-10-11 Sandisk Technologies Llc Non-volatile memory and method with adaptive logical groups
US9542321B2 (en) 2014-04-24 2017-01-10 Avago Technologies General Ip (Singapore) Pte. Ltd. Slice-based random access buffer for data interleaving
US9564212B2 (en) * 2014-05-06 2017-02-07 Western Digital Technologies, Inc. Solid-state memory corruption mitigation
US10482008B2 (en) * 2015-01-23 2019-11-19 Hewlett Packard Enterprise Development Lp Aligned variable reclamation
US9251276B1 (en) 2015-02-27 2016-02-02 Zoomdata, Inc. Prioritization of retrieval and/or processing of data
US9892800B2 (en) 2015-09-30 2018-02-13 Sunrise Memory Corporation Multi-gate NOR flash thin-film transistor strings arranged in stacked horizontal active strips with vertical control gates
US10121553B2 (en) 2015-09-30 2018-11-06 Sunrise Memory Corporation Capacitive-coupled non-volatile thin-film transistor NOR strings in three-dimensional arrays
US9842651B2 (en) 2015-11-25 2017-12-12 Sunrise Memory Corporation Three-dimensional vertical NOR flash thin film transistor strings
US11120884B2 (en) 2015-09-30 2021-09-14 Sunrise Memory Corporation Implementing logic function and generating analog signals using NOR memory strings
KR102523965B1 (ko) * 2016-03-21 2023-04-21 에스케이하이닉스 주식회사 데이터 저장 장치
TWI619023B (zh) * 2016-11-30 2018-03-21 瑞昱半導體股份有限公司 記憶體控制電路及其方法
US9942312B1 (en) 2016-12-16 2018-04-10 Zoomdata, Inc. System and method for facilitating load reduction at a landing zone
TWI615711B (zh) * 2017-03-28 2018-02-21 群聯電子股份有限公司 資料寫入方法、記憶體控制電路單元與記憶體儲存裝置
TWI625620B (zh) * 2017-05-12 2018-06-01 威盛電子股份有限公司 非揮發性記憶體裝置及其讀取方法
US10692874B2 (en) 2017-06-20 2020-06-23 Sunrise Memory Corporation 3-dimensional NOR string arrays in segmented stacks
US10608008B2 (en) 2017-06-20 2020-03-31 Sunrise Memory Corporation 3-dimensional nor strings with segmented shared source regions
KR20200015743A (ko) 2017-06-20 2020-02-12 선라이즈 메모리 코포레이션 3차원 nor 메모리 어레이 아키텍처 및 그의 제조 방법
WO2019133928A1 (en) 2017-12-30 2019-07-04 Uda, Llc Hierarchical, parallel models for extracting in real-time high-value information from data streams and system and method for creation of same
WO2019147286A1 (en) * 2018-01-29 2019-08-01 Hewlett-Packard Development Company, L.P. Validity of data sets stored in memory
US10475812B2 (en) 2018-02-02 2019-11-12 Sunrise Memory Corporation Three-dimensional vertical NOR flash thin-film transistor strings
US10579548B2 (en) * 2018-03-29 2020-03-03 Western Digital Technologies, Inc. Adaptive interleaving of data transfer requests
KR102080089B1 (ko) * 2018-05-18 2020-02-21 최영준 정전시 전력 소모를 감소시키기 위한 데이터 저장 방법 및 데이터 저장 장치
TWI768346B (zh) * 2018-09-07 2022-06-21 慧榮科技股份有限公司 資料儲存裝置以及非揮發式記憶體控制方法
CN110888591B (zh) 2018-09-07 2023-05-30 慧荣科技股份有限公司 数据储存装置以及非挥发式存储器控制方法
CN110888593B (zh) 2018-09-07 2024-01-26 慧荣科技股份有限公司 数据储存装置以及非挥发式存储器控制方法
KR20200055349A (ko) * 2018-11-13 2020-05-21 에스케이하이닉스 주식회사 저장 장치 및 그 동작 방법
US11282855B2 (en) 2018-12-07 2022-03-22 Sunrise Memory Corporation Methods for forming multi-layer vertical NOR-type memory string arrays
KR20200087487A (ko) * 2019-01-11 2020-07-21 에스케이하이닉스 주식회사 메모리 시스템에서의 유효 데이터 체크 방법 및 장치
US11354357B2 (en) * 2019-01-29 2022-06-07 Sap Se Database mass entry insertion
US10969990B2 (en) * 2019-01-29 2021-04-06 Sap Se Parallel database page flushing
CN113424319A (zh) 2019-02-11 2021-09-21 日升存储公司 垂直薄膜晶体管以及作为用于三维存储器阵列的位线连接器的应用
US10732878B1 (en) * 2019-07-12 2020-08-04 Western Digital Technologies, Inc. Enabling secondary scratchpad cache with solid-state devices for low cost hosts
WO2021127218A1 (en) 2019-12-19 2021-06-24 Sunrise Memory Corporation Process for preparing a channel region of a thin-film transistor
WO2021159028A1 (en) 2020-02-07 2021-08-12 Sunrise Memory Corporation High capacity memory circuit with low effective latency
US11507301B2 (en) 2020-02-24 2022-11-22 Sunrise Memory Corporation Memory module implementing memory centric architecture
WO2021173209A1 (en) 2020-02-24 2021-09-02 Sunrise Memory Corporation High capacity memory module including wafer-section memory circuit
US11705496B2 (en) 2020-04-08 2023-07-18 Sunrise Memory Corporation Charge-trapping layer with optimized number of charge-trapping sites for fast program and erase of a memory cell in a 3-dimensional NOR memory string array
WO2022108848A1 (en) 2020-11-17 2022-05-27 Sunrise Memory Corporation Methods for reducing disturb errors by refreshing data alongside programming or erase operations
US11848056B2 (en) 2020-12-08 2023-12-19 Sunrise Memory Corporation Quasi-volatile memory with enhanced sense amplifier operation
TW202310429A (zh) 2021-07-16 2023-03-01 美商日升存儲公司 薄膜鐵電電晶體的三維記憶體串陣列

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6189081B1 (en) 1996-05-24 2001-02-13 Nec Corporation Non-volatile semiconductor storage with memory requirement and availability comparison means and method
US20020083262A1 (en) 1999-04-05 2002-06-27 Tomoya Fukuzumi Memory device operable with a small-capacity buffer memory and having a flash memory

Family Cites Families (92)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS6134793A (ja) 1984-07-27 1986-02-19 Hitachi Ltd ダイナミツクメモリ装置における診断及びエラ−訂正装置
US5095344A (en) 1988-06-08 1992-03-10 Eliyahou Harari Highly compact eprom and flash eeprom devices
US5043940A (en) 1988-06-08 1991-08-27 Eliyahou Harari Flash EEPROM memory systems having multistate storage cells
US5070032A (en) 1989-03-15 1991-12-03 Sundisk Corporation Method of making dense flash eeprom semiconductor memory structures
US7190617B1 (en) 1989-04-13 2007-03-13 Sandisk Corporation Flash EEprom system
US5172338B1 (en) 1989-04-13 1997-07-08 Sandisk Corp Multi-state eeprom read and write circuits and techniques
EP0449322B1 (en) 1990-03-29 1999-07-28 Canon Kabushiki Kaisha Text processing apparatus with formatting of text
US5343063A (en) 1990-12-18 1994-08-30 Sundisk Corporation Dense vertical programmable read only memory cell structure and processes for making them
US5270979A (en) 1991-03-15 1993-12-14 Sundisk Corporation Method for optimum erasing of EEPROM
US5504760A (en) 1991-03-15 1996-04-02 Sandisk Corporation Mixed data encoding EEPROM system
US5263032A (en) 1991-06-27 1993-11-16 Digital Equipment Corporation Computer system operation with corrected read data function
US6347051B2 (en) 1991-11-26 2002-02-12 Hitachi, Ltd. Storage device employing a flash memory
US5313421A (en) 1992-01-14 1994-05-17 Sundisk Corporation EEPROM with split gate source side injection
US6222762B1 (en) 1992-01-14 2001-04-24 Sandisk Corporation Multi-state memory
US5532962A (en) 1992-05-20 1996-07-02 Sandisk Corporation Soft errors handling in EEPROM devices
US5657332A (en) 1992-05-20 1997-08-12 Sandisk Corporation Soft errors handling in EEPROM devices
US5315541A (en) 1992-07-24 1994-05-24 Sundisk Corporation Segmented column memory array
JP2856621B2 (ja) 1993-02-24 1999-02-10 インターナショナル・ビジネス・マシーンズ・コーポレイション 一括消去型不揮発性メモリおよびそれを用いる半導体ディスク装置
US5404485A (en) 1993-03-08 1995-04-04 M-Systems Flash Disk Pioneers Ltd. Flash file system
US5555204A (en) 1993-06-29 1996-09-10 Kabushiki Kaisha Toshiba Non-volatile semiconductor memory device
US5623620A (en) 1993-06-30 1997-04-22 Intel Corporation Special test modes for a page buffer shared resource in a memory device
KR0169267B1 (ko) 1993-09-21 1999-02-01 사토 후미오 불휘발성 반도체 기억장치
US5661053A (en) 1994-05-25 1997-08-26 Sandisk Corporation Method of making dense flash EEPROM cell array and peripheral supporting circuits formed in deposited field oxide with the use of spacers
GB2289779B (en) 1994-05-24 1999-04-28 Intel Corp Method and apparatus for automatically scrubbing ECC errors in memory via hardware
JPH08147988A (ja) 1994-11-17 1996-06-07 Sony Corp 半導体不揮発性記憶装置
FR2728380A1 (fr) 1994-12-20 1996-06-21 Sgs Thomson Microelectronics Procede d'ecriture de donnees dans une memoire et memoire electriquement programmable correspondante
US5475693A (en) 1994-12-27 1995-12-12 Intel Corporation Error management processes for flash EEPROM memory arrays
JP3176019B2 (ja) 1995-04-05 2001-06-11 株式会社東芝 不揮発性半導体記憶部を含む記憶システム
US5699297A (en) 1995-05-30 1997-12-16 Kabushiki Kaisha Toshiba Method of rewriting data in a microprocessor additionally provided with a flash memory
US5907856A (en) 1995-07-31 1999-05-25 Lexar Media, Inc. Moving sectors within a block of information in a flash memory mass storage architecture
US6125435A (en) 1995-09-13 2000-09-26 Lexar Media, Inc. Alignment of cluster address to block addresses within a semiconductor non-volatile mass storage memory
US5696929A (en) 1995-10-03 1997-12-09 Intel Corporation Flash EEPROM main memory in a computer system
JPH09128165A (ja) 1995-10-27 1997-05-16 Toshiba Corp 固体記録再生装置
US5950222A (en) * 1996-03-14 1999-09-07 Sanyo Electric Co., Ltd. Microcomputer using a non-volatile memory
US5903495A (en) 1996-03-18 1999-05-11 Kabushiki Kaisha Toshiba Semiconductor device and memory system
US5715193A (en) 1996-05-23 1998-02-03 Micron Quantum Devices, Inc. Flash memory system and method for monitoring the disturb effect on memory cell blocks due to high voltage conditions of other memory cell blocks
US5798968A (en) 1996-09-24 1998-08-25 Sandisk Corporation Plane decode/virtual sector architecture
US5890192A (en) 1996-11-05 1999-03-30 Sandisk Corporation Concurrent write of multiple chunks of data into multiple subarrays of flash EEPROM
US5745418A (en) 1996-11-25 1998-04-28 Macronix International Co., Ltd. Flash memory mass storage system
US5835413A (en) 1996-12-20 1998-11-10 Intel Corporation Method for improved data retention in a nonvolatile writeable memory by sensing and reprogramming cell voltage levels
US5930167A (en) 1997-07-30 1999-07-27 Sandisk Corporation Multi-state non-volatile flash memory capable of being its own two state write cache
US5909449A (en) 1997-09-08 1999-06-01 Invox Technology Multibit-per-cell non-volatile memory with error detection and correction
US5937425A (en) 1997-10-16 1999-08-10 M-Systems Flash Disk Pioneers Ltd. Flash file system optimized for page-mode flash technologies
JP3177207B2 (ja) 1998-01-27 2001-06-18 インターナショナル・ビジネス・マシーンズ・コーポレ−ション リフレッシュ間隔制御装置及び方法、並びにコンピュータ
JP2000187992A (ja) 1998-12-17 2000-07-04 Mitsubishi Electric Corp 電気的書換可能な不揮発性メモリのリフレッシュ制御回路
GB9903490D0 (en) 1999-02-17 1999-04-07 Memory Corp Plc Memory system
JP4173642B2 (ja) 1999-02-22 2008-10-29 株式会社ルネサステクノロジ メモリカードのデータ書き込み方法
JP2000251483A (ja) 1999-02-24 2000-09-14 Sanyo Electric Co Ltd 1チップマイクロコンピュータとそのデータリフレッシュ方法
WO2000060605A1 (en) * 1999-04-01 2000-10-12 Lexar Media, Inc. Space management for managing high capacity nonvolatile memory
WO2001008015A1 (fr) 1999-07-28 2001-02-01 Sony Corporation Systeme d'enregistrement, dispositif d'enregistrement de donnees, dispositif a memoire et procede d'enregistrement de donnees
JP3937214B2 (ja) 1999-09-17 2007-06-27 株式会社ルネサステクノロジ エラー訂正回数を記録する記憶装置
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
JP3942807B2 (ja) 2000-06-06 2007-07-11 株式会社ルネサステクノロジ ブロックアラインメント機能付き半導体記憶装置
US6567307B1 (en) 2000-07-21 2003-05-20 Lexar Media, Inc. Block management for mass storage
US6772274B1 (en) 2000-09-13 2004-08-03 Lexar Media, Inc. Flash memory system and method implementing LBA to PBA correlation within flash memory array
US6345001B1 (en) 2000-09-14 2002-02-05 Sandisk Corporation Compressed event counting technique and application to a flash memory system
US6763424B2 (en) 2001-01-19 2004-07-13 Sandisk Corporation Partial block data programming and reading operations in a non-volatile memory
JP3812933B2 (ja) 2001-04-19 2006-08-23 シャープ株式会社 ファイルシステムおよびその制御方法
US6522580B2 (en) 2001-06-27 2003-02-18 Sandisk Corporation Operating techniques for reducing effects of coupling between storage elements of a non-volatile memory operated in multiple data states
JP4059472B2 (ja) 2001-08-09 2008-03-12 株式会社ルネサステクノロジ メモリカード及びメモリコントローラ
US6456528B1 (en) 2001-09-17 2002-09-24 Sandisk Corporation Selective operation of a multi-state non-volatile memory system in a binary mode
US6678785B2 (en) 2001-09-28 2004-01-13 M-Systems Flash Disk Pioneers Ltd. Flash management system using only sequential write
GB0123412D0 (en) 2001-09-28 2001-11-21 Memquest Ltd Memory system sectors
US20030065699A1 (en) 2001-10-01 2003-04-03 Koninklijke Philips Electronics N.V. Split multiplier for efficient mixed-precision DSP
US6925007B2 (en) 2001-10-31 2005-08-02 Sandisk Corporation Multi-state non-volatile integrated circuit memory systems that employ dielectric storage elements
US6560152B1 (en) 2001-11-02 2003-05-06 Sandisk Corporation Non-volatile memory with temperature-compensated data read
US6825846B2 (en) 2001-12-10 2004-11-30 American Megatrends, Inc. Systems and methods for capturing screen displays from a host computing system for display at a remote terminal
JP4206688B2 (ja) 2002-04-15 2009-01-14 ソニー株式会社 データ処理装置及びデータ処理方法
US20060090030A1 (en) * 2002-05-17 2006-04-27 Koninklijke Philips Electronic N.V. Device and method for storing information
US6968439B2 (en) 2002-08-29 2005-11-22 Micron Technology, Inc. Single segment data object management
US7196931B2 (en) 2002-09-24 2007-03-27 Sandisk Corporation Non-volatile memory and method with reduced source line bias errors
US7174440B2 (en) 2002-10-28 2007-02-06 Sandisk Corporation Method and apparatus for performing block caching in a non-volatile memory system
KR101122511B1 (ko) 2002-10-28 2012-03-15 쌘디스크 코포레이션 비휘발성 저장 시스템들에서 자동 웨어 레벨링
US6829167B2 (en) 2002-12-12 2004-12-07 Sandisk Corporation Error recovery for nonvolatile memory
US6944063B2 (en) * 2003-01-28 2005-09-13 Sandisk Corporation Non-volatile semiconductor memory with large erase blocks storing cycle counts
US7127564B2 (en) * 2003-02-28 2006-10-24 Standard Microsystems Corporation Double buffered flash programming
US6928511B2 (en) 2003-03-03 2005-08-09 High Tech Computer, Corp. Method and system for managing virtual memory
US20040193782A1 (en) 2003-03-26 2004-09-30 David Bordui Nonvolatile intelligent flash cache memory
US7606993B2 (en) * 2003-06-10 2009-10-20 Tdk Corporation Flash memory controller, memory control circuit, flash memory system, and method for controlling data exchange between host computer and flash memory
US7076598B2 (en) * 2003-09-09 2006-07-11 Solid State System Co., Ltd. Pipeline accessing method to a large block memory
US8504798B2 (en) 2003-12-30 2013-08-06 Sandisk Technologies Inc. Management of non-volatile memory systems having large erase blocks
US7433993B2 (en) 2003-12-30 2008-10-07 San Disk Corportion Adaptive metablocks
US20050144363A1 (en) 2003-12-30 2005-06-30 Sinclair Alan W. Data boundary management
US7139864B2 (en) 2003-12-30 2006-11-21 Sandisk Corporation Non-volatile memory and method with block management system
US20050169259A1 (en) 2004-01-29 2005-08-04 Rdc Semiconductor Co., Ltd, Taiwan, R.O.C. Switching hub architecture and index-shared packet transfer method thereof
JP2005222201A (ja) 2004-02-04 2005-08-18 Matsushita Electric Ind Co Ltd メモリアクセス装置、及び半導体メモリカード
JP2006139556A (ja) 2004-11-12 2006-06-01 Toshiba Corp メモリカード及びそのカードコントローラ
US7315916B2 (en) 2004-12-16 2008-01-01 Sandisk Corporation Scratch pad block
US7412560B2 (en) 2004-12-16 2008-08-12 Sandisk Corporation Non-volatile memory and method with multi-stream updating
US7386655B2 (en) 2004-12-16 2008-06-10 Sandisk Corporation Non-volatile memory and method with improved indexing for scratch pad and update blocks
US7366826B2 (en) 2004-12-16 2008-04-29 Sandisk Corporation Non-volatile memory and method with multi-stream update tracking
US7437653B2 (en) 2004-12-22 2008-10-14 Sandisk Corporation Erased sector detection mechanisms

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6189081B1 (en) 1996-05-24 2001-02-13 Nec Corporation Non-volatile semiconductor storage with memory requirement and availability comparison means and method
US20020083262A1 (en) 1999-04-05 2002-06-27 Tomoya Fukuzumi Memory device operable with a small-capacity buffer memory and having a flash memory

Also Published As

Publication number Publication date
US20060155920A1 (en) 2006-07-13
JP4431175B2 (ja) 2010-03-10
WO2006065668A2 (en) 2006-06-22
EP2336891A1 (en) 2011-06-22
EP1839115B1 (en) 2014-07-02
IL183978A0 (en) 2007-10-31
TWI417717B (zh) 2013-12-01
US20080301359A1 (en) 2008-12-04
TW200636458A (en) 2006-10-16
WO2006065668B1 (en) 2007-02-22
JP2008524711A (ja) 2008-07-10
KR20070101264A (ko) 2007-10-16
US7412560B2 (en) 2008-08-12
WO2006065668A3 (en) 2006-12-07
US8151035B2 (en) 2012-04-03
EP1839115A2 (en) 2007-10-03

Similar Documents

Publication Publication Date Title
KR101202620B1 (ko) 복수-스트림 업데이팅을 갖는 비휘발성 메모리 및 방법
KR101089576B1 (ko) 업데이트 및 스크래치 패드 블록들을 위한 개선된 인덱싱을갖는 비휘발성 메모리 및 방법
JP4399008B2 (ja) 不揮発性メモリおよびマルチストリーム更新追跡を伴う方法
KR100914263B1 (ko) 스크래치 패드 블록
KR100983212B1 (ko) 데이터 런 프로그래밍
US20050144357A1 (en) Adaptive metablocks

Legal Events

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

Payment date: 20151016

Year of fee payment: 4

LAPS Lapse due to unpaid annual fee