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