KR101534888B1 - 내고장성 비휘발성 집적 회로 메모리 - Google Patents

내고장성 비휘발성 집적 회로 메모리 Download PDF

Info

Publication number
KR101534888B1
KR101534888B1 KR1020107013481A KR20107013481A KR101534888B1 KR 101534888 B1 KR101534888 B1 KR 101534888B1 KR 1020107013481 A KR1020107013481 A KR 1020107013481A KR 20107013481 A KR20107013481 A KR 20107013481A KR 101534888 B1 KR101534888 B1 KR 101534888B1
Authority
KR
South Korea
Prior art keywords
data
memory devices
integrated circuit
circuit memory
sectors
Prior art date
Application number
KR1020107013481A
Other languages
English (en)
Other versions
KR20100106398A (ko
Inventor
윌리암 에이치. 래드케
Original Assignee
마이크론 테크놀로지, 인크.
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 마이크론 테크놀로지, 인크. filed Critical 마이크론 테크놀로지, 인크.
Publication of KR20100106398A publication Critical patent/KR20100106398A/ko
Application granted granted Critical
Publication of KR101534888B1 publication Critical patent/KR101534888B1/ko

Links

Images

Classifications

    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1008Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
    • G06F11/1068Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices in sector programmable memories, e.g. flash disk
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • 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
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/20Employing a main memory using a specific memory technology
    • G06F2212/202Non-volatile memory
    • G06F2212/2022Flash memory
    • 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/7208Multiple device management, e.g. distributing data over multiple flash devices
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C29/00Checking stores for correct operation ; Subsequent repair; Testing stores during standby or offline operation
    • G11C29/70Masking faults in memories by using spares or by reconfiguring
    • G11C29/76Masking faults in memories by using spares or by reconfiguring using address translation or modifications
    • G11C29/765Masking faults in memories by using spares or by reconfiguring using address translation or modifications in solid state disks

Abstract

컨볼루션 인코딩을 이용하여, NAND 플래시와 같은, 복수의 비휘발성 집적 회로 메모리 장치들(306)에 데이터를 저장하는 것들과 같은, 장치 및 방법들이 개시된다. 컨볼루션 코드(108/110)에 대한 비교적 높은 코팅 레이트는 비교적 작은 여분의 메모리를 소비한다. 일 실시예에서, 컨볼루션 코드(108/110)는 특정한 메모리 장치의 페이지 내에 집중되기보다는, 복수의 메모리 장치들(106)의 부분들에 걸쳐서 확산된다. 하나의 실시예에서, m/n의 코드 레이트가 이용되고, 컨볼루션 코드는 n개의 메모리 장치들(106)에 걸쳐서 저장된다.

Description

내고장성 비휘발성 집적 회로 메모리{FAULT-TOLERANT NON-VOLATILE INTEGRATED CIRCUIT MEMORY}
본 발명의 실시예들은 일반적으로 솔리드 스테이트(solid-state) 메모리에 관한 것이다. 특히, 본 발명의 하나 이상의 실시예는 비휘발성 집적 회로 메모리 회로를 위한 컨트롤러에 관한 것이다.
플래시 메모리는 소거 가능하고 재프로그램 가능한 비휘발성 집적 회로 메모리의 한 형태이다. 플래시 메모리에서, 메모리 셀들은 소거를 위한 "블록들"로 배열된다. 블록이 소거된 후에, 그것은 원하는 경우 프로그래밍할 준비가 된다. NOR 플래시 메모리는 데이터의 검색을 위해 개별 바이트들에의 액세스를 제공하지만, 비교적 낮은 밀도를 갖는 플래시 메모리의 한 유형이다. NAND 플래시 메모리는 비교적 높은 밀도를 제공하는 플래시 메모리의 한 유형이다. 높은 밀도는 부분적으로 직렬로 연결된 셀들의 열(column)들을 형성하는 것에 의해 달성된다. 또한, NAND 플래시 메모리에서는, 데이터의 페이지와 같은 비교적 큰 바이트들의 그룹들로 데이터가 프로그래밍되고("기입되고") 액세스된다(판독 또는 기입).
데이터의 "페이지"는 일반적으로 한 번에 NAND 플래시 메모리 어레이에 기입되고 및/또는 그로부터 판독되는 데이터의 양을 나타낸다. 하나 이상의 실시예에서, 그러한 페이지는 NAND 플래시 메모리 어레이 내의 행(row) 또는 행의 일부에 대응할 수 있다. 예를 들면, 페이지는 2,112개의 바이트를 포함할 수 있고, 그 중 2,048개는 통상의 데이터 바이트들이고 64개는 예비의 바이트들(spare bytes)이다. 예비의 바이트들은 일반적으로 오류 정정 코드(ECC) 데이터, 마모 균등화(wear-leveling) 정보, 또는 다른 오버헤드 데이터를 위해 이용된다. 오류 정정의 이용은 저장된 데이터의 강건성(robustness)을 증가시킨다. 일반적으로, CRC(cyclic redundancy check) 체크섬들, 해밍(Hamming) 코드들, 리드-솔로몬(Reed-Solomon) 오류 정정, 또는 그런 종류의 다른 것과 같은, 블록 코드로서 알려진 오류 정정 코드(ECC)의 한 형태가 오류 정정 코드 데이터를 생성하기 위해 이용된다. 이러한 오류 정정 코드들은 판독될 때 판독된 데이터 바이트들에 오류들이 있는지를 검출하기 위해 이용될 수 있고 일반적으로 데이터 바이트들 내의 오류들이 오류 정정 코드의 능력을 초과하지 않는다면 그 오류들을 정정할 수 있다.
플래시 메모리는 많은 용도들을 갖는다. 예들은 플래시 메모리 드라이브(하드 드라이브에 대한 대체물), USB 플래시 드라이브 또는 섬 드라이브(thumb drive), 휴대폰, 디지털 카메라, 디지털 미디어 플레이어, 메모리 카드, 내비게이션 장치, PDA(personal digital assistant), 컴퓨터, 또는 그런 종류의 다른 것을 포함한다. 한도 내에서, 오류 정정 코드들은 데이터 바이트들 내의 데이터 내의 많은 오류들을 정정할 수 있다. 그러나, 이 한도를 넘어서, 오류들을 갖는 데이터는 일반적으로 정정될 수 없다. 종래의 기술들의 하나의 불리점은 오류들이 정정 불가능하게 되는 때에는, 종종 데이터를 보존하는 조치를 취하기에는 너무 늦다는 점이다.
데이터 저장을 위해 플래시 메모리를 이용하는 장치들 중 다수는 또한 운영 체제를 이용한다. 운영 체제는 하드웨어와 다른 소프트웨어 사이의 추상화 계층(abstraction layer)으로서 역할을 한다. 예를 들면, 운영 체제의 파일 시스템 및 장치 드라이버는 일반적으로 메모리 장치에 저장된 데이터에의 액세스를 제공한다. 운영 체제 내에는 추가적인 계층들이 존재할 수 있다.
도 1은 호스트(100), 메모리 컨트롤러(116), 및 비휘발성 메모리 장치들(106)을 포함하는 프로세싱 환경의 일부의 예를 도시한다. 메모리 장치들(106)은 NAND 플래시 메모리 장치들일 수 있다. 호스트(100)는 CPU(102)의 형태의 마이크로프로세서 및 운영 체제(104)를 포함할 수 있다. 운영 체제(104)는 파일 시스템(108) 및 장치 드라이버(110)를 더 포함한다. 운영 체제(104)는 2개 이상의 파일 시스템 및 2개 이상의 장치 드라이버에 대한 지원 및 본 설명에 관련되지 않은 다른 컴포넌트들을 가질 수 있다는 것을 이해할 것이다.
CPU(102)는 운영 체제(104)의 코드를 포함하는 명령들을 실행한다. 파일 시스템(108)의 코드는 메모리 장치들(106)에 대한 논리 주소들과 같은 로우 레벨 정보와, 파일 이름 및 디렉터리와 같은 하이 레벨 정보 사이의 추상화를 제공한다. 장치 드라이버(110)에 대한 코드는 일반적으로 메모리 장치들(106)로 및 메모리 장치들(106)로부터의 데이터 전송을 위한 로우 레벨 정보를 처리한다. 장치 드라이버(110)는 CPU(102)가 메모리 장치(106)에 직접 액세스하기 위한 코드를 제공할 수 있고(프로세서 입력/출력으로서 알려짐) 또는 데이터가 메모리 장치(106)에 전송되거나 또는 메모리 장치(106)로부터 입수 가능하도록 버스 제어를 처리하도록 메모리 컨트롤러(116)를 작동시키는 코드를 제공할 수 있다. 메모리 컨트롤러(116)의 이용은 다른 작업들을 처리하도록 CPU(102)를 자유롭게 한다.
프로세서 입력/출력(PIO)에서는, 장치 드라이버(110)는 기입 동작들 및 판독 동작들과 관련된 ECC 정보를 처리할 수 있다. 많은 운영 체제들에서, 많은 장치 드라이버들은 다양한 상이한 유형의 메모리 장치들에 기입하고 그로부터 판독하는 것을 지원하기 위해 존재한다. 파일 시스템(108)에 의한 매핑에 더하여, 많은 NAND 플래시 메모리 장치들은, 불량 블록 관리 및 마모 관리를 위해 논리 주소들과 물리 주소들 사이에, 플래시 변환 계층(flash translation layer)으로 지칭될 수 있는, 가상 매핑을 이용한다.
종래의 프로세싱 환경들에서 데이터 저장을 위해 이용되는 종래의 하드 디스크들과 함께 일반적으로 이용되는 하나의 기술은 RAID(redundant array of inexpensive disk)로 알려져 있다. RAID-3와 같은, RAID 시스템에서는, 중복(redundant) 하드 디스크가 다른 하드 디스크들의 배타적 OR(XOR)를 저장한다. 예를 들면, 제3의 하드 디스크가 하드 디스크 1 및 2의 내용들의 XOR를 포함할 수 있다. 따라서, 하드 디스크가 파국적으로 고장난다면, 그 고장난 하드 디스크의 내용들은 남아 있는 하드 디스크들로부터 재건될 수 있다. 그러나, 2개 이상의 하드 디스크가 파국적으로 고장난다면, 그 데이터는 재건될 수 없다.
그러나, NAND 플래시와 같은 솔리드 스테이트 비휘발성 메모리 장치들에서는 파국적 고장(catastrophic failure)은 흔하지 않다. 오히려, 솔리드 스테이트 비휘발성 메모리 장치들은 개별적인 비트 오류들을 더 많이 겪을 것 같다.
이 도면들 및 본 명세서의 관련 설명은 본 발명의 특정한 실시예들을 도시하기 위해 제공된 것으로 제한하기 위해 의도된 것이 아니다.
도 1은 호스트, 컨트롤러, 및 비휘발성 집적 회로 메모리 장치들을 포함하는 프로세싱 환경을 도시한다.
도 2는 3개의 메모리 장치들의 페이지들의 각각에 대하여 하나의 섹터에 걸쳐서 확산된 데이터에 상당하는 2개의 섹터들로부터 생성된 컨볼루션 코드(convolutional code)의 저장을 도시한다.
도 3은 메모리 장치들의 효과적으로 더 큰 섹터들에 기입된 데이터에 상당하는 2개의 섹터들로부터 생성된 컨볼루션 코드의 저장을 도시한다.
도 4는 메모리 컨트롤러의 예를 개략적으로 도시한다.
도 5는 컨볼루션 코드를 펑처링하기 위한 데이터 흐름을 개략적으로 도시한다.
도 6은 비휘발성 집적 회로 메모리 장치들에 데이터를 기입하기 위한 프로세스의 실시예를 일반적으로 도시하는 순서도이다.
도 7은 비휘발성 집적 회로 메모리 장치들로부터 데이터를 판독하기 위한 프로세스의 실시예를 일반적으로 도시하는 순서도이다.
장치 및 방법들은 컨볼루션 인코딩을 이용하여 복수의 비휘발성 집적 회로 메모리 장치들에 데이터를 저장한다. 데이터가 컨볼루션 코드로 인코딩될 때, 그 결과로 생기는 컨볼루션 코드는 최초의 데이터보다 사이즈가 더 크다. 컨볼루션 코드에 대한 비교적 높은 코팅 레이트(code rate)는 비교적 작은 여분의 메모리를 소비한다. 컨볼루션 코드의 코드 레이트 m/n은 코드 심벌들의 수 n에 대한 정보 심벌들의 수 m의 비율이다. 하나의 실시예에서, 컨볼루션 코드는 특정한 메모리 장치의 페이지 내에 집중되기보다는, 복수의 메모리 장치들의 부분들에 걸쳐서 확산된다. 하나의 실시예에서, m/n의 코드 레이트가 이용되고, 컨볼루션 코드는 n개의 메모리 장치들에 걸쳐서 저장된다. 하나의 실시예에서, 컨볼루션 코드는 n개의 메모리 장치들 사이에 인터리빙하는 것에 의해 n개의 메모리 장치들에 걸쳐서 확산된다.
비록 특정한 실시예들이 본 명세서에 설명되지만, 본 명세서에 제시된 이점들 및 특징들 전부를 제공하지 않는 실시예들을 포함하는, 본 발명의 다른 실시예들이 이 기술 분야의 통상의 지식을 가진 자들에게 명백할 것이다.
종래의 하드 디스크 저장의 상황에서, 섹터는 일반적으로 종래의 하드 디스크들 및 디스켓들을 이용할 때 액세스될 수 있는 최소의 데이터의 양, 예를 들면, 512 바이트를 나타낸다(섹터의 사이즈는 변할 수 있고, 예를 들면, 광 디스크의 섹터는 2048 바이트일 수 있다). 그러한 데이터의 섹터들이 비휘발성 메모리에 기입될 때, 섹터들 내의 데이터에는 일반적으로 오류 정정 코드 데이터가 추가된다. 예를 들면, 512 바이트의 통상의 데이터는 16 바이트의 ECC 데이터로 인해 효과적으로 528 바이트까지 증가할 수 있다. ECC 데이터의 바이트들의 수는 저장 용량 및 디코딩 복잡도를 희생하여 소망의 ECC의 강도에 따라서 매우 큰 범위로 변할 수 있다. 또한, 현재의 설명에 관련되지 않은 다른 데이터도 저장될 수 있고, 따라서, 섹터를 저장하기 위해 할당되는 실제의 메모리의 양은 변할 수 있다.
파일 저장에 관하여, 파일 시스템(108)(도 1)은 하나 이상의 섹터에 대응하는 데이터를 일반적으로 클러스터들로 지칭되는 부분들로 분류한다. 파일 시스템의 관점에서, 데이터의 클러스터는 파일의 저장을 위해 할당될 수 있는 최소의 데이터의 사이즈이다. NAND 플래시 메모리와 같은, 특정한 유형의 메모리 장치들에서, 데이터는 일반적으로 한 번에 한 "페이지"씩 메모리 장치에 기입되거나 그로부터 판독된다. 페이지는 하나 이상의 섹터에 저장될 수 있는 데이터에 대응할 수 있다. 부분 페이지 기입, 즉, 한 페이지의 전부보다 작은 부분에 데이터를 프로그래밍하는 것(예를 들면, 일부 실시예들에서, 행의 일부에만 기입하는 것은 "부분" 페이지 기입으로 간주될 수 있다)이 가능하다. 부분 페이지 기입을 수행하기 위해서는, 기입되고 있지 않은 페이지의 부분들의 비트들은, 일반적으로 논리 "1"인, 소거된 상태와 동일한 상태로 남아 있어야 한다.
본 발명의 실시예들은 컨볼루션 코딩된 데이터를 2개 이상의 비휘발성 메모리 장치들에 걸쳐서 확산시킨다. 도 2는 3개의 메모리 장치들의 페이지들의 각각에 대하여 하나의 섹터에 걸쳐서 확산된 컨볼루션 코딩되지 않은 데이터에 상당하는 2개의 부분들로부터 생성된 컨볼루션 코딩된 데이터의 저장을 도시한다. 하나의 실시예에서, 부분은 섹터이다. 도 2는 제1 메모리 장치(memory_0)의 페이지(202), 제2 메모리 장치(memory_1)의 페이지(204), 및 제3 메모리 장치(memory_2)의 페이지(206)를 도시한다. 도시된 실시예에서, 이 페이지들(202, 204, 206) 각각은 A, B, C, 및 D라는 라벨이 붙은 4개의 부분들을 포함한다. 도시된 실시예에서, 그 부분들 각각은 528 바이트를 보유한다(페이지들 각각은 2112 바이트를 보유한다).
도시된 예에서는, 호스트(100)(도 1)로부터의 (2개의 512 바이트 섹터들에 대응하는) 1024 바이트의 데이터가 2개의 528 바이트 "섹터들"로서 블록 인코딩된다. 그 후 1056 바이트가 2/3의 코드 레이트 m/n을 이용하여 인코딩되어 1584 바이트의 컨볼루션 인코딩된 데이터를 생성한다. 일례로, 코드 레이트 m/n의 분모 n의 값은 이용되는 메모리 장치들의 수와 동일하다. 하나의 실시예에서, 코드 레이트 m/n은 n이 m+1과 같도록 선택된다. 이것은 코드 레이트 m/n을 비교적 높게 만든다. 컨볼루션 코드에 대하여, 코드 레이트 m/n은 인코딩되는 데이터 비트들의 수 m을 인코딩 후의 데이터 비트들의 수 n으로 나눈 것에 대응한다. 컨볼루션 인코딩된 데이터로부터 펑처링에 의해 비교적 높은 코드 레이트가 생성될 수 있다. 예를 들면, 1/2의 코드 레이트를 갖는 컨볼루션 인코딩된 데이터("최초의 컨볼루션 인코딩된 데이터")로부터, 펑처 패턴(puncture pattern)에 따라 최초의 컨볼루션 인코딩된 데이터의 모든 각 4개의 비트 중에서 하나를 펑처링(예를 들면, 제거)하는 것에 의해 2/3의 코드 레이트를 갖는 컨볼루션 인코딩된 데이터가 생성될 수 있다. 펑처링된 컨볼루션 코드 데이터의 예는 도 5에 관련하여 더 상세히 설명될 것이다. 다른 적합한 코드 레이트들 및 펑처 패턴들은 이 기술 분야의 통상의 지식을 가진 자에 의해 쉽게 결정될 것이다.
하나의 실시예에서는, 2개의 섹터에 대응하는 컨볼루션 인코딩된 데이터가 3개의 메모리 장치들(106)(도 1)의 페이지들(202, 204, 206)에 저장된다. 도시된 바와 같이, 528 바이트의 컨볼루션 인코딩된 데이터가 페이지(202)의 부분 A(212)에 저장되고, 또 하나의 528 바이트의 컨볼루션 인코딩된 데이터가 페이지(204)의 부분 A(214)에 저장되고, 나머지 528 바이트의 컨볼루션 인코딩된 데이터가 페이지(206)의 부분 A(216)에 저장된다. 인코딩된 데이터를 다수의 메모리 장치들(106)에 걸쳐서 확산시키는 것은 그 데이터가 임의의 하나의 메모리 장치에서 오류에 취약해지는 것을 감소시킨다.
도 3은 메모리 장치들의 페이지들의 효과적으로 더 큰 부분들(예를 들면, 섹터들)에의 1584 바이트의 컨볼루션 인코딩된 데이터의 저장을 도시한다. 예를 들면, 그 부분들은 코드 레이트 m/n의 역수 n/m만큼 사이즈가 증가될 수 있다. 도 3은 3개의 메모리 장치(106)(도 1) 각각으로부터의 데이터의 페이지를 도시한다. 예를 들면, (도 2에 관하여 설명된 실시예의 경우와 같이) 528 바이트를 이용하는 대신에, 도시된 페이지들(302, 304, 306)의 부분들 중 적어도 일부는 528 바이트보다 더 크다. 도시된 예에서, 2/3의 코드 레이트 m/n은 여전히 동일하고, 호스트(100)(도 1)는 파일 시스템이, 블록 인코딩 후에는 각각 528 바이트의 데이터에 대응하고, 2/3의 코드 레이트 m/n에서의 컨볼루션 코딩 후에는 각각 792 바이트에 대응하는 2개의 512 바이트의 데이터의 섹터들이라고 생각하는 것을 다시 기입하고 있다.
도 3에 도시된 실시예에서, 부분 사이즈는 도 2의 실시예에 관하여 설명된 부분 사이즈에 관하여 증가되고, 인코딩된 데이터를 저장하기 위해 이용되는 부분들의 수는 (파일 시스템의 관점에서) 최초의 데이터의 "섹터들"의 수와 여전히 동일하다. 예를 들면, 도 2에 도시된 바와 같이 3개의 528 바이트 부분들을 이용하는 대신에, 도 3에서의 컨볼루션 인코딩된 데이터는 2개의 792 바이트 부분들에 저장된다. 도시된 바와 같이, 컨볼루션 인코딩된 데이터는 메모리 장치들 중 하나로부터의 페이지(302)의 2개의 부분들(310, 312)에 저장된다. 섹터들(310, 312)은 528 바이트 부분들보다 더 큰, 예를 들면, 792 바이트이고, 따라서 호스트(100)(도 1)의 관점에서의 섹터들의 수 및 모든 메모리 장치들(106)(도 1)의 관점에서의 부분들의 수는 여전히 동일하다. 섹터들의 일부에 대응하는 데이터는, 각각이 메모리 장치들(106) 중 상이한 것으로부터의 것인, 2개의 페이지들에 걸쳐서 확산될 수 있다. 예를 들면, 파일 시스템이 섹터 C라고 생각하는 것에 대응하는 데이터는 부분들 C0 및 C1에 의해 나타내어진 바와 같이 memory_0의 페이지(302) 및 memory_1로부터의 페이지(304)에 걸쳐서 확산될 수 있다. 도 3에 도시된 방식으로 데이터를 저장하는 것의 하나의 이점은, 기입이 한 번에 하나의 메모리 장치(106)(도 1)에 한정될 수 있기 때문에, 메모리 장치들에 대한 데이터 버스가 더 작은 폭을 가질 수 있다는 점이다. 그러나, 도 2에 도시된 구성은 일반적으로 도 2의 메모리 장치들의 구성이 병렬 데이터 전송을 위해 더 넓은 데이터 버스 폭으로 설정된다면 더 빠를 것이다.
도 4는 메모리 컨트롤러(116)(도 1)의 추가적인 상세들을 갖는 예를 개략적으로 도시한다. 도시된 실시예에서, 메모리 컨트롤러(116)는 NAND 플래시 메모리 장치들(106)(도 1)과 인터페이스하도록 구성된다. 메모리 컨트롤러(116)는 하드웨에 의해 또는 펌웨어/소프트웨어에 의해, 또는 하드웨어와 펌웨어 양쪽의 조합에 의해 구현될 수 있다. 메모리 컨트롤러(116)는 CPU(102)(도 1)에 의해 실행되는 소프트웨어 또는 펌웨어의 부분과 같은, 호스트(100)의 부분일 수 있고, DMA(direct memory access) 컨트롤러와 같은, 개별 칩의 부분, 복수의 메모리 장치들을 갖는 모듈의 부분, 또는 그런 종류의 다른 것일 수 있다.
메모리 컨트롤러(116)는 제1 버퍼(402), 제2 버퍼(404), 컨트롤 로직(406), 컨볼루션 코드 인코더(408), 및 컨볼루션 코드 디코더(410)를 포함한다. 오류 정정 코드 모듈(412) 및 공백 섹터 바이패스 모듈(blank sector bypass module)(414)도 채용될 수 있다. 인터페이스의 용이함을 위해, 메모리 컨트롤러(116)는 컨볼루션 인코딩 및 솔리드 스테이트 메모리 장치들이 호스트(100)에 투명하도록 메모리 컨트롤러(116) 및 메모리 장치들(106)이 종래의 방식으로 데이터를 저장하고 있는 외관(appearance)을 호스트(100)에 제공할 수 있다. 예를 들면, 2/3의 코드 레이트 및 3개의 메모리 장치들(106)의 이용에서, 메모리 컨트롤러(116)는 호스트(100)가 종래의 하드 디스크 드라이브와 통신하고 있는 외관을 호스트(100)에 제공할 수 있다. 이것은 많은 시스템들과의 호환성에 도움이 될 수 있다.
이 시스템들은 Windows® 또는 DOS와 같은 운영 체제들, USB 인터페이스, 메모리 카드 등을 갖는 컴퓨터 시스템들을 포함할 수 있다. 메모리 컨트롤러(116)가 하드 디스크 드라이브를 흉내내는 호스트(100)에 대한 인터페이스를 제공하는 것이 바람직할 수 있다. 하나의 실시예에서, 하드 디스크 드라이브를 흉내내는 것보다는, 메모리 컨트롤러(116)는 메모리 어드레싱을 통해 메모리 장치들(106)에의 액세스를 제공한다.
예를 들면, 운영 체제를 운영하는 프로세싱 환경에서 파일이 저장될 때, 데이터를 저장하기 위해 이용되는 데이터의 페이지들의 수는 데이터 자체의 사이즈보다는, 디스크 저장 장치에 데이터를 보유하기 위해 이용되는 클러스트들의 수에 관련될 수 있다. 따라서, 호스트(100)에 의해 시작된 기입이 메모리 장치의 페이지의 일부분만을 커버할 때, 메모리 컨트롤러(116)는 부분 페이지 기입을 수행할 수 있다. 예를 들면, 일반적인 NAND 플래시 장치에서, 메모리 비트들은 논리 "1" 상태로 "소거"된다. 프로그래밍 동안에, 선택된 비트들은 논리 "0" 상태로 기입된다(비트들은 전체 블록에 대한 소거 동작에 의한 경우를 제외하고는 논리 "1" 상태로 기입될 수 없다). 기입되도록 예정되지 않은 페이지들의 부분들(예를 들면, 메모리 어레이의 행들의 부분들)은 소거된 채로 또는 그 부분들의 이전의 상태를 보존하는, 이전의 프로그래밍으로 남겨져야 한다.
이것을 달성하기 위해, 하나 이상의 실시예에서, 제1 버퍼(402)는 호스트(100)로 또는 호스트(100)로부터의 전송을 위한 데이터를 임시로 저장한다. 제1 버퍼(402)는 일반적으로 하드웨어로 구현된다. 파일 시스템(108)(도 1)은 클러스터들 내의 판독 또는 기입을 위한 데이터에 액세스할 수 있다. 클러스터 사이즈는 변할 수 있고 일부 운영 체제들에서는 최종 사용자에 의해 구성 가능할 수 있다. 메모리 장치들(106)은 페이지들 내의 데이터에 액세스할 수 있다. 페이지 사이즈는 상이한 유형의 장치들 사이에 변할 수 있지만, 일반적으로 사용자 구성 가능하지 않다.
도시된 실시예에서, 호스트(100)는 한 번에 2개의 512 바이트 섹터들의 클러스터를 판독 또는 기입한다. 따라서, 제1 버퍼(402)는 사이즈가 적어도 1024 바이트이어야 한다. 그러나, 클러스터 크기는 변할 수 있다. 섹터 사이즈도 변할 수 있다. 예를 들면, 블록 ECC 데이터 및 다른 예비의 데이터를 포함하여, 파일 시스템의 관점에서 데이터의 섹터는 528 바이트에 대응할 수 있다. ECC 데이터의 양도 변할 수 있다. 또한, 구성에 따라서는 추가적인 메모리 장치들(106)이 존재할 수 있고, 계산들을 보유하기 위한 버퍼들도 존재할 수 있고, 입력 및 출력을 위한 개별 버퍼들이 이용될 수 있다. 따라서, 제1 버퍼(402)의 사이즈는 변할 수 있고 특정한 작업을 위해 요구되는 것보다 더 클 수 있다.
각각이 4개의 섹터의 페이지 사이즈를 갖는 3개의 메모리 장치들(106)과 인터페이스하는 메모리 컨트롤러(116)의 경우 2/3의 코드 레이트를 이용하는 실시예에서, 메모리 컨트롤러(116)는 호스트(100)가 8개의 섹터의 하드 디스크 저장 장치와 인터페이스하고 있는 외관을 호스트(100)에 제공할 수 있다. 이 예에서, 제1 버퍼(402)는 적어도 8개의 섹터(예를 들면, 4224 바이트)를 보유해야 한다. 다른 예들은 이 기술 분야의 통상의 지식을 가진 자에 의해 쉽게 결정될 것이다.
제2 버퍼(404)는 메모리 장치들(106)로의 또는 메모리 장치들(106)로부터의 전송을 위한 데이터를 임시로 저장한다. 제2 버퍼(404)는 일반적으로 하드웨어로 구현된다. 도시된 예에서, 메모리 장치들(106) 각각은 각각 528 바이트의 4개의 부분들을 갖는 페이지를 갖는다. 제2 버퍼(404)는 메모리 장치들(106)로의 또는 메모리 장치들(106)로부터의 데이터를 수용하기 위하여 사이즈가 적어도 6336 바이트이어야 한다. 제2 버퍼(404)의 사이즈는 판독 및 기입을 위하여 개별 버퍼들이 이용되는지, 메모리 장치들(106)의 페이지의 사이즈, 메모리 장치들(106)의 수 등에 따라 변할 수 있다.
컨트롤 로직(406)은 메모리 컨트롤러의 일반적인 제어를 제공하고, 호스트(100)와 메모리 장치들(106) 사이의 주소 라인들에 대한 인터페이스를 제공하고, 호스트(100) 및/또는 메모리 장치들(106) 등에 대한 제어 신호들을 제공한다. 하나의 실시예에서, 컨트롤 로직(406)은 또한 컨볼루션 코드 인코더(408), 컨볼루션 코드 디코더(410), ECC 모듈(412)의 블록 인코딩, 및 공백 섹터 바이패스 모듈(414)의 동작을 제어할 수 있다. 컨트롤 로직(406)은 하드웨어에 의해, 소프트웨어에 의해, 또는 하드웨어와 소프트웨어 양쪽의 조합에 의해 구현될 수 있다.
컨볼루션 코드 인코더(408)는 제1 버퍼(402)로부터 데이터를 검색하고 그 데이터를 컨볼루션 인코딩한다. 컨볼루션 인코딩된 코드는 그 후 제2 버퍼(404)에 저장된다. 컨볼루션 코드 인코더(408)는 하드웨어에 의해, 소프트웨어에 의해, 또는 하드웨어와 소프트웨어 양쪽의 조합에 의해 구현될 수 있다. 하나의 실시예에서, 컨볼루션 코드 인코더(408)는 선택 가능한 코드 레이트 m/n 및/또는 선택 가능한 펑처 패턴을 갖는다. 이것은 비교적 광범위의 수의 메모리 장치들(106)에 대하여 적절한 데이터를 컨볼루션 인코딩하는 데 있어 유연성을 제공한다. 예를 들면, 하나의 실시예에서, n개의 메모리 장치들이 존재하고, 코드 레이트는 m이 n+1과 같도록 선택된다. 제2 버퍼(404)에 저장된 컨볼루션 인코딩된 데이터는 그 후 메모리 장치들(106)에 저장된다. 예를 들면, 컨트롤 로직(406)은 데이터 전송을 위한 어드레싱 및 제어 신호들을 제공할 수 있다. 호스트(100)가 데이터의 판독을 요청하는 경우, 대응하는 컨볼루션 인코딩된 데이터가 메모리 장치들(106)로부터 검색되어 제2 버퍼(404)에 저장된다.
컨볼루션 코드 디코더(410)는 제2 버퍼(404)에 저장된 컨볼루션 인코딩된 데이터를 디코딩한다. 디코딩된 데이터는 제1 버퍼(402)에 저장된다. 하나의 실시예에서, 컨볼루션 코드 디코더(410)는 비터비(Viterbi) 디코더이다. 컨볼루션 코드 디코더(410)는 또한 펑처링된(제거된) 비트들을 보상하기 위해 적용 가능할 경우 "더미" 데이터를 삽입하거나 소거 포인터들(erasure pointers)을 이용하는 삽입 회로를 포함할 수 있다. 하나의 실시예에서, 컨볼루션 코드 디코더(410)가 더미 데이터 또는 소거 포인터와 마주칠 때, 컨볼루션 코드 디코더(410)는 디코딩을 위해 그 데이터에 의지하지 않는다.
도시된 실시예의 오류 정정 코드(ECC) 모듈(412) 및 공백 섹터 바이패스 모듈(414)이 이제부터 설명될 것이다. ECC 모듈(412)은 저장될 데이터의 순방향 오류 정정(forward error correction; FEC) 코드 데이터와 같은, 블록 코드 데이터를 생성한다. 블록 코드 데이터를 갖는 최초의 데이터는 이하에서 "블록 인코딩된 데이터"로 지칭될 것이다. ECC 모듈(412)은 하드웨어 또는 소프트웨어에 의해, 또는 양쪽의 조합에 의해 구현될 수 있다. 예를 들면, 블록 인코딩은 마이크로프로세서에 의해 수행될 수 있는 작업이다. 호스트(100)로부터의 데이터를 메모리 장치들(106)에 기입하기 위해, ECC 모듈(412)은 제1 버퍼(402) 내의 데이터를 판독하고, 블록 코드들을 계산하고 블록 인코딩된 데이터를 제1 버퍼(402)에 저장한다. 블록 인코딩된 데이터는 그 후 컨볼루션 인코딩되고 메모리 장치들(106)에 저장된다. ECC 모듈(412)에 의한 블록 인코딩은 데이터가 나중에 검색될 때 오류들이 검출되고 오류들이 정정되게 한다(오류 정정 코드의 한계 내에서).
플래시 메모리를 통합한 종래의 시스템에서는, 부분 페이지 기입이 수용될 수 있다. 일반적인 플래시 메모리(NAND 또는 NOR)에서, 데이터는 논리 "1"로 소거되고 적용 가능할 경우 논리 "0"으로 기입 사이클들 동안에 선택적으로 기입된다. 페이지의 공백 부분, 예를 들면, 전부 논리 "1"인 부분에 대한 일반적인 오류 정정 코드도 전부 논리 "1"이고, 페이지의 프로그래밍되지 않은 부분의 소거된 상태 또는 그 페이지에 대한 다른 예비의 데이터를 덮어쓰기(overwrite)하지 않는다. 그러나, 컨볼루션 인코딩 후에, 이전에 전부 논리 "1"이었던 공백 데이터는 다양한 논리 "1" 및 "0" 상태들로서 인코딩될 것이고, 그것들은 페이지의 프로그래밍되지 않은 부분의 소거된 상태를 덮어쓰기할 것이다. 따라서, 컨볼루션 인코딩된 데이터를 프로그래밍하는 것은 소거된 상태를 덮어쓰기할 것이다. 하나의 실시예에서, 메모리 컨트롤러(116)는 프로그래밍되지 않은 채로 남겨져야 하는 페이지들의 부분들을 검출하고 그 부분들에 대한 컨볼루션 인코딩을 바이패스(bypass)한다. 이것은, 예를 들면, 제1 버퍼(402)의 내용들의 검사 및 섹터 사이즈에 의해 결정될 수 있다.
도시된 실시예에서, 공백 섹터 바이패스 모듈(414)은 공백 섹터들을 검출하고 컨볼루션 인코딩 또는 디코딩을 스킵한다. 공백 섹터 바이패스 모듈(414)은 하드웨어에 의해, 소프트웨어에 의해, 또는 양쪽의 조합에 의해 구현될 수 있다. 메모리 장치들(106) 중 하나 이상의 메모리 장치들에 대해 부분 페이지 기입이 수행되고 있는 경우, 프로그래밍되고 있지 않은 페이지(들)의 부분들은 그들의 소거된, 예를 들면, 논리 "1" 상태에 남겨져야 한다. 예를 들면, 한 바이트의 데이터의 경우, 비트들에 대한 전부 논리 "1"은 이진 표기법으로는 "1111 1111" 또는 16진수 표기법으로는 "FF"이다. 따라서, 공백 섹터 바이패스 모듈(414)은 미래에 페이지의 남아 있는 부분들을 프로그래밍하는 능력을 보존하기 위해 적절한 경우 제2 버퍼(404)에 논리 "1" 상태를 기입하는데, 그 이유는 차후에 플래시 메모리 장치들에 논리 "1"을 "기입"하는 것(실제 기입은 일어나지 않음)은, 페이지의 내용들이 논리 "1"로 소거되었든 "0"으로 프로그래밍되었든, 이전의 상태를 보존할 것이기 때문이다. 메모리 장치들을 위한 캐시 또는 페이지 레지스터들도 제2 버퍼(404)를 이용하지 않는 메모리 기입들에 의해 논리 "1"로 채워질 수 있다. 공백 섹터 바이패스 모듈(414)은 또한 이전에 프로그래밍된 데이터의 덮어쓰기를 막을 수 있다. 예를 들면, 도 2에 관련하여, 만약 B, C, 및 D라는 라벨이 붙은 부분들에 데이터가 기입되지 않는다면, 제2 버퍼(404)는 그 부분들의 이전의 소거된 또는 프로그래밍된 상태를 유지하기 위해 논리 "1"로 채워질 수 있다.
메모리 장치들(106)로부터 데이터가 판독되고 있을 때, 공백 섹터 바이패스 모듈(414)은 유사하게 메모리 장치들(106)의 페이지들의 하나 이상의 공백 부분들의 존재를 검출하고 페이지들의 그 부분들에 대한 컨볼루션 코드 디코딩을 바이패스한다. 하나의 실시예에서, 공백 섹터 바이패스 모듈(414)은 포매팅(formatting), 예를 들면, 부분들에의 데이터의 양들의 할당에 의해, 및 제2 버퍼(404)의 대응하는 메모리 공간에 전부 "1"이 존재하는 것에 의해 부분이 공백인 것을 결정한다. 공백 섹터 바이패스 모듈(414)은 그 후 제1 버퍼(402)의 대응하는 부분에 전부 "1"을 기입할 수 있다. 당연히, 버퍼들(402, 404)은 또한 먼저 전부 "1"로 기입될 수 있고, 그 후 메모리 장치들(106)(도 1)로의 전송 전에 적절한 경우 컨볼루션 인코딩된 데이터로 덮어쓰기되거나 또는 호스트(100)(도 1)에 의한 검색 전에 디코딩된 컨볼루션 코드 데이터로 덮어쓰기될 수 있다.
도 5는 처음에 1/2의 코드 레이트를 갖는 컨볼루션 인코딩된 데이터를 펑처링하여 2/3의 코드 레이트를 갖는 컨볼루션 인코딩된 데이터를 생성하기 위한 데이터 흐름들을 개략적으로 도시한다. 예를 들면, 도 4에 관련하여, 데이터 흐름들은 제1 버퍼(402)로부터, 컨볼루션 코드 인코더(408), 제2 버퍼(404), 메모리 장치들(106)에의 저장, 및 그 후 메모리 장치들(106)로부터의 검색, 제2 버퍼(404), 컨볼루션 코드 디코더(410)를 통하여, 제1 버퍼(402)로의 경로에 대응할 수 있다.
데이터 스트림
Figure 112010039193808-pct00001
이 펑처링 없이 컨볼루션 인코딩되어 2개의 출력 데이터, 예를 들면, (비트) 스트림들
Figure 112010039193808-pct00002
Figure 112010039193808-pct00003
을 생성하고, 그것들은 그 후 펑처링되어
Figure 112010039193808-pct00004
Figure 112010039193808-pct00005
로 되고, 그것들은 그 후 메모리 장치들(106)에 저장되는 것이 도시되어 있다.
데이터 판독의 경우, 펑처링된 데이터
Figure 112010039193808-pct00006
Figure 112010039193808-pct00007
은 메모리 장치들(106)로부터 검색된다. (대시로 나타내어진) 소거 포인터들은 디코더를 위한 소거들을 지시하고, 지시된 소거들을 갖는 펑처링된 데이터
Figure 112010039193808-pct00008
Figure 112010039193808-pct00009
은 최초의 데이터 스트림
Figure 112010039193808-pct00010
으로 디코딩하기 위해 컨볼루션 디코더(410)에 의해 디코딩된다. 순방향 오류 정정의 중복은 소거들이 있어도 및 몇몇 오류들이 있어도 최초의 데이터 스트림의 정확한 디코딩을 제공할 것이다. 블록 오류 정정 코드들에 따른 디코딩에 의해 추가적인 오류 정정이 제공될 수 있다.
도 6은 비휘발성 집적 회로 메모리 장치들에 데이터를 기입하기 위한 프로세스의 실시예를 일반적으로 도시하는 순서도이다. 예를 들면, 프로세스는 마이크로프로세서 또는 컨트롤러에 의해 실행될 수 있다. 숙련된 전문가는 도시된 프로세스가 다양한 점에서 수정될 수 있다는 것을 알 것이다. 예를 들면, 다른 실시예에서, 도시된 프로세스의 다양한 부분들은 조합될 수 있고, 대안의 순서로 재배열될 수 있고, 제거될 수 있고, 기타 등등이 가능하다. 도 6에 도시된 프로세스는 도 2에 도시된 포맷으로, 예를 들면, 저장된 데이터가 다수의 메모리 장치들에 걸쳐서 확산되는 식으로, 데이터를 저장하기 위해 이용될 수 있다. 프로세스의 처음에는, 데이터가 이미 호스트(100)(도 1 또는 4)에 의해 제1 버퍼(402)(도 4)에 로딩되었고, 데이터는 블록 인코딩되었다고 가정된다.
프로세스는 데이터(예를 들면, 블록 인코딩된 최초의 데이터)를 컨볼루션 인코딩(610)하는 것에 의해 시작된다. 예를 들면, 데이터(예를 들면, 블록 인코딩된 데이터)는 컨볼루션 인코딩되어 비교적 낮은 코드 레이트를 갖는 컨볼루션 인코딩된 데이터를 생성할 수 있고, 그 낮은 코드 레이트의 컨볼루션 인코딩된 데이터로부터 도 5와 관련하여 앞에 설명된 바와 같이 펑처링에 의해 비교적 높은 코드 레이트를 갖는 컨볼루션 인코딩된 데이터가 생성될 수 있다.
하나의 실시예에서, 컨볼루션 인코딩된 데이터(펑처링된 또는 펑처링되지 않은)를 확산시키기 위해, 그것은 제2 버퍼(404)에 저장될 때 적어도 2개의 부분들에, 예를 들면, 적어도 2개의 상이한 메모리 장치들(106)(도 1 또는 4)의 각각의 페이지의 한 부분에 인터리빙된 방식으로 저장되도록 배열된다(620). 다른 실시예에서, 컨볼루션 인코딩된 데이터는 그것이 제2 버퍼(404)로부터 메모리 장치들(106)의 대응하는 페이지 버퍼들로 복사될 때 배열된다(620). 컨볼루션 인코딩된 데이터는, 저장될 때, 그것이 제1 메모리 장치의 페이지의 부분, 제2 메모리 장치의 페이지의 부분, 기타 등등에 기입되도록 배열될 수 있다. 하나의 실시예에서, 장치들 사이의 저장은 저장된 데이터를 장치들에 걸쳐서 확산시키도록 번갈아 일어난다. 예를 들면, 도 2에 도시된 바와 같이, 컨볼루션 인코딩된 데이터는 3개의 상이한 메모리 장치들의 부분들(212, 214, 216)에 저장된다.
프로세스는 그 후 컨볼루션 인코딩된 데이터를 메모리 장치들(106)(도 1 또는 4)에 저장(630)하기 시작한다. 예를 들면, 데이터는 메모리 장치들(106) 내의 캐시 또는 버퍼에 전송될 수 있고, 그 후 로딩된 페이지들을 저장하는 명령이 메모리 장치들(106)에 보내질 수 있다. 부분 페이지 기입들이 수행되는 경우, 기입되고 있지 않은 페이지들의 부분들은 소거된 상태, 예를 들면, 일반적인 플래시 장치들에 대한 논리 "1"과 동일한 상태에 남겨져야 한다.
하나의 실시예에서, 코드 레이트 m/n을 갖는 컨볼루션 인코딩은 메모리 장치들(106)(도 1 또는 4)의 수에 기초하여 선택된다. 예를 들면, 메모리 장치들(106)의 수는 컨볼루션 코드의 n을 결정하기 위해 이용될 수 있다. 하나의 실시예에서, 컨볼루션 코드의 n은 메모리 장치들의 수와 같도록 선택된다. 그 후, 동일한 사이즈의 섹터들에 대하여, m개의 섹터의 블록 인코딩된 데이터가 컨볼루션 인코딩되고 n개의 메모리 장치들에 저장된다. 당연히, m의 배수의 섹터의 블록 인코딩된 데이터, 예를 들면, 2m개의 섹터들의 경우에, 메모리 장치마다 페이지의 2개 이상의 부분이 컨볼루션 인코딩된 데이터를 저장하기 위해 이용될 수 있다. 하나의 실시예에서, 코드 레이트에 대한 m은 효율적으로 높은 코드 레이트에 대한 n+1과 같다. 하나의 실시예에서, m은 파일 시스템의 클러스터 내의 섹터들의 수에 대응한다.
도 7은 비휘발성 집적 회로 메모리 장치들로부터 데이터를 판독하기 위한 프로세스의 실시예를 일반적으로 도시하는 순서도이다. 숙련된 전문가는 도시된 프로세스가 다양한 점에서 수정될 수 있다는 것을 알 것이다. 예를 들면, 다른 실시예에서, 도시된 프로세스의 다양한 부분들은 조합될 수 있고, 대안의 순서로 재배열될 수 있고, 제거될 수 있고, 기타 등등이 가능하다. 도 6에 도시된 프로세스는 도 2에 도시된 바와 같이 조직된 데이터를 판독하기 위해 이용될 수 있다. 프로세스의 처음에는, 컨볼루션 인코딩된 데이터가 다수의 메모리 장치들(106)(도 1 또는 4)에 검색을 위해 저장되었다고 가정된다.
프로세스는 데이터에 대한 호스트(100)(도 1 또는 4)로부터의 요청을 수신(710)하는 것으로 시작된다. 예를 들면, 장치 드라이버(110)(도 1)는 하나 이상의 "섹터"의 데이터를 요청할 수 있다. 프로세스는 2개 이상의 메모리 장치들(106)(도 1 또는 4)로부터 컨볼루션 인코딩된 데이터의 하나 이상의 대응하는 페이지들을 검색(720)한다. 예를 들면, 컨볼루션 인코딩된 데이터의 페이지들은 그 후 제2 버퍼(404)(도 4)에 저장될 수 있다.
프로세스는 그 후 컨볼루션 인코딩된 데이터를 디컨볼빙(deconvolve)(730)한다. 컨볼루션 인코딩된 데이터는 디컨볼빙으로도 알려진 디코딩을 위해 제2 버퍼(404)로부터 또는 메모리 장치들(106)로부터 판독된다. 디컨볼빙(730)은 이전에 펑처링된 데이터를 대체하거나 보상하기 위한 "더미" 데이터 또는 소거 포인터들의 삽입을 포함할 수 있고 비터비 알고리즘에 따라 수행될 수 있다. 디컨볼빙을 위해, 컨볼루션 인코딩된 데이터는 메모리 장치들(106)로부터 또는 제2 버퍼(404)의 데이터를 판독하는 통상의 순서로부터 컨볼루션 인코딩된 데이터의 최초의 순서를 복원하도록 재배열된다. 예를 들면, 컨볼루션 인코딩된 데이터가 3개의 상이한 메모리 장치들 각각의 하나의 페이지에 걸쳐서 확산된다면, 한 페이지씩 각 메모리 장치로부터의 페이지 데이터를 배열하는 것보다는, 컨볼루션 인코딩된 데이터는 그 데이터를 그것이 최초에 기입된 순서로 배열하는 것에 의해 재구성된다. 오류들을 검출 및/또는 정정하기 위해 블록 인코딩이 더 이용될 수 있다.
하나의 실시예는 복수의 비휘발성 집적 회로 메모리 장치들에 데이터를 저장하는 방법이고, 그 방법은 데이터를 컨볼루션 인코딩하는 단계; 및 상기 컨볼루션 인코딩된 데이터가 적어도 2개의 비휘발성 집적 회로 메모리 장치들에 걸쳐서 인터리빙 방식으로 확산되도록 상기 컨볼루션 인코딩된 데이터를 저장하는 단계를 포함한다.
하나의 실시예는 복수의 비휘발성 집적 회로 메모리 장치들로부터 데이터를 판독하는 방법이고, 그 방법은 적어도 2개의 비휘발성 집적 회로 메모리 장치들로부터 컨볼루션 인코딩된 데이터를 검색하는 단계 ― 상기 컨볼루션 인코딩된 데이터는 상기 적어도 2개의 비휘발성 집적 회로 메모리 장치들에 걸쳐서 확산됨 ―; 및 상기 메모리 장치들로부터 검색된 상기 컨볼루션 인코딩된 데이터를 디컨볼빙(deconvolving)하는 단계 ― 상기 디컨볼빙하는 단계는 상기 컨볼루션 인코딩된 데이터의 최초의 순서를 복원하도록 상기 컨볼루션 인코딩된 데이터를 재배열하는 단계를 포함함 ― 를 포함한다.
하나의 실시예는 복수의 비휘발성 집적 회로 메모리 장치들에 데이터를 저장하는 방법이고, 그 방법은 m/n의 코드 레이트를 이용하여 m개의 제1 사이즈 부분들의 데이터를 m개의 제2 사이즈 부분들의 컨볼루션 코드로 컨볼루션 인코딩하는 단계 ― 상기 제2 사이즈 부분들은 상기 제1 사이즈 섹터들보다 n/m배 더 크고, 상기 m개의 제1 사이즈 부분들 중 적어도 하나는 공백 데이터에 대립되는 것으로서 실제 데이터를 포함함 ―; 및 상기 m개의 제2 사이즈 부분들의 컨볼루션 코드를 n개의 비휘발성 집적 회로 메모리 장치들에 저장하는 단계 ― 상기 m개의 비휘발성 집적 회로 메모리 장치들은 m개의 제1 사이즈 부분들을 저장하도록 구성되고, n은 적어도 2임 ― 를 포함한다.
하나의 실시예는 복수의 비휘발성 집적 회로 메모리 장치들로부터의 데이터에 액세스하는 방법으로서, 그 방법은 데이터에 대한 호스트로부터의 요청을 수신하는 단계; 2개 이상의 상기 비휘발성 집적 회로 메모리 장치들 중 적어도 하나의 비휘발성 집적 회로 메모리 장치로부터 하나 이상의 관련된 섹터들의 데이터를 검색하는 단계 ― 상기 하나 이상의 관련된 섹터들은 제1 섹터 사이즈를 가짐 ―; 및 상기 요청된 페이지의 적어도 일부분에 관련된 하나 이상의 섹터들의 정보를 생성하기 위해 상기 하나 이상의 관련된 섹터들의 적어도 일부분을 디컨볼빙하는 단계 ― 상기 생성된 정보의 상기 하나 이상의 섹터들은 디컨볼빙되는 컨볼루션 데이터의 코드 레이트만큼 상기 제1 섹터 사이즈보다 작은 제2 섹터 사이즈를 갖고, 상기 생성된 정보의 섹터들은 상기 비휘발성 집적 회로 메모리 장치들로부터 한 페이지씩 차례로 디컨볼빙하기 위해 판독됨 ― 를 포함한다.
하나의 실시예는 장치이고, 그 장치는 제1 버퍼; 제2 버퍼; 호스트와 복수의 비휘발성 집적 회로 메모리 장치들 사이에 인터페이스하고 상기 제2 버퍼로부터 상기 비휘발성 집적 회로 메모리 장치들로의 데이터의 저장을 데이터가 상기 비휘발성 집적 회로 메모리 장치들에 걸쳐서 인터리빙 방식으로 확산되도록 제어하도록 구성된 컨트롤 로직; 상기 제1 버퍼에 저장된 데이터를 인코딩하고 상기 인코딩된 데이터를 상기 비휘발성 집적 회로 메모리 장치들로의 전송을 위해 상기 제2 버퍼에 저장하도록 구성된 컨볼루션 코드 인코더; 및 상기 비휘발성 집적 회로 메모리 장치들로부터 검색된 상기 제2 버퍼에 저장된 데이터를 디코딩하고 상기 디코딩된 데이터를 상기 제1 버퍼에 저장하도록 구성된 컨볼루션 코드 디코더를 포함한다.
다양한 실시예들이 위에 설명되었다. 비록 이 특정한 실시예들에 관련하여 설명되었지만, 그 설명들은 설명적인 것으로 의도되고 제한하는 것으로 의도되지는 않는다. 이 기술 분야의 숙련자들은 다양한 수정들 및 응용들을 생각해낼 수 있다.

Claims (31)

  1. 복수의 비휘발성 집적 회로 메모리 장치들에 데이터를 저장하는 방법으로서,
    컨볼루션 인코딩된(convolutionally encoded) 데이터가 확산될 비휘발성 집적 회로 메모리 장치들의 수에 기초하여 컨볼루션 인코딩의 코드 레이트(code rate)를 선택하는 단계 ― 상기 수는 적어도 2개임 ―;
    상기 선택된 코드 레이트를 갖는 데이터를 컨볼루션 인코딩하는 단계; 및
    상기 컨볼루션 인코딩된 데이터가 상기 적어도 2개의 비휘발성 집적 회로 메모리 장치들에 걸쳐서 인터리빙 방식으로 확산(interleavingly spread)되도록 상기 컨볼루션 인코딩된 데이터를 저장하는 단계
    를 포함하는 방법.
  2. 제1항에 있어서,
    컨볼루션 인코딩하는 단계는 블록 인코딩된 데이터의 적어도 m개의 섹터에 대응하는 데이터를 컨볼루션 인코딩하는 단계 ― m/n은 컨볼루션 코드의 코드 레이트에 대응함 ― 를 포함하고;
    저장하는 단계는 상기 컨볼루션 인코딩된 데이터를 n개의 비휘발성 집적 회로 메모리 장치들에 저장하는 단계를 포함하는 방법.
  3. 제2항에 있어서,
    호스트로부터 m개의 섹터에 대응하는 인코딩되지 않은 데이터를 수신하는 단계; 및
    상기 m개의 섹터의 인코딩되지 않은 데이터를 블록 인코딩하여 상기 m개의 섹터의 블록 인코딩된 데이터를 생성하는 단계를 더 포함하는 방법.
  4. 제2항에 있어서, 상기 m개의 섹터는 파일 시스템에 따른 클러스터 내의 섹터들의 수에 대응하는 방법.
  5. 제2항에 있어서, m/n의 코드 레이트로 컨볼루션 인코딩하는 단계를 더 포함하고, n은 m+1과 같은 방법.
  6. 제2항에 있어서,
    상기 블록 인코딩된 데이터의 m개의 섹터 중 임의의 섹터 내의 데이터가 공백 데이터(blank data)에 대응하는 것인지를 결정하는 단계; 및
    만약 그 데이터가 공백 데이터에 대응하는 것으로 결정되면 그 블록 인코딩된 데이터의 컨볼루션 인코딩을 바이패싱(bypassing)하는 단계를 더 포함하는 방법.
  7. 제6항에 있어서, 섹터에 대한 포매팅(formatting)의 검사에 기초하여 섹터가 공백인 것을 결정하는 방법.
  8. 제1항에 있어서, 데이터가 확산되는 비휘발성 집적 회로 메모리 장치들의 수에 기초하여 상기 컨볼루션 인코딩에 대한 코드 레이트 m/n을 선택하는 단계를 더 포함하는 방법.
  9. 제1항에 있어서, 데이터가 확산되는 비휘발성 집적 회로 메모리 장치들의 수에 기초하여 펑처링 패턴(puncturing pattern)을 선택하는 단계를 더 포함하는 방법.
  10. 복수의 비휘발성 집적 회로 메모리 장치들로부터 데이터를 판독하는 방법으로서,
    컨볼루션 인코딩된 데이터가 저장되는 비휘발성 집적 회로 메모리 장치들의 수에 기초하여 이전에 컨볼루션 인코딩된 데이터를 디컨볼빙(deconvolving)하기 위한 코드 레이트를 선택하는 단계 ― 상기 수는 적어도 2개임 ―;
    상기 적어도 2개의 비휘발성 집적 회로 메모리 장치들로부터 컨볼루션 인코딩된 데이터를 검색하는 단계 ― 상기 컨볼루션 인코딩된 데이터는 상기 적어도 2개의 비휘발성 집적 회로 메모리 장치들에 걸쳐서 확산됨 ―; 및
    상기 선택된 코드 레이트를 갖는 상기 메모리 장치들로부터 검색된 상기 컨볼루션 인코딩된 데이터를 디컨볼빙하는 단계 ― 상기 디컨볼빙하는 단계는 상기 컨볼루션 인코딩된 데이터의 최초의 순서를 복원하도록 상기 컨볼루션 인코딩된 데이터를 재배열하는 단계를 포함함 ―
    를 포함하는 방법.
  11. 제10항에 있어서, 디컨볼빙하는 단계는 데이터를 삽입하는 단계 및 비터비(Viterbi) 알고리즘에 의하여 디코딩하는 단계를 포함하는 방법.
  12. 제10항에 있어서, 검색하는 단계 전에 상기 검색된 컨볼루션 인코딩된 데이터에 대응하는 데이터의 클러스터에 대한 호스트로부터의 요청을 수신하는 단계를 더 포함하는 방법.
  13. 제10항에 있어서, 상기 디컨볼빙된 데이터를 블록 디코딩하는 단계를 더 포함하는 방법.
  14. 제10항에 있어서,
    상기 검색된 데이터의 부분들이 공백 데이터에 대응하는 것을 결정하는 단계; 및
    그 부분들에 대한 디컨볼빙을 바이패싱하는 단계를 더 포함하는 방법.
  15. 복수의 비휘발성 집적 회로 메모리 장치들에 데이터를 저장하는 방법으로서,
    컨볼루션 인코딩된 데이터가 확산될 비휘발성 집적 회로 메모리 장치들의 수 n에 기초하여 컨볼루션 인코딩의 코드 레이트를 선택하는 단계;
    상기 선택된 코드 레이트에 따라 m/n의 코드 레이트를 이용하여 데이터의 m개의 제1 사이즈 부분들을 컨볼루션 코드의 m개의 제2 사이즈 부분들로 컨볼루션 인코딩하는 단계 ― 상기 제2 사이즈 부분들은 제1 사이즈 섹터들보다 n/m배 더 크고, 상기 m개의 제1 사이즈 부분들 중 적어도 하나는 공백 데이터에 대립되는 것으로서 실제 데이터를 포함함 ―; 및
    상기 컨볼루션 코드의 m개의 제2 사이즈 부분들을 상기 n개의 비휘발성 집적 회로 메모리 장치들에 저장하는 단계 ― 상기 n개의 비휘발성 집적 회로 메모리 장치들은 m개의 제1 사이즈 부분들을 저장하도록 구성되고, n은 적어도 2임 ―
    를 포함하는 방법.
  16. 제15항에 있어서, 컨볼루션 인코딩하는 단계는 상기 컨볼루션 코드를 펑처링하는 단계를 더 포함하는 방법.
  17. 제15항에 있어서,
    상기 데이터의 m개의 제1 사이즈 부분들 중 적어도 하나의 부분이 공백 데이터에 대응하는 것을 결정하는 단계; 및
    상기 m개의 비휘발성 집적 회로 메모리 장치들에 대한 상기 컨볼루션 코드의 m개의 제2 사이즈 섹터들 중 대응하는 부분의 컨볼루션 코딩을 바이패싱하는 단계를 더 포함하는 방법.
  18. 제15항에 있어서, 컨볼루션 인코딩하는 단계 전에 상기 데이터를 블록 인코딩하는 단계를 더 포함하는 방법.
  19. 복수의 비휘발성 집적 회로 메모리 장치들로부터의 데이터에 액세스하는 방법으로서,
    데이터에 대한 호스트로부터의 요청을 수신하는 단계;
    2개 이상의 상기 비휘발성 집적 회로 메모리 장치들 중 적어도 하나의 비휘발성 집적 회로 메모리 장치로부터 데이터의 하나 이상의 연관된 섹터들을 검색하는 단계 ― 상기 하나 이상의 연관된 섹터들은 제1 섹터 사이즈를 가짐 ―;
    디컨볼빙될 컨볼루션 인코딩된 데이터가 저장되는 비휘발성 집적 회로 메모리 장치들의 수에 기초하여 디컨볼빙하기 위한 코드 레이트를 선택하는 단계 ― 상기 수는 적어도 2개임 ―; 및
    요청된 페이지의 적어도 일부분에 관련된 하나 이상의 섹터들의 정보를 생성하기 위해 상기 하나 이상의 연관된 섹터들의 적어도 일부분을 디컨볼빙하는 단계 ― 상기 생성된 정보의 상기 하나 이상의 섹터들은 디컨볼빙되는 컨볼루션 코드의 코드 레이트만큼 상기 제1 섹터 사이즈보다 작은 제2 섹터 사이즈를 갖고, 상기 생성된 정보의 섹터들은 상기 비휘발성 집적 회로 메모리 장치들로부터 한 페이지씩 차례로 디컨볼빙하기 위해 판독됨 ―
    를 포함하는 방법.
  20. 제19항에 있어서, 디컨볼빙하는 단계는,
    펑처링된 데이터를 보상하는 단계; 및
    비터비 알고리즘에 의하여 디코딩하는 단계를 포함하는 방법.
  21. 제19항에 있어서, 상기 호스트로부터 상기 요청을 수신하는 단계는 데이터의 클러스터에 대한 상기 호스트로부터의 요청을 수신하는 단계를 포함하는 방법.
  22. 제19항에 있어서, 상기 요청된 데이터를 생성하기 위해 상기 생성된 정보로부터의 블록 코드들을 디코딩하는 단계를 더 포함하는 방법.
  23. 제19항에 있어서,
    상기 검색된 섹터들 중 하나 이상의 섹터가 공백인 것을 결정하는 단계; 및
    상기 생성된 정보가 공백 데이터에 대응하도록 상기 공백 섹터들에 대한 디컨볼빙을 바이패싱하는 단계를 더 포함하는 방법.
  24. 제1 버퍼;
    제2 버퍼;
    호스트와 복수의 비휘발성 집적 회로 메모리 장치들 사이에 인터페이스하고, 상기 제2 버퍼로부터 상기 비휘발성 집적 회로 메모리 장치들로의 데이터의 저장을 데이터가 상기 비휘발성 집적 회로 메모리 장치들에 걸쳐서 인터리빙 방식으로 확산되도록 제어하도록 구성된 컨트롤 로직;
    상기 제1 버퍼에 저장된 데이터를 인코딩하고 상기 인코딩된 데이터를 상기 비휘발성 집적 회로 메모리 장치들로의 전송을 위해 상기 제2 버퍼에 저장하도록 구성된 컨볼루션 코드 인코더 ― 상기 컨볼루션 코드 인코더는 데이터가 인터리빙 방식으로 확산되는 비휘발성 집적 회로 메모리 장치들의 수에 기초하여 데이터를 컨볼루션 인코딩하도록 구성됨 ―; 및
    데이터가 인터리빙 방식으로 확산되는 비휘발성 집적 회로 메모리 장치들의 수에 기초하여 상기 비휘발성 집적 회로 메모리 장치들로부터 검색된 상기 제2 버퍼에 저장된 데이터를 디컨볼빙하고 디코딩된 데이터를 상기 제1 버퍼에 저장하도록 구성된 컨볼루션 코드 디코더
    를 포함하는 장치.
  25. 제24항에 있어서, 상기 컨트롤 로직은 상기 제1 버퍼로부터 상기 제2 버퍼로의 및/또는 상기 제2 버퍼로부터 상기 제1 버퍼로의 데이터 전송을 제어하도록 더 구성되는 장치.
  26. 제24항에 있어서, 상기 호스트로부터 전송된 데이터를 블록 인코딩하고 상기 호스트로 전송될 블록 인코딩된 데이터를 디코딩하도록 구성된 오류 정정 코드(ECC) 모듈을 더 포함하는 장치.
  27. 제24항에 있어서, 공백 데이터를 검출하는 것에 응답하여 상기 컨볼루션 코드 인코더 및/또는 컨볼루션 코드 디코더를 바이패싱하도록 구성된 공백 섹터 바이패스 모듈을 더 포함하는 장치.
  28. 제27항에 있어서, 상기 공백 섹터 바이패스 모듈은 섹터에 대한 포매팅의 검사에 기초하여 그 섹터가 공백인 것을 결정하도록 더 구성되는 장치.
  29. 제24항에 있어서, 상기 장치는 NAND 플래시 메모리 컨트롤러로 구현되는 장치.
  30. 제24항에 있어서, 상기 컨트롤 로직은 데이터가 확산되는 비휘발성 집적 회로 메모리 장치들의 수에 기초하여 상기 컨볼루션 코드 인코더에 대한 코드 레이트 m/n을 선택하도록 더 구성되는 장치.
  31. 제24항에 있어서, 상기 컨트롤 로직은 데이터가 확산되는 비휘발성 집적 회로 메모리 장치들의 수에 기초하여 상기 컨볼루션 코드 인코더에 대한 펑처링 패턴을 선택하도록 더 구성되는 장치.
KR1020107013481A 2007-11-21 2008-10-28 내고장성 비휘발성 집적 회로 메모리 KR101534888B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US11/944,023 2007-11-21
US11/944,023 US8046542B2 (en) 2007-11-21 2007-11-21 Fault-tolerant non-volatile integrated circuit memory
PCT/US2008/081473 WO2009067320A1 (en) 2007-11-21 2008-10-28 Fault-tolerant non-volatile integrated circuit memory

Publications (2)

Publication Number Publication Date
KR20100106398A KR20100106398A (ko) 2010-10-01
KR101534888B1 true KR101534888B1 (ko) 2015-07-07

Family

ID=40643179

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020107013481A KR101534888B1 (ko) 2007-11-21 2008-10-28 내고장성 비휘발성 집적 회로 메모리

Country Status (7)

Country Link
US (4) US8046542B2 (ko)
EP (2) EP2626863B1 (ko)
JP (1) JP5522480B2 (ko)
KR (1) KR101534888B1 (ko)
CN (1) CN101868830B (ko)
TW (1) TWI482018B (ko)
WO (1) WO2009067320A1 (ko)

Families Citing this family (179)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8239735B2 (en) 2006-05-12 2012-08-07 Apple Inc. Memory Device with adaptive capacity
KR101202537B1 (ko) 2006-05-12 2012-11-19 애플 인크. 메모리 디바이스를 위한 결합된 왜곡 추정 및 에러 보정 코딩
CN103258572B (zh) 2006-05-12 2016-12-07 苹果公司 存储设备中的失真估计和消除
US8060806B2 (en) 2006-08-27 2011-11-15 Anobit Technologies Ltd. Estimation of non-linear distortion in memory devices
WO2008053472A2 (en) 2006-10-30 2008-05-08 Anobit Technologies Ltd. Reading memory cells using multiple thresholds
US7821826B2 (en) * 2006-10-30 2010-10-26 Anobit Technologies, Ltd. Memory cell readout using successive approximation
US7924648B2 (en) * 2006-11-28 2011-04-12 Anobit Technologies Ltd. Memory power and performance management
WO2008068747A2 (en) 2006-12-03 2008-06-12 Anobit Technologies Ltd. Automatic defect management in memory devices
US7900102B2 (en) 2006-12-17 2011-03-01 Anobit Technologies Ltd. High-speed programming of memory devices
US7751240B2 (en) 2007-01-24 2010-07-06 Anobit Technologies Ltd. Memory device with negative thresholds
US8151166B2 (en) 2007-01-24 2012-04-03 Anobit Technologies Ltd. Reduction of back pattern dependency effects in memory devices
CN101715595A (zh) 2007-03-12 2010-05-26 爱诺彼得技术有限责任公司 存储器单元读取阈的自适应估计
US8001320B2 (en) 2007-04-22 2011-08-16 Anobit Technologies Ltd. Command interface for memory devices
US8234545B2 (en) 2007-05-12 2012-07-31 Apple Inc. Data storage with incremental redundancy
US8429493B2 (en) 2007-05-12 2013-04-23 Apple Inc. Memory device with internal signap processing unit
US7925936B1 (en) 2007-07-13 2011-04-12 Anobit Technologies Ltd. Memory device with non-uniform programming levels
US8259497B2 (en) 2007-08-06 2012-09-04 Apple Inc. Programming schemes for multi-level analog memory cells
KR101473344B1 (ko) * 2007-08-24 2014-12-17 삼성전자 주식회사 플래시 메모리를 스토리지로 사용하는 장치 및 그 동작방법
US8174905B2 (en) 2007-09-19 2012-05-08 Anobit Technologies Ltd. Programming orders for reducing distortion in arrays of multi-level analog memory cells
US8365040B2 (en) 2007-09-20 2013-01-29 Densbits Technologies Ltd. Systems and methods for handling immediate data errors in flash memory
US7773413B2 (en) * 2007-10-08 2010-08-10 Anobit Technologies Ltd. Reliable data storage in analog memory cells in the presence of temperature variations
US8000141B1 (en) 2007-10-19 2011-08-16 Anobit Technologies Ltd. Compensation for voltage drifts in analog memory cells
US8068360B2 (en) 2007-10-19 2011-11-29 Anobit Technologies Ltd. Reading analog memory cells using built-in multi-threshold commands
US8527819B2 (en) 2007-10-19 2013-09-03 Apple Inc. Data storage in analog memory cell arrays having erase failures
US8694715B2 (en) 2007-10-22 2014-04-08 Densbits Technologies Ltd. Methods for adaptively programming flash memory devices and flash memory systems incorporating same
KR101509836B1 (ko) 2007-11-13 2015-04-06 애플 인크. 멀티 유닛 메모리 디바이스에서의 메모리 유닛의 최적화된 선택
US8499229B2 (en) * 2007-11-21 2013-07-30 Micro Technology, Inc. Method and apparatus for reading data from flash memory
US8225181B2 (en) 2007-11-30 2012-07-17 Apple Inc. Efficient re-read operations from memory devices
US8341335B2 (en) 2007-12-05 2012-12-25 Densbits Technologies Ltd. Flash memory apparatus with a heating system for temporarily retired memory portions
US8209588B2 (en) 2007-12-12 2012-06-26 Anobit Technologies Ltd. Efficient interference cancellation in analog memory cell arrays
WO2009074978A2 (en) 2007-12-12 2009-06-18 Densbits Technologies Ltd. Systems and methods for error correction and decoding on multi-level physical media
US8456905B2 (en) 2007-12-16 2013-06-04 Apple Inc. Efficient data storage in multi-plane memory devices
US8085586B2 (en) 2007-12-27 2011-12-27 Anobit Technologies Ltd. Wear level estimation in analog memory cells
US8156398B2 (en) 2008-02-05 2012-04-10 Anobit Technologies Ltd. Parameter estimation based on error correction code parity check equations
US7924587B2 (en) 2008-02-21 2011-04-12 Anobit Technologies Ltd. Programming of analog memory cells using a single programming pulse per state transition
US7864573B2 (en) * 2008-02-24 2011-01-04 Anobit Technologies Ltd. Programming analog memory cells for reduced variance after retention
US8230300B2 (en) 2008-03-07 2012-07-24 Apple Inc. Efficient readout from analog memory cells using data compression
US8059457B2 (en) 2008-03-18 2011-11-15 Anobit Technologies Ltd. Memory device with multiple-accuracy read commands
US8400858B2 (en) 2008-03-18 2013-03-19 Apple Inc. Memory device with reduced sense time readout
US8972472B2 (en) 2008-03-25 2015-03-03 Densbits Technologies Ltd. Apparatus and methods for hardware-efficient unbiased rounding
JP2009244962A (ja) * 2008-03-28 2009-10-22 Toshiba Corp メモリシステム
US9594679B2 (en) * 2008-05-01 2017-03-14 Sandisk Il Ltd. Flash cache flushing method and system
US7924613B1 (en) 2008-08-05 2011-04-12 Anobit Technologies Ltd. Data storage in analog memory cells with protection against programming interruption
US8498151B1 (en) 2008-08-05 2013-07-30 Apple Inc. Data storage in analog memory cells using modified pass voltages
US8230158B2 (en) 2008-08-12 2012-07-24 Micron Technology, Inc. Memory devices and methods of storing data on a memory device
US8949684B1 (en) 2008-09-02 2015-02-03 Apple Inc. Segmented data storage
US8169825B1 (en) 2008-09-02 2012-05-01 Anobit Technologies Ltd. Reliable data storage in analog memory cells subjected to long retention periods
US8482978B1 (en) 2008-09-14 2013-07-09 Apple Inc. Estimation of memory cell read thresholds by sampling inside programming level distribution intervals
US8000135B1 (en) 2008-09-14 2011-08-16 Anobit Technologies Ltd. Estimation of memory cell read thresholds by sampling inside programming level distribution intervals
US8239734B1 (en) * 2008-10-15 2012-08-07 Apple Inc. Efficient data storage in storage device arrays
US8713330B1 (en) 2008-10-30 2014-04-29 Apple Inc. Data scrambling in memory devices
US7975111B2 (en) * 2008-11-13 2011-07-05 Macronix International Co., Ltd. Memory and method applied in one program command for the memory
US8208304B2 (en) 2008-11-16 2012-06-26 Anobit Technologies Ltd. Storage at M bits/cell density in N bits/cell analog memory cell devices, M>N
US20100161888A1 (en) * 2008-12-22 2010-06-24 Unity Semiconductor Corporation Data storage system with non-volatile memory using both page write and block program and block erase
US8248831B2 (en) 2008-12-31 2012-08-21 Apple Inc. Rejuvenation of analog memory cells
US8174857B1 (en) 2008-12-31 2012-05-08 Anobit Technologies Ltd. Efficient readout schemes for analog memory cell devices using multiple read threshold sets
US8924661B1 (en) 2009-01-18 2014-12-30 Apple Inc. Memory system including a controller and processors associated with memory devices
TW201030514A (en) * 2009-02-04 2010-08-16 Mitac Int Corp Flash memory document system and its driving method
US8228701B2 (en) 2009-03-01 2012-07-24 Apple Inc. Selective activation of programming schemes in analog memory cell arrays
US8832354B2 (en) 2009-03-25 2014-09-09 Apple Inc. Use of host system resources by memory controller
US8259506B1 (en) 2009-03-25 2012-09-04 Apple Inc. Database of memory read thresholds
US8819385B2 (en) 2009-04-06 2014-08-26 Densbits Technologies Ltd. Device and method for managing a flash memory
US8458574B2 (en) 2009-04-06 2013-06-04 Densbits Technologies Ltd. Compact chien-search based decoding apparatus and method
US8238157B1 (en) 2009-04-12 2012-08-07 Apple Inc. Selective re-programming of analog memory cells
US8479080B1 (en) 2009-07-12 2013-07-02 Apple Inc. Adaptive over-provisioning in memory systems
US8077515B2 (en) 2009-08-25 2011-12-13 Micron Technology, Inc. Methods, devices, and systems for dealing with threshold voltage change in memory devices
US20120151300A1 (en) * 2009-08-25 2012-06-14 Tillema John E Error Correcting
US8995197B1 (en) 2009-08-26 2015-03-31 Densbits Technologies Ltd. System and methods for dynamic erase and program control for flash memory device memories
US9330767B1 (en) 2009-08-26 2016-05-03 Avago Technologies General Ip (Singapore) Pte. Ltd. Flash memory module and method for programming a page of flash memory cells
JP2011048725A (ja) * 2009-08-28 2011-03-10 Panasonic Corp 不揮発性記憶装置および不揮発性メモリコントローラ
US8266501B2 (en) 2009-09-29 2012-09-11 Micron Technology, Inc. Stripe based memory operation
US8495465B1 (en) 2009-10-15 2013-07-23 Apple Inc. Error correction coding over multiple memory pages
US8730729B2 (en) 2009-10-15 2014-05-20 Densbits Technologies Ltd. Systems and methods for averaging error rates in non-volatile devices and storage systems
US8724387B2 (en) 2009-10-22 2014-05-13 Densbits Technologies Ltd. Method, system, and computer readable medium for reading and programming flash memory cells using multiple bias voltages
US20110102997A1 (en) * 2009-11-02 2011-05-05 Ocz Technology Group, Inc. Mass storage device and method of accessing memory devices thereof
US8626988B2 (en) * 2009-11-19 2014-01-07 Densbits Technologies Ltd. System and method for uncoded bit error rate equalization via interleaving
KR101623730B1 (ko) 2009-11-23 2016-05-25 삼성전자주식회사 인터리버 장치
WO2011065958A1 (en) 2009-11-30 2011-06-03 Lsi Corporation Memory read-channel with signal processing on general purpose processor
US8677054B1 (en) 2009-12-16 2014-03-18 Apple Inc. Memory management schemes for non-volatile memory devices
US9037777B2 (en) 2009-12-22 2015-05-19 Densbits Technologies Ltd. Device, system, and method for reducing program/read disturb in flash arrays
US8694814B1 (en) 2010-01-10 2014-04-08 Apple Inc. Reuse of host hibernation storage space by memory controller
US8572311B1 (en) 2010-01-11 2013-10-29 Apple Inc. Redundant data storage in multi-die memory systems
US8745317B2 (en) 2010-04-07 2014-06-03 Densbits Technologies Ltd. System and method for storing information in a multi-level cell memory
US8429391B2 (en) 2010-04-16 2013-04-23 Micron Technology, Inc. Boot partitions in memory devices and systems
US8694853B1 (en) 2010-05-04 2014-04-08 Apple Inc. Read commands for reading interfering memory cells
US8451664B2 (en) 2010-05-12 2013-05-28 Micron Technology, Inc. Determining and using soft data in memory devices and systems
US8386895B2 (en) 2010-05-19 2013-02-26 Micron Technology, Inc. Enhanced multilevel memory
US8572423B1 (en) 2010-06-22 2013-10-29 Apple Inc. Reducing peak current in memory systems
US8510639B2 (en) 2010-07-01 2013-08-13 Densbits Technologies Ltd. System and method for multi-dimensional encoding and decoding
US9135168B2 (en) 2010-07-07 2015-09-15 Marvell World Trade Ltd. Apparatus and method for generating descriptors to reaccess a non-volatile semiconductor memory of a storage drive due to an error
US9141538B2 (en) 2010-07-07 2015-09-22 Marvell World Trade Ltd. Apparatus and method for generating descriptors to transfer data to and from non-volatile semiconductor memory of a storage drive
US8868852B2 (en) * 2010-07-07 2014-10-21 Marvell World Trade Ltd. Interface management control systems and methods for non-volatile semiconductor memory
US8595591B1 (en) 2010-07-11 2013-11-26 Apple Inc. Interference-aware assignment of programming levels in analog memory cells
US9104580B1 (en) 2010-07-27 2015-08-11 Apple Inc. Cache memory for hybrid disk drives
US8645794B1 (en) 2010-07-31 2014-02-04 Apple Inc. Data storage in analog memory cells using a non-integer number of bits per cell
US8856475B1 (en) 2010-08-01 2014-10-07 Apple Inc. Efficient selection of memory blocks for compaction
US8694854B1 (en) 2010-08-17 2014-04-08 Apple Inc. Read threshold setting based on soft readout statistics
US8964464B2 (en) 2010-08-24 2015-02-24 Densbits Technologies Ltd. System and method for accelerated sampling
TWI441181B (zh) 2010-09-09 2014-06-11 Silicon Motion Inc 用來進行資料整形之方法以及其記憶裝置及控制器
US9021181B1 (en) 2010-09-27 2015-04-28 Apple Inc. Memory management for unifying memory cell conditions by using maximum time intervals
US9063878B2 (en) 2010-11-03 2015-06-23 Densbits Technologies Ltd. Method, system and computer readable medium for copy back
US8850100B2 (en) 2010-12-07 2014-09-30 Densbits Technologies Ltd. Interleaving codeword portions between multiple planes and/or dies of a flash memory device
US8417914B2 (en) 2011-01-06 2013-04-09 Micron Technology, Inc. Memory address translation
US8990665B1 (en) 2011-04-06 2015-03-24 Densbits Technologies Ltd. System, method and computer program product for joint search of a read threshold and soft decoding
US8799745B2 (en) * 2011-04-12 2014-08-05 Hitachi, Ltd. Storage control apparatus and error correction method
US8780659B2 (en) 2011-05-12 2014-07-15 Micron Technology, Inc. Programming memory cells
US9501392B1 (en) 2011-05-12 2016-11-22 Avago Technologies General Ip (Singapore) Pte. Ltd. Management of a non-volatile memory module
US9110785B1 (en) 2011-05-12 2015-08-18 Densbits Technologies Ltd. Ordered merge of data sectors that belong to memory space portions
US9396106B2 (en) 2011-05-12 2016-07-19 Avago Technologies General Ip (Singapore) Pte. Ltd. Advanced management of a non-volatile memory
US9195592B1 (en) 2011-05-12 2015-11-24 Densbits Technologies Ltd. Advanced management of a non-volatile memory
US9372792B1 (en) 2011-05-12 2016-06-21 Avago Technologies General Ip (Singapore) Pte. Ltd. Advanced management of a non-volatile memory
US8996790B1 (en) 2011-05-12 2015-03-31 Densbits Technologies Ltd. System and method for flash memory management
CN102354527A (zh) * 2011-06-02 2012-02-15 钟浩 一种降低固态存储系统响应时间的方法
US9130596B2 (en) * 2011-06-29 2015-09-08 Seagate Technology Llc Multiuse data channel
US8716876B1 (en) * 2011-11-11 2014-05-06 Altera Corporation Systems and methods for stacking a memory chip above an integrated circuit chip
CN103123599A (zh) * 2011-11-17 2013-05-29 慧荣科技股份有限公司 具系统修复数据的内嵌式内存及其系统修复方法
US8996788B2 (en) 2012-02-09 2015-03-31 Densbits Technologies Ltd. Configurable flash interface
US8947941B2 (en) 2012-02-09 2015-02-03 Densbits Technologies Ltd. State responsive operations relating to flash memory cells
US8996793B1 (en) 2012-04-24 2015-03-31 Densbits Technologies Ltd. System, method and computer readable medium for generating soft information
US9021337B1 (en) 2012-05-22 2015-04-28 Pmc-Sierra, Inc. Systems and methods for adaptively selecting among different error correction coding schemes in a flash drive
US8793556B1 (en) 2012-05-22 2014-07-29 Pmc-Sierra, Inc. Systems and methods for reclaiming flash blocks of a flash drive
US8972824B1 (en) 2012-05-22 2015-03-03 Pmc-Sierra, Inc. Systems and methods for transparently varying error correction code strength in a flash drive
US8788910B1 (en) 2012-05-22 2014-07-22 Pmc-Sierra, Inc. Systems and methods for low latency, high reliability error correction in a flash drive
US9021333B1 (en) 2012-05-22 2015-04-28 Pmc-Sierra, Inc. Systems and methods for recovering data from failed portions of a flash drive
US9047214B1 (en) 2012-05-22 2015-06-02 Pmc-Sierra, Inc. System and method for tolerating a failed page in a flash device
US9021336B1 (en) 2012-05-22 2015-04-28 Pmc-Sierra, Inc. Systems and methods for redundantly storing error correction codes in a flash drive with secondary parity information spread out across each page of a group of pages
US9183085B1 (en) 2012-05-22 2015-11-10 Pmc-Sierra, Inc. Systems and methods for adaptively selecting from among a plurality of error correction coding schemes in a flash drive for robustness and low latency
US8996957B1 (en) 2012-05-22 2015-03-31 Pmc-Sierra, Inc. Systems and methods for initializing regions of a flash drive having diverse error correction coding (ECC) schemes
US9176812B1 (en) 2012-05-22 2015-11-03 Pmc-Sierra, Inc. Systems and methods for storing data in page stripes of a flash drive
US8838937B1 (en) 2012-05-23 2014-09-16 Densbits Technologies Ltd. Methods, systems and computer readable medium for writing and reading data
US8879325B1 (en) 2012-05-30 2014-11-04 Densbits Technologies Ltd. System, method and computer program product for processing read threshold information and for reading a flash memory module
US11093327B1 (en) 2012-06-25 2021-08-17 Pure Storage, Inc. Failure abatement approach for failed storage units common to multiple vaults
US9141297B2 (en) 2012-06-25 2015-09-22 Cleversafe, Inc. Verifying encoded data slice integrity in a dispersed storage network
TWI594254B (zh) * 2012-07-17 2017-08-01 慧榮科技股份有限公司 讀取快閃記憶體中區塊之資料的方法及相關的記憶裝置
US9921954B1 (en) 2012-08-27 2018-03-20 Avago Technologies General Ip (Singapore) Pte. Ltd. Method and system for split flash memory management between host and storage controller
US9577673B2 (en) 2012-11-08 2017-02-21 Micron Technology, Inc. Error correction methods and apparatuses using first and second decoders
US9368225B1 (en) 2012-11-21 2016-06-14 Avago Technologies General Ip (Singapore) Pte. Ltd. Determining read thresholds based upon read error direction statistics
US9069659B1 (en) 2013-01-03 2015-06-30 Densbits Technologies Ltd. Read threshold determination using reference read threshold
US9021328B2 (en) 2013-01-15 2015-04-28 International Business Machines Corporation Shared error protection for register banks
US9041428B2 (en) 2013-01-15 2015-05-26 International Business Machines Corporation Placement of storage cells on an integrated circuit
US9201727B2 (en) 2013-01-15 2015-12-01 International Business Machines Corporation Error protection for a data bus
US9043683B2 (en) 2013-01-23 2015-05-26 International Business Machines Corporation Error protection for integrated circuits
US9208018B1 (en) 2013-03-15 2015-12-08 Pmc-Sierra, Inc. Systems and methods for reclaiming memory for solid-state memory
US9009565B1 (en) 2013-03-15 2015-04-14 Pmc-Sierra, Inc. Systems and methods for mapping for solid-state memory
US9081701B1 (en) 2013-03-15 2015-07-14 Pmc-Sierra, Inc. Systems and methods for decoding data for solid-state memory
US9053012B1 (en) 2013-03-15 2015-06-09 Pmc-Sierra, Inc. Systems and methods for storing data for solid-state memory
US9026867B1 (en) 2013-03-15 2015-05-05 Pmc-Sierra, Inc. Systems and methods for adapting to changing characteristics of multi-level cells in solid-state memory
US9136876B1 (en) 2013-06-13 2015-09-15 Densbits Technologies Ltd. Size limited multi-dimensional decoding
US9413491B1 (en) 2013-10-08 2016-08-09 Avago Technologies General Ip (Singapore) Pte. Ltd. System and method for multiple dimension decoding and encoding a message
US9786388B1 (en) 2013-10-09 2017-10-10 Avago Technologies General Ip (Singapore) Pte. Ltd. Detecting and managing bad columns
US9348694B1 (en) 2013-10-09 2016-05-24 Avago Technologies General Ip (Singapore) Pte. Ltd. Detecting and managing bad columns
US9397706B1 (en) 2013-10-09 2016-07-19 Avago Technologies General Ip (Singapore) Pte. Ltd. System and method for irregular multiple dimension decoding and encoding
US9189333B2 (en) * 2013-10-17 2015-11-17 Seagate Technology Llc Generating soft decoding information for flash memory error correction using hard decision patterns
US9536612B1 (en) 2014-01-23 2017-01-03 Avago Technologies General Ip (Singapore) Pte. Ltd Digital signaling processing for three dimensional flash memory arrays
US10120792B1 (en) 2014-01-29 2018-11-06 Avago Technologies General Ip (Singapore) Pte. Ltd. Programming an embedded flash storage device
US9374108B2 (en) * 2014-05-19 2016-06-21 International Business Machines Corporation Convolution-encoded hyper-speed channel with robust trellis error-correction
US9542262B1 (en) 2014-05-29 2017-01-10 Avago Technologies General Ip (Singapore) Pte. Ltd. Error correction
US9892033B1 (en) 2014-06-24 2018-02-13 Avago Technologies General Ip (Singapore) Pte. Ltd. Management of memory units
US9584159B1 (en) 2014-07-03 2017-02-28 Avago Technologies General Ip (Singapore) Pte. Ltd. Interleaved encoding
US9972393B1 (en) 2014-07-03 2018-05-15 Avago Technologies General Ip (Singapore) Pte. Ltd. Accelerating programming of a flash memory module
DE102014213071A1 (de) * 2014-07-04 2016-01-07 Robert Bosch Gmbh Verfahren und Vorrichtung zur Verarbeitung von Daten
US9449702B1 (en) 2014-07-08 2016-09-20 Avago Technologies General Ip (Singapore) Pte. Ltd. Power management
US9524211B1 (en) 2014-11-18 2016-12-20 Avago Technologies General Ip (Singapore) Pte. Ltd. Codeword management
US10305515B1 (en) 2015-02-02 2019-05-28 Avago Technologies International Sales Pte. Limited System and method for encoding using multiple linear feedback shift registers
US10628255B1 (en) 2015-06-11 2020-04-21 Avago Technologies International Sales Pte. Limited Multi-dimensional decoding
US9851921B1 (en) 2015-07-05 2017-12-26 Avago Technologies General Ip (Singapore) Pte. Ltd. Flash memory chip processing
US9954558B1 (en) 2016-03-03 2018-04-24 Avago Technologies General Ip (Singapore) Pte. Ltd. Fast decoding of data stored in a flash memory
CN107239358A (zh) * 2017-06-01 2017-10-10 捷开通讯(深圳)有限公司 安卓系统的启动方法、移动终端及具有存储功能的装置
TWI628543B (zh) * 2017-09-07 2018-07-01 群聯電子股份有限公司 解碼方法、記憶體儲存裝置及記憶體控制電路單元
KR102427323B1 (ko) * 2017-11-08 2022-08-01 삼성전자주식회사 반도체 메모리 모듈, 반도체 메모리 시스템, 그리고 반도체 메모리 모듈을 액세스하는 액세스 방법
TWI643201B (zh) * 2017-11-27 2018-12-01 慧榮科技股份有限公司 編碼器及相關的編碼方法與快閃記憶體控制器
CN110134322B (zh) * 2018-02-02 2022-05-31 建兴储存科技(广州)有限公司 运用dram的储存装置及其相关数据处理方法
US10725857B2 (en) 2018-02-27 2020-07-28 Western Digital Technologies, Inc. Data storage system for improving data throughput and decode capabilities
US10747613B2 (en) * 2018-09-07 2020-08-18 Toshiba Memory Corporation Pooled frontline ECC decoders in memory systems
US10908996B2 (en) * 2019-02-22 2021-02-02 Intel Corporation Distribution of a codeword across individual storage units to reduce the bit error rate
TWI800764B (zh) * 2020-10-30 2023-05-01 群聯電子股份有限公司 記憶體控制方法、記憶體儲存裝置及記憶體控制電路單元
CN112347010B (zh) * 2020-11-09 2023-07-04 群联电子股份有限公司 存储器控制方法、存储器存储装置及存储器控制电路单元
US11556416B2 (en) 2021-05-05 2023-01-17 Apple Inc. Controlling memory readout reliability and throughput by adjusting distance between read thresholds
US11847342B2 (en) 2021-07-28 2023-12-19 Apple Inc. Efficient transfer of hard data and confidence levels in reading a nonvolatile memory

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5956743A (en) * 1997-08-25 1999-09-21 Bit Microsystems, Inc. Transparent management at host interface of flash-memory overhead-bytes using flash-specific DMA having programmable processor-interrupt of high-level operations
US20060221752A1 (en) * 2005-03-31 2006-10-05 Fasoli Luca G Integrated circuit memory array configuration including decoding compatibility with partial implementation of multiple memory layers
US20070171730A1 (en) * 2006-01-20 2007-07-26 Marvell International Ltd. Method and system for error correction in flash memory
US20070171714A1 (en) * 2006-01-20 2007-07-26 Marvell International Ltd. Flash memory with coding and signal processing

Family Cites Families (46)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4058851A (en) * 1976-10-18 1977-11-15 Sperry Rand Corporation Conditional bypass of error correction for dual memory access time selection
US4736294A (en) * 1985-01-11 1988-04-05 The Royal Bank Of Canada Data processing methods and apparatus for managing vehicle financing
US5640193A (en) * 1994-08-15 1997-06-17 Lucent Technologies Inc. Multimedia service access by reading marks on an object
EP0709776B1 (en) 1994-10-31 2000-02-23 STMicroelectronics S.r.l. Method for detecting and correcting an error in a multilevel memory and memory device implementing the method
JPH09261081A (ja) 1996-03-22 1997-10-03 Kenwood Corp デパンクチャード回路
US6857099B1 (en) * 1996-09-18 2005-02-15 Nippon Steel Corporation Multilevel semiconductor memory, write/read method thereto/therefrom and storage medium storing write/read program
US6023781A (en) * 1996-09-18 2000-02-08 Nippon Steel Corporation Multilevel semiconductor memory, write/read method thereto/therefrom and storage medium storing write/read program
US6279133B1 (en) 1997-12-31 2001-08-21 Kawasaki Steel Corporation Method and apparatus for significantly improving the reliability of multilevel memory architecture
EP1496519B1 (en) * 1998-01-21 2006-08-23 Sony Corporation Encoding method and memory apparatus
US6385594B1 (en) * 1998-05-08 2002-05-07 Lendingtree, Inc. Method and computer network for co-ordinating a loan over the internet
JP2000068862A (ja) 1998-08-19 2000-03-03 Fujitsu Ltd 誤り訂正符号化装置
JP3308915B2 (ja) 1998-11-11 2002-07-29 エヌイーシーマイクロシステム株式会社 不良救済用メモリセル及びそれを用いた記憶装置
US6871303B2 (en) 1998-12-04 2005-03-22 Qualcomm Incorporated Random-access multi-directional CDMA2000 turbo code interleaver
US20050114587A1 (en) * 2003-11-22 2005-05-26 Super Talent Electronics Inc. ExpressCard with On-Card Flash Memory with Shared Flash-Control Bus but Separate Ready Lines
US6628723B1 (en) 1999-10-15 2003-09-30 Cisco Technology Coding rate reduction for turbo codes
US6731538B2 (en) 2000-03-10 2004-05-04 Kabushiki Kaisha Toshiba Semiconductor memory device including page latch circuit
US6591394B2 (en) 2000-12-22 2003-07-08 Matrix Semiconductor, Inc. Three-dimensional memory array and method for storing data bits and ECC bits therein
JP4017177B2 (ja) * 2001-02-28 2007-12-05 スパンション エルエルシー メモリ装置
US6683817B2 (en) 2002-02-21 2004-01-27 Qualcomm, Incorporated Direct memory swapping between NAND flash and SRAM with error correction coding
JP3969240B2 (ja) * 2002-08-02 2007-09-05 ソニー株式会社 半導体記憶装置
US20040083334A1 (en) * 2002-10-28 2004-04-29 Sandisk Corporation Method and apparatus for managing the integrity of data in non-volatile memory system
US7293217B2 (en) 2002-12-16 2007-11-06 Interdigital Technology Corporation Detection, avoidance and/or correction of problematic puncturing patterns in parity bit streams used when implementing turbo codes
US6839870B2 (en) 2003-03-21 2005-01-04 Terayon Communications Systems, Inc. Error-correcting code interleaver
US7467264B2 (en) 2003-06-27 2008-12-16 Hewlett-Packard Development Company, L.P. Methods and apparatuses for determining the state of a memory element
JP3984209B2 (ja) * 2003-07-31 2007-10-03 株式会社東芝 半導体記憶装置
US7389465B2 (en) 2004-01-30 2008-06-17 Micron Technology, Inc. Error detection and correction scheme for a memory device
DK3422583T3 (da) * 2004-08-30 2020-09-28 Google Llc System og fremgangsmåde for at tilvejebringe ikke-flygtig hukommelsesadministration i trådløse telefoner
US7061804B2 (en) 2004-11-18 2006-06-13 Qualcomm Incorporated Robust and high-speed memory access with adaptive interface timing
US7987404B2 (en) 2004-12-28 2011-07-26 International Business Machines Corporation Information recording device, data-flow controller and data flow controlling method
JP2006309820A (ja) * 2005-04-26 2006-11-09 Sanyo Electric Co Ltd 誤り訂正装置
US7644338B2 (en) 2005-09-13 2010-01-05 Samsung Electronics Co., Ltd. Method of detecting and correcting a prescribed set of error events based on error detecting code
US8291295B2 (en) * 2005-09-26 2012-10-16 Sandisk Il Ltd. NAND flash memory controller exporting a NAND interface
US7469368B2 (en) 2005-11-29 2008-12-23 Broadcom Corporation Method and system for a non-volatile memory with multiple bits error correction and detection for improving production yield
US8687744B2 (en) * 2006-01-18 2014-04-01 Broadcom Corporation Method and system for an improved cellular diversity receiver
US7388781B2 (en) * 2006-03-06 2008-06-17 Sandisk Il Ltd. Multi-bit-per-cell flash memory device with non-bijective mapping
US20070266296A1 (en) * 2006-05-15 2007-11-15 Conley Kevin M Nonvolatile Memory with Convolutional Coding
US7840875B2 (en) 2006-05-15 2010-11-23 Sandisk Corporation Convolutional coding methods for nonvolatile memory
US7904780B2 (en) * 2006-11-03 2011-03-08 Sandisk Corporation Methods of modulating error correction coding
WO2008068747A2 (en) * 2006-12-03 2008-06-12 Anobit Technologies Ltd. Automatic defect management in memory devices
KR100766042B1 (ko) 2006-12-06 2007-10-12 삼성전자주식회사 연접 부호화를 이용한 멀티 레벨 셀 메모리 장치
KR100822030B1 (ko) * 2006-12-26 2008-04-15 삼성전자주식회사 고 부호화율 부호를 이용한 멀티 레벨 셀 메모리 장치
KR100845529B1 (ko) * 2007-01-03 2008-07-10 삼성전자주식회사 플래시 메모리 장치의 이씨씨 제어기 및 그것을 포함한메모리 시스템
KR100842680B1 (ko) * 2007-01-08 2008-07-01 삼성전자주식회사 플래시 메모리 장치의 오류 정정 컨트롤러 및 그것을포함하는 메모리 시스템
US8010735B2 (en) * 2007-07-31 2011-08-30 Broadcom Corporation Flash memory with millimeter wave host interface and method for use therewith
US8065583B2 (en) 2007-07-06 2011-11-22 Micron Technology, Inc. Data storage with an outer block code and a stream-based inner code
US8051358B2 (en) 2007-07-06 2011-11-01 Micron Technology, Inc. Error recovery storage along a nand-flash string

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5956743A (en) * 1997-08-25 1999-09-21 Bit Microsystems, Inc. Transparent management at host interface of flash-memory overhead-bytes using flash-specific DMA having programmable processor-interrupt of high-level operations
US20060221752A1 (en) * 2005-03-31 2006-10-05 Fasoli Luca G Integrated circuit memory array configuration including decoding compatibility with partial implementation of multiple memory layers
US20070171730A1 (en) * 2006-01-20 2007-07-26 Marvell International Ltd. Method and system for error correction in flash memory
US20070171714A1 (en) * 2006-01-20 2007-07-26 Marvell International Ltd. Flash memory with coding and signal processing

Also Published As

Publication number Publication date
US20110239093A1 (en) 2011-09-29
US8046542B2 (en) 2011-10-25
TWI482018B (zh) 2015-04-21
WO2009067320A1 (en) 2009-05-28
EP2626863B1 (en) 2014-09-10
EP2626863A1 (en) 2013-08-14
JP2011504270A (ja) 2011-02-03
US9152546B2 (en) 2015-10-06
JP5522480B2 (ja) 2014-06-18
EP2227810B1 (en) 2013-03-27
US20140331003A1 (en) 2014-11-06
US20090132755A1 (en) 2009-05-21
US8234439B2 (en) 2012-07-31
CN101868830B (zh) 2014-03-12
CN101868830A (zh) 2010-10-20
KR20100106398A (ko) 2010-10-01
US8725937B2 (en) 2014-05-13
TW200928737A (en) 2009-07-01
EP2227810A1 (en) 2010-09-15
EP2227810A4 (en) 2012-02-29
US20120290902A1 (en) 2012-11-15

Similar Documents

Publication Publication Date Title
KR101534888B1 (ko) 내고장성 비휘발성 집적 회로 메모리
EP2199911B1 (en) Flash memory controller, error correction code controller therein, and the methods and systems thereof
EP2372549B1 (en) Emerging bad block detection
US8239725B2 (en) Data storage with an outer block code and a stream-based inner code
KR101588605B1 (ko) 레이트 호환성 펑처링된 코드를 지원하는 메모리 컨트롤러
US8051358B2 (en) Error recovery storage along a nand-flash string
WO2012039983A1 (en) Memory device with ecc history table
WO2014066595A2 (en) Non-volatile memory error correction

Legal Events

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

Payment date: 20180618

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20190625

Year of fee payment: 5