(57)【要約】【課題】データ書き込み速度を向上する。【解決手段】記憶装置は、データを格納する複数のメモリブロックと、データを一時的に格納するバッファ３２とを含み、かつデータの消去がブロック単位で行われる不揮発性半導体メモリ２２と、一回の書き込みコマンドに対する書き込みデータが所定サイズ以下の場合に、上記書き込みデータをバッファ３２に書き込むコントローラ２１とを含む。【選択図】      図３
2008152464.tif 000002
【特許請求の範囲】
【請求項１】
データを格納する複数のメモリブロックと、データを一時的に格納するバッファとを含み、かつデータの消去がブロック単位で行われる不揮発性半導体メモリと、
一回の書き込みコマンドに対する書き込みデータが所定サイズ以下の場合に、前記書き込みデータを前記バッファに書き込むコントローラと
を具備することを特徴とする記憶装置。
【請求項２】
前記コントローラは、前記書き込みデータによりメモリブロックのデータを書き換える必要がある場合に、前記書き込みデータを前記バッファに書き込むことを特徴とする請求項１に記載の記憶装置。
【請求項３】
前記コントローラは、第１のメモリブロックに対応する所定数の書き込みデータが前記バッファに格納された場合、或いは前記バッファの空き容量が所定値以下になった場合に、前記所定数の書き込みデータをデータ消去済みの第２のメモリブロックに書き込むことを特徴とする請求項１に記載の記憶装置。
【請求項４】
前記コントローラは、前記書き込みデータを受け入れる間に、前記第１のメモリブロックに格納されたデータのうち前記所定数の書き込みデータのアドレス以外のデータを前記第２のメモリブロックにコピーすることを特徴とする請求項３に記載の記憶装置。
【請求項５】
前記コントローラは、前記書き込みデータを受け入れる処理を一定時間内に行い、かつこの一定時間を越えないように、前記コピー処理を分割して行うことを特徴とする請求項４に記載の記憶装置。
【請求項６】
前記バッファは、第１及び第２のバッファブロックを含み、
前記コントローラは、前記書き込みデータを受け入れる間に、前記第１のバッファブロックに格納されたデータのうち前記第２のメモリブロックに既に書き込まれたデータ以外を前記第２のバッファブロックにコピーすることで、前記バッファのデータを整理することを特徴とする請求項３乃至５のいずれかに記載の記憶装置。
【請求項７】
前記コントローラは、一回の書き込みコマンドに対する書き込みデータが前記所定サイズより大きい場合に、この書き込みデータを前記所定サイズの複数のデータ単位に分けて受け入れ、かつ前記複数のデータ単位のそれぞれを受け入れる間に、メモリブロック間のデータコピーを部分的に行うことを特徴とする請求項１に記載の記憶装置。
【請求項８】
前記コントローラは、前記複数のデータ単位のそれぞれを受け入れる処理を一定時間内に行い、かつこの一定時間を越えないように、前記データコピーを分割して行うことを特徴とする請求項７に記載の記憶装置。
【請求項９】
データを格納する複数のメモリブロックを含み、かつデータの消去がブロック単位で行われる不揮発性半導体メモリと、
各メモリブロックを２つのブロック部分に分けて管理し、かつ第１のメモリブロックのある領域に対してデータの書き込み要求が発生した場合に、前記領域のアドレスに関係なく、データ消去済みの第２のメモリブロックのうち前記領域に対応するブロック部分の先頭から前記書き込み要求のデータを書き込むコントローラと
を具備することを特徴とする記憶装置。
【請求項１０】
前記コントローラは、前記第１のメモリブロックに格納されたデータのうち前記書き込み要求のデータのアドレス以外のデータを前記第２のメモリブロックにコピーし、かつこのデータコピーをブロック部分ごとに行うことを特徴とする請求項９に記載の記憶装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ホスト装置との間でデータ転送を行う記憶装置に係り、特に不揮発性半導体メモリを備えた記憶装置に関する。
【背景技術】
【０００２】
現在、音楽データや映像データなどを記録する記憶装置として、不揮発性半導体メモリを備えたメモリカードが使われている。不揮発性半導体メモリは、電源がオフされてもデータを消失する虞がなく、またデータの書き換えが可能である。不揮発性半導体メモリとしては、ＮＡＮＤ型フラッシュメモリなどが用いられている。
【０００３】
ＮＡＮＤ型フラッシュメモリでは、データの書き込みはページ（２ＫＢ、４ＫＢ、８ＫＢなど）単位で行われ、データの消去は複数ページで構成されたブロック（５１２ＫＢ、１ＭＢなど）単位で行われる。また、ＮＡＮＤ型フラッシュメモリにデータを書き込む場合には、以下のような制約がある。
【０００４】
（１）事前にブロック単位でデータが消去されている必要がある
（２）同一のブロック内でデータを書き込む場合、次に書き込むデータは、前に書き込まれたデータのアドレスよりも大きなアドレスに書き込む必要がある
例えば、データが書き込まれたブロックに対して新データを書き込む場合、消去済みブロックを別に用意し、この消去済みブロックに新データを書き込み、さらに新データが書き込まれた部分以外は元のブロックからデータをコピーしなおす「引越し」と呼ばれる処理を行うことで実現する。特に、ランダムな論理アドレスに対してホスト装置からのデータ書き込みが発生すると、この引越し処理が頻発して書きこみ性能が低下する傾向がある。
【０００５】
近年のＮＡＮＤ型フラッシュメモリでは、大容量化に伴って、ブロックのサイズが大きくなる傾向がある。ブロックのサイズが大きくなるにつれて、ブロック間のデータコピー時間が長くなり、引越し時間の最大値が長くなる。よって、ランダムな論理アドレスへのデータ書き込みに対するメモリカード内での書き込み時間（ビジー時間）が長くなってしまう。
【０００６】
一方、ビジー時間を短くするためにランダムな論理アドレスへのデータ書き込み処理の時間を短縮することに特化したデータ書き込み処理を採用すると、シーケンシャルな論理アドレスに対するデータ書き込み速度が低下してしまう。
【０００７】
また、この種の関連技術として、記憶デバイスの性能を推測する技術が開示されている（特許文献１参照）。
【特許文献１】特開２００６−１７８９２３号公報
【発明の開示】
【発明が解決しようとする課題】
【０００８】
本発明は、データ書き込み速度を向上することが可能な記憶装置を提供する。
【課題を解決するための手段】
【０００９】
本発明の第１の視点に係る記憶装置は、データを格納する複数のメモリブロックと、データを一時的に格納するバッファとを含み、かつデータの消去がブロック単位で行われる不揮発性半導体メモリと、一回の書き込みコマンドに対する書き込みデータが所定サイズ以下の場合に、前記書き込みデータを前記バッファに書き込むコントローラとを具備する。
【００１０】
本発明の第２の視点に係る記憶装置は、データを格納する複数のメモリブロックを含み、かつデータの消去がブロック単位で行われる不揮発性半導体メモリと、各メモリブロックを２つのブロック部分に分けて管理し、かつ第１のメモリブロックのある領域に対してデータの書き込み要求が発生した場合に、前記領域のアドレスに関係なく、データ消去済みの第２のメモリブロックのうち前記領域に対応するブロック部分の先頭から前記書き込み要求のデータを書き込むコントローラとを具備する。
【発明の効果】
【００１１】
本発明によれば、データ書き込み速度を向上することが可能な記憶装置を提供することができる。
【発明を実施するための最良の形態】
【００１２】
以下、本発明の実施の形態について図面を参照して説明する。なお、以下の説明において、同一の機能及び構成を有する要素については、同一符号を付し、重複説明は必要な場合にのみ行う。
【００１３】
［１］記憶装置及びホスト装置の構成
本実施形態では、記憶装置としてメモリカードを一例に説明する。メモリカードは、例えば、ホスト装置に対して着脱可能なように構成される。しかし、これに限定されず、記憶装置及びホスト装置を１つのＬＳＩ（Large-Scale Integrated Circuit）として構成してもよい。すなわち、ホスト装置が実装されたプリント基板上に、記憶装置を構成するコントローラ及び不揮発性半導体メモリが実装されるようにしてもよい。
【００１４】
図１は、本発明の一実施形態に係るホスト装置１０及びメモリカード２０の構成を示すブロック図である。メモリカード２０は、ホスト装置１０に装着可能なように構成されている。そして、メモリカード２０は、通常、ホスト装置１０に装着されて使用され、ホスト装置１０に対して一種の外部記憶媒体として用いられる。
【００１５】
メモリカード２０は、不揮発性半導体メモリ２２を備えている。本実施形態では、不揮発性半導体メモリ２２として、例えば、データの書き込み及び消去を電気的に行う、ＥＥＰＲＯＭ（Electrically Erasable Programmable Read Only Memory）の一種であるＮＡＮＤ型フラッシュメモリ２２を例に説明する。なお、図１には、ＮＡＮＤ型フラッシュメモリ２２が１個よりなる構成を示しているが、２つ以上のＮＡＮＤ型フラッシュメモリ２２が配置されていてもよい。
【００１６】
ＮＡＮＤ型フラッシュメモリ２２を構成する各フラッシュメモリセル（メモリセルトランジスタ）は、半導体基板上にトンネル絶縁膜を介して電荷蓄積を目的とする浮遊ゲート電極、ゲート間絶縁膜、制御ゲート電極が積層形成されたスタックゲート構造を有している。そして、複数個のメモリセルトランジスタを、隣接するもの同士でソース領域若しくはドレイン領域を共有するような形で列方向に直列接続させ、その両端に選択ゲートトランジスタを配置して、ＮＡＮＤセルユニットが構成される。
【００１７】
このユニットが行方向（ワード線ＷＬの延在方向）に複数個配列されてブロックが構成される。このブロックがデータ消去単位となる。１個のブロックのうち同じワード線ＷＬに接続された複数のメモリセルは１ページとして取り扱われ、このページごとにデータの書き込み及びデータの読み出しが行われる。
【００１８】
ＮＡＮＤ型フラッシュメモリ２２は、複数のブロックを備えており、１つのブロックは複数のページにより構成されている。また、ＮＡＮＤ型フラッシュメモリ２２は、記憶領域３１とランダムライトバッファ３２とを備えている。記憶領域３１は、論理アドレスに基づいて、ホスト装置１０から転送された書き込みデータを格納する。また、記憶領域３１は、メモリカード２０を使用するユーザが自由にアクセス及び使用することが可能なユーザーデータ領域などであり、ユーザーデータなどを格納する。
【００１９】
ランダムライトバッファ３２は、ホスト装置１０から転送された書き込みデータのうち、後述する所定の書き込みデータを一時的に格納する。ランダムライトバッファ３２は、記憶領域３１と同様にＮＡＮＤ型フラッシュメモリから構成されており、また複数のブロックから構成されている。そして、ランダムライトバッファ３２の各ブロックは、データ書き込み単位である複数のページから構成されている。
【００２０】
メモリカード２０は、ホスト装置１０とＮＡＮＤ型フラッシュメモリ２２との間に設けられ、かつホスト装置１０の指示に基づいてフラッシュメモリ２２を制御するコントローラ２１を備えている。コントローラ２１は、ホストインターフェース回路２３、ＭＰＵ（Micro Processing Unit）２４、ＲＯＭ（Read Only Memory）２５、ＲＡＭ（Random Access Memory）２６、メモリインターフェース回路２７、バス２８、及びＲＡＭバッファ２９を備えている。
【００２１】
ホストインターフェース回路２３は、コネクタ（図示せず）を介してホスト装置１０と接続されており、ＭＰＵ２４の制御のもと、所定のプロトコルに従ってコマンド或いは各種データ等の送受信をホスト装置１０との間で行う機能ブロックである。
【００２２】
ＭＰＵ２４は、バス２８を介してメモリカード２０全体の動作を統括的に制御するものである。ＭＰＵ２４は、例えばメモリカード２０が電源供給を受けたときに、ＲＯＭ２５等に格納されたファームウェアに基づいてメモリカード２０の基本的な制御を実行する。また、ＭＰＵ２４は、ホスト装置１０からライトコマンド、リードコマンド、或いは消去コマンド等を受け取り、ＮＡＮＤ型フラッシュメモリ２２に対してデータ転送処理を実行する。
【００２３】
メモリインターフェース回路２７は、バスを介してＮＡＮＤ型フラッシュメモリ２２に接続されており、ＮＡＮＤ型フラッシュメモリ２２のアクセスに必要な一連のメモリアクセス制御を実行する。具体的には、メモリインターフェース回路２７は、ＭＰＵ２４の制御に基づいて、ＮＡＮＤ型フラッシュメモリ２２に対する、書き込み動作、読み出し動作、或いは消去動作などを実行する。
【００２４】
ＲＯＭ２５は、ファームウェアや制御プログラムなどを格納する。このファームウェアは、メモリカード２０の基本的な制御を行うためのプログラムである。制御プログラムは、コントローラ２１がホスト装置１０との間でデータ転送を行う際にＭＰＵ２４によって使用されるプログラムを含む。また、制御プログラムは、コントローラ２１がＮＡＮＤ型フラッシュメモリ２２との間でデータ転送を行う際にＭＰＵ２４によって使用されるプログラムを含む。ＲＡＭ２６は、ＭＰＵ２４の作業エリアとして使用され、各種のテーブルなどを記憶する。
【００２５】
ＲＡＭバッファ２９は、ホスト装置１０から送られたデータ、及びＮＡＮＤ型フラッシュメモリ２２から読み出されたデータを一時的に格納する。すなわち、ＮＡＮＤ型フラッシュメモリ２２から読み出されたデータは、ホスト装置１０の受け取り準備ができるまでＲＡＭバッファ２９に一時的に格納される。また、ホスト装置１０から送られたデータは、ＮＡＮＤ型フラッシュメモリ２２の書き込み準備が完了するまでＲＡＭバッファ２９に一時的に格納される。
【００２６】
ホスト装置１０は、装着されるメモリカード２０に対してアクセスを行うためのハードウェア及びソフトウェア（システム）を備えている。ホスト装置１０としては、画像データ、音楽データ或いはＩＤデータなどの各種データを処理するパーソナルコンピュータ、デジタルカメラ、或いは携帯電話端末等を含む情報処理装置が挙げられる。
【００２７】
［２］メモリカード２０に適用される規格
本実施形態のメモリカード２０は、タイムアウトに関する規定、及びスピードクラスに関する規定を満たすようにデータ転送動作を実行する。以下に、タイムアウトに関する規定、及びスピードクラスに関する規定について説明する。なお、本実施形態では、ＳＤＴＭメモリカードを例に説明する。
【００２８】
［２−１］タイムアウトに関する規定
ＳＤＴＭメモリカード規格では、５１２バイト（Ｂ）ごとのデータブロック転送を行う。そして、メモリカード２０は、一定時間（タイムアウト期間）内に、データブロックの書き込みを行う必要がある。具体的には、ＳＤＴＭメモリカード規格では、５１２Ｂのデータブロックの転送時間ごとのビジー（Busy）時間が規定されている。このビジー時間は、ホスト装置１０からメモリカード２０へデータブロックが送られた場合に、このデータブロックをメモリカード２０が受け入れるために必要な時間である。
【００２９】
また、最大ビジー時間は、２５０ｍｓと規定されている。したがって、メモリカード２０では、いかなる状況においても、ホスト装置１０から転送された５１２Ｂのデータブロックの受け入れ処理を最大ビジー時間内に終了しなくてはならない。
【００３０】
なお、以下の説明において、データブロックと表記した場合には、データ転送を行う際のデータの固まりをいうものとする。一方、単にブロックと表記した場合には、ＮＡＮＤ型フラッシュメモリの消去単位であるメモリブロックをいうものとする。
【００３１】
［２−２］スピードクラスに関する規定
ＳＤＴＭメモリカード規格では、メモリカードの性能を表すためのスピードクラスが定義されている。このスピードクラスは、一定の論理アドレス範囲（例えば、４ＭＢアドレス境界ごと）に一定の速度での書き込みが可能であることを保証するものである。この一定の論理アドレス範囲をＳＤＴＭメモリカード規格ではＡＵ（Allocation Unit）と呼んでいる。また、スピードクラスでは、１６ＫＢ単位でのマルチブロックライトで書き込みを行った際の性能と規定されている。
【００３２】
例えば１ＧＢ以上の容量を有するメモリカードについては、ＡＵは４ＭＢ（最大値）と決まっている。そして、このＡＵごとの書き込み速度（最低保証速度）が、クラス６は６ＭＢ／ｓ以上、クラス４は４ＭＢ／ｓ以上、クラス２は２ＭＢ／ｓ以上であることを保証する必要がある。
【００３３】
［３］データ書き込み動作
次に、ホスト装置１０からメモリカード２０へのデータ書き込み動作について説明する。このデータ書き込み動作には、シングルブロックライトとマルチブロックライトとがある。また、データ書き込みは、所定サイズ（例えば５１２Ｂ）のデータの固まりからなるデータブロックを単位として行われる。シングルブロックライトとは、一回のライトコマンドに続いて１つのデータブロックのみがホスト装置１０から転送され、この１つのデータブロックずつ書き込みを行う方式である。マルチブロックライトとは、一回のライトコマンドに続いて連続した複数のデータブロックがホスト装置１０から転送され、この連続した複数のデータブロックの書き込みを行う方式である。
【００３４】
ここで、ホスト装置１０は、５１２Ｂのデータブロックを単位としてランダムな書き込みを行う。このようなランダムな書き込みでは、ブロックの一部のみのデータを書き換える処理（上書き処理）が多発する。ＮＡＮＤ型フラッシュメモリ２２ではブロック単位でしかデータの消去を行えない。
【００３５】
このため、ブロックの一部のみを書き換える場合には、消去済みブロックを別に用意し、この消去済みブロックに書き換える新データを書き込み、新データに書き換えられる旧データを含む旧ブロックから、書き換えられない残りのデータを消去済みブロックにコピーする必要がある。したがって、ブロックの一部のみを書き換える処理は、書き換えられないデータの引越し処理を伴うため、ブロックの一部のみを書き換える処理が多発すると、オーバーヘッドが非常に増大することになる。
【００３６】
本実施形態では、データの引越し処理を低減することで、データの書き換えにかかる時間を低減するようにしている。すなわち、データ書き換えが発生した場合、論理アドレスに関係なく、書き込むべき新データを消去済みの物理ブロックに書き込む。さらに、この際、書き込むべき新データを消去済みの物理ブロックの先頭ページから順に書き込む。（以下、ページシフト方式という）。
【００３７】
図２は、ページシフト方式におけるデータ書き換え動作を説明するための概略図である。図２では、１つのブロックが１０ページで構成されている。また、論理ブロックＡのページ１〜１０にはあらかじめ任意のデータが書き込まれている。例えば、物理ブロックＡのページ１からページ１０には、論理ブロックＡと同じデータが書き込まれている。また、物理ブロックＢは、消去済みのブロックである。
【００３８】
ホスト装置１０は、ライトコマンドを発行し、メモリカード２０に対して、論理ブロックＡのページ３〜５に、新データを上書きする。すると、コントローラ２１は、この新データを、新たな消去済みの物理ブロックＢのうち論理アドレスに対応するページには書き込まず、物理ブロックＢの先頭ページ（ページ１）から順に新データを書き込む。このとき、コントローラ２１は、書き込み要求の対象となっているページ（物理ブロックＡのページ３〜５）のアドレスを、新データが書き込まれたページの冗長領域に同時に書き込んでおく。そして、この状態で、新データの上書き処理を終了する。
【００３９】
このような処理を行うことで、論理ブロックＡにデータを上書きする際に、データの引越し処理が不要となる。これにより、論理ブロックＡへの書き換え動作を高速に行うことが可能となる。データ読み出しの際には、コントローラ２１は、ページ内の冗長領域に格納されたアドレスを参照することで、データ読み出し対象のデータが格納されている位置を求めることができる。
【００４０】
ところで、このような書き換え動作では、論理ブロックＡのページ１〜１０に格納された複数のデータは、物理ブロックＡと物理ブロックＢとに分かれて格納されている。この状況を放置しておくと、データ読み出し動作が遅くなったり、ＮＡＮＤ型フラッシュメモリ２２の使用率が低下したりしてしまう。
【００４１】
したがって、本実施形態では、データブロックの書き込み処理と平行して、物理ブロックＡと物理ブロックＢとの２つの領域（ＤＳ：Dual sector）に分けて格納されたデータの結合処理（以下、ＤＳ結合処理という）を行う。
【００４２】
図３は、物理ブロックＡと物理ブロックＢとの２つの領域に分けて格納されたデータの結合処理を説明するための概略図である。コントローラ２１は、物理ブロックＡのうち、新データに対応するページより下側のページ（ページ６〜１０）に格納されたデータの引越し処理を実行する。すなわち、コントローラ２１は、物理ブロックＡのページ６〜１０のデータを、物理ブロックＢのページ４〜８に書き込む。
【００４３】
続いて、コントローラ２１は、物理ブロックＡのうち、新データに対応するページより上側のページ（ページ１及び２）に格納されたデータの引越し処理を実行する。すなわち、コントローラ２１は、物理ブロックＡのページ１及び２のデータを、物理ブロックＢのページ９及び１０に書き込む。
【００４４】
このようなＤＳ結合処理を行うことで、物理ブロックＡと物理ブロックＢとに分かれて格納されていたデータを、物理ブロックＢにまとめて格納することができる。これにより、物理ブロックＡに格納されたデータは、全て無効データとなるため、物理ブロックＡのデータを消去して新データを書き込むことが可能となる。ＮＡＮＤ型フラッシュメモリ２２の使用率が向上する。
【００４５】
このＤＳ結合処理は、コントローラ２１によって、データ書き込み動作と平行して行われる。しかし、ＤＳ結合処理は、最大でほぼ１ブロック分のデータコピー処理に相当する。このデータコピー処理にかかる時間は、ブロックサイズに起因して変わってくる。したがって、１ブロック分のデータコピー処理が長くかかる場合には、最大ビジー時間を超えてしまい、タイムアウトスペックを満たすことができなくなってしまう。
【００４６】
以下に、タイムアウトスペックを満たすための書き込み動作を、シングルブロックライト及びマルチブロックライトそれぞれについて説明する。
【００４７】
［３−１］シングルブロックライトへの対応
シングルブロックライトでは、ホスト装置１０は、５１２Ｂのデータブロックを単位としてランダムな書き込みを行う。このようなランダムな書き込みでは、ブロックの一部のみのデータを書き換える処理（上書き処理）が多発する。この場合、書き込みデータを消去済みの物理ブロックに書き込むと、ＤＳ結合処理が必要になる。
【００４８】
本実施形態では、ＤＳ結合処理が必要になる場合には、コントローラ２１は、ホスト装置１０から送られたデータブロックをＮＡＮＤ型フラッシュメモリ２２内の記憶領域３１には直接書き込まず、一時的にランダムライトバッファ３２に追記していく。このようにして、ＤＳ結合処理ごとに発生するコピー処理（引越し処理）を削減する。ランダムライトバッファ３２は、ＮＡＮＤ型フラッシュメモリ２２内の一定数のメモリブロックを、通常のデータ格納用に使用するメモリブロックとは別に、コントローラ２１があらかじめ確保したものである。
【００４９】
図４は、シングルブロックライト動作を示すタイミングチャートである。なお、図４は、ホスト装置１０とコントローラ２１とを接続するバス上のデータを示している。
【００５０】
まず、コントローラ２１は、ホスト装置１０から発行されたシングルブロックライトコマンド（ＳＷ−ＣＭＤ）を受け取り、このコマンドを解釈する。続いて、ホスト装置１０は、コントローラ２１に５１２Ｂのデータブロック（書き込みデータ）を送る。
【００５１】
すると、コントローラ２１は、ホスト装置１０にビジー信号を送る。続いて、コントローラ２１は、最大ビジー時間を越えない範囲で、ホスト装置１０から送られたデータブロックの受け入れ処理（具体的には、データブロックをＲＡＭバッファ２９に一時的に書き込む処理）を実行する。コントローラ２１は、この受け入れ処理が完了すると、ビジーを解除する。その後、コントローラ２１は、このデータブロックをランダムライトバッファ３２に追記する。
【００５２】
同様に、コントローラ２１は、次のＳＷ−ＣＭＤに対しても、データブロックの受け入れ処理を実行し、さらに、このデータブロックをランダムライトバッファ３２に追記する。このような処理により、１つのデータブロックを書き換えるために発生していたデータの引越し処理を削減することができる。
【００５３】
ただし、ランダムライトバッファ３２のサイズは有限であり、ＮＡＮＤ型フラッシュメモリ２２の容量を有効に使用するためにはランダムライトバッファ３２のサイズはなるべく小さくする必要がある。そのため、ランダムライトバッファ３２に書き込まれたデータは、適切な方法で記憶領域３１内の物理ブロックに書き戻していく必要がある。この処理を本実施形態では「整理」と呼ぶ。この整理は、記憶領域３１のある物理ブロックのデータと、その物理ブロックに対応するランダムライトバッファ３２中のデータとを結合して、有効データが含まれない別の物理ブロックに書き写す処理である。
【００５４】
コントローラ２１は、ランダムライトバッファ３２のエントリー数の空きが例えば２個以下、或いは、ブロックあたりのランダムライトバッファ３２のデータ数の最大が所定数（１或いは２以上）以上になった場合、ランダムライトバッファ３２に格納されている書き込みデータが最も多く含まれるブロックを優先的に整理して、ランダムライトバッファ３２内の書き込みデータを記憶領域３１に書き写す。
【００５５】
これは、１つのブロックに対してなるべく多くの書き込みデータをランダムライトバッファ３２に貯めてから整理した方が一度に多くの書き込みデータを処理できるので、ランダムライトバッファ３２の空き領域を効率よく増やすことができ、さらに、必要なランダムライトバッファ３２のサイズを小さく抑えることができるからである。このとき、この整理に伴う１ブロック分の引越し処理（データコピー処理）は例えばブロックの１／２ずつ、２回のシングルブロックライトのビジー期間に分けて行い、１ブロック分のデータコピー時間が長い場合でもタイムアウトを防ぐようにする。
【００５６】
図５は、シングルブロックライト動作を説明するための概略図である。記憶領域３１は、説明の理解を容易にするために、４つのブロックＡ〜Ｄにより構成されているものとする。前述したように、ＤＳ結合処理が必要になる場合、シングルブロックライト動作では、ランダムライトバッファ３２に５１２Ｂの書き込みデータが順に追記されていく。
【００５７】
図５に示すように、ランダムライトバッファ３２には、７個の書き込みデータ（Ａ１〜Ａ３、Ｂ１、Ｂ２、Ｃ１、Ｄ１）が格納されている。書き込みデータＡ１〜Ａ３は、ブロックＡの論理アドレスに対応する書き込みデータ（ブロックＡに書き込まれるべきデータ）である。同様に、書き込みデータＢ１及びＢ２はブロックＢの論理アドレスに対応する書き込みデータ、書き込みデータＣ１はブロックＣの論理アドレスに対応する書き込みデータ、書き込みデータＤ１はブロックＤの論理アドレスに対応する書き込みデータである。
【００５８】
ここで、ランダムライトバッファ３２のエントリー数の空きが例えば２個以下となった場合、ブロックあたりのランダムライトバッファ３２のデータ数が最大であるブロックＡを整理対象とする。そして、書き込みデータＡ１〜Ａ３をブロックＡに書き写すとともに、ブロックＡの引越し（書き換えられないデータの引越し）処理を行う。
【００５９】
さらに、ブロックＡの引越し処理は、２回のデータブロックの受け入れ処理のビジー期間中に行う。すなわち、図４に示した１回目のビジー期間中にブロックＡの引越し処理の１／２を行い、２回目のビジー期間中にブロックＡの引越し処理の残りを行う。
【００６０】
シングルブロックライトでの上書き動作において、上記のような処理を行うことで、１回のライト処理に伴う引越し処理を低減することができる。これにより、シングルブロックライト動作を高速に行うことが可能となる。また、ブロックの引越し処理を２回のデータブロック書き込み処理に分けて行うことで、引越し処理に起因するタイムアウトを防ぐことができる。
【００６１】
なお、シングルブロックライトにおける上記説明では、ＤＳ処理が必要な場合に、ランダムライトバッファ３２にデータを書き込むようにしている。しかし、データを書き換える必要がない場合、又はデータの書き換えがデータコピーを伴わない場合にも、ランダムライトバッファ３２にデータを書き込むようにしてもよい。
【００６２】
［３−１−１］ランダムライトバッファ３２に必要なエントリー数
次に、ランダムライトバッファ３２のサイズについて説明する。ランダムライトバッファ３２のエントリー数は、シングルブロックライトにおいて、どのような論理アドレスへのデータ書き込みが発生した場合でも、ランダムライトバッファ３２が溢れることがないように設定される。なお、エントリー数は、ランダムライトバッファ３２にバッファリング可能な有効データ数である。また、ランダムライトバッファ３２はＮＡＮＤ型フラッシュメモリにより構成されているので、エントリー数は、ランダムライトバッファ３２のページ数に対応する。
【００６３】
本実施形態では、２回のデータ書き込み処理に分けて引越し処理（ランダムライトバッファ３２の整理を含む）を行う。この２回のデータ書き込み処理により、ランダムライトバッファ３２内には２個の書き込みデータが増えることになる。したがって、引越し処理中の２回のデータ書き込み処理の間に、ランダムライトバッファ３２内のバッファリングデータを２個整理（すなわち、記憶領域３１内のブロックに書き写す）すれば、ランダムライトバッファ３２が書き込みデータで溢れることがない。
【００６４】
ここで、記憶領域３１のブロック数をＮ個とする。また、ランダムライトバッファ３２にバッファリング可能な有効データ数をＭ個とする。Ｎ及びＭはそれぞれ、１以上の整数である。
【００６５】
「Ｍ＝Ｎ＋４」とすると、（Ｎ＋２）個までランダムライトバッファ３２が埋まったときに、同じブロックに関係付けられたバッファリングデータが２個以上あるブロックが常に１つは存在する。したがって、このブロックを引越し対象とすると、新たな書き込みデータがランダムライトバッファ３２にバッファリングされる間に１つのブロックを整理することができる。その際、このブロックに関係付けられた２個以上のバッファリングデータがランダムライトバッファ３２から整理される。
【００６６】
よって、上記条件を満たす少なくともＭ個のエントリー数をランダムライトバッファ３２内に用意することで、ランダムライトバッファ３２の空きが減少することがなく、かつランダムライトバッファ３２が書き込みデータで溢れることがない。
【００６７】
以下に、具体的なデータ書き込み動作を説明しながら、ランダムライトバッファ３２のバッファリング可能な有効データ数について説明する。図６は、ランダムライトバッファ３２に書き込まれたデータとランダムライトバッファ３２のバッファリング可能な有効データ数との関係を示す図である。なお、メモリカード２０は、８個の論理ブロックＡ〜Ｈを備えているものとする。また、図６では、ランダムライトバッファ３２に書き込まれたデータがどの論理ブロックに関係付けられているかが分かるように、書き込みデータを論理ブロックＡ〜Ｈごとに分けて示している。
【００６８】
ステップ（１）において、ホスト装置１０は、論理ブロックＡにデータ“１”を書き込む。これに対応して、コントローラ２１は、データ“１”をランダムライトバッファ３２に書き込む。このとき、ランダムライトバッファ３２内の有効データ数は“１”である。続いて、ステップ（２）において、ホスト装置１０は、論理ブロックＢにデータ“２”を書き込む。これに対応して、コントローラ２１は、データ“２”をランダムライトバッファ３２に書き込む。このとき、ランダムライトバッファ３２内の有効データ数は“２”である。
【００６９】
以下同様に、ステップ（３）〜（１１）において、ホスト装置１０は、データ“３”〜データ“１１”を順に図６に示した論理ブロックに書き込む。これに対応して、コントローラ２１は、データ“３”〜データ“１１”をランダムライトバッファ３２に順に書き込む。ステップ（１１）のとき、ランダムライトバッファ３２内の有効データ数は“１１”である。
【００７０】
続いて、ステップ（１２）において、ホスト装置１０は、論理ブロックＤにデータ“１２”を書き込む。これに対応して、コントローラ２１は、ブロックＡの１／２の引越し処理を行う。また、コントローラ２１は、データ“１２”をランダムライトバッファ３２に書き込む。このとき、ランダムライトバッファ３２内の有効データ数は“１２”である。
【００７１】
続いて、ステップ（１３）において、ホスト装置１０は、論理ブロックＥにデータ“１３”を書き込む。これに対応して、コントローラ２１は、ブロックＡの残りの１／２の引越し処理を行う。これにより、論理ブロックＡに関係付けられたデータ“１”及び“９”が記憶領域３１に書き写されたため、ランダムライトバッファ３２内のデータ“１”及び“９”は、無効データとなる。図６では、データにマイナスを付けて無効データを示している。また、コントローラ２１は、データ“１３”をランダムライトバッファ３２に書き込む。このとき、ランダムライトバッファ３２内の有効データ数は“１１”である。
【００７２】
以下同様に、ステップ（１４）〜（１９）を参照して、データ“１４”〜データ“１９”がランダムライトバッファ３２に順に書き込まれる。このとき、ステップ（１４）及び（１５）において、コントローラ２１は、ブロックＢの引越し処理を行う。また、ステップ（１６）及び（１７）において、コントローラ２１は、ブロックＣの引越し処理を行う。また、ステップ（１８）及び（１９）において、コントローラ２１は、ブロックＧの引越し処理を行う。
【００７３】
これらの処理において、図６に示すように、ランダムライトバッファ３２内の有効データ数の上限は“１２”であり、したがってランダムライトバッファ３２に必要なエントリー数は“１２”となる。すなわち、前述した記憶領域３１のブロック数Ｎと、ランダムライトバッファ３２にバッファリング可能な有効データ数Ｍとの関係式を満たすことで、ランダムライトバッファ３２が書き込みデータで溢れることがない。
【００７４】
［３−１−２］ランダムライトバッファ３２のガベージコレクション
ランダムライトバッファ３２はＮＡＮＤ型フラッシュメモリにより構成されるため、ランダムライトバッファ３２の任意の物理アドレスには書き込めず、バッファ内に追記していくことになる。一方、ランダムライトバッファ３２を整理することでランダムライトバッファ３２から除かれる有効データの位置はランダムライトバッファ３２内のあちこちのアドレスに分散しているため、無効データの位置に対しても新たなデータを直接書き込むことはできない。したがって、あるタイミングでのガベージコレクションが必要となる。なお、ガベージコレクションとは、不要になった無効データを解放してデータ領域を利用可能な状態（すなわち追記によるデータ書き込みが可能な状態）に戻す処理である。
【００７５】
本実施形態では、ガベージコレクションは、例えば下記（１）〜（４）の条件を満たすように行われる。
【００７６】
（１）１回のランダムライトバッファ３２へのデータ書き込みのたびに、４ページずつのガベージコレクションを行う。これにより、１回のシングルブロックライト動作でのビジー期間中に行うガベージコレクションの処理時間を少なくすることができるため、タイムアウトを防ぐことができる。
【００７７】
（２）ランダムライトバッファ３２へのデータ書き込みは、最も空きが少ないブロックから優先的に行う。
【００７８】
（３）無効データの数（ガベージの数）が１ブロックの１／４以上あり、かつ、最もガベージが多いブロックをガベージコレクションの対象とする。
【００７９】
（４）ランダムライトバッファ３２のブロック数は、ランダムライトバッファ３２に必要なエントリー数から算出される最低必要なブロック数をＬとすると、“（４／３）Ｌ＋１”個に設定される。
【００８０】
これらの条件を満たすようにランダムライトバッファ３２のブロック数を設定する。すると、ランダムライトバッファ３２が（４／３）Ｌ個のブロックまで埋まったとき、必ず１／４以上のガベージがあるブロックが１個は存在する。このブロックのガベージコレクションを行うためには、１／４ブロック分の新規書き込みが必要であるが、その結果、１／４ブロックの空きができる。このため、ランダムライトバッファ３２がガベージで溢れることがない。
【００８１】
図７は、ランダムライトバッファ３２のガベージコレクション動作を説明するための概略図である。ランダムライトバッファ３２に必要なエントリー数から算出される最低必要なブロック数を３ブロックとすると、上記（４）の条件を満たすランダムライトバッファ３２のブロック数は、５個となる。この様子を図７に示している。すなわち、ランダムライトバッファ３２は、５つのブロックａ〜ｅにより構成されている。この５つのブロックのうち１つのブロックｅは、作業用して使用され、データが消去された空き状態である。
【００８２】
ブロックａ〜ｄには、それぞれ有効データ及び無効データ（ガベージ）が格納されている。なお、図７は、ブロック内のデータ量を示した図であり、ブロック内のデータの順番は実際と異なっている。
【００８３】
図７に示すように、ブロックａ〜ｄが一杯に埋まった場合、１／４ブロック以上がガベージとなるブロックが１個は存在する。このブロックをガベージコレクションの対象とする。例えばブロックａをガベージコレクションの対象とすると、ブロックａ内の有効データが作業用のブロックｅに引越しされる。
【００８４】
また、このガベージコレクションは、前述したように４ページずつ行われるので、ガベージコレクション中に新たにランダムライトバッファ３２に書き込まれた追加データについても、作業用のブロックｅに書き込まれる。このようなガベージコレクション動作を行うことで、ランダムライトバッファ３２内の無効データを整理することができる。
【００８５】
次に、具体的なガベージコレクション動作について説明する。記憶領域３１の論理ブロック数を２０個とする。ランダムライトバッファ３２の構成は、１ブロックが８ページ（８エントリ）とする。よって、ランダムライトバッファ３２の最低必要なブロック数は、（２０＋４）／８＝３ブロックである。また、ランダムライトバッファ３２のブロック数は、（４／３）・３＋１＝５ブロックである。この５ブロックをブロックａ〜ｅとする。
【００８６】
図８は、具体的なガベージコレクション動作を説明するための概略図である。図９は、ランダムライトバッファ３２に含まれるブロックの空きエントリー数を説明するための図である。
【００８７】
ブロックａ〜ｄまでが一杯にデータで埋まった段階では、ランダムライトバッファ３２には、３２個分のデータエントリがある。ランダムライトバッファ３２内の有効データはこのうちの２４個以下であるので、８個以上が無効データである。したがって、最低でも２個の無効データがあるブロックが存在する。このうちの１つのブロックをガベージコレクションの対象とする。ガベージコレクションの対象をブロックａとし、これをブロックｅに整理するものとする。
【００８８】
図８において、ブロックａには、データ１、２、５、８、１１、１２、１４、１８が書き込まれており、このうちのデータ２及び１１が無効データである。１回目のシングルブロックライト動作（データ３３の書き込み）において、４ページ分のデータ１、５、８、１２のブロックｅへの引越しと、新規書き込みデータ３３のブロックｅへの書き込みとが行われる。
【００８９】
続いて、２回目のシングルブロックライト動作（データ３４の書き込み）において、残りのページ分のデータ１４及び１８のブロックｅへの引越しと、新規書き込みデータ３４のブロックｅへの書き込みとが行われる。このようにして、２回の書き込み動作で、ブロックａのガベージコレクションを行うことができる。その後、ブロックａのデータを消去することで、ブロックａが次の作業用ブロックとなる。
【００９０】
図９に示すように、ブロックａのガベージコレクションを行った結果、ブロックａの空きエントリー数が８になる。同様に、ブロックｂ〜ｅ内の有効データ数は最大で２４個であるので、このうちの最低８個は無効データである。したがって、２個以上の無効データが存在するブロックが必ず１つは存在する。このブロックをブロックｂとすると、これをブロックａに整理する。
【００９１】
また、ブロックａ、ｃ、ｄ、ｅ内の有効データ数は最大で２４個であるので、このうちの最低８個は無効データである。したがって、２個以上の無効データが存在するブロックが必ず１つは存在する。このブロックをブロックｃとすると、これをブロックｂに整理する。このようにしてブロックを順に整理することで、ランダムライトバッファ３２がガベージで溢れることがない。
【００９２】
［３−２］マルチブロックライトへの対応
次に、マルチブロックライト動作について説明する。本実施形態のメモリカード２０は、ホスト装置１０から、マルチブロックライトコマンドに続いて送られる連続した複数のデータブロックに対しての書き込みを行うことも可能である。また、マルチブロックライトは、これらの複数のデータブロックが連続した論理アドレスに対するデータ書き込みである。
【００９３】
図１０は、マルチブロックライト動作を示すタイミングチャートである。なお、図１０は、ホスト装置１０とコントローラ２１とを接続するバス上のデータを示している。
【００９４】
まず、コントローラ２１は、ホスト装置１０から発行されたマルチブロックライトコマンド（ＭＷ−ＣＭＤ）を受け取り、このコマンドを解釈する。続いて、ホスト装置１０は、コントローラ２１に５１２Ｂのデータブロック（書き込みデータ）を送る。
【００９５】
すると、コントローラ２１は、ホスト装置１０にビジー信号を送る。続いて、コントローラ２１は、最大ビジー時間を越えない範囲で、ホスト装置１０から送られたデータブロックの受け入れ処理（具体的には、データブロックをＲＡＭバッファ２９に一時的に書き込む処理）を実行する。コントローラ２１は、この受け入れ処理が完了すると、ビジーを解除する。その後、コントローラ２１は、このデータブロックをＮＡＮＤ型フラッシュメモリ２２の記憶領域３１に書き込む。また、コントローラ２１は、ＤＳ結合処理が必要な場合は、このデータブロックに対応するビジー期間中に、データブロックの受け入れ処理と平行して、ＤＳ結合処理の１／２を行う。
【００９６】
続いて、ホスト装置１０は、コントローラ２１に次のデータブロックを送る。すると、コントローラ２１は、ホスト装置１０にビジー信号を送る。続いて、コントローラ２１は、最大ビジー時間を越えない範囲で、ホスト装置１０から送られたデータブロックの受け入れ処理を実行する。コントローラ２１は、この受け入れ処理が完了すると、ビジーを解除する。その後、コントローラ２１は、このデータブロックをＮＡＮＤ型フラッシュメモリ２２の記憶領域３１に書き込む。また、コントローラ２１は、このデータブロックに対応するビジー期間中に、データブロックの受け入れ処理と平行して、ＤＳ結合処理の残りの１／２を行う。
【００９７】
同様に、コントローラ２１は、ホスト装置１０から送られた複数のデータブロックを受け取る。そして、コントローラ２１は、それぞれのデータブロックに対応するビジー期間中に、ＤＳ結合処理を１／２ずつ行う。
【００９８】
続いて、ホスト装置１０は、複数のデータブロックを全て送り終えると、ストップコマンド（ＳＴ−ＣＭＤ）を発行する。コントローラ２１は、このストップコマンド（ＳＴ−ＣＭＤ）を受け取り、このコマンドを解釈する。これにより、コントローラ２１は、今回のマルチブロックライトコマンド（ＭＷ−ＣＭＤ）に対するデータ転送が終了したことを認識する。
【００９９】
なお、マルチブロックライトコマンド（ＭＷ−ＣＭＤ）に続いて１つのデータブロックのみが転送される場合もある。図１１は、マルチブロックライト動作の他の例を示すタイミングチャートである。
【０１００】
コントローラ２１は、ホスト装置１０から発行されたマルチブロックライトコマンド（ＭＷ−ＣＭＤ）を受け取り、このコマンドを解釈する。続いて、ホスト装置１０は、コントローラ２１にデータブロックを送る。すると、コントローラ２１は、最大ビジー時間を越えない範囲で、ホスト装置１０から送られたデータブロックの受け入れ処理を実行する。また、コントローラ２１は、ＤＳ結合処理が必要な場合は、このデータブロックに対応するビジー期間中に、データブロックの受け入れ処理と平行して、ＤＳ結合処理の１／２を行う。
【０１０１】
ここで、１つのデータブロックの後に、ホスト装置１０からストップコマンド（ＳＴ−ＣＭＤ）が送られてきた場合、コントローラ２１は以後、シングルブロックライトの場合と同じ処理を実行する。すなわち、コントローラ２１は、上記データブロックをランダムライトバッファ３２に追記する。このような処理により、マルチブロックライトコマンドに続いて１つのデータブロックしか送られてこない場合でも、データの引越し処理を削減することができる。
【０１０２】
ところで、本実施形態では、同一のブロックに対して２回のマルチブロックライト動作が行われた場合にデータのコピー量が最大で１／２ブロックで済むようにする。すなわち、１つのブロックを２つの領域に分けて管理し、この２つの領域それぞれについて、データ書き換えが発生した場合に、論理アドレスに関係なく、書き込むべき新データを消去済みの物理ブロックのうち対応する領域の先頭ページから順に行う（以下、デュアルページシフト方式という）。
【０１０３】
図１２及び図１３は、デュアルページシフト方式におけるデータ書き換え動作を説明するための概略図である。図１２及び図１３では、１つのブロックが１０ページで構成される。また１つの物理ブロックは、ページ１〜５からなる領域１と、ページ６〜１０からなる領域２とに分割されて管理される。また、論理ブロックＡのページ１〜１０にはあらかじめ任意のデータが書き込まれている。物理ブロックＡのページ１〜１０には、例えば論理ブロックＡと同じデータが書き込まれている。また、物理ブロックＢは、消去済みの物理ブロックである。
【０１０４】
図１２に示すように、ホスト装置１０は、メモリカード２０に対して、論理ブロックＡの領域１内のページ２及びページ３に、データブロック１（データ１）及びデータブロック２（データ２）をそれぞれ連続して書き込む。すると、コントローラ２１は、データ１及びデータ２を、消去済みの物理ブロックＢのうち論理アドレスに対応するページには書き込まず、物理ブロックＢの領域１の先頭ページ（ページ１）から順に書き込む（ステップＳ１０１）。このとき、コントローラ２１は、書き込み要求の対象となっているページ（物理ブロックＡのページ２及び３）のアドレスを、新データが書き込まれたページの冗長領域に同時に書き込んでおく。
【０１０５】
続いて、図１３に示すように、ホスト装置１０は、メモリカード２０に対して、論理ブロックＡの領域２内のページ８及びページ９に、データブロック３（データ３）及びデータブロック４（データ４）をそれぞれ連続して書き込む。すると、まずコントローラ２１は、物理ブロックＡの領域１に書き込まれたデータの引越し処理を実行する。すなわち、コントローラ２１は、物理ブロックＡのページ４及び５のデータを、物理ブロックＢのページ３及び４にそれぞれ書き込む（ステップＳ１０２）。続いて、コントローラ２１は、物理ブロックＡのページ１のデータを、物理ブロックＢのページ５に書き込む（ステップＳ１０３）。
【０１０６】
続いて、コントローラ２１は、データ３及びデータ４を、物理ブロックＢのうち論理アドレスに対応するページには書き込まず、物理ブロックＢの領域２の先頭ページ（ページ６）から順に書き込む（ステップＳ１０４）。このとき、コントローラ２１は、書き込み要求の対象となっているページ（物理ブロックＡのページ８及び９）のアドレスを、新データが書き込まれたページの冗長領域に同時に書き込んでおく。
【０１０７】
このような処理を行うことで、論理ブロックＡの領域１にデータを上書きする際に、データの引越し処理が不要となる。これにより、領域１への書き換え動作を高速に行うことが可能となる。さらに、論理ブロックＡの領域２にデータを上書きする際に、最大のデータコピー量を１／２ブロックに抑えることができる。これにより、引越し処理にかかる時間を低減することができる。この結果、タイムアウトを防ぐことができる。
【０１０８】
［４］データ書き込みの一連の動作
次に、ライトコマンド（シングルブロックライトコマンド或いはマルチブロックライトコマンド）を受け取ってから、このライトコマンドに関する一連の書き込み処理が終了するまでの動作について説明する。
【０１０９】
図１４及び図１５は、ライトコマンドに関する一連の動作を示すフローチャートである。ホスト装置１０からライトコマンドを受け取ると（ステップＳ２０１）、コントローラ２１は、ＤＳ結合処理が必要であるか否かを判定する（ステップＳ２０２）。ＤＳ結合処理が必要でない場合、コントローラ２１は、デュアルページシフト方式を用いて引越し処理を実行した後、データ書き込み処理（データ受け入れ処理を含む）を実行する。（ステップＳ２０３）。
【０１１０】
ステップＳ２０２においてＤＳ結合処理が必要である場合、コントローラ２１は、ホスト装置１０から受け取ったライトコマンドを解釈する（ステップＳ２０４）。このライトコマンドがシングルブロックライトコマンドである場合、コントローラ２１は以後、シングルブロックライト動作を実行する。
【０１１１】
すなわち、ホスト装置１０からデータブロックを受け取ると（ステップＳ２０５）、コントローラ２１は、このデータブロックをランダムライトバッファ３２に追記する（ステップＳ２０６）。続いて、コントローラ２１は、シングルブロックライト動作によるブロックの引越し処理の途中（すなわち、ブロックの１／２の引越し処理が終了している状態）であるか否かを判定する（ステップＳ２０７）。
【０１１２】
引越し処理の途中でない場合、コントローラ２１は、ランダムライトバッファ３２の空きエントリー数が２以下であるか否かを判定する（ステップＳ２０８）。空きエントリー数が２以下である場合、コントローラ２１は、ランダムライトバッファ３２に格納されたデータが最も多いブロックの引越し処理を１／２だけ実行する（ステップＳ２０９）。
【０１１３】
続いて、コントローラ２１は、ランダムライトバッファ３２のガベージコレクション処理を実行する（ステップＳ２１０）。その後、コントローラ２１は、ビジーを解除する（ステップＳ２１１）。
【０１１４】
ステップＳ２０７において引越し処理の途中である場合、コントローラ２１は、残りの引越し処理を実行する（ステップＳ２１２）。そして、コントローラ２１は、ステップＳ２１０に以降して、ランダムライトバッファ３２のガベージコレクション処理を実行する。
【０１１５】
ステップＳ２０８において空きエントリー数が２より多い場合、コントローラ２１は、ステップＳ２１０に移行して、ランダムライトバッファ３２のガベージコレクション処理を実行する。
【０１１６】
一方、ステップＳ２０４においてシングルブロックライトコマンドでない場合、コントローラ２１は以後、マルチブロックライト動作を実行する。すなわち、ホスト装置１０からデータブロックを受け取ると（ステップＳ３０１）、コントローラ２１は、ＤＳ結合処理が必要であるか否かを判定する（ステップＳ３０２）。ＤＳ結合処理が必要でない場合、コントローラ２１は、ステップ３１７に移行して、続くデータブロックを受け取る。そして、コントローラ２１は、記憶領域３１へのデータ書き込み処理を実行する。
【０１１７】
ステップＳ３０２においてＤＳ結合処理が必要である場合、コントローラ２１は、１／２分のＤＳ結合処理を実行する（ステップＳ３０３）。続いて、コントローラ２１は、ストップコマンド（ＳＴ−ＣＭＤ）を受け取ったか否かを監視している（ステップＳ３０４）。ストップコマンド（ＳＴ−ＣＭＤ）を受け取った場合、コントローラ２１は、ＤＳ結合処理を中断する（ステップＳ３０５）。そして、コントローラ２１は、ステップＳ２０６に移行して、以後シングルブロックライトと同じ処理を実行する。
【０１１８】
ステップＳ３０４においてストップコマンド（ＳＴ−ＣＭＤ）を受け取らなかった場合、コントローラ２１は、１／２分のＤＳ結合処理を継続し、このＤＳ結合処理が終了すると（ステップＳ３０６）、ビジー（Ｂｕｓｙ）を解除する（ステップＳ３０７）。
【０１１９】
続いて、コントローラ２１は、ストップコマンド（ＳＴ−ＣＭＤ）を受け取ったか否かを監視している（ステップＳ３０８）。ストップコマンド（ＳＴ−ＣＭＤ）を受け取った場合、コントローラ２１は、ＤＳ結合処理を中断して（ステップＳ３０５）、以後シングルブロックライトと同じ処理を実行する。
【０１２０】
ステップＳ３０８においてストップコマンド（ＳＴ−ＣＭＤ）を受け取らず、データブロックを受け取ると（ステップＳ３０９）、コントローラ２１は、残りのＤＳ結合処理を実行する（ステップＳ３１０）。続いて、コントローラ２１は、ストップコマンド（ＳＴ−ＣＭＤ）を受け取ったか否かを監視している（ステップＳ３１１）。ストップコマンド（ＳＴ−ＣＭＤ）を受け取った場合、コントローラ２１は、残りのＤＳ結合処理を継続する（ステップＳ３１２）。残りのＤＳ結合処理が終了すると（ステップＳ３１３）、コントローラ２１は、ビジーを解除する（ステップＳ３１４）。
【０１２１】
ステップＳ３１１においてストップコマンド（ＳＴ−ＣＭＤ）を受け取らなかった場合、コントローラ２１は、残りのＤＳ結合処理を継続し、このＤＳ結合処理が終了すると（ステップＳ３１５）、ビジーを解除する（ステップＳ３１６）。続いて、コントローラ２１は、続くデータブロックを受け取り、記憶領域３１へのデータ書き込み処理を実行する（ステップＳ３１７）。このようにして、ライトコマンドを受け取ってからの一連の処理が行われる。
【０１２２】
以上詳述したように本実施形態によれば、シングルブロックライト及びマルチブロックライトそれぞれについて、メモリカード規格におけるタイムアウトスペック及びスピードクラススペックを満たすことが可能となる。
【０１２３】
また、シングルブロックライトにおいては、ＤＳ結合処理が必要になる場合には、データブロックを記憶領域３１には書き込まず、ランダムライトバッファ３２に書き込むようにしている。これにより、データの引越し処理を削減することができる。さらに、ランダムライトバッファ３２内の無効データを順次整理することで、ランダムライトバッファ３２の容量を小さく抑えることが可能となる。
【０１２４】
また、マルチブロックライトにおいては、ビジー期間中にＤＳ結合処理を分割して行うことで、タイムアウトスペックを満たしつつ各データブロックの受け入れ処理を行うことができる。さらに、デュアルページシフト方式を用いることで、データ引越し量を低減することができる。これにより、データ引越しにかかる時間を低減することができる。
【０１２５】
本発明は、上述した実施形態に限定されるものではなく、その要旨を逸脱しない範囲内で、構成要素を変形して具体化できる。また、実施形態に開示されている複数の構成要素の適宜な組み合わせにより種々の発明を構成することができる。例えば、実施形態に開示される全構成要素から幾つかの構成要素を削除してもよいし、異なる実施形態の構成要素を適宜組み合わせてもよい。
【図面の簡単な説明】
【０１２６】
【図１】本発明の一実施形態に係るホスト装置１０及びメモリカード２０の構成を示すブロック図。
【図２】ページシフト方式におけるデータ書き換え動作を説明するための概略図。
【図３】物理ブロックＡと物理ブロックＢとの２つの領域に分けて格納されたデータの結合処理を説明するための概略図。
【図４】シングルブロックライト動作を示すタイミングチャート。
【図５】シングルブロックライト動作を説明するための概略図。
【図６】ランダムライトバッファ３２に書き込まれたデータとランダムライトバッファ３２のバッファリング可能な有効データ数との関係を示す図。
【図７】ランダムライトバッファ３２のガベージコレクション動作を説明するための概略図。
【図８】具体的なガベージコレクション動作を説明するための概略図。
【図９】ランダムライトバッファ３２に含まれるブロックの空きエントリー数を説明するための図。
【図１０】マルチブロックライト動作を示すタイミングチャート。
【図１１】マルチブロックライト動作の他の例を示すタイミングチャート。
【図１２】デュアルページシフト方式におけるデータ書き換え動作を説明するための概略図。
【図１３】図１２に続くデュアルページシフト方式におけるデータ書き換え動作を説明するための概略図。
【図１４】ライトコマンドに関する一連の動作を示すフローチャート。
【図１５】図１４に続くライトコマンドに関する一連の動作を示すフローチャート。
【符号の説明】
【０１２７】
１０…ホスト装置、２０…メモリカード、２１…コントローラ、２２…ＮＡＮＤ型フラッシュメモリ、２３…ホストインターフェース回路、２４…ＭＰＵ、２５…ＲＯＭ、２６…ＲＡＭ、２７…メモリインターフェース回路、２８…バス、２９…ＲＡＭバッファ、３１…記憶領域、３２…ランダムライトバッファ。
【図１】
2008152464.tif 000003
【図２】
2008152464.tif 000004
【図３】
2008152464.tif 000005
【図４】
2008152464.tif 000006
【図５】
2008152464.tif 000007
【図６】
2008152464.tif 000008
【図７】
2008152464.tif 000009
【図８】
2008152464.tif 000010
【図９】
2008152464.tif 000011
【図１０】
2008152464.tif 000012
【図１１】
2008152464.tif 000013
【図１２】
2008152464.tif 000014
【図１３】
2008152464.tif 000015
【図１４】
2008152464.tif 000016
【図１５】
2008152464.tif 000017