(57)【要約】【課題】複数のフラッシュＲＯＭを接続している構成において、フラッシュＲＯＭ間のデータ転送時間を短くできるフラッシュＲＯＭ制御装置を提供する。【解決手段】データの書込み及び読み込みの制御を各グループの複数のページを一組としたクラスタ単位で行い、各グループに対して、データバスを共有接続し、Ｒ／Ｗストローブ信号と制御信号をグループ毎に個別に接続し、  グループ１とグループ２間でクラスタ単位でデータ転送を行う時に、転送元と転送先の両方に別々に制御されたＲ／Ｗストローブ信号を出して転送元から転送先に対して直接データ転送されるようにするとともに、転送されたデータがグループを反転されたものであることを示す反転情報を転送先と、フラッシュＲＯＭ制御装置内に設けられた論理→物理アドレス変換テーブルとに記憶する。【選択図】  図１０
2005115562.tif 000002
【特許請求の範囲】
【請求項１】
データ書込み最小単位がページ単位である複数のフラッシュＲＯＭに接続されるフラッシュＲＯＭ制御装置において、
データの書込み及び読み込みの制御を各グループの複数のページを一組としたクラスタ単位で行い、各グループに対して、データバスを共有接続し、Ｒ／Ｗストローブ信号等の制御信号をグループ毎に個別に接続し、
第１のグループから第２のグループに対してクラスタ単位でデータ転送を行う時に、転送元と転送先の両方に別々に制御されたＲ／Ｗストローブ信号を出して転送元から転送先に対してバッファを経由することなくデータ転送されるようにするとともに、転送されたデータがグループを反転されたものであることを示す反転情報を記憶することを特徴とするフラッシュＲＯＭ制御装置。
【請求項２】
前記クラスタ単位で論理アドレスを物理アドレスに変換するための論理→物理変換テーブルを備え、前記データ転送を行う時に転送先となる論理アドレスの部分に前記反転情報を記憶し、読み込み時に、読み込み対象の論理アドレスの部分に前記反転情報が記憶されていると、グループの読み込み順を書込み時と逆にすることを特徴とする請求項１記載のフラッシュＲＯＭ制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＮＡＮＤ型フラッシュＲＯＭ等のフラッシュＲＯＭとパーソナルコンピュータ（以下、ＰＣという）との間に配置されるフラッシュＲＯＭ制御装置に関する。
【背景技術】
【０００２】
ＮＡＮＤ型フラッシュＲＯＭは、その構造上、データの書込みや読み込みに時間がかかり、また、データの上書きが不可能であるため、データ書換えの際にはブロックと呼ばれる単位で一括消去した上で、変更したデータを再度書き込みしなければならないという特性がある。
【０００３】
そこで、データ書込みや読み込み時間を短くすることについて複数の方法が提案されている。例えば、複数のフラッシュＲＯＭを接続して、一方のフラッシュＲＯＭに書込みを開始した段階で、その完了を待つことなく、他方のフラッシュＲＯＭへの書込みを開始するようにして、データの書込みを交互に行うことにより全体としてのスループットを向上させるようにしたものがある（例えば、特許文献１参照）。
【０００４】
また、ホストとフラッシュＲＯＭ間にフラッシュＲＯＭ制御装置を配置し、この制御装置に論理アドレスと物理アドレスを変換するための論理→物理変換テーブルを設けるとともに、適当なタイミングでガーベージコレクションを行う方法が提案されている。この方法では、フラッシュＲＯＭ制御装置内に配置される論理→物理変換テーブルによって、同一論理アドレスに対するデータの書換えが発生した場合に、その発生の度に物理アドレスを変えていくことができ、これにより高速化とともに書き換え回数が有限であるフラッシュＲＯＭの長寿命化を図り、さらに適宜行われるガーベージコレクションによってフラッシュＲＯＭ内の不要なデータを一定のタイミングで消去することができるようにしている（例えば、特許文献２参照）。
【特許文献１】特開平６−３０９８６０号公報
【特許文献２】特開２００２−３２２５６号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかし、複数のフラッシュＲＯＭを接続している構成において、例えば、ガーベージコレクションを行う場合等、一方のフラッシュＲＯＭから他方のフラッシュＲＯＭにデータ転送を行う状況においては、上記いずれの方法においても、一方のフラッシュＲＯＭからデータを読み出してＲＡＭ内に記憶し、これを他方のフラッシュＲＯＭに書き込むという手順が必要であるため、トータルのデータ転送時間が長くなり、システムのスループットが十分に改善されない不都合がある。
【０００６】
そこで、本発明は、複数のフラッシュＲＯＭを接続している構成において、フラッシュＲＯＭ間のデータ転送時間を短くできるフラッシュＲＯＭ制御装置を提供することを目的とする。
【課題を解決するための手段】
【０００７】
本発明は、データ書込み最小単位がページ単位である複数のフラッシュＲＯＭに接続されるフラッシュＲＯＭ制御装置において、
データの書込み及び読み込みの制御を各グループの複数のページを一組としたクラスタ単位で行い、各グループに対して、データバスを共有接続し、Ｒ／Ｗストローブ信号等の制御信号をグループ毎に個別に接続し、
第１のグループから第２のグループに対してクラスタ単位でデータ転送を行う時に、転送元と転送先にそれぞれ別々に制御されたＲ／Ｗストローブ信号を出して転送元から転送先に対してバッファを経由することなくデータ転送されるようにするとともに、転送されたデータがグループを反転されたものであることを示す反転情報を記憶することを特徴とする。
【０００８】
今、第１のクラスタから第２のクラスタに対して、両方のグループのフラッシュＲＯＭに同時にそれぞれＲ／Ｗストローブ信号を出すことによりデータ転送をバッファを介さずに直接行う場合を想定する。クラスタは、各グループの複数のページを一組とした単位であるため、クラスタからクラスタへのデータ転送時には、転送元のクラスタと転送先のクラスタにおいて左右のページが逆になってしまう（図１１参照）。すなわち、転送元のクラスタのグループ１に属するページ群は、転送先のクラスタのグループ２のページ群となり、転送元のクラスタのグループ２に属するページ群は、転送先のクラスタのグループ１のページ群となる。このようなデータ転送は、例えば、ガーベージコレクションの処理を行う時などにおいて生じる。
【０００９】
そこで、本発明では、読み込み時にページ反転したデータをホストに転送しないように、反転情報を記憶しておく。この反転情報は、フラッシュＲＯＭの該当ページ自体に記憶しておくとともに、論理→物理変換テーブルを使用してクラスタ単位で管理を行う時には、このテーブルにも記憶しておく。
【００１０】
本装置の初期化時に、フラッシュＲＯＭに記憶されている反転情報を読み出して論理→物理変換テーブルに記憶する。
【００１１】
読み込み時に、読み込み対象の論理アドレスの部分に前記反転情報が記憶されていると、グループの読み込み順を書込み時と逆にする。この制御により、読み込みを正しく行えることになる。
【００１２】
なお、フラッシュＲＯＭ間でデータ転送を行うことが生じる場面は、ガーベージコレクション処理を行う時や、ホストからの指示に基づいて、クラスタの一部を書き換える必要がある場合等に生じる。
【発明の効果】
【００１３】
本発明によれば、ガーベージコレクションの処理を行う時などにおいて、第１のグループから第２のグループにデータ転送を行う必要が生じたとき、高速にデータ転送が可能であり、且つ、反転情報を同時に記憶されるために、転送後のデータ読み込みは、矛盾なく行うことが出来る。
【発明を実施するための最良の形態】
【００１４】
図１は、本発明の実施形態であるフラッシュＲＯＭ制御装置の構成図である。
【００１５】
フラッシュＲＯＭ制御装置１は、ホストＩ／Ｆ１０を介してホストに（パーソナルコンピュータ）２と接続され、ホスト２からの要求に応じてフラッシュＲＯＭ３に対するデータの読み書きを行う。
【００１６】
フラッシュＲＯＭ制御装置１は、フラッシュＲＯＭＩ／Ｆ１１を介して、１つ以上のフラッシュＲＯＭ３と接続されている。このフラッシュＲＯＭ制御装置１では、フラッシュＲＯＭ３との接続ラインにおいて、データバスを共有し、制御信号の全て、もしくは一部を、それぞれのフラッシュＲＯＭに別々に接続することによって、複数のフラッシュＲＯＭと接続することが可能である。後述（図１０参照）の様に、各フラッシュＲＯＭはグループ化されている。
【００１７】
フラッシュＲＯＭ制御装置１は、上記Ｉ／Ｆの他、ＣＰＵ、ＲＯＭ、ＲＡＭ、データ転送バッファ、シーケンサ及びＥＣＣ付加／訂正の各要素を備えている。
【００１８】
フラッシュＲＯＭ３は、ブロック消去型のＮＡＮＤ型フラッシュＲＯＭで構成され、データの消去をブロック単位で行う。また、バイトもしくはワード単位でアクセスするランダムアクセス方式ではなく、ページ単位でアクセスするシーケンシャルアクセス方式を採用したものである。
【００１９】
フラッシュＲＯＭ３の読み込み時には、以下の動作を行うものとする。
【００２０】
図２に示すように、最初のコマンド発行時に、リードコマンド（１）を発行し、ページアドレス、カラムアドレスを指定して、リードコマンド（２）を発行する。すると、フラッシュＲＯＭはＢＵＳＹ状態となり、ここで待ち時間が発生する。ＢＵＳＹ状態が解除されると、フラッシュＲＯＭ内のバッファにページデータが準備されているので、本装置によってこのデータを読み込む。
【００２１】
フラッシュＲＯＭ３への書き込み時には、以下の動作をするものとする。
【００２２】
図３に示すように、最初のコマンド発行時に、データ入力コマンドを発行し、続いてページアドレス、カラムアドレスを指定する。次に書き込むページデータをフラッシュＲＯＭへ転送し、図中のＡでプログラムコマンドを発行する。するとフラッシュＲＯＭはＢＵＳＹ状態となり、ここで待ち時間が発生する。フラッシュＲＯＭ内での書き込み動作が終了すると、ＢＵＳＹ状態が解除され、本装置では図中のＢでリードステータスコマンドを発行し、書き込み結果（図中のステータス）を読み込み、エラー判定を行う。
【００２３】
フラッシュＲＯＭ３は、消去単位であるブロック単位、及びブロック単位よりも小さな単位（管理単位）であるクラスタ単位、及びフラッシュＲＯＭへのコマンドごとの読み書きや書き込み単位であるページ単位、及びホストからの要求のある論理アドレス（ＬＢＡ）の単位であるセクタ単位で、制御と管理が行われる。これらの単位についての関係は以下の通りである。
【００２４】
単一もしくは複数のセクタによりページが構成される。
【００２５】
単一もしくは複数のページによりクラスタが構成される。
【００２６】
単一もしくは複数のクラスタによりブロックが構成される。
【００２７】
単一もしくは複数のブロックによりフラッシュＲＯＭ３が構成される。
【００２８】
セクタは、５１２バイトのデータと１６バイトの冗長部とで構成される。
【００２９】
セクタは、２つのＥＣＣ単位と冗長部で構成される。ＥＣＣ単位とは、２５６バイトのデータと、そのデータに対してランダムな１ビットのエラー訂正可能な４バイトのＥＣＣ情報の集合体である。したがって、１セクタ当たり（それぞれのＥＣＣ単位において）２ビットまでのランダムエラーを訂正できる。冗長部には、クラスタ情報等の管理情報が含まれている。
【００３０】
通常、クラスタ内には複数のセクタが存在するため、複数の管理情報が含まれている。そのため、多重化された管理情報を取得するため、高信頼性のある管理情報を得ることができる。
【００３１】
セクタ内の冗長部に書き込むデータは、前記の通り多重化してあるために、同じデータを何度も書き込むことになる。本装置では、ハードウェアのレジスタに一度設定するだけで、フラッシュＲＯＭへの転送時に自動的に付加することによって、ソフトウェアのオーバーヘッドを減少させ、高速化している。
【００３２】
本装置では、フラッシュＲＯＭへのデータ転送時にＥＣＣ情報を付加し、フラッシュＲＯＭからのデータ転送時にＥＣＣ情報を読み込み自動的にエラー訂正を行うことによって高信頼性を確保している。
【００３３】
本装置では、データ読み込み時において、データをホスト側に転送する時、図５に示す処理を行う。同図は、従来のデータ転送のタイムチャートと本装置でのデータ転送のタイムチャートを示している。
【００３４】
すなわち、従来の方式では、５１２バイトのデータと冗長部を完全に分離して記憶されていたために、５１２バイトのデータに対するＥＣＣ情報は、５１２バイトのデータを読み込んだ後に取得され、その後、ＥＣＣによるエラーの判別／訂正が行われ、さらにその後に、ホストへのデータ転送が行われていた。
【００３５】
これに対し、本装置では、２５６バイトごとにＥＣＣ情報を書き込んでいるために、Ｄａｔａ１と、それに組になって記憶されるＥＣＣ情報１とを読み込んだ後、そのＥＣＣによるエラーの判別／訂正を行い、ホストへのデータ転送を行う。そして、Ｄａｔａ１のデータ転送を行っている時に、次のデータであるＤａｔａ２とＥＣＣ情報２の読み込みを同時に行う。これにより、データの高速な読み込みが可能になる。
【００３６】
本装置では、ＲＡＭ内に、論理クラスタアドレス（本発明の論理アドレス）からフラッシュＲＯＭ内の物理クラスタ番号（本発明の物理アドレス）に変換するための論理→物理変換テーブルを備えている。ホスト２からの読み込み要求があった場合に、このテーブルを参照して物理クラスタ番号を獲得する。ホスト２からの書込み要求があった場合には、後述の未使用物理クラスタ番号テーブルを参照して未使用物理クラスタ番号を獲得し、この物理クラスタに対してクラスタデータを書き込む。そして、各テーブルの更新を行う。なお、本装置では、ブロック消去型のフラッシュＲＯＭを使用しているが、書き込みを行う前にブロック消去を行うシーケンスは必要ない。上記論理→物理変換テーブルを使用することによって、ホスト２から書き込み対象となるセクタ単位のＬＢＡを含む論理クラスタアドレスに対応する物理クラスタ番号を決定し、この物理クラスタ番号に対する書き込みを行い、同時に論理→物理変換テーブルを更新する。なお、書き込み対象となる物理クラスタ番号は、フラッシュＲＯＭ内の空きクラスタ領域である。
【００３７】
本装置では、世代番号管理（後述）等を行うための物理→論理変換テーブルを備えている。この物理→論理変換テーブルは、フラッシュＲＯＭ３の物理アドレス（物理クラスタ番号）を論理クラスタアドレス（論理アドレス）に変換するためのテーブルである。
【００３８】
図６は、上記のテーブルを示している。
【００３９】
図６において、論理→物理変換テーブルＴ１は、ホスト側で管理される論理クラスタアドレスをフラッシュＲＯＭ３の物理クラスタ番号に変換し、物理→論理変換テーブルＴ２は、上記物理クラスタ番号を論理クラスタアドレスに変換する。
【００４０】
本装置では、さらにブロックステータステーブル（ＢＳＴ）Ｔ３を備えている。このブロックステータステーブルＴ３は、ブロック内の有効クラスタ（本発明の有効エリアに相当）の数、不良ブロック状態、消去状態を保持している。
【００４１】
図７は、各テーブルの記憶内容について説明する図であり、説明を分かりやすくするために非常に単純化されたものとしている。
【００４２】
本装置は、ホストからの問い合わせに対してフラッシュＲＯＭの物理的な最大容量よりも少ない容量を報告する。図７では、フラッシュＲＯＭの最大物理クラスタ番号（番地）が７であるため、これよりも小さい値をホスト側に報告する。図では、ホスト側に対して、最大番地が５であることを知らせる。すなわち、論理→物理変換テーブルＴ１には０〜５のアドレスが用意され、これにより、ホスト側には０〜５のアドレス空間が準備される。また、物理→論理変換テーブルＴ２は、フラッシュＲＯＭと同じアドレス空間を持つものが用意される。ブロックステータステーブルＴ３は、フラッシュＲＯＭのブロック数分だけ用意される。ブロック数は、ここでは４（０〜３）であり、各ブロックは２つのクラスタで構成されている。
【００４３】
図７において、最初に、ホスト側でアドレス０に「Ａ」を書き込むコマンドを発行すると、論理→物理変換テーブルＴ１ではフラッシュＲＯＭの空きクラスタ番地である０と対応づけ、さらに、世代番号が初期値１であることを記憶する。この結果、論理→物理変換テーブルＴ１のアドレス０には「０：１」（０はフラッシュＲＯＭの物理クラスタ番号０を示し、１は世代番号の初期値を示す）が記憶される。また、同時に、物理→論理変換テーブルＴ２のアドレス０には論理クラスタアドレス０が記憶される。さらに、フラッシュＲＯＭの物理クラスタ番地０には、データＡが書き込まれるとともに、冗長部に「０：１」も記憶される。
【００４４】
次に、ホスト側において、ホスト側メモリのアドレス３にデータ「Ｂ」が書き込まれて書き込みコマンドが発行されると、フラッシュＲＯＭのクラスタ番号１にはデータ「Ｂ」が書き込まれるとともに、論理→物理変換テーブルＴ１の論理クラスタアドレス３には「１：１」（左側の１はフラッシュＲＯＭの物理クラスタ番号１を示し、右側の１世代番号の初期値を示す）が記憶される。また、物理→論理変換テーブルＴ２のアドレス１には論理クラスタアドレスの３が記憶される。また、フラッシュＲＯＭの物理クラスタ番号１には、上記データ「Ｂ」とともに、冗長部に「３：１」（３は論理クラスタアドレス、１は世代番号の初期値）が書き込まれる。
【００４５】
続いて、ホスト側においてアドレス０のデータを「Ｃ」に書き換える書き込みコマンドが発行されると、フラッシュＲＯＭの空き物理クラスタ番号２のエリアにデータ「Ｃ」が書き込まれる。また、論理→物理変換テーブルＴ１の論理クラスタアドレス０は、「２：２」（最初の２は物理クラスタ番号、後ろの２は１つ増えた世代番号）に更新される。また、物理→論理変換テーブルＴ２のアドレス２には論理クラスタアドレスである０が記憶される。さらに、フラッシュＲＯＭの物理クラスタ番号２の冗長部には、「０：２」（０は論理クラスタアドレス、２は世代番号）が書き込まれる。
【００４６】
ブロックステータステーブルＴ３には、０〜３の４ブロック分のステータスが記憶されている。ステータスは、有効クラスタ数（ＦＦｈ、ＦＥｈ以外）、不良ブロック状態（そのブロックが不良であるかどうかを示す：ＦＥｈ）、消去状態（そのブロックが消去されて未使用状態にあるかどうか：ＦＦｈ）を含んでいる。最初は、ブロックステータステーブルＴ３の各アドレスにはＦＦｈが記憶され、消去状態（未使用状態）のステータスとなっている。データ「Ａ」がブロック０の物理クラスタ番号０に書き込まれると、アドレス０には「１」（有効クラスタ数が１であることを示す）が記憶される。次に、データ「Ｂ」がブロック０の物理クラスタ番号１に書き込まれると、「１」→「２」（有効クラスタ数が１から２に変わったことを示す）となる。さらに、データ「Ｃ」がブロック１の物理クラスタ番号２に書き込まれると、「２」→「１」（有効クラスタ数が１になったことを示す）となる。ブロックステータステーブルＴ３のアドレス１では、データ「Ｃ」がブロック１の物理クラスタ番号２に書き込まれると、「１」となり有効クラスタ数が１になったことが記憶される。後述のように、物理クラスタを無効化するための無効化処理が行われる時に、同時に有効クラスタのないブロックも検出されて、そのブロックに対する消去処理が行われるが、この検出のためにブロックステータステーブルＴ３の有効クラスタ数が参照される。なお、この時にブロックに対する消去処理が行われると、そのブロックに対応するエリアにはＦＦｈが記憶されて消去状態（未使用状態）に設定される。また、書込みエラー発生時等、ブロックが不良になった時には不良ブロックであるステータスＦＥｈが記憶される。
【００４７】
図７に示すように、本装置では、フラッシュＲＯＭの物理的な最大容量よりも小さな容量を事前にホスト側に通知しているために、常に書き込み可能な（消去済の）ブロックを確保するようにしている。この空きブロックを論理的な空きブロック数という。
【００４８】
次に、世代番号管理について説明する。
【００４９】
本装置において世代番号管理とは、論理クラスタアドレスに対するデータの更新が行われるたびに、その論理クラスタアドレスに対する物理クラスタ番号の変更回数を世代番号として割り振ることをいう。また、この割り振った世代番号が所定の最大値になった時に当該論理クラスタアドレスに対応する全ての物理クラスタ番号を無効化することをいう。
【００５０】
世代番号は、図７に示すように、論理→物理変換テーブルＴ１に記憶されるとともに、フラッシュＲＯＭの対応物理クラスタ番号エリアにも記憶される。そして、データの書換えを行う時の世代番号が前記最大値になった時に行われる無効化処理では、当該論理クラスタに対応する全ての物理クラスタ（当該論理クラスタアドレスに対応する全ての物理クラスタ番号のクラスタデータ）を無効にし、新たに、世代番号の最小値を割り振る。この処理を世代交代動作と称する。
【００５１】
世代番号の初期値は、各論理クラスタアドレス毎に同一の初期値であってもよいが、この初期値を適当に異ならせておくことによって、各クラスタの世代番号が同時に最大値に達するのを防ぐことができる。これにより、一時的な著しいスループットの低下を防ぐことができて、システムの安定性を確保できる。
【００５２】
図７において、フラッシュＲＯＭの冗長部に「×」が記憶されると、その物理クラスタは上記無効化処理によって無効になったことを示す。この無効化された物理クラスタに対しては、当然データが書き込まれることはなく、将来、その無効物理クラスタが含まれるブロック内の全てのクラスタが有効でなくなった時に、そのブロックが消去されて初期状態にされる。
【００５３】
以上の世代番号管理によって、データを書き込む前にブロックを消去する必要がなく、また、消去対象のブロックが分散化されることによって未使用クラスタへの逐次書き込みが可能となって高速化と長寿命化が実現できる。すなわち、従来の方法では、まず、ブロックを消去してからデータの書き込み処理に移るが、本装置ではデータの書き込みの前にブロックを消去しておく必要がないから、ブロック消去の完了を待つことなくホストからの要求を終了できることになり、これによりシステム全体としてのスループットが著しく向上する。また、空き領域の確保は、物理クラスタの無効化と有効クラスタがなくなった時の消去処理によって行われるために、ガーベージコレクション等の従来の空き領域確保のための処理に対し、処理時間が分散化され、且つ短時間で行うことが可能である。
【００５４】
上記図７を参照しての説明では、説明を単純化するために、データを書き込む時の物理クラスタの選択を、クラスタ番号の小さい方から順に選ぶようにしている。そして、選択した物理クラスタが無効の時（×が記憶されている。）に、次の番号のクラスタを選択する。しかし、実際にはこのような方法では、無効化処理を繰り返すことによって選択される物理クラスタが歪なものになってしまう。すなわち、同一論理クラスタアドレスに対応する物理クラスタ番号は同一のブロック内に存在することが望ましいといえるが、書き込みのための空き物理クラスタを単に番号の小さいものから順に選んでいくだけでは、無効化処理を繰り返した時に同一論理クラスタアドレスに対応する物理クラスタが複数のブロック間に股がって歪に存在することになりうる。
【００５５】
そこで、本装置では、図７に示すように、未使用物理クラスタ番号テーブルＴ４を設けている。このテーブルＴ４は、未使用物理クラスタのあるブロック番号と、そのブロック番号に対する未使用クラスタ番号を示している。図７に示す例では、ブロック１については物理クラスタ番号３が未使用物理クラスタであることを示し、ブロック２については、物理クラスタ番号４及び５が未使用物理クラスタであることを示している。このテーブルＴ４は、フラッシュＲＯＭに対するデータの書き込み処理及び消去処理が行われた時に更新される。このテーブルＴ４を使用して、新たにデータを書き込む時の物理クラスタを選択すれば、同一論理クラスタアドレスに対応する物理クラスタ番号をなるべく多く同一ブロックに割り当てることが可能になる。
【００５６】
本装置においては、上述のようにフラッシュＲＯＭの管理単位を、消去単位であるブロック単位よりも小さく、且つ、フラッシュＲＯＭへの読み込み又は書き込み単位であるページ単位よりも大きいクラスタ単位としている（勿論、ホストからのコマンド発行時の単位であるセクタ単位よりも大きい）。このように、クラスタ単位で管理すると、ブロック単位で管理した時の書換え時のオーバーヘッドが大きくなりすぎるのを防ぐことができ、反対に、ページ単位で管理した時の管理の煩雑さを避けることができる。すなわち、全体のスループットを向上するための丁度よい大きさがクラスタ単位である。
【００５７】
さらに、クラスタは、通常のＰＣで使用されるＦＡＴファイルシステムへの適合性が良くなる。すなわち、ＦＡＴファイルシステムでは、通常、データ領域はクラスタ単位でアクセスすることが知られているために、データ領域の開始セクタが、本装置のクラスタ境界と一致するようにし、また、本装置のクラスタサイズとファイルシステムにおけるクラスタサイズを一致するようにフォーマットを行えば、ＦＡＴファイルシステムとフラッシュＲＯＭの適合性が極めて良くなり、効率的なアクセスが可能となって高速化が可能となる。
【００５８】
図８は、このように境界位置及びサイズを一致させた状態を示している。すなわち、フラッシュＲＯＭにおけるクラスタｍから、ファイルシステムにおけるデータクラスタが開始されるようにフォーマットパラメータを調整する。なお、図８においては、図中の管理領域が一般にクラスタサイズ以下のアクセスが発生するために、クラスタ０〜クラスタｍ−１については、本装置において更に小さいサイズでの管理を行うようにすると、高速化を更に促進できる。
【００５９】
図９は、本装置での書き込み時の高速化が実現される理由を示している。
【００６０】
ブロック管理を行う従来の方式では、図示のようにフラッシュＲＯＭから既存のブロックデータを読み込んだ後そのブロックの消去を行い、さらにそのブロックに対して新しいブロックデータの書き込みを行い書き込み完了待ちを行って終了する。
【００６１】
従来のブロック管理を行う方式では、最初にブロック消去を行う必要があるために書き込み時間が長時間になるのを避けることができない。そこで、ブロック消去をしなくてもよいように、論理→物理変換テーブルを使用し、且つクラスタ管理を行う方針が考えられる。このクラスタ管理では、最初にフラッシュＲＯＭ内の既存のクラスタデータを読み込んで新しいクラスタデータに更新した後書き込み、書き込みの完了を待ってから当該クラスタを無効化するための書き込みを行い、さらにその書き込み完了を待つ。しかしこの方式でも、既存のクラスタを無効化するための書き込み時間が必要である。これに対して、世代管理を行う本装置では、新しいクラスタデータを書き込み、その書き込み完了を待つか、又は必要な場合にフラッシュＲＯＭ内から既存のクラスタデータを読み込んだ後、新しいクラスタデータを書き込み、その書き込み完了を待つだけでよい。この世代管理を行うことによってデータの書き込みごとに既存クラスタの無効化処理を行う必要がなくなるため、書き込み時間が非常に高速化する。
【００６２】
次に、本装置の実施例について説明する。
【００６３】
図１０は第１の実施例の構成図である。この実施例では、フラッシュＲＯＭ１、及びフラッシュＲＯＭ２の２つをフラッシュＲＯＭ制御装置１に接続する。接続は、データバスを共通化し、Ｒ／Ｗ  Ｓｔｒｏｂｅ信号をそれぞれのフラッシュＲＯＭに接続する。また、Ｃｈｉｐ  Ｅｎａｂｌｅ信号が共通の制御信号として各フラッシュＲＯＭに接続されている。ここでは、フラッシュＲＯＭ１をグループ１、フラッシュＲＯＭ２をグループ２とする。データの書込み及び読み込みの制御は、上述の様にクラスタ単位で行われる。また、図１１に示すように、各クラスタは、各グループの複数のページを一組としている。ページは、フラッシュＲＯＭ制御装置１からの最小アクセス単位である。図１１のように割りつけることにより、物理クラスタ０のアクセス順序は、グループ１のページ０→グループ２のページ０→グループ１のページ１→グループ２のページ１というふうになる。なお、図１１において、反転クラスタとは、詳細については後述するように、グループ間のデータ転送を行った時に読出しの際にデータの順番が反転しないようにするための情報（反転クラスタ情報）が付加されたクラスタをいう。これについては後述する。
【００６４】
反転クラスタは、一方の物理クラスタから他方の物理クラスタにデータ転送するときに生じる。図１１に示す例では、物理クラスタは４つのページが構成されている。今、物理クラスタ１から物理クラスタ０にデータ転送することを考えると、図１１に矢印で示す様に、次の様にページ毎のデータ転送処理が行われる。
【００６５】
「物理クラスタ１：グループ２：ページ２」→「物理クラスタ０：グループ１：ページ０」
「物理クラスタ１：グループ２：ページ３」→「物理クラスタ０：グループ１：ページ１」
「物理クラスタ１：グループ１：ページ２」→「物理クラスタ０：グループ２：ページ０」
「物理クラスタ１：グループ１：ページ３」→「物理クラスタ０：グループ２：ページ１」
となる。何故なら、グループ１、２には同時にそれぞれＲ／Ｗ  Ｓｔｒｏｂｅ信号が出されており、グループ２が転送元のときは、グループ２を転送先とすることは出来ないからであり、その場合には必ずグループ１が転送先となるからである。図に点線で示すような同じグループ内でのデータ転送は出来ないのである。
【００６６】
したがって、以上のデータ転送が行われると、物理クラスタ０は反転クラスタとなる。
【００６７】
したがって、図１１において物理クラスタ０が反転クラスタの場合、アクセス順序は、グループ２のページ０→グループ１のページ０→グループ２のページ１→グループ１のページ１となる。この順序でのみ、物理クラスタを正しい順で読み込むことが出来る。
【００６８】
本装置では、読み込み時においては以下の例のように、２つのグループを交互に転送することによって、一方のフラッシュＲＯＭの待ち時間の間に他方のフラッシュＲＯＭのデータを転送させる制御を行う。
【００６９】
（１）グループ１にリードコマンドを発行する。
【００７０】
（２）グループ２にリードコマンドを発行する。
【００７１】
（３）グループ１のデータをホストに転送する。転送終了後、グループ１に次のリードコマンドを発行する。
【００７２】
（４）グループ２のデータをホストに転送する。転送終了後、グループ２に次のリードコマンドを発行する。
【００７３】
（５）（３）に戻る。
【００７４】
書き込み時においては、以下の例のように２つのグループを交互に転送することによって、一方のフラッシュＲＯＭの待ち時間の間に他方のフラッシュＲＯＭのデータを転送する制御を行う。
【００７５】
（１）グループ１にデータ入力コマンドを発行し、書き込みデータを転送し、書き込みコマンドを発行する。
【００７６】
（２）グループ２にデータ入力コマンドを発行し、書き込みデータを転送し、書き込みコマンドを発行する。
【００７７】
（３）グループ１の書き込み完了待ちをし、エラー判定を行う。正常に書き込みが完了すれば、データ入力コマンドを発行し、書き込みデータを転送し、書き込みコマンドを発行する。
【００７８】
（４）グループ２の書き込み完了待ちをし、エラー判定を行う。正常に書き込みが完了すれば、データ入力コマンドを発行し、書き込みデータを転送し、書き込みコマンドを発行する。
【００７９】
（５）（３）に戻る。
【００８０】
ガーベージコレクション時のクラスタデータの転送時には、従来の方式では、クラスタデータを一旦ＲＡＭ等の記憶部に読み込んでから再び書き込む必要があった。本装置では、別々に制御されたＲ／Ｗ  Ｓｔｒｏｂｅ信号を両方のグループに同時に送り、一方をリード、他方をライトで動作させることによって、１回の動作で読み込みと書き込みを同時に行うことができる。この機能をデータコピー機能という。
【００８１】
例えば、図１１に示す例では、物理クラスタ１のグループ２のページを転送するときは、グループ２がリード、グループ１がライトモードとなる。また、物理クラスタ１のグループ１のページを転送するときは、グループ２がリード、グループ１がライトモードとなる。
【００８２】
これにより、グループ間のデータ転送を高速化することが可能である。ただし、先に述べたように、データの転送に際してはクラスタデータが反転クラスタかどうかによって読出しの順番を変えることが必要になる。すなわち、グループ間のデータ転送時においては、グループ１→グループ２、もしくはグループ２→グループ１の転送を行うので、コピーしたクラスタデータは、コピー元のクラスタデータに対してページごとに順番が反転してしまう。そこで、転送時には、反転クラスタであることを示すクラスタ情報を記録し、読出しの際にはグループの選択時に他方のグループを選択するようにする。
【００８３】
なお、グループ１とグループ２の両方のブロックを消去する際においては、ほぼ同時にコマンドを発行できるために、１回の消去コマンドの実行時間で２つのブロックを同時に消去することが可能である。
【００８４】
次に、フラッシュＲＯＭ制御装置１の具体的な動作について図１２以下を参照して説明する。
【００８５】
図１２は、ホストからリードコマンドが発行された時の動作を示している。ステップ１００→・・・→ステップ１０７と進み、ステップ１０７において、コマンド発行に該当するグループを選択し、フラッシュＲＯＭへ該当ページ番号を伴ったリードコマンドを発行する。このとき、論理→物理変換テーブルのリード対象とする論理アドレス冗長部に、反転クラスタ情報が記憶されているかどうかで、選択するグループを変えることになる。また、ステップ１０８においてデータ転送を行うためにデータ転送セクタ数を保存しておく。
【００８６】
ステップ１０８において、データ転送に該当するグループを選択し、装置内のシーケンサを起動してフラッシュＲＯＭからのデータをホストＩ／Ｆを介してホストに転送する。ただし、このデータ転送に該当するグループは、前記のコマンド発行に該当するグループとは異なるもう一方のグループである。なお、フラッシュＲＯＭへのコマンドが発行されてないグループであればデータ転送は行わない。フラッシュＲＯＭへのコマンドが発行されているかどうかは、ステップ１０７で保存したデータ転送セクタ数を参照して判断する。
【００８７】
ステップ１１２では、ページ番号のインクリメント、及びグループ番号の切り換えを次のように行う。
【００８８】
グループ番号が１であれば２に変える。
【００８９】
グループ番号が２であれば１に変える。
【００９０】
ステップ１１３では、クラスタ内の転送が一度終了したので、次の転送からはクラスタの先頭からの転送であると判断し、クラスタ内オフセットページ数、クラスタ内オフセットセクタ数、ページ内オフセットセクタ数を０にしておく。
【００９１】
ステップ１０７〜１１２にて、グループ毎に処理を行うことにより、一方のフラッシュＲＯＭがＢｕｓｙ状態であっても、他方のフラッシュＲＯＭを制御できるため、高速に読み込むことができる。
【００９２】
図１３はホストからライトコマンドが発行された時の動作を示す。
【００９３】
ステップ２０２において、ステップ２００で算出したクラスタ内オフセットページ数、クラスタ内オフセットセクタ数、ページ内オフセットセクタ数、総転送セクタ数から、これから書き込もうとするデータが該当するクラスタ全体を書き換えるかどうかを判断する。
【００９４】
ステップ２０４〜２０９は、クラスタ内の一部を書き換える際に本装置内のＲＡＭにデータを退避する手順、もしくはダミーデータを作成する手順と、ＲＡＭ内で更新したデータを再びフラッシュＲＯＭ内に書き込む手順を示している。なお、ステップ２０５でソースクラスタのクラスタデータをＲＡＭへ保存する時に、読み込み完了待ちの時に別のページのフラッシュＲＯＭに対して書き込みコマンドを発行しておき、ＲＡＭ上で更新されたデータをそのコマンド発行したページのフラッシュＲＯＭに書き込むことにより、高速の書き込みが可能となる。
【００９５】
ステップ２１３ではソースブロックの有効クラスタ数が１かどうかを判定し、有効クラスタ数が１であれば当該ソースブロックに対するブロック消去処理を行い、ブロックステータステーブル及び物理→論理変換テーブルの更新を行う。また、ソースブロックの有効クラスタ数が１以外であれば、ステップ２１５においてブロックステータステーブル及び物理→論理変換テーブルの更新を行う。
【００９６】
図１４は、図１３のステップ２１１の動作を示すフローチャートである。ホストＩ／ＦからフラッシュＲＯＭへのクラスタデータの書き込みを行う時は、図１３のステップ２０２に示すように、書き込むデータがクラスタ全体を書き換えるデータの場合である。
【００９７】
ステップ３０２において、これから書き込もうとするクラスタに割り当てられているクラスタの世代番号に１を加算した値を書き込みクラスタに割り当てる。しかし、その前にステップ３００において、世代番号が最大値に達しているかどうかを判断し、最大値に達する場合にはステップ３０１において世代交代処理を行う。
【００９８】
世代交代処理とは、これから書き込もうとする論理クラスタアドレスに割り当てられている物理クラスタを全て消去もしくは廃棄する処理である。この処理を行うことによって、これから書き込もうとするクラスタには、世代番号の初期値が割り当てられることになる。
【００９９】
ステップ３０６においては、これから書き込もうとするグループに対してＲｅａｄｙ状態になっていることを確認する。Ｒｅａｄｙ状態になっていなければＲｅａｄｙ状態になるまで待機する。
【０１００】
ステップ３０７においては、これから書き込もうとするグループに対してデータ入力コマンドを送出し、シーケンサによりホストＩ／ＦからフラッシュＲＯＭへデータを転送する。転送し終われば、フラッシュＲＯＭへプログラムコマンドを発行する。ステップ３０９では、ステップ３０６で選択されているグループを切り換える。この実施例では、フラッシュＲＯＭが２つであるために、グループ番号２であればステップ３０７で発行するデータ入力コマンドに伴って発行されるページアドレスをインクリメントする。
【０１０１】
ステップ３０６〜３０９での一連の処理にてグループごとに処理を行うことにより、一方のフラッシュＲＯＭがＢｕｓｙ状態の時でも、他方のフラッシュＲＯＭを制御することができる。このため書き込みを高速化することができる。
【０１０２】
図１５は、ＲＡＭからフラッシュＲＯＭへのクラスタデータの書き込み手順を示すフローチャートである。この動作は、図１３のステップ２０９で行われ、書き込むデータがクラスタの一部に書き換える場合に選択される。
【０１０３】
ステップ４０２において、これから書き込もうとするクラスタに割り当てられているクラスタの世代番号に１を加算した値を書き込みクラスタに割り当てる。しかし、その前にステップ４００において、最大値に達するかどうかを判断し、最大値に達する場合にはステップ４０１において世代交代処理を行う。
【０１０４】
世代交代処理については前述した通りである。
【０１０５】
ステップ４０６では、これから書き込もうとするグループに対してＲｅａｄｙ状態になっていることを確認する。Ｒｅａｄｙ状態になっていなければＲｅａｄｙ状態になるまで待機する。
【０１０６】
ステップ４０７では、これから書き込もうとするグループに対して、データ入力コマンドを送出し、シーケンサによりＲＡＭからフラッシュＲＯＭへデータを転送する。転送し終わればフラッシュＲＯＭへプログラムコマンドを発行する。
【０１０７】
ステップ４０９では、ステップ４０６で選択されているグループを切り換える。この実施例では、フラッシュＲＯＭが２つであるためにグループ番号２であれば、ステップ４０７で発行するデータ入力コマンドに伴って発行されるページアドレスをインクリメントする。
【０１０８】
ステップ４０６〜４０９での一連の処理にて、グループごとに処理を行うことにより、一方のフラッシュＲＯＭがＢｕｓｙ状態の時でも、他方のフラッシュＲＯＭを制御することができる。このため、書き込みの高速化を図ることができる。
【０１０９】
図１６は、ソースクラスタのデータをＲＡＭに保存する手順を示すフローチャートである。この動作は、図１３のステップ２０５で実行される。
【０１１０】
ソースクラスタのデータ（クラスタデータ）を一旦ＲＡＭに保存するのは、ＲＡＭに保存した後クラスタデータを更新して再びフラッシュＲＯＭへ書き込むためである。
【０１１１】
ステップ５０２において、算出されたページアドレスを伴うリードコマンドを、ステップ５０３にて発行しておく。
【０１１２】
ステップ５０５にてデータ転送中であればデータ転送完了を待つ。この時に、データ転送エラーもしくはデータエラー（ＥＣＣにより誤り訂正不可能なエラー）が発生した場合は、ステップ５９２へ移行しエラー終了する。
【０１１３】
ステップ５０５にて、まずグループａを選択しシーケンサを起動してデータ転送を行う。
【０１１４】
グループａのフラッシュＲＯＭは、ステップ５０３もしくは前回のステップ５０５にて既にリードコマンドが発行されているために、シーケンサがＲｅａｄｙ状態になるのを待った後データ転送を行う。
【０１１５】
次にステップ５０６にて、グループｂを選択し、シーケンサを起動してデータ転送を行う。
【０１１６】
グループｂのフラッシュＲＯＭは、ステップ５０３もしくは前回のステップ５０６において既にリードコマンドが発行されているために、シーケンサがＲｅａｄｙ状態になるのを待った後データ転送を行う。
【０１１７】
ステップ５０３〜５０８の一連の処理にて、グループごとに処理を行うことによって、一方のフラッシュＲＯＭがＢｕｓｙ状態の時でも、他方のフラッシュＲＯＭを制御することができる。これによって高速処理が可能になる。
【０１１８】
図１７は、書き込みエラー処理を示すフローチャートである。この書き込みエラー処理は、図１３のステップ２１９で行われる処理である。
【０１１９】
ステップ６０２〜６０４において、未使用クラスタ番号を取得するが、この未使用クラスタ番号を取得するのは図７に示す未使用物理クラスタ番号テーブルＴ４からである。ステップ６０２の未使用クラスタ番号リストは、このテーブルＴ４を示している。
【０１２０】
もし、未使用クラスタ番号が見つからない場合には、本装置を読み込み専用モードに切り換え、これ以上書き込みが出来ないようにするとともに、読み込みを許可するモードとする。また、ホストからの書き込み要求の処理中であれば、ホストに対しては書き込みエラーを報告する。
【０１２１】
ステップ６０７においては、本装置のフラッシュＲＯＭ間のコピー機能を使用し、書き込みエラーの発生したブロック内の有効クラスタの内容を正常な未使用ブロックにコピーする。既に述べたように、このコピーはフラッシュＲＯＭ間で直接行われるために非常に高速である。
【０１２２】
図１８は、新しい書き込みクラスタ番号を取得する動作を示すフローチャートである。この動作は、図１３のステップ２１６で実行される。
【０１２３】
ステップ７００において、まず、未使用物理クラスタ番号テーブルＴ４（未使用クラスタ番号リスト）から、新しい書き込みクラスタ番号を取得するように試みる。こうすることにより、その都度、ブロックステータステーブルＴ３を検索しなくても良くなるために処理の高速化が図れる。
【０１２４】
ステップ７００〜７０１において、未使用クラスタ番号が取得できなければ、ブロックステータステーブルＴ３において消去済みブロックを検索する。
【０１２５】
ステップ７０２〜７０３において、消去済みブロックが検索できない、もしくは規定未満の消去済みブロックしかなければ、後述のガーベージコレクション処理を行う。
【０１２６】
ステップ７０６において、これまでの処理で未使用クラスタが見つからなければ、本装置を読み込み専用モードに切り換え、これ以上書き込みができないようにするとともに、読み込みを許可する。この場合、ホストからの書き込み要求の処理中であれば、ホストに対しては書き込みエラーを報告する。
【０１２７】
図１９は世代交代処理を示す。
【０１２８】
世代交代処理は物理→論理テーブルＴ２を利用する。すなわち、ステップ９００において、ブロックステータステーブルＴ３より、ブロック内の有効クラスタ数もしくはブロックステータスを取得する。なお、ブロックステータステーブルＴ３には、通常ブロックの場合有効クラスタ数が格納され、特殊ブロック（未使用ブロック、不良ブロック等）の場合、ブロックステータスが格納されている。  次に、ステップ９０１において、特殊ブロックかどうかを判定し、特殊ブロックの場合はステップ９０１→９０７に進んで、次のブロックに対する処理を行う。
【０１２９】
ステップ９０１において、通常ブロックと判定したときは、ステップ９０２においてブロック内に有効クラスタがあるかどうかを判定する。有効クラスタがあれば、ステップ９０４において、該当ブロックについて、物理→論理変換テーブルＴ２により、指定された論理クラスタアドレスに割り当てられている物理クラスタ番号を検索する。そして、割り当てられている物理クラスタ番号が見つかれば、ブロック内のその物理クラスタ番号を記憶しておく。
【０１３０】
ステップ９０２においてブロック内に有効クラスタがなければ、ステップ９０３においてブロック消去を行う。
【０１３１】
ステップ９０４の処理の後にステップ９０５に進み、該当物理クラスタが１つ以上見つかったどうかを判定する。１つ以上見つかった場合は、ステップ９０６において、ステップ９０４で記憶しておいた物理クラスタに対し無効であることを示すマークを記憶する。ステップ９０５において該当物理クラスタが見つからなかった場合は、ステップ９０７に進む。
【０１３２】
以上のステップ９００以下をすべてのブロックに対して行う（ステップ９０７）。
【０１３３】
以上の世代交代処理を行うと、指定された論理クラスタアドレスに割り当てられたクラスタが存在しなくなるために、この処理の後に、世代番号の初期値を割り当ててクラスタへの書き込みを行うことができる。
【０１３４】
本装置では、通常の状態では上記のような無効化処理を行って未使用ブロック（有効ブロック）を確保していくが、未使用ブロックが少なくなってくると、無効化処理では対応できなくなる可能性がある。そこで、ブロックの消去処理をしても有効ブロック数が一定以上にならないときには、ガーベージコレクションを行って新しい未使用クラスタを確保する。ガーベージコレクションは，ブロックステータステーブルＴ３を参照して行い、最も有効クラスタ数の少ないブロックを対象にする。こうすることによって、クラスタデータの転送回数を少なくでき、それにより高速化が期待できる。
【０１３５】
ガーベージコレクションはこのようにして検索された有効クラスタ数の少ないブロックを対象とし、これにより、有効クラスタの内容を未使用クラスタへコピーする時間を短縮するとともに、その後の未使用クラスタも最大限に確保できるようにする。
【０１３６】
図２１は、ガーベージコレクションの対象を有効クラスタ数の少ないブロックとした場合の利点について説明する図である。同図に示すように、ブロック内の有効クラスタ数が少ない場合には、このブロックをガーベージコレクションの処理対象とすることによって、未使用クラスタに対して有効クラスタをコピーする場合のコピー回数が少なくなり、且つ確保できる未使用クラスタ数が多くなる。これに対して、ガーベージコレクションの処理対象を有効クラスタ数の多いブロックとした場合、または何も考慮することなくガーベージコレクションを行う場合には、コピーする有効クラスタ数が多くなり、且つ確保できる未使用クラスタ数が少なくなる。
【０１３７】
したがって、ガーベージコレクションの処理対象を有効クラスタ数の少ないブロックとすることにより、コピー時間を短縮することができるとともに未使用クラスタ数も最大限に確保できる。したがって、ガーベージコレクション処理の発生頻度も抑えることができる。
【０１３８】
図２０は、ガーベージコレクションの動作を示すフローチャートである。
【０１３９】
ステップ８０１においては、論理→物理変換テーブルＴ１及び物理→論理変換テーブルＴ２によりソースブロック内の有効クラスタのクラスタ情報を取得する。
【０１４０】
ステップ８０２において、未使用物理クラスタ番号テーブルＴ４（未使用クラスタ番号リスト）から新しい書き込みクラスタ番号を取得する。ここで、未使用クラスタ番号が取得されなけばエラー終了する。
【０１４１】
ステップ８０５では、本装置のフラッシュＲＯＭ間コピー機能を使用して高速にコピーする。すなわちシーケンサを起動して、グループ１のフラッシュＲＯＭに対してはリードモードに設定し、グループ２のフラッシュＲＯＭにはライトモードに設定し、それぞれにＲ／Ｗ  Ｓｔｒｏｂｅ信号を出すことによってグループ1 のフラッシュＲＯＭのページデータをグループ２のフラッシュＲＯＭに直接転送する。
【０１４２】
ステップ８０３〜８１２において、クラスタの片方のグループのページのみコピーし、ステップ８１３〜８１４において判断し、グループを切り換えてステップ８０３に戻り、もう一方のグループのページをコピーする。このように、片方のグループごとにコピーすることにより、クラスタの内容はページごとに反転するが、本装置のフラッシュＲＯＭ間のデータコピー機能を利用することができる。図２２はこの様子を示している。
【０１４３】
図２３は、本発明の第２の実施例の構成図を示している。
【０１４４】
図１０に示す第１の実施例と相違する点は、フラッシュＲＯＭ制御装置１に対してフラッシュＲＯＭを４つ接続し、フラッシュＲＯＭ１、２でグループ１を構成し、フラッシュＲＯＭ３、４でグループ２を構成している点である。グループ内の２つのフラッシュＲＯＭを選択するために、２つのＣｈｉｐ  Ｅｎａｂｌｅ信号をグループ内のそれぞれのフラッシュＲＯＭに接続する。これにより、別々の制御が可能になる。図２４は、ページの割りつけ方法を示している。物理クラスタ０のアクセス順序は、同図に示してある通りである。物理クラスタ１、物理クラスタ２についても同様である。
【０１４５】
読み込み時においては、次のように４つのフラッシュＲＯＭを順番に転送することによって一方のフラッシュＲＯＭの待ち時間の間に他方のフラッシュＲＯＭのデータを転送することとなり、高速化することができる。
【０１４６】
（１）フラッシュＲＯＭ１にリードコマンドを発行する。
【０１４７】
（２）フラッシュＲＯＭ２にリードコマンドを発行する。
【０１４８】
（３）フラッシュＲＯＭ３にリードコマンドを発行する。
【０１４９】
（４）フラッシュＲＯＭ４にリードコマンドを発行する。
【０１５０】
（５）フラッシュＲＯＭ１のデータをホストに転送する。転送終了後、フラッシュＲＯＭ１に次のリードコマンドを発行する。
【０１５１】
（６）フラッシュＲＯＭ２のデータをホストに転送する。転送終了後、フラッシュＲＯＭ２に次のリードコマンドを発行する。
【０１５２】
（７）フラッシュＲＯＭ３のデータをホストに転送する。転送終了後、フラッシュＲＯＭ３に次のリードコマンドを発行する。
【０１５３】
（８）フラッシュＲＯＭ４のデータをホストに転送する。転送終了後、フラッシュＲＯＭ４に次のリードコマンドを発行する。
【０１５４】
（９）（５）に戻る。
書き込み時には、次のように４つのフラッシュＲＯＭを順番に転送することにより、フラッシュＲＯＭの待ち時間の間に他のデータを転送することになり、高速化することができる。
【０１５５】
（１）フラッシュＲＯＭ１にデータ入力コマンドを発行し、書き込みデータを転送し、書き込みコマンドを発行する。
【０１５６】
（２）フラッシュＲＯＭ２にデータ入力コマンドを発行し、書き込みデータを転送し、書き込みコマンドを発行する。
【０１５７】
（３）フラッシュＲＯＭ３にデータ入力コマンドを発行し、書き込みデータを転送し、書き込みコマンドを発行する。
【０１５８】
（４）フラッシュＲＯＭ４にデータ入力コマンドを発行し、書き込みデータを転送し、書き込みコマンドを発行する。
【０１５９】
（５）フラッシュＲＯＭ１の書き込み完了待ちをし、エラー判定を行う。正常に書き込みが完了すればデータ入力コマンドを発行し、書き込みデータを転送し、書き込みコマンドを発行する。
【０１６０】
（６）フラッシュＲＯＭ２の書き込み完了待ちをし、エラー判定を行う。正常に書き込みが完了すればデータ入力コマンドを発行し、書き込みデータを転送し、書き込みコマンドを発行する。
【０１６１】
（７）フラッシュＲＯＭ３の書き込み完了待ちをし、エラー判定を行う。正常に書き込みが完了すればデータ入力コマンドを発行し、書き込みデータを転送し、書き込みコマンドを発行する。
【０１６２】
（８）フラッシュＲＯＭ４の書き込み完了待ちをし、エラー判定を行う。正常に書き込みが完了すればデータ入力コマンドを発行し、書き込みデータを転送し、書き込みコマンドを発行する。
【０１６３】
（９）（５）に戻る。
【０１６４】
ガーベージコレクション時のクラスタデータの転送時には、従来は、クラスタデータを一旦ＲＡＭ等の記憶部に読み込んでから書き込む必要があった。本装置では、別々に制御されたＲ／Ｗ  Ｓｔｒｏｂｅ信号を両方のグループに同時に出すことによって、１回の動作で読み込みと書き込みを同時に行うことができる。これにより、グループ間のデータ転送を高速に行うことができる。ブロックを消去する際にも、ほぼ同時にコマンドを発行するために、１回の実行時間で４つのブロックを消去できる。
【０１６５】
本装置では、ＥＣＣ単位内に含まれるＥＣＣ情報は、ランダムな２ビットのエラー検出、１ビットのエラー訂正可能な３バイトのＥＣＣ情報である。したがって、１セクタ当たり（それぞれのＥＣＣ単位において）４ビットまでのエラー検出、２ビットまでのランダムエラーを訂正できる。この他にも、Ｒｅａｄ−Ｓｏｌｏｍｏｎ符号等のより多くのビットのエラー検出／訂正ができるＥＣＣを使用すれば、より高信頼性を確保できる。。
【産業上の利用可能性】
【０１６６】
外部記憶用フラッシュＲＯＭが接続されるディジタルカメラ等、大容量のフラッシュＲＯＭ接続対応電子機器に適用可能である。
【図面の簡単な説明】
【０１６７】
【図１】本発明の実施形態であるフラッシュＲＯＭ制御装置の構成図
【図２】フラッシュＲＯＭのリード時のタイミングチャート
【図３】フラッシュＲＯＭのライト時のタイミングチャート
【図４】単位エリアの関係を示す図
【図５】ホストからの読み込み要求に対する従来装置と本装置のデータの読み込み方式を示す図
【図６】テーブル構成図
【図７】テーブル記憶内容を示す図
【図８】ＦＡＴファイルシステムとフラッシュＲＯＭとのデータ領域の対比図
【図９】従来装置に対して本装置の書き込み方式が高速である理由を示す図
【図１０】本発明の第１の実施例の構成図
【図１１】物理クラスタへのアクセス順序を示す図
【図１２】リードコマンド発行時の動作を示すフローチャート
【図１３】ライトコマンド発行時の動作を示すフローチャート
【図１４】ホストＩ／ＦからフラッシュＲＯＭへのクラスタデータの書き込み手順を示すフローチャート
【図１５】ＲＡＭからフラッシュＲＯＭへのクラスタデータの書き込み手順を示すフローチャート
【図１６】ソースクラスタデータをＲＡＭへ保存する動作を示すフローチャート
【図１７】書き込みエラー処理を示すフローチャート
【図１８】新しい書き込みクラスタ番号を取得する時の動作を示すフローチャート
【図１９】世代交代処理を示すフローチャート
【図２０】ガーベージコレクションの動作を示すフローチャート
【図２１】本装置のガーベージコレクションの優位性を示す図
【図２２】ガーベージコレクション時のフラッシュＲＯＭ間コピーについて説明するための図
【図２３】本発明の第２の実施例の構成図
【図２４】物理クラスタへのアクセス順序を示す図
【図１】
2005115562.tif 000003
【図２】
2005115562.tif 000004
【図３】
2005115562.tif 000005
【図４】
2005115562.tif 000006
【図５】
2005115562.tif 000007
【図６】
2005115562.tif 000008
【図７】
2005115562.tif 000009
【図８】
2005115562.tif 000010
【図９】
2005115562.tif 000011
【図１０】
2005115562.tif 000012
【図１１】
2005115562.tif 000013
【図１２】
2005115562.tif 000014
【図１３】
2005115562.tif 000015
【図１４】
2005115562.tif 000016
【図１５】
2005115562.tif 000017
【図１６】
2005115562.tif 000018
【図１７】
2005115562.tif 000019
【図１８】
2005115562.tif 000020
【図１９】
2005115562.tif 000021
【図２０】
2005115562.tif 000022
【図２１】
2005115562.tif 000023
【図２２】
2005115562.tif 000024
【図２３】
2005115562.tif 000025
【図２４】
2005115562.tif 000026