상기 목적을 달성하기 위하여, MLC 플래시 메모리에서 런-타임 배드 블록 처리를 위한 장치는 셀(Cell)의 최하위비트(Least Significant Bit 이하, LSB라 한 다)에 프로그램 되는 데이터가 임시 저장되는 버퍼를 할당하는 버퍼 할당 모듈, 할당된 버퍼에 상기 셀의 최하위비트 페이지에 프로그램 되는 데이터를 복사하는 데이터 복사 모듈 및 상기 셀의 페이지에 프로그램 에러 발생 시 프리 블록(Free Block)에 상기 복사된 데이터를 프로그램하는 배드 블록 관리 모듈을 포함한다.
상기 목적을 달성하기 위하여, 본 발명의 실시예에 따른 MLC 플래시 메모리에서 런-타임 배드 블록 처리를 위한 방법은 셀의 최하위비트 페이지에 프로그램 되는 데이터가 임시 저장되는 버퍼를 할당하는 버퍼 할당 단계, 상기 할당된 버퍼에 상기 셀의 최하위비트 페이지에 프로그램 되는 데이터를 복사하는 데이터 복사 단계 및 상기 셀의 페이지에 프로그램 에러 발생 시 프리 블록에 상기 복사된 데이터를 프로그램하는 배드 블록 관리 단계를 포함한다.
기타 실시예들의 구체적인 사항들은 상세한 설명 및 도면들에 포함되어 있다.
본 발명의 이점 및 특징, 그리고 그것들을 달성하는 방법은 첨부되는 도면과 함께 상세하게 후술되어 있는 실시예들을 참조하면 명확해질 것이다. 그러나 본 발명은 이하에서 개시되는 실시예들에 한정되는 것이 아니라 서로 다른 다양한 형태로 구현될 수 있으며, 단지 본 실시예들은 본 발명의 개시가 완전하도록 하고, 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자에게 발명의 범주를 완전하게 알려주기 위해 제공되는 것이며, 본 발명은 청구항의 범주에 의해 정의될 뿐이다. 명세서 전체에 걸쳐 동일 참조 부호는 동일 구성 요소를 지칭한다.
이하, 본 발명의 실시예들에 의한 MLC 플래시 메모리에서 런-타임 배드 블록 관리를 위한 장치 및 방법을 설명하기 위한 블록도 또는 처리 흐름도에 대한 도면들을 참고하여 본 발명에 대해 설명하도록 한다.
이 때, 처리 흐름도 도면들의 각 블록과 흐름도 도면들의 조합들은 컴퓨터 프로그램 인스트럭션들에 의해 수행될 수 있음을 이해할 수 있을 것이다.
이들 컴퓨터 프로그램 인스트럭션들은 범용 컴퓨터, 특수용 컴퓨터 또는 기타 프로그램 가능한 데이터 프로세싱 장비의 프로세서에 탑재될 수 있으므로, 컴퓨터 또는 기타 프로그램 가능한 데이터 프로세싱 장비의 프로세서를 통해 수행되는 그 인스트럭션들이 흐름도 블록(들)에서 설명된 기능들을 수행하는 수단을 생성하게 된다.
이들 컴퓨터 프로그램 인스트럭션들은 특정 방식으로 기능을 구현하기 위해 컴퓨터 또는 기타 프로그램 가능한 데이터 프로세싱 장비를 지향할 수 있는 컴퓨터 이용 가능 또는 컴퓨터 판독 가능 메모리에 저장되는 것도 가능하므로, 그 컴퓨터 이용가능 또는 컴퓨터 판독 가능 메모리에 저장된 인스트럭션들은 흐름도 블록(들)에서 설명된 기능을 수행하는 인스트럭션 수단을 내포하는 제조 품목을 생산하는 것도 가능하다.
컴퓨터 프로그램 인스트럭션들은 컴퓨터 또는 기타 프로그램 가능한 데이터 프로세싱 장비 상에 탑제되는 것도 가능하므로, 컴퓨터 또는 기타 프로그램 가능한 데이터 프로세싱 장비 상에서 일련의 동작 단계들이 수행되어 컴퓨터로 실행되는 프로세스를 생성해서 컴퓨터 또는 기타 프로그램 가능한 데이터 프로세싱 장비를 수행하는 인스트럭션들은 흐름도 블록(들)에서 설명된 기능들을 실행하기 위한 단 계들을 제공하는 것도 가능하다.
또한, 각 블록은 특정된 논리적 기능(들)을 실행하기 위한 하나 이상의 실행 가능한 인스트럭션들을 포함하는 모듈, 세그먼트 또는 코드의 일부를 나타낼 수 있다.
또, 몇 가지 대체 실행예들에서는 블록들에서 언급된 기능들이 순서를 벗어나서 발생하는 것도 가능함을 주목해야 한다.
예컨대, 잇달아 도시되어 있는 두 개의 블록들은 사실 실질적으로 동시에 수행되는 것도 가능하고 또는 그 블록들이 때때로 해당하는 기능에 따라 역순으로 수행되는 것도 가능하다.
이하, 첨부된 도면을 참조하여 본 발명의 바람직한 실시예를 상세히 설명하기로 한다.
도 2는 본 발명의 실시예에 따른 MLC 플래시 메모리에서 런-타임 배드 블록 처리를 위한 장치의 구성을 도시한 블록도이다.
MLC 플래시 메모리에서 런-타임 배드 블록 처리를 위한 장치(200)는 셀의 LSB에 해당하는 페이지에 프로그램 되는 데이터가 임시 저장되는 버퍼(201a, 201b), 그 버퍼(201a, 201b)를 할당하는 버퍼 할당 모듈(202), 상기 할당된 버퍼에 상기 셀의 최하위비트 페이지에 프로그램 되는 데이터를 복사하는 데이터 복사 모듈(203), 셀의 페이지에 프로그램 에러 발생시 배드 블록에 대응하는 프리 블록에 상기 복사된 데이터를 프로그램하는 배드 블록 관리 모듈(204), 상기 셀의 페이지에 프로그램 할 데이터를 저장하는 데이터 버퍼 (205) 및 상기 데이터 버퍼(205)에 저장된 데이터를 페이지에 프로그램 하는 데이터 프로그램 모듈(206)을 포함한다.
본 발명의 실시예에서 사용되는 '~모듈'이라는 용어는 소프트웨어 또는 FPGA(Field Programmable Gate Array) 또는 ASIC(Application Specific Integrated Circuit)와 같은 하드웨어 구성요소를 의미하며, '~모듈'은 어떤 역할들을 수행한다.
그렇지만 '~모듈'은 소프트웨어 또는 하드웨어에 한정되는 의미는 아니다.
'~모듈'은 어드레싱할 수 있는 저장 매체에 있도록 구성될 수도 있고 하나 또는 그 이상의 프로세서들을 재생시키도록 구성될 수도 있다.
따라서, 일 예로서 '~모듈'은 소프트웨어 구성요소들, 객체지향 소프트웨어 구성요소들, 클래스 구성요소들 및 태스크 구성요소들과 같은 구성요소들과, 프로세스들, 함수들, 속성들, 프로시저들, 서브루틴들, 프로그램 코드의 세그먼트들, 드라이버들, 펌웨어, 마이크로코드, 회로, 데이터, 데이터베이스, 데이터 구조들, 테이블들, 어레이들, 및 변수들을 포함한다.
구성요소들과 '~모듈'들 안에서 제공되는 기능은 더 작은 수의 구성요소들 및 '~모듈'들로 결합되거나 추가적인 구성요소들과 '~모듈'들로 더 분리될 수 있다.
버퍼 할당 모듈(202)은 셀의 LSB에 해당하는 페이지에 프로그램 되는 데이터가 임시 저장되는 버퍼(201a, 201b)를 할당한다.
이때 버퍼 할당 모듈(202)은 페이지에 프로그램 되는 데이터 셋트(Set)가 완료될 때까지 해당 버퍼(201a, 201b)를 유지한다.
여기에서 '데이터 셋트'는 데이터의 시작과 끝을 의미하는 것으로서 예를 들어, 하나의 데이터가 3개의 페이지에 걸쳐 프로그램 된다면 이 3개의 페이지가 하나의 데이터 셋트가 되는 것이다.
또한 버퍼 할당 모듈(202)이 셀의 LSB에 해당하는 페이지에 프로그램 될 데이터를 버퍼(201a, 201b)에 임시 저장하는 이유는, 일반적으로 MLC 플래시 메모리의 프로그램 수행 시, 셀의 LSB에서 MSB로 처리되기 때문에 LSB에 데이터를 프로그램하는 도중 에러가 발생한다고 하여도 LSB가 손상되는 가능성은 적다.
그러나 셀의 LSB에 데이터를 프로그램하고 이어서 MSB에 데이터를 프로그램 하는 도중 에러가 발생한다면 동일한 셀에 존재하는 LSB의 데이터까지 손상을 줄 수 있기 때문에 셀의 LSB에 해당하는 페이지에 프로그램 될 데이터를 버퍼(201a, 201b)에 임시 저장한다.
도 3a 내지 도 5b를 통해 2-레벨 페이지 분할 방식의 MLC 플래시 메모리에서 페이지 에러 발생 시 동일 셀에 속한 페이지들간의 간섭을 설명하도록 한다.
이때 LSB, MSB의 초기 비트는 각각 '1'이고 동일 셀에 속한다고 가정한다.
도 3a 내지 도 3b는 2-레벨 페이지 분할 방식의 MLC 플래시 메모리에서 '1, 0' 상태로 프로그램 시, 셀의 상태 전이를 도시한 도면이다.
MSB : LSB = (1, 1) 상태에서 MSB : LSB = (1, 0)이 되기 위해서는 LSB에만 프로그램을 해주면 되고, LSB에 프로그램 하는 도중 에러가 발생한다 하더라도 다른 블록에 처음부터 다시 프로그램 하면 되기 때문에 LSB의 데이터 손상은 발생하지 않게 된다.
도 4a 내지 도 4b는 2-레벨 페이지 분할 방식의 MLC 플래시 메모리에서 '0, 0' 상태로 프로그램 시, 셀의 상태 전이를 도시한 도면이다.
MSB : LSB = (1, 1) 상태에서 MSB : LSB = (0, 0)으로 프로그램 될 때 중간 상태인 MSB : LSB = (1, 0) 상태가 된다.
만일 MSB : LSB = (1, 0)상태에서 마지막 상태인 MSB : LSB = (0, 0)로 진행되지 못하고 MSB : LSB = (1, 0)인 상태로 중단하게 되면 프로그램 에러가 발생하게 된다.
이 경우는 LSB의 프로그램 처리는 성공하였으나 MSB의 프로그램 도중 에러가 발생한 것으로 생각할 수 있으며, MSB의 프로그램 에러로 인하여 LSB의 초기 상태는 '1'이었으나, '0'으로 손상되는 경우가 발생한다.
도 5a 내지 도 5b는 2-레벨 페이지 분할 방식의 MLC 플래시 메모리에서 '0, 1' 상태로 프로그램 시, 셀의 상태 전이를 도시한 도면이다.
MSB : LSB = (1, 1) 상태에서 MSB : LSB = (0, 1)으로 프로그램 될 때 중간 상태인 MSB : LSB = (1, 0), MSB : LSB = (0, 0) 상태가 된다.
만일 MSB : LSB = (1, 0), MSB : LSB = (0, 0) 상태에서 마지막 상태인 MSB : LSB = (0, 1)로 진행되지 못하고 MSB : LSB = (1, 0) 또는 MSB : LSB = (0, 0)인 상태로 중단되면 프로그램 에러가 발생하게 된다.
이때 마지막 상태인 MSB : LSB = (0, 1)를 프로그램하는 도중 프로그램 에러가 발생하여 MSB : LSB = (1, 0) 또는 MSB : LSB = (0, 0)인 상태로 중단되면 LSB는 프로그램 에러로 인하여 초기 상태는 '1'이었으나 '0'으로 손상되는 경우가 발 생하며, MSB 역시 초기 상태는 '1'이었으나 '0'으로 손상되는 경우가 발생하게 된다.
상술한 바와 같이 LSB가 손상되는 경우를 위하여 버퍼 할당 모듈(202)은 셀의 LSB에 해당하는 페이지에 프로그램 되는 데이터가 임시 저장되는 버퍼(201a, 201b)를 할당하는 것이다.
데이터 복사 모듈(203)은 프로그램 되는 페이지가 상기 셀의 LSB에 해당하면 상기 버퍼 할당 모듈(202)을 통해 할당된 버퍼(201a, 201b)에 데이터를 복사한다.
배드 블록 관리 모듈(204)은 페이지에 대한 프로그램 에러 여부를 체크하여 에러 발생 시 배드 블록에 대응하는 프리 블록을 할당 받고 할당 받은 프리 블록에 페이지를 복사하기 위하여 인덱스를 초기화한다.
그리고 배드 블록 관리 모듈(204)은 셀의 페이지에 프로그램 에러 발생 시 배드 블록에 대응하는 프리 블록에 데이터 복사 모듈(203)을 통해 버퍼(201a, 201b)에 복사된 데이터를 프로그램 한다.
또한 배드 블록 관리 모듈(204)은 배드 블록에 포함된 페이지가 LSB 또는 MSB인지를 체크하고, 도 5를 통해 설명한 MSB의 데이터가 손상된 경우, 즉 에러가 발생한 페이지가 MSB에 해당될 경우 프로그램 에러가 발생한 페이지의 데이터를 데이터 버퍼(205)에서 참조하여 프리 블록에 프로그램 한다.
MLC의 NOP 횟수는 SLC의 NOP 횟수와는 다르게 1회를 허용하게 되어있으므로 MLC의 NOP를 고려하여 종래의 기술처럼 에러가 발생한 페이지의 데이터를 직접 복사하지 않고 해당 데이터를 저장하고 있는 데이터 버퍼(205)를 참조하여 에러가 발 생한 페이지의 데이터를 프리 블록에 복사하는 것이다.
도 6은 본 발명의 실시예에 따른 MLC 플래시 메모리에서 런-타임 배드 블록 관리를 위한 방법을 도시한 흐름도이며, 설명의 편의를 위해 도 2에 도시된 장치를 참조하도록 한다.
참고로, MSB와 LSB의 데이터가 모두 손상되었고, 도시된 플래시 메모리는 유져 파티션(User Partition)(210)과 유져 파티션(210)에서 발생된 배드 블록(211)을 대체할 예약 파티션(Reserved Partition)(220)으로 구분되며 페이지 4N+0(211a)과 페이지 4N+2(211c), 그리고 4N+1(211b)과 페이지 4N+3(211d)는 동일 셀에 속한다고 가정한다.
또한 페이지 4N+0(211a)과 페이지 4N+1(211b)은 LSB, 페이지 4N+2(211c)와 페이지 4N+3(211d)은 MSB이고, 페이지 4N+2(211c)에서 에러가 발생했다고 가정하며, 도 6에서 사용하는 'N = M / 4'이고 N과 M은 임의의 양의 정수이다.
버퍼 할당 모듈(202)은 셀의 LSB에 속하는 페이지를 위한 버퍼(201a, 201b)를 각각 할당한다(S601).
S601 후, 데이터 프로그램 모듈(206)은 데이터 버퍼(205)에 저장된 데이터를 페이지 M에 프로그램 한다(S602).
S602 후, 데이터 복사 모듈(203)은 페이지 M이 4N+0, 즉 셀의 LSB인지를 체크하고(S603), 체크결과 4N+0이면 데이터 버퍼(205)에 존재하는 해당 데이터를 버퍼로 복사한다(S604).
S603 후, 데이터 복사 모듈(203)은 페이지 M이 4N+1, 즉 셀의 LSB인지를 체 크하고(S605) 체크결과 4N+1이면 데이터 버퍼(205)에 존재하는 해당 데이터를 버퍼로 복사한다(S606).
S606 후, 배드 블록 관리 모듈(204)은 페이지 M에 대한 프로그램 에러 여부를 체크한다(S607).
S607 후, 프로그램 에러가 없으면 배드 블록 처리는 종료되며 만일 프로그램 에러가 있으면 배드 블록 관리 모듈(204)을 통해 예약 파티션(210)으로부터 한 개의 프리 블록(211)을 할당 받는다(S608).
S608 후, 배드 블록 관리 모듈(204)은 페이지 복사를 위한 인덱스 i 를 0으로 초기화 한다(S609).
S609 후, 배드 블록 관리 모듈(204)은 페이지 M이 4N+2이고, 페이지 i 가 4N+0인지를 체크하고(S610), 체크결과 맞다면 버퍼1(201a)에 저장된 데이터를 프리 블록(221)의 페이지 i 로 프로그램 한다(S611).
S611 후, 배드 블록 관리 모듈(204)은 페이지 M이 4N+3이고, 페이지 i 가 4N+1인지를 체크하고(S612), 체크결과 맞다면 버퍼2(201b)에 저장된 데이터를 프리 블록(221)의 페이지 i 로 프로그램 한다(S613).
S613 후 배드 블록 관리 모듈(204)은 페이지 i 가 페이지 M인지를 체크하고(S614), 체크결과 맞다면 데이터 버퍼(202)에 저장된 데이터를 프리 블록(221)의 페이지 i 로 프로그램 한 후(S615) 배드 블록 처리를 종료한다.
만일 S611, S613, S615 경우가 아니면 배드 블록 관리 모듈(204)은 배드 블록(210)의 페이지 i 를 프리 블록(220)의 페이지 i 로 복사한다(S616).
S616 후, 배드 블록 관리 모듈(204)은 페이지 i 가 블록의 마지막 페이지인지를 체크하고(S617) 체크결과 마지막 페이지가 아니면 i 를 하나 증가시킨 후 S610를 수행한다(S618).
만일 S617 결과 페이지 i 가 블록의 마지막 페이지이면 배드 블록 처리를 종료한다.
이상과 첨부된 도면을 참조하여 본 발명의 실시예를 설명하였지만, 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자는 본 발명이 그 기술적 사상이나 필수적인 특징을 변경하지 않고서 다른 구체적인 형태로 실시될 수 있다는 것을 이해할 수 있을 것이다. 그러므로 이상에서 기술한 실시예들은 모든 면에서 예시적인 것이며 한정적이 아닌 것으로 이해해야만 한다.