불휘발성 기억 장치, 그 제어 방법, 및 프로그램을 기록한 컴퓨터로 판독 가능한 기록 매체{NONVOLATILE MEMORY, CONTROLLING METHOD THEREFOR, AND COMPUTER READABLE RECORDING MEDIUM STORING PROGRAM}
본 발명은, 반도체 메모리를 사용한 불휘발성 기억 장치 및 그 제어 방법에 관한 것이다.
최근, 음악 데이터나 영상 데이터를 취급하는 휴대기기의 기억 장치로서, 데이터의 다시 쓰기가 가능하고, 휴대성이 높고, 전지 등에 의한 백업이 불필요한 플래시 메모리 등의 불휘발성 메모리를 구비한 기억 장치가 사용되고 있다.
도 1은 종래의 불휘발성 기억 장치인 메모리 카드의 구성을 도시한 블록도이다.
메모리 카드(300)는, 예를 들면 PC나 디지털 카메라 등의 호스트 기기(200)에 접속되어 데이터를 기억하는 장치이며, 컨트롤러(310), 및 플래시 메모리(320)를 구비하고 있다. 호스트 기기(200)는, 카드 제어 신호 및 카드 데이터 신호를 사용하여 메모리 카드(300)와의 데이터의 기입 및 독출을 행한다. 이 카드 제어 신호 및 카드 데이터 신호는, 호스트 기기(200)와 메모리 카드(300) 내부의 컨트롤러(310) 간에서 입출력된다.
한편, 컨트롤러(310)와 플래시 메모리(320) 간에는, 메모리 제어 신호 및 메 모리 데이터 신호에 의해, 컨트롤러(310)가 플래시 메모리(320)로의 데이터의 기입 및 독출을 행한다. 또한, 컨트롤러(310)에 접속되는 플래시 메모리(320)는, 1칩으로 한정되는 것이 아니라 다수 칩을 접속해도 상관없다.
도 2는 컨트롤러(310)의 구성을 도시한 블록도이다.
컨트롤러(310)는, MPU(311), 페이지 RAM(312), 어드레스 변환 테이블(313), 및 소거 블록 테이블(314)을 구비하고 있다.
MPU(311)는, 컨트롤러(310) 전체를 제어하는 동시에, 플래시 메모리(320)에 대한 데이터의 소거, 기입, 독출을 제어한다. 페이지 RAM(312)은, 호스트 기기(200)와 플래시 메모리(320) 간에서 데이터를 일시적으로 기억하기 위한 휘발성 메모리이다. 어드레스 변환 테이블(313)은, 플래시 메모리(320)에 기입된 데이터에 대해 호스트 기기(200)로부터 지정되는 어드레스와, 플래시 메모리(320)의 물리 어드레스를 변환하는 테이블이다. 소거 블록 테이블(314)은, 플래시 메모리(320)의 물리 블록이 소거가 끝났는지 기입이 끝났는지를 물리 어드레스 단위로 나타내는 테이블이다. 또, 어드레스 변환 테이블(313) 및 소거 블록 테이블(314)의 정보는, 전원 투입 직후에 플래시 메모리(320)의 전체 물리 블록의 데이터를 독출으로써 작성된다.
도 3은 플래시 메모리(320)의 구성을 도시한 블록도이다.
플래시 메모리(320)는, 페이지 레지스터(321), 메모리 셀 어레이(323), 로우 디코더(324), 및 커맨드 디코더(325)를 구비하고 있다.
메모리 셀 어레이(323)는, 플래시 메모리(320)의 1칩에 포함되는 모든 메모 리 셀로 구성되어 있다. 이 메모리 셀은, 동시에 독출 또는 기입을 행할 수 있는 단위로 페이지를 구성한다. 또, 다수의 페이지로 소거 단위인 물리 블록(322)을 구성한다. 페이지 레지스터(321)는, 메모리 셀의 페이지와 같은 용량이고, 컨트롤러(310)로부터 입력되는 기입 데이터나 메모리 셀로부터 읽어 내어지는 독출 데이터를 유지한다. 로우 디코더(324)는, 데이터의 독출 및 기입시에는 컨트롤러(310)에 의해 지정되는 페이지를 선택하고, 데이터의 소거시에는 컨트롤러(310)에 의해 지정되는 물리 블록(322)을 선택한다. 커맨드 디코더(325)는, 메모리 제어 신호에 의한 컨트롤러(310)로부터 명령(커맨드)을 실행한다.
도 4는 어드레스 변환 테이블(313), 소거 블록 테이블(314), 및 플래시 메모리(320) 내부의 데이터의 대응의 일례를 도시한 모식도이다.
어드레스 변환 테이블(313)의 어드레스 0의 데이터는, 논리 어드레스 0에 대응하는 물리 어드레스이고, 도 4(a)에 도시한 예에서는 데이터가 "0001"이기 때문에 논리 어드레스 0의 데이터가 플래시 메모리(320)의 물리 어드레스 1에 기입되어 있는 것을 나타낸다. 또, 논리 어드레스 1에 대응하는 물리 어드레스를 나타내는 "FFFF"는 무효값이고, 논리 어드레스 1의 데이터는 존재하지 않는 것을 나타낸다. 여기서, 무효값이란 무효를 의미하는 임의의 값이며, 예를 들면 고정값인 "0"이거나, 16비트 데이터이면 최대값인 "65535"이거나, 어드레스 변환의 룰로서 무효로 정해진 값을 말한다. 또, 어드레스 변환 테이블(313)의 어드레스 2의 데이터가 "0002"이기 때문에, 논리 어드레스 2의 데이터가 플래시 메모리(320)의 물리 어드레스 2에 기입되고 있는 것을 나타낸다.
한편, 소거 블록 테이블(314)은, 플래시 메모리(320)의 물리 블록의 상태를 나타내고 있다. 실제로는, 소거 블록 테이블(314)은, 플래시 메모리(320)의 물리 어드레스에 대응하는 값을 어드레스값으로 하고, 그 플래시 메모리(320)의 물리 블록이 소거가 끝났는지 기입이 끝났는지를 데이터값으로서 갖는다. 예를 들면, 물리 블록이 소거가 끝났을 때 값 1, 기입이 끝났을 때 값 0을 취한다. 즉, 소거 블록 테이블(314)의 어드레스 0의 데이터는 플래시 메모리(320)의 물리 어드레스 0의 물리 블록의 소거 완료/기입 완료를 나타내고 있고, 도 4(a)에 도시한 예에서는 데이터가 "1"이기 때문에 물리 어드레스 0의 물리 블록은 소거가 끝난 것을 나타내고 있다. 또, 마찬가지로 소거 블록 테이블(314)의 어드레스 1과 2의 데이터가 "0"이기 때문에, 플래시 메모리(320)의 물리 어드레스 1과 2의 물리 블록은 기입이 끝난 것을 나타내고 있다.
다음으로, 상기한 바와 같이 구성된 종래의 메모리 카드(300)의 데이터를 호스트 기기(200)로부터 다시 쓰는 경우의 동작에 관해서 설명한다. 도 5는 이 경우의 기입 동작을 나타내는 타이밍 차트이고, 도 6은 이 경우의 소거 동작을 나타내는 타이밍 차트이다. 도 5 및 도 6의 타이밍 차트에 있어서, 상단의 신호는 도 1에 나타낸 카드 제어 신호 및 카드 데이터 신호이며, 호스트 기기(200)로부터 메모리 카드(300)로의 입력을 나타낸다. 중단의 신호는 도 3에 나타낸 메모리 제어 신호 및 메모리 데이터 신호이며, 컨트롤러(310)로부터 플래시 메모리(320)로의 입력을 나타낸다. 하단의 신호는 메모리 제어 신호이며, 플래시 메모리(320)로부터 컨트롤러(310)로의 출력을 나타낸다. 여기서, 도 4(a)에 나타낸 상태에서, 메모리 카드(300)의 논리 어드레스 0의 데이터를 다시 쓰는 경우를 예로 하여 설명한다.
먼저, 호스트 기기(200)는, 시간(t421)에 카드 제어 신호로서 논리 어드레스 0에 대한 기입 커맨드(401)를 메모리 카드(300)로 보내고, 시간(t422)에 카드 데이터 신호로서 기입 데이터의 전송을 개시한다. 이 기입 데이터는, 메모리 카드(300)의 컨트롤러(310)의 페이지 RAM(312)에 격납된다.
컨트롤러(310)는, 호스트 기기(200)로부터 기입 커맨드(401)를 수취하면, 소거 블록 테이블(314)을 검색하여, 데이터의 기입을 행할 수 있는 소거가 끝난 물리 블록(322)을 찾는다. 컨트롤러(310)는, 소거 블록 테이블(314)로부터 물리 어드레스 0이 소거가 끝난 물리 블록(322)인 것을 검출한다.
컨트롤러(310)는, 호스트 기기(200)로부터의 데이터 전송이 종료하면, 시간(t423)에 이 데이터의 기입 어드레스 지정 커맨드(403)를 보내고, 이후 기입 어드레스가 입력되는 것을 플래시 메모리(320)에 지시한다. 커맨드 디코더(325)는, 기입 어드레스 지정 커맨드(309)를 디코드하여, 이후 입력되는 어드레스를 취득하도록 로우 디코더(324)를 제어한다.
컨트롤러(310)는, 시간(t424)에 플래시 메모리(320)로 기입 어드레스(404)를 보낸다. 로우 디코더(324)는, 입력된 기입 어드레스를 취득하여, 데이터의 기입을 행할 수 있도록 지정된 페이지를 선택한다. 이어서, 커맨드 디코더(325)는, 기입 어드레스를 취득한 것을 인식하여, 이후 입력되는 기입 데이터를 취득하도록 페이지 레지스터(321)를 제어한다.
다음으로 컨트롤러(310)는, 시간(t425)에 페이지 RAM(312)으로부터 플래시 메모리(320)로 기입 데이터(405)의 전송을 개시한다. 커맨드 디코더(325)는, 입력된 기입 데이터를 페이지 레지스터(321)에 격납한다.
이어서 컨트롤러(310)는, 시간(t427)에 기입 실행 커맨드(406)를 플래시 메모리(320)로 보낸다.
이것을 받아 커맨드 디코더(325)는, 시간(t427)에 로우 디코더(324)가 선택하고 있는 페이지의 메모리 셀에 대해, 페이지 레지스터(321)에 유지되어 있는 데이터의 기입을 개시한다. 동시에, 커맨드 디코더(325)는, 컨트롤러(310)에 대해 기입 중인 것을 나타내는 기입 비지(busy)(407)를 메모리 제어 신호로서 보낸다. 이 기입 비지(407)의 기간은, 새로운 데이터의 독출, 기입, 및 소거를 실행할 수 없는 것을 나타내고 있다. 이것은, 기입 중, 로우 디코더(324)가 기입을 행하는 페이지의 선택 상태를 유지해 둘 필요가 있으므로, 커맨드 디코더(325)는 컨트롤러(310)로부터의 커맨드 입력을 허가하지 않고 있기 때문이다.
일반적으로, 플래시 메모리(320)에 대한 "소거"나 "기입"의 동작은 개별적으로 완결되도록 처리되는 사양으로 되어 있으며, 기입이나 소거의 비지 중에는 커맨드가 기입되지 않는다(예를 들면, 주식회사 히타치 제작소의 NH29W12811T의 데이터 시트).
다음으로, 커맨드 디코더(325)는, 시간(t428)에 기입을 행하고 있었던 페이지의 기입 동작이 종료하면, 메모리 제어 신호의 기입 비지(407)를 해제한다. 이 이후는, 컨트롤러(310)로부터 커맨드 입력을 행하는 것이 가능해진다.
이 후, 컨트롤러(310)는, 호스트 기기(200)로부터 전송되는 데이터를, 이 기 입을 행한 물리 블록(322)의 나머지 페이지에 대해서도 상기와 동일하게 하여 기입을 행한다.
이상과 같이 데이터의 기입이 종료하면, 컨트롤러(310)는, 다시 쓰기 대상인 논리 어드레스 0의 데이터가 원래 기입되어 있었던 물리 블록을 어드레스 변환 테이블(313)로부터 취득한다. 도 4(a)에 나타낸 예에서는, 어드레스 변환 테이블(313)의 어드레스 0의 데이터가 "0001"이기 때문에 물리 어드레스 1의 물리 블록이 구 데이터가 기입되어 있었던 장소이다.
다음으로, 컨트롤러(310)는 금회의 기입에 의해 무효가 된 구 데이터를 소거하기 위해, 도 6에 도시한 바와 같이 시간(t431)에 물리 어드레스 1의 물리 블록(322)에 대한 소거 어드레스 지정 커맨드(411)를 보내고, 이후 소거 어드레스가 입력되는 것을 플래시 메모리(320)에 지시한다. 커맨드 디코더(325)는, 소거 어드레스 지정 커맨드(411)를 디코드하여, 이후 입력되는 어드레스를 취득하도록 로우 디코더(324)를 제어한다.
다음으로, 컨트롤러(310)는, 시간(t432)에 플래시 메모리(320)로 소거 어드레스 입력(412)을 보낸다. 로우 디코더(324)는, 입력된 소거 어드레스를 취득하여, 데이터의 소거를 행할 수 있도록 지정된 물리 블록(322)을 선택한다.
이어서, 컨트롤러(310)는, 시간(t433)에 플래시 메모리(320)로 소거 실행 커맨드(413)를 보낸다.
이것을 받아 커맨드 디코더(325)는, 시간(t434)에 로우 디코더(324)가 선택하고 있는 물리 블록(322)의 소거를 개시한다. 동시에, 커맨드 디코더(325)는, 컨 트롤러(310)에 대해 소거 중이라는 것을 나타내는 소거 비지(414)를 메모리 제어 신호로서 보낸다. 이 소거 비지(414)의 기간은, 기입의 경우와 마찬가지로 새로운 데이터의 독출, 기입, 및 소거를 실행할 수 없는 것을 나타내고 있다.
커맨드 디코더(325)는, 시간(t435)에 소거를 행하고 있었던 물리 블록(322)의 소거 동작이 종료하면 메모리 제어 신호의 소거 비지(414)를 해제한다.
다음으로, 컨트롤러(310)의 MPU(311)는, 어드레스 변환 테이블(313) 및 소거 블록 테이블(314)의 갱신을 행한다. 도 4(b)는, 도 4(a)에 도시한 상태로부터 논리 어드레스 0의 데이터가 다시 쓰여진 상태를 도시한 모식도이다.
즉, MPU(311)는, 금회 기입을 행한 물리 블록(322)은 어드레스 0이기 때문에, 소거 블록 테이블(314)의 어드레스 0의 데이터를, 기입이 끝난 것을 의미하는 "0"으로 다시 쓴다. 또, MPU(311)는, 어드레스 변환 테이블(313)의 어드레스 0의 값을, 도 4(b)에 도시한 바와 같이 금회 다시 쓰기를 행한 물리 블록(322)의 물리 어드레스를 나타내는 "0000"으로 다시 쓴다. 그리고, MPU(311)는, 금회 소거를 행한 물리 블록(322)은 어드레스 1이기 때문에, 소거 블록 테이블(314)의 어드레스 1의 데이터를, 도 4(b)에 도시한 바와 같이 소거가 끝난 것을 의미하는 "1"로 다시 쓴다.
이렇게 하여 메모리 카드(300)의 데이터를 호스트 기기(200)로부터 다시 쓰기를 행하고 있다.
또한, 도 5 및 도 6에서 간단히 하기 위해 실제의 시간과는 다른 시간 폭으로 표현하고 있으나, 실제의 소거 비지(414) 및 기입 비지(407)의 시간은 수 ms(예 를 들면, 주식회사 히타치 제작소의 NH29W12811T의 데이터 시트에 의하면, 소거 비지 시간은 1ms, 기입 비지 시간은 2.5ms) 걸린다. 또, 기입 데이터(405)의 입력은 수백 ㎲(예를 들면, 마찬가지로 NH29W12811T의 데이터 시트로부터 산출되는 값은, 사이클 타임 120ns×2112바이트=253.44㎲) 걸려, 그 밖의 1㎲도 걸리지 않는 커맨드 입력이나 어드레스 입력에 비해 대단히 길다.
즉, 소거 비지(414)와, 기입 데이터(405)의 입력과, 기입 비지(407)의 합계 시간이 거의 다시 쓰기 시간과 같아진다.
이상과 같이, 종래의 메모리 카드(300)로 데이터를 다시쓰는 경우, 먼저 소거가 끝난 물리 블록(322)에 신 데이터의 기입을 행한 후, 이 기입에 의해 구 데이터가 된 물리 블록(322)의 소거를 행하고 있다. 이것은, 원래의 데이터의 물리 블록(322)을 소거한 후, 이 물리 블록(322)에 신 데이터의 기입을 행하면, 처리 중에 어떠한 이상이 발생한 경우에, 예를 들면 원래의 데이터가 소거가 끝난 상태로 신 데이터가 미기입 상태가 되어, 호스트 기기로부터 본 경우에 데이터 파괴가 발생한 것으로 되기 때문이다.
그러나, 종래의 메모리 카드(300)로 데이터를 다시 쓰는 경우, 소거가 끝난 물리 블록(322)에 신 데이터의 기입을 행한 단계에서 어떠한 이상이 발생하면, 예를 들면 신 데이터는 기입이 끝난 상태로, 구 데이터가 된 물리 블록(322)이 미소거의 상태가 되어, 호스트 기기로부터 본 경우에 데이터가 2중으로 존재하게 되는 등의 문제가 있다.
또, 상기 종래의 메모리 카드(300)로 데이터를 다시 쓰는 경우, 그 소거 실 행 중에는 컨트롤러(310)로부터 플래시 메모리(320)로 다음 커맨드를 입력할 수 없는 시간이 존재하므로, 다시 쓰기 시간이 길어지는 요인이 되고 있다.
또한, 메모리 카드(300)의 대용량화에 따라 어드레스 변환 테이블(313) 및 소거 블록 테이블(314)의 용량도 증가하기 때문에, 이들 테이블이 작성되는 컨트롤러(310)의 RAM도 대용량화하게 되어 있다.
그래서, 본 발명은 상기의 사정을 감안하여 이루어진 것으로, 데이터의 다시 쓰기 동작 중에 어떠한 이상이 발생하더라도 데이터의 정합성을 취할 수 있고, 또한 데이터의 다시 쓰기 시간을 단축할 수 있는 불휘발성 기억 장치 및 그 제어 방법을 제공하는 것을 목적으로 한다.
상기 목적을 달성하기 위해, 본 발명에 따른 불휘발성 기억 장치는, 데이터를 기억하는 다수의 페이지로 이루어지는 다수의 물리 블록을 갖는 불휘발성의 기억 수단과, 상기 기억 수단에 기억되는 데이터를 다시 쓸 때, 기입하는 신 데이터를 구 데이터가 기억되어 있는 물리 블록과는 별도의 소거가 끝난 물리 블록에 기입하는 제어 수단을 구비하고, 상기 제어 수단은, 상기 데이터를 다시 쓸 때, 무효인 물리 블록에 기억되어 있는 데이터를 소거한 후, 해당 물리 블록의 페이지에 상기 신 데이터를 기입하는 것을 특징으로 한다.
이에 의해, 데이터의 다시 쓰기 동작 중에 어떠한 이상이 발생하더라도 데이터의 정합성을 취할 수 있다.
여기서, 상기 기억 수단은, 상기 페이지의 하나 또는 상기 물리 블록의 하나 를 선택하여 지정하는 지정부와, 상기 페이지에 기입하는 데이터를 미리 유지해 두는 페이지 유지부를 구비하고, 상기 제어 수단은, 상기 데이터를 다시 쓸 때, 상기 지정부에 의해 상기 무효인 물리 블록을 지정하여 소거를 실행하는 동시에, 상기 소거 실행 중에, 기입을 행하는 상기 신 데이터를 상기 페이지 유지부로 전송하고, 소거 종료 후에, 해당 물리 블록에 상기 신 데이터를 기입하는 것이 바람직하다.
이 경우, 물리 블록의 소거 실행 중에, 기입을 행하는 신 데이터를 페이지 유지부로 전송하는 것이 가능하기 때문에, 기입 데이터 전송에 필요한 시간을 단축하여 기억 수단으로의 다시 쓰기를 행할 수 있다.
또, 상기 기억 수단은, 관리 영역 및 데이터 영역을 각각 갖는 다수의 기억 영역을 구비하고, 상기 관리 영역은, 해당 관리 영역이 속하는 상기 기억 영역에 대응하는, 논리 어드레스와 물리 어드레스를 변환하기 위한 어드레스 변환 테이블, 및 상기 물리 블록에 유효한 데이터가 기억되어 있는지 여부를 나타내는 유효 블록 테이블을 구비하고, 상기 제어 수단은, 또한 상기 어드레스 변환 테이블 및 상기 유효 블록 테이블을 유지하는 테이블 유지부를 구비해도 된다.
이에 의해, 제어 수단이 구비하는 테이블 유지부는, 전체 기억 영역에 대응하는 어드레스 변환 테이블 및 유효 블록 테이블을 유지할 필요가 없어, 테이블 유지부를 소용량으로 할 수 있다.
또한 본 발명은, 이러한 불휘발성 기억 장치로서 실현할 수가 있을 뿐만 아니라, 불휘발성 메모리, 제어 장치로서 각각 실현하거나, 또 이러한 불휘발성 기억 장치가 구비하는 특징적인 수단을 단계로 하는 불휘발성 기억 장치의 제어 방법으 로서 실현하거나, 그들 단계를 컴퓨터 장치에 실행시키는 프로그램으로서 실현하거나 할 수도 있다.
도 1은 종래의 불휘발성 기억 장치인 메모리 카드의 구성을 도시한 블록도,
도 2는 종래의 메모리 카드의 컨트롤러의 구성을 도시한 블록도,
도 3은 종래의 메모리 카드의 플래시 메모리의 구성을 도시한 블록도,
도 4는 종래의 메모리 카드의 어드레스 변환 테이블, 소거 블록 테이블, 및 플래시 메모리 내부의 데이터의 대응의 일례를 도시한 모식도,
도 5는 종래의 메모리 카드의 데이터를 다시 쓰는 경우의 기입 동작을 나타낸 타이밍 차트,
도 6은 종래의 메모리 카드의 데이터를 다시 쓰는 경우의 소거 동작을 나타낸 타이밍 차트,
도 7은 본 발명에 따른 불휘발성 기억 장치의 일 실시형태인 메모리 카드의 구성을 도시한 블록도,
도 8은 실시형태의 컨트롤러의 구성을 도시한 블록도,
도 9는 실시형태의 플래시 메모리의 구성을 도시한 블록도,
도 10은 실시형태의 플래시 메모리의 메모리 셀 어레이의 내부의 논리적인 구성의 일례를 도시한 모식도,
도 11은 실시형태의 어드레스 변환 테이블, 유효 블록 테이블, 및 플래시 메모리 내부의 데이터의 대응의 일례를 도시한 모식도,
도 12는 실시형태의 메모리 카드의 데이터를 다시 쓰는 경우의 컨트롤러에서의 동작을 도시한 흐름도,
도 13은 실시형태의 메모리 카드의 데이터를 다시 쓰는 경우의 동작을 나타낸 타이밍 차트이다.
(발명을 실시하기 위한 최선의 형태)
이하, 본 발명의 실시형태에 관해, 도면을 사용하여 설명한다.
도 7은 본 발명에 따른 불휘발성 기억 장치의 일 실시형태인 메모리 카드의 구성을 도시한 블록도이다.
메모리 카드(100)는, 예를 들면 PC나 디지털 카메라 등의 호스트 기기(200)에 접속되어 데이터를 기억하는 장치이며, 컨트롤러(110), 및 플래시 메모리(120)를 구비하고 있다. 호스트 기기(200)는, 카드 제어 신호 및 카드 데이터 신호를 사용하여 메모리 카드(100) 와의 데이터의 기입 및 독출을 행한다. 이 카드 제어 신호 및 카드 데이터 신호는, 호스트 기기(200)와 메모리 카드(100) 내부의 컨트롤러(110) 간에서 입출력된다.
한편, 컨트롤러(110)와 플래시 메모리(120) 간은, 메모리 제어 신호 및 메모리 데이터 신호에 의해, 컨트롤러(110)가 플래시 메모리(120)로의 데이터의 기입 및 독출을 행한다. 또한, 컨트롤러(110)에 접속되는 플래시 메모리(120)는, 1칩으로 한정되는 것이 아니라 다수 칩을 접속해도 상관없다.
도 8은 컨트롤러(110)의 구성을 도시한 블록도이다.
컨트롤러(110)는, MPU(111), 페이지 RAM(112), 어드레스 변환 테이블(113), 및 유효 블록 테이블(114)을 구비하고 있다.
MPU(111)는, 컨트롤러(110) 전체를 제어하는 동시에, 플래시 메모리(120)에 대한 데이터의 소거, 기입, 독출을 제어한다. 페이지 RAM(112)은, 호스트 기기(200)와 플래시 메모리(120) 간에서 데이터를 일시적으로 기억하기 위한 휘발성 메모리이다. 어드레스 변환 테이블(113)은, 플래시 메모리(120)에 기입된 데이터에 대해 호스트 기기(200)로부터 지정되는 어드레스와, 플래시 메모리(120)의 물리 어드레스를 변환하는 테이블이다. 유효 블록 테이블(114)는, 플래시 메모리(120)에 기입되어 있는 데이터가 유효인지 무효인지를 물리 어드레스 단위로 나타낸 테이블이다.
여기서, 무효인 물리 블록이란, 유효한 데이터가 쓰여있지 않다는 것을 의미하며, 그 물리 블록이 기입이 끝난 상태나 소거가 끝난 상태, 어느 쪽이든 가능하다. 또, 어드레스 변환 테이블(113) 및 유효 블록 테이블(114)의 정보는, 플래시 메모리(120)의 관리 영역에 기입되어 있으며, 전원 투입 직후, 또는 상황에 따라 적절하게 MPU(111)에 의해 플래시 메모리(120)로부터 읽어 내어져 어드레스 변환 테이블(113) 및 유효 블록 테이블(114)에 격납된다. 또, MPU(111)는, 어드레스 변환 테이블(113) 및 유효 블록 테이블(114)에 갱신이 있으면, 그것에 따라 플래시 메모리(120)의 관리 영역에 갱신하여 기입한다.
도 9는 플래시 메모리(120)의 구성을 도시한 블록도이다.
플래시 메모리(120)는, 페이지 레지스터(121), 메모리 셀 어레이(123), 로우 디코더(124), 및 커맨드 디코더(125)를 구비하고 있다.
메모리 셀 어레이(123)는, 플래시 메모리(120)의 1칩에 포함되는 모든 메모리 셀로 구성되어 있다. 이 메모리 셀은, 동시에 독출 또는 기입을 행할 수 있는 단위로 페이지를 구성한다. 또, 다수의 페이지로 소거 단위인 물리 블록(122)을 구성한다. 페이지 레지스터(121)는, 메모리 셀의 페이지와 같은 용량이고, 컨트롤러(110)로부터 입력되는 기입 데이터나 메모리 셀로부터 읽어 내어지는 독출 데이터를 유지한다.
로우 디코더(124)는, 데이터의 독출 및 기입시에는 컨트롤러(110)에 의해 지정된 페이지를 선택하고, 데이터의 소거시에는 컨트롤러(110)에 의해 지정되는 물리 블록(122)을 선택한다. 커맨드 디코더(125)는, 메모리 제어 신호에 의한 컨트롤러(110)로부터의 명령(커맨드)을 실행한다. 또, 커맨드 디코더(125)는, 데이터의 소거 중이라 해도 컨트롤러(110)로부터 플래시 메모리(120)로의 커맨드 입력을 허가하고, 커맨드 입력이 "기입 데이터", "기입 어드레스"의 순이더라도 동작하도록 제어한다.
도 10은 플래시 메모리(120)의 메모리 셀 어레이(123)의 내부의 논리적인 구성의 일례를 도시한 도면이다.
메모리 셀은, 어드레스순으로 다수의 영역으로 분할되고, 도 10에 도시한 예에서는 4개의 영역으로 분할되어, 각각의 영역에서 관리 영역과 데이터 영역을 갖고 있다. 컨트롤러(110)의 어드레스 변환 테이블(113) 및 유효 블록 테이블(114)은, 이 1개의 영역의 정보를 나타낸 테이블이다. 즉, 관리 영역에는, 각각의 관 리 영역이 소속하는 영역에 대응하는 어드레스 변환 테이블(113) 및 유효 블록 테이블(114)이 기입되어 있다.
도 11은 어드레스 변환 테이블(113), 유효 블록 테이블(114) 및 플래시 메모리(120) 내부의 데이터의 대응의 일례를 도시한 모식도이다.
어드레스 변환 테이블(113)의 어드레스 0의 데이터는, 논리 어드레스 0에 대응하는 물리 어드레스이고, 도 11(a)에 도시한 예에서는 데이터가 "0001"이기 때문에 논리 어드레스 0의 데이터가 플래시 메모리(120)의 물리 어드레스 1에 기입되어 있는 것을 나타낸다. 또, 논리 어드레스 1에 대응하는 물리 어드레스를 나타내는 "FFFF"는 무효값이고, 논리 어드레스 1의 데이터는 존재하지 않는 것을 나타낸다. 여기서, 무효값이란 무효를 의미하는 임의의 값이고, 예를 들면 고정값인 "0"이거나, 16비트 데이터이면 최대값인 "65535"이거나, 어드레스 변환의 룰로서 무효로 정해진 값을 말하는 것이다. 또, 어드레스 변환 테이블(113)의 어드레스 2의 데이터가 "0002"이기 때문에, 논리 어드레스 2의 데이터가 플래시 메모리(120)의 물리 어드레스 2에 기입되어 있는 것을 나타낸다.
한편, 유효 블록 테이블(114)은, 플래시 메모리(120)에 기입된 데이터의 상태를 나타내고 있다. 실제로는, 유효 블록 테이블(114)은, 플래시 메모리(120)의 물리 어드레스에 대응하는 값을 어드레스값으로 하고, 그 플래시 메모리(120)의 물리 어드레스에 기입된 데이터가 유효한 데이터인지 무효의 데이터인지를 데이터값으로서 갖는다. 예를 들면, 데이터가 유효일 때 값 0, 무효일 때 값 1을 취한다. 즉, 유효 블록 테이블(114)의 어드레스 0의 데이터는 플래시 메모리(120)의 물리 어드레스 0의 데이터의 유효/무효를 나타내고 있고, 도 11(a)에 나타낸 예에서는 데이터가 "1"이기 때문에 물리 어드레스 0의 데이터는 무효인 것을 나타내고 있다. 또, 마찬가지로 유효 블록 테이블(114)의 어드레스 1과 2의 데이터가 "0"이기 때문에, 플래시 메모리(120)의 물리 어드레스 1과 2의 데이터는 유효하다는 것을 나타내고 있다.
다음으로, 상기와 같이 구성된 메모리 카드(100)의 데이터를 호스트 기기(200)로부터 다시 쓰는 경우의 동작에 관해서 설명한다. 도 12는 이 경우의 컨트롤러(110)에서의 동작을 도시한 흐름도이고, 도 13은 마찬가지로 이 경우의 동작을 나타낸 타이밍 차트이다. 도 13의 타이밍 차트에서, 상단의 신호는 도 7에 나타낸 카드 제어 신호 및 카드 데이터 신호이며, 호스트 기기(200)로부터 메모리 카드(100)로의 입력을 나타낸다. 중단의 신호는 도 3에 도시한 메모리 제어 신호 및 메모리 데이터 신호이며, 컨트롤러(110)로부터 플래시 메모리(120)로의 입력을 나타낸다. 하단의 신호는 메모리 제어 신호이며, 플래시 메모리(120)로부터 컨트롤러(110)로의 출력을 나타낸다. 여기서, 도 11(a)에 나타낸 상태에 있어서, 메모리 카드(100)의 논리 어드레스 0의 데이터를 다시 쓰는 경우를 예로 들어 설명한다.
먼저, 호스트 기기(200)는, 시간(t321)에 카드 제어 신호로서 논리 어드레스 0에 대한 기입 커맨드(301)를 메모리 카드(100)로 보내고, 시간(t322)에 카드 데이터 신호로서 기입 데이터의 전송을 개시한다. 이 기입 데이터는, 메모리 카드(100)의 컨트롤러(110)의 페이지 RAM(112)에 격납된다.
컨트롤러(110)는, 호스트 기기(200)로부터 기입 커맨드(301)를 수취하면, 유효 블록 테이블(114)을 검색하여, 데이터의 기입을 행할 수 있는 무효인 데이터를 기억하는 물리 블록을 찾는다(단계 S101). 컨트롤러(110)는, 유효 블록 테이블(114)로부터 물리 어드레스 0이 무효인 데이터의 물리 블록(122)인 것을 검출하면, 시간(t322)에 물리 어드레스 0의 물리 블록(122)에 대한 소거 어드레스 지정 커맨드(303)를 플래시 메모리(120)로 보낸다. 이 소거 어드레스 지정 커맨드(303)는, 이후 소거 어드레스가 입력되는 것을 나타내고 있다. 커맨드 디코더(125)는, 소거 어드레스 지정 커맨드(303)를 디코드하여, 이후 입력되는 어드레스를 취득하도록 로우 디코더(124)를 제어한다.
이어서, 컨트롤러(110)는, 시간(t323)에 플래시 메모리(120)로 소거 어드레스 입력(304)을 보낸다. 로우 디코더(124)는, 입력된 소거 어드레스를 취득하여, 데이터의 소거를 행할 수 있도록 지정된 물리 블록(122)을 선택한다.
다음으로, 컨트롤러(110)는, 시간(t324)에 플래시 메모리(120)에 소거 실행 커맨드(305)를 보낸다(단계 S102).
이것을 받아 커맨드 디코더(125)는, 시간(t325)에 로우 디코더(124)가 선택하고 있는 물리 블록(122)의 소거를 개시한다. 동시에, 커맨드 디코더(125)는, 컨트롤러(110)에 대해 소거 중이라는 것을 나타내는 소거 비지(306)를 메모리 제어 신호로서 보낸다. 이 소거 비지(306)의 기간은, 로우 디코더(124)는 소거되는 물리 블록(122)의 선택 상태를 유지해 둘 필요가 있으므로, 로우 디코더(124)에 의한 선택이 필요해지는 물리 블록(122)에 대한 새로운 데이터의 독출, 기입, 및 소거는 실행할 수 없다.
컨트롤러(110)는, 호스트 기기(200)로부터의 데이터 전송이 종료하면, 플래시 메모리로부터 메모리 제어 신호로서 소거 비지(306)가 출력되어 있는지 여부에 관계 없이, 시간(t326)에 플래시 메모리(120)로 기입 데이터 입력 커맨드(307)를 보내고, 이후 기입 데이터가 입력되는 것을 플래시 메모리(120)에 지시한다. 커맨드 디코더(125)는, 기입 데이터 입력 커맨드(307)를 디코드하여, 이후 입력되는 기입 데이터를 취득하도록 페이지 레지스터(121)를 제어한다.
다음으로, 컨트롤러(110)는, 시간(t327)에 페이지 RAM(112)으로부터 플래시 메모리(120)로 기입 데이터(308)의 전송을 개시한다(단계 S103). 커맨드 디코더(125)는, 입력된 기입 데이터를 페이지 레지스터(121)에 격납한다. 이 때 전송되는 데이터는, 현재 소거를 행하고 있는 물리 블록(122)에 포함되는 페이지에 대한 기입 데이터이다. 또한, 이 때 플래시 메모리(120)는 소거 동작 중이지만, 페이지 레지스터(121)는 사용되고 있지 않기 때문에, 기입 데이터를 격납할 수 있다.
커맨드 디코더(125)는, 시간(t328)에 소거를 행하고 있었던 물리 블록(122)의 소거 동작이 종료하면 메모리 제어 신호의 소거 비지(306)를 해제한다. 이 이후 로우 디코더(124)는, 선택하는 물리 블록(122) 또는 페이지를 변경하는 것이 가능해진다.
컨트롤러(110)는, 페이지 RAM(112)으로부터 플래시 메모리(120)로의 기입 데이터의 전송이 종료하고, 또한 플래시 메모리(120)로부터의 소거 비지(306)가 해제 되면(단계 S104, S105), 시간(t328)에 페이지 레지스터(121)로 전송한 데이터의 기입 어드레스 지정 커맨드(309)를 보내고, 이후 기입 어드레스가 입력되는 것을 플래시 메모리(120)에 지시한다. 커맨드 디코더(125)는, 기입 어드레스 지정 커맨드(309)를 디코드하여, 이후 입력되는 어드레스를 취득하도록 로우 디코더(124)를 제어한다.
컨트롤러(110)는, 시간(t329)에 플래시 메모리(120)로 기입 어드레스(310)를 보낸다. 로우 디코더(124)는, 입력된 기입 어드레스를 취득하여, 데이터의 기입을 행할 수 있도록 지정된 페이지를 선택한다. 여기서, 지정되는 페이지는, 방금 전 데이터의 소거가 종료한 물리 블록에 포함되는 페이지이다.
다음으로, 컨트롤러(110)는, 시간(t330)에 기입 실행 커맨드(311)를 플래시 메모리(120)로 보낸다(단계 S106).
이것을 받아 커맨드 디코더(125)는, 시간(t331)에 로우 디코더(124)가 선택하고 있는 페이지의 메모리 셀에 대해, 페이지 레지스터(121)에 유지되어 있는 데이터의 기입을 개시한다. 동시에, 커맨드 디코더(125)는, 컨트롤러(110)에 대해 기입 중이라는 것을 나타내는 기입 비지(312)를 메모리 제어 신호로서 보낸다. 이 기입 비지(312)의 기간은, 로우 디코더(124)가 기입을 행하는 페이지를 선택하고 있으며, 소거 비지(306)의 기간과 동일하게 로우 디코더(124)에 의한 선택이 필요해지는 물리 블록(122)에 대한 새로운 데이터의 독출, 기입, 및 소거를 실행할 수 없다.
커맨드 디코더(125)는, 시간(t332)에 기입을 행하고 있었던 페이지의 기입 동작이 종료하면, 메모리 제어 신호의 기입 비지(312)를 해제한다.
이 후, 컨트롤러(110)는, 호스트 기기(200)로부터 전송되는 데이터를, 소거를 행한 물리 블록(122)의 나머지 페이지에 대해서도 상기와 동일하게 하여 기입을 행한다.
다음으로, 컨트롤러(110)의 MPU(111)는, 어드레스 변환 테이블(113) 및 유효 블록 테이블(114)의 갱신을 행한다(단계 S107). 도 11(b)는, 도 11(a)에 나타낸 상태로부터 논리 어드레스 0의 데이터가 다시 쓰여진 상태를 도시한 모식도이다.
즉, MPU(111)는, 어드레스 변환 테이블(113)로부터, 금회 다시 쓰기를 행한 논리 어드레스 0에 대응하는 데이터가 도 11(a)에 도시하는 바와 같이 "0001"이기 때문에, 대응하는 유효 블록 테이블(114)의 어드레스 1의 데이터를, 도 11(b)에 도시한 바와 같이 무효의 데이터를 의미하는 "1"로 다시 쓴다. 또, MPU(111)는, 어드레스 변환 테이블(113)의 어드레스 0의 값을, 도 11(b)에 도시하는 바와 같이 금회 기입을 행한 물리 블록(122)의 물리 어드레스를 나타내는 "0000"으로 다시 쓴다. 그리고, MPU(111)는, 유효 블록 테이블(114)의 어드레스 0의 데이터를, 도 11(b)에 도시한 바와 같이 유효한 데이터를 의미하는 "0"으로 다시 쓴다.
마지막으로 MPU(111)는, 이렇게 갱신한 어드레스 변환 테이블(113) 및 유효 블록 테이블(114)을, 플래시 메모리(120)의 관리 영역으로 갱신하여 기입한다.
이렇게 하여 메모리 카드(100)의 데이터를 호스트 기기(200)로부터 다시 쓰기를 행한다. 또한, 이 다시 쓰기에서, 다시 쓰여진 논리 어드레스 0의 구 데이터는 무효인 데이터로서 플래시 메모리(120)에 존재하고, 다음에 별도의 데이터의 다 시 쓰기에 따라 이 구 데이터를 기억하는 물리 블록(122)으로의 기입이 발생할 때까지는 소거되지 않는다.
이상과 같이, 메모리 카드(100)로 데이터를 다시 쓰는 경우, 먼저 무효인 데이터를 기억하는 물리 블록(122)의 소거를 행한 후, 이 소거를 행한 물리 블록(122)에 신 데이터의 기입을 행하고 있다. 이에 의해, 소거 비지(306) 중에 페이지 RAM(112)으로부터 플래시 메모리(120)의 페이지 레지스터(121)로 기입 데이터(308)를 전송하는 것이 가능하다. 따라서, 기입 데이터 전송에 필요한 시간을 단축하여 플래시 메모리(120)로의 다시 쓰기를 행할 수 있다.
또, 데이터의 다시 쓰기 동작 중에 어떠한 이상이 발생하더라도, 데이터의 정합성을 취할 수 있다.
또한, 상기와 같이 메모리 셀 어레이(123)를 논리적으로 다수의 영역으로 분할하고, 그 영역에 대응하는 어드레스 변환 테이블(113) 및 유효 블록 테이블(114)을 각각의 영역의 관리 영역에 기입하고 있기 때문에, 이들 테이블을 읽어들이는 컨트롤러(110)의 RAM인 어드레스 변환 테이블(113) 및 유효 블록 테이블(114)을 소용량으로 할 수 있다.
또한, 본 실시형태에서는, 컨트롤러(110)는, 호스트 기기(200)로부터의 데이터전송이 종료한 후 플래시 메모리(120)로 기입 데이터 입력 커맨드(307)를 보내고 있으나, 이것에 한정되는 것은 아니다. 예를 들면, 컨트롤러(110)는, 소거 실행 커맨드(305)보다 뒤에 호스트 기기(200)로부터의 데이터 전송이 종료하기 전에, 기입 데이터 입력 커맨드(307)를 보내어도 상관없다. 이 경우, 컨트롤러(110)는, 호 스트 기기(200)로부터의 데이터 전송이 종료한 후 페이지 RAM(112)으로부터 플래시 메모리(120)로 기입 데이터(308)의 전송을 행한다.
또, 본 실시형태에서는, "기입 데이터", "기입 어드레스"의 순으로 입력해도 동작하도록 커맨드 디코더(125)로 제어하는 방법으로 설명하고 있으나, 이것에 한정되는 것은 아니다. 예를 들면, 플래시 메모리(120)에 신규로 어드레스 레지스터를 설치하고, 소거 비지(306) 중에 입력되는 기입 어드레스를 어드레스 레지스터에 유지해 두고, 기입 실행 전에 어드레스 레지스터로부터 로우 디코더(124)로 기입 어드레스를 옮김으로써, "기입 어드레스", "기입 데이터"의 순으로 입력하는 것도 가능하다.
이상의 설명으로부터 알 수 있듯이, 본 발명에 따른 불휘발성 기억 장치에 의하면, 기억 수단에 기억되는 데이터를 다시 쓸 때, 기입하는 신 데이터를, 구 데이터가 기억되어 있는 물리 블록과는 별도의 무효인 물리 블록에 기억되어 있는 데이터를 소거한 후, 소거한 물리 블록의 페이지에 신 데이터를 기입하고 있기 때문에, 데이터의 다시 쓰기 동작 중에 어떠한 이상이 발생하더라도, 데이터의 정합성을 취할 수 있다.
또, 물리 블록의 소거를 행하고 있는 시간에, 병행하여 다음에 실행하는 기입 데이터를 기억 수단으로 전송함으로써, 데이터의 다시 쓰기에 걸리는 시간을 단축할 수 있다. 이에 의해, 불휘발성 기록 장치의 편리성이 향상하여, 사용자의 편리성을보다 향상시킬 수 있다.
따라서, 본 발명에 의해, 불휘발성 기록 장치의 편리성이 향상하여, 불휘발 성 기억 장치를 사용하는 휴대기기가 보급되어 온 오늘날에서의 실용적 가치는 대단히 높다.
이상과 같이, 본 발명에 따른 불휘발성 기억 장치는, 음악 데이터나 영상 데이터를 취급하는, 예를 들면 디지털 카메라나 휴대전화 등의 휴대기기의 데이터를 기억하는 기억 장치로서 사용하기에 적합하다.