(57)【特許請求の範囲】
【請求項１】
一括消去可能な複数のブロックを有し、
上記ブロックは、複数のページから構成され、
上記複数のページは、それぞれ冗長エリアを有し、
上記それぞれのブロックの先頭ページの冗長エリアには、上記それぞれのブロックを管理するための論理アドレスを含む管理情報が格納され、かつ上記それぞれのブロックの２ページ目の冗長エリアには、上記先頭ページの冗長エリアに格納された管理情報と同じ情報が、予備の管理情報として格納されることを特徴とする不揮発性メモリ。
【請求項２】
上記各ページの冗長エリアには、管理情報として当該ブロックに連結するブロックの論理アドレスである連結アドレスが格納されることを特徴とする請求項１記載の不揮発性メモリ。
【請求項３】
一括消去可能な複数のブロックを有し、上記ブロックが、複数のページから構成され、上記複数のページが、それぞれ冗長エリアを有する不揮発性メモリを管理する管理方法において、
上記それぞれのブロックの先頭ページの冗長エリアには、上記それぞれのブロックを管理するための論理アドレスを含む管理情報を格納し、かつ上記それぞれのブロックの２ページ目の冗長エリアには、上記先頭ページの冗長エリアに格納された管理情報と同じ情報を、予備の管理情報として格納することを特徴とする不揮発性メモリの管理方法。
【請求項４】
上記各ページの冗長エリアに、管理情報として当該ブロックに連結するブロックの論理アドレスである連結アドレスを格納することを特徴とする請求項３記載の不揮発性メモリの管理方法。
【請求項５】
一括消去可能な複数のブロックを有し、
上記ブロックは、複数のページから構成され、
上記複数のページは、それぞれ冗長エリアを有し、
上記それぞれのブロックの先頭ページの冗長エリアには、上記それぞれのブロックを管理するための論理アドレスを含む管理情報が格納され、かつ上記それぞれのブロックの２ページ目の冗長エリアには、上記先頭ページの冗長エリアに格納された管理情報と同じ情報が、予備の管理情報として格納されることを特徴とする不揮発性メモリを有する記憶装置。
【請求項６】
上記各ページの冗長エリアには、管理情報として当該ブロックに連結するブロックの論理アドレスである連結アドレスが格納されることを特徴とする請求項５記載の不揮発性メモリを有する記憶装置。
【請求項７】
上記不揮発性メモリは、カード形状のケースに収容されており、メモリカードであることを特徴とする請求項５記載の不揮発性メモリを有する記憶装置。
【請求項８】
一括消去可能な複数のブロックを有し、上記ブロックが、複数のページから構成され、上記複数のページが、それぞれ冗長エリアを有する不揮発性メモリを管理するデータ管理装置において、
上記それぞれのブロックの先頭ページの冗長エリアには、上記それぞれのブロックを管理するための論理アドレスを含む管理情報を格納し、かつ上記それぞれのブロックの２ページ目の冗長エリアには、上記先頭ページの冗長エリアに格納された管理情報と同じ情報を、予備の管理情報として格納することを特徴とする不揮発性メモリを管理するデータ管理装置。
【請求項９】
上記各ページの冗長エリアに、管理情報として当該ブロックに連結するブロックの論理アドレスである連結アドレスを格納することを特徴とする請求項８記載の不揮発性メモリを管理するデータ管理装置。
【請求項１０】
一括消去可能な複数のブロックを有し、上記ブロックが、複数のページから構成され、上記複数のページが、それぞれ冗長エリアを有する不揮発性メモリを有する外部記憶装置と、この外部記憶装置を管理するデータ管理装置とを備えたデータ処理システムにおいて、
上記データ管理装置は、上記外部記憶装置の上記それぞれのブロックの先頭ページの冗長エリアに、上記それぞれのブロックを管理するための論理アドレスを含む管理情報を格納し、かつ上記それぞれのブロックの２ページ目の冗長エリアに、上記先頭ページの冗長エリアに格納された管理情報と同じ情報を、予備の管理情報として格納することを特徴とするデータ処理システム。
【請求項１１】
上記各ページの冗長エリアには、管理情報として当該ブロックに連結するブロックの論理アドレスである連結アドレスが格納されることを特徴とする請求項１０記載のデータ処理システム。
【請求項１２】
上記外部記憶装置は、不揮発性メモリをカード形状のケースに収容したメモリカードであることを特徴とする請求項１０記載のデータ処理システム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、記憶領域が複数のブロックに分割されてなる不揮発性メモリ、不揮発性メモリの管理方法、不揮発性メモリを有する記憶装置、不揮発性メモリを管理するデータ管理装置及びデータ処理システムに関する。
【０００２】
【従来の技術】
パーソナルコンピュータやデジタルスチルカメラ等のようなデータ処理装置に用いられる外部記憶装置として、フラッシュメモリを備えた外部記憶装置がある。
【０００３】
フラッシュメモリを備えた外部記憶装置は、記憶領域を複数のブロックに分割し、データ領域の管理をブロック単位で行う。ここで、各ブロックはデータ消去の単位となる。すなわち、データを消去する際は、当該データを含むブロック全体に対して初期化処理を施す。これにより、当該ブロックに格納されているデータが一括して消去される。
【０００４】
このような外部記憶装置では、データをブロックに格納するときに、それらのブロックに対してユニークな論理アドレスが設定される。そして、各ブロックは、この論理アドレスを用いて管理される。
【０００５】
また、外部記憶装置に格納されるデータは、通常、ファイル単位で外部記憶装置に格納されるが、一つのファイルが複数のブロックにわたる場合には、それらのブロックの連結情報が必要となる。そこで、一つのファイルが複数のブロックにわたる場合には、当該ファイルを格納しているブロックのそれぞれに、次のブロックの論理アドレス（以下、連結アドレスと称する。）が格納される。
【０００６】
【発明が解決しようとする課題】
従来、このような外部記憶装置では、記憶領域内にエラーがあるか否かを検査する処理や、エラーがあった場合に当該エラーの修復を試みる処理を、外部記憶装置の起動時に毎回実行するようにしていた。なお、以下の説明では、このような処理のことを、エラー検出訂正処理と称する。通常、このようなエラー検出訂正処理は、比較的に負荷が大きく処理に時間を要する処理である。したがって、従来の外部記憶装置は、エラー検出訂正処理のために、速やかに起動することができないという問題があった。
【０００７】
また、データ領域の管理をブロック単位で行うような外部記憶装置では、ブロックにデータを新規に書き込んでいるときや、ブロックに格納されているデータを更新しているときなどに、いきなり電源が遮断されたり、データ処理装置から外部記憶装置が強制的に取り外されたりしたような場合に、同じ論理アドレスを持つ複数のブロックが同時に存在するような状態（以下、論理アドレスエラーと称する。）となったり、連結アドレスで指し示されたブロックが存在しないような状態（以下、連結アドレスエラーと称する。）となったりする可能性がある。当然の事ながら、このような状態になると、ファイルが予期せぬブロックに連結されてしまったりして、外部記憶装置を正常に使用することができなくなってしまう。
【０００８】
しかしながら、従来の外部記憶装置は、論理アドレスエラーや連結アドレスエラーを検出して適切に修復するような機能を備えていなかった。そのため、従来は、いきなり電源が遮断されたり、データ処理装置から外部記憶装置が強制的に取り外されたりしたような場合に、その後、外部記憶装置を正常に使用することができなくなってしまうことがあった。
【０００９】
本発明は、以上のような従来の実情に鑑みて提案されたものであり、外部記憶装置に論理アドレスエラーや連結アドレスエラーが生じても、それらのエラーを検出し適切に修復できるようにすることを目的としている。
【００１０】
【課題を解決するための手段】
本発明に係る不揮発性メモリは、一括消去可能な複数のブロックを有し、上記ブロックは、複数のページから構成され、上記複数のページは、それぞれ冗長エリアを有し、上記それぞれのブロックの先頭ページの冗長エリアには、上記それぞれのブロックを管理するための論理アドレスを含む管理情報が格納され、かつ上記それぞれのブロックの２ページ目の冗長エリアには、上記先頭ページの冗長エリアに格納された管理情報と同じ情報が、予備の管理情報として格納される。
【００１１】
また、本発明に係る不揮発性メモリの管理方法は、一括消去可能な複数のブロックを有し、上記ブロックが、複数のページから構成され、上記複数のページが、それぞれ冗長エリアを有する不揮発性メモリを管理する管理方法において、上記それぞれのブロックの先頭ページの冗長エリアには、上記それぞれのブロックを管理するための論理アドレスを含む管理情報を格納し、かつ上記それぞれのブロックの２ページ目の冗長エリアには、上記先頭ページの冗長エリアに格納された管理情報と同じ情報を、予備の管理情報として格納する。
【００１２】
また、本発明に係る不揮発性メモリを有する記憶装置は、一括消去可能な複数のブロックを有し、上記ブロックは、複数のページから構成され、上記複数のページは、それぞれ冗長エリアを有し、上記それぞれのブロックの先頭ページの冗長エリアには、上記それぞれのブロックを管理するための論理アドレスを含む管理情報が格納され、かつ上記それぞれのブロックの２ページ目の冗長エリアには、上記先頭ページの冗長エリアに格納された管理情報と同じ情報が、予備の管理情報として格納される。
また、本発明に係る不揮発性メモリを管理するデータ管理装置は、一括消去可能な複数のブロックを有し、上記ブロックが、複数のページから構成され、上記複数のページが、それぞれ冗長エリアを有する不揮発性メモリを管理するデータ管理装置において、上記それぞれのブロックの先頭ページの冗長エリアには、上記それぞれのブロックを管理するための論理アドレスを含む管理情報を格納し、かつ上記それぞれのブロックの２ページ目の冗長エリアには、上記先頭ページの冗長エリアに格納された管理情報と同じ情報を、予備の管理情報として格納する。
更に、本発明に係るデータ処理システムは、一括消去可能な複数のブロックを有し、上記ブロックが、複数のページから構成され、上記複数のページが、それぞれ冗長エリアを有する不揮発性メモリを有する外部記憶装置と、この外部記憶装置を管理するデータ管理装置とを備えたデータ処理システムにおいて、上記データ管理装置は、上記外部記憶装置の上記それぞれのブロックの先頭ページの冗長エリアに、上記それぞれのブロックを管理するための論理アドレスを含む管理情報を格納し、かつ上記それぞれのブロックの２ページ目の冗長エリアに、上記先頭ページの冗長エリアに格納された管理情報と同じ情報を、予備の管理情報として格納する。
【００１３】
【発明の実施の形態】
以下、本発明の実施の形態について、図面を参照しながら詳細に説明する。
【００１４】
１．システムの全体構成
本発明が適用されるシステムの一例について、その全体構成を図１に示す。このシステムは、ホスト側システムとなるデータ処理装置１と、シリアルインターフェースを介してデータ処理装置１に接続される外部記憶装置であるメモリカード２とから構成される。
【００１５】
データ処理装置１は、演算処理装置（ＣＰＵ）３と、内部メモリ４と、補助記憶装置５と、シリアルインターフェース回路６とを備え、これらがバス７によって相互に接続されてなる。このデータ処理装置１は、例えば、補助記憶装置５に格納されているプログラムを読み出して、当該プログラムを、内部メモリ４をワークエリアとして使用して、ＣＰＵ３により実行する。このとき、必要に応じて、シリアルインターフェース回路６を介してメモリカード２との間でデータのやり取りを行う。
【００１６】
なお、本発明が適用されるシステムに使用されるデータ処理装置１は、外部記憶装置との間でデータのやり取りが可能なものであるならば特に限定されるものではなく、本発明は、パーソナルコンピュータ、デジタルスチルカメラ、デジタルビデオカメラ等、種々のデータ処理装置に適用可能である。
【００１７】
データ処理装置１とメモリカード２とは、シリアルインターフェースによって接続されており、具体的には、少なくとも３本のデータ線ＳＣＬＫ，Ｓｔａｔｅ，ＤＩＯによって接続される。すなわち、データ処理装置１とメモリカード２とは、少なくとも、データ伝送時にクロック信号を伝送する第１のデータ線ＳＣＬＫと、データ伝送時に必要なステータス信号を伝送する第２のデータ線Ｓｔａｔｅと、メモリカード２に書き込むデータ又はメモリカード２から読み出すデータ等をシリアルに伝送する第３のデータ線ＤＩＯとによって接続され、これらを介して、データ処理装置１とメモリカード２との間でのデータのやり取りを行う。
【００１８】
データ処理装置１とメモリカード２との間でのデータのやり取りは、通常、ヘッダーと実データとから構成されるファイル単位で行われる。なお、ファイルのヘッダーには、例えば、ファイルにアクセスするための情報や、データ処理装置１で実行されるプログラムで必要とされる情報等が格納される。
【００１９】
２．メモリカードの構成
メモリカード２は、図２に示すように、いわゆるコントロールＩＣからなるコントローラ１１と、コントローラ１１によって管理されるフラッシュメモリ１２とを備えている。
【００２０】
コントローラ１１は、シリアル／パラレル変換やパラレル／シリアル変換等を行うシリアル／パラレル・パラレル／シリアル・インターフェース・シーケンサ１３（以下、Ｓ／Ｐ＆Ｐ／Ｓ・インターフェース・シーケンサ１３と称する。）と、フラッシュメモリ１２へのインターフェースを司るフラッシュメモリ・インターフェース・シーケンサ１４と、Ｓ／Ｐ＆Ｐ／Ｓ・インターフェース・シーケンサ１３とフラッシュメモリ・インターフェース・シーケンサ１４との間でやり取りされるデータを一時的に記憶するページバッファ１５と、エラー訂正の処理を行うエラー訂正回路１６と、フラッシュメモリ１２へのアクセスを制御する制御コマンドの生成等を行うコマンドジェネレータ１７と、このメモリカード２のバージョン情報や各種属性情報等が格納されているコンフィグレーションＲＯＭ１８と、各回路に対してそれらの動作に必要なクロック信号を供給する発振器１９とを備えている。
【００２１】
Ｓ／Ｐ＆Ｐ／Ｓ・インターフェース・シーケンサ１３は、少なくとも上述した３本のデータ線ＳＣＬＫ，Ｓｔａｔｅ，ＤＩＯを介して、データ処理装置１のシリアルインターフェース回路６に接続され、これらのデータ線ＳＣＬＫ，Ｓｔａｔｅ，ＤＩＯを介して、データ処理装置１との間でデータのやり取りを行う。すなわち、Ｓ／Ｐ＆Ｐ／Ｓ・インターフェース・シーケンサ１３は、ページバッファ１５から送られてきたパラレルデータをシリアルデータに変換して、データ処理装置１のシリアルインターフェース回路６へ送出する。また、Ｓ／Ｐ＆Ｐ／Ｓ・インターフェース・シーケンサ１３は、データ処理装置１のシリアルインターフェース回路６から送られてきたシリアルデータをパラレルデータに変換して、ページバッファ１５へ送出する。
【００２２】
このＳ／Ｐ＆Ｐ／Ｓ・インターフェース・シーケンサ１３とデータ処理装置１との間でのシリアルデータの伝送は、第１のデータ線ＳＣＬＫによってデータ処理装置１から送られてくるクロック信号によって同期を取りながら、第３のデータ線ＤＩＯによって行われる。このとき、第３のデータ線ＤＩＯによってやり取りされるシリアルデータのデータ種別は、第２のデータ線Ｓｔａｔｅによって伝送されるステータス信号によって判別される。ここで、シリアルデータの種別には、例えば、フラッシュメモリ１２に書き込むべきデータ、フラッシュメモリ１２から読み出されたデータ、又はこのメモリカード２の動作を制御するための制御データ等がある。なお、ステータス信号は、メモリカード２の状態を示すためにも使用される。ステータス信号によって示されるメモリカード２の状態には、例えば、メモリカード２が何らかの処理の最中でデータ処理装置１からのデータ入力を受け付けない状態や、メモリカード２の側での処理が終了してデータ処理装置１からのデータ入力を待っている状態等がある。
【００２３】
また、Ｓ／Ｐ＆Ｐ／Ｓ・インターフェース・シーケンサ１３は、データ処理装置１から送られてきたデータがメモリカード２の動作を制御するための制御データである場合には、当該制御データをコマンドジェネレータ１７に送出する。
【００２４】
コマンドジェネレータ１７は、データ処理装置１からＳ／Ｐ＆Ｐ／Ｓ・インターフェース・シーケンサ１３を介して送られてきた制御データに基づいて、フラッシュメモリ１２へのアクセスを制御する制御コマンドを生成し、当該制御コマンドをフラッシュメモリ・インターフェース・シーケンサ１４へ送出する。フラッシュメモリ・インターフェース・シーケンサ１４は、後述するように、この制御コマンドに基づいて、フラッシュメモリ１２にデータを書き込んだり、フラッシュメモリ１２からデータを読み出したりする。
【００２５】
なお、このコマンドジェネレータ１７には、誤消去防止スイッチ２０が接続されている。そして、この誤消去防止スイッチ２０がオンになっているときには、フラッシュメモリ１２に書かれているデータを消去するように指示する制御データがデータ処理装置１から送られてきたとしても、コマンドジェネレータ１７は、フラッシュメモリ１２に書かれているデータを消去するような制御コマンドを生成しない。すなわち、このメモリカード２は、誤消去防止スイッチ２０によって、フラッシュメモリ１２に保存されているデータの消去が行えない状態と、フラッシュメモリ１２に保存されているデータの消去が行える状態とを切り換えることが可能となっている。
【００２６】
Ｓ／Ｐ＆Ｐ／Ｓ・インターフェース・シーケンサ１３とフラッシュメモリ・インターフェース・シーケンサ１４との間に配されたページバッファ１５は、いわゆるバッファメモリであり、Ｓ／Ｐ＆Ｐ／Ｓ・インターフェース・シーケンサ１３とフラッシュメモリ・インターフェース・シーケンサ１４との間でやり取りされるデータを一時的に記憶する。
【００２７】
すなわち、Ｓ／Ｐ＆Ｐ／Ｓ・インターフェース・シーケンサ１３からフラッシュメモリ・インターフェース・シーケンサ１４へ送られるデータは、先ず、Ｓ／Ｐ＆Ｐ／Ｓ・インターフェース・シーケンサ１３からページバッファ１５に送られて、このページバッファ１５によって一時的に記憶される。このとき、ページバッファ１５に記憶されたデータは、エラー訂正回路１６によってエラー訂正符号が付けられる。そして、エラー訂正符号が付けられたデータは、ページバッファ１５から所定のページ単位毎（例えば１ページ＝５１２バイトとされる。）に、フラッシュメモリ・インターフェース・シーケンサ１４へと送られる。
【００２８】
或いは、フラッシュメモリ・インターフェース・シーケンサ１４からＳ／Ｐ＆Ｐ／Ｓ・インターフェース・シーケンサ１３へ送られるデータは、先ず、フラッシュメモリ・インターフェース・シーケンサ１４からページバッファ１５に送られて、このページバッファ１５によって一時的に記憶される。このとき、ページバッファ１５に記憶されたデータは、エラー訂正回路１６によってエラー訂正処理が施される。そして、エラー訂正処理が施されたデータは、ページバッファ１５から所定のページ単位毎に、Ｓ／Ｐ＆Ｐ／Ｓ・インターフェース・シーケンサ１３へと送られる。
【００２９】
フラッシュメモリ・インターフェース・シーケンサ１４は、コマンドジェネレータ１７からの制御コマンドに基づいて、フラッシュメモリ１２へのデータの書き込みや、フラッシュメモリ１２からのデータの読み出し等を行う。すなわち、フラッシュメモリ・インターフェース・シーケンサ１４は、コマンドジェネレータ１７からの制御コマンドに基づいて、フラッシュメモリ１２からデータを読み出して、当該データを上述のようにページバッファ１５を介して、Ｓ／Ｐ＆Ｐ／Ｓ・インターフェース・シーケンサ１３へと送出する。或いは、フラッシュメモリ・インターフェース・シーケンサ１４は、コマンドジェネレータ１７からの制御コマンドに基づいて、Ｓ／Ｐ＆Ｐ／Ｓ・インターフェース・シーケンサ１３からのデータを、上述のようにページバッファ１５を介して受け取り、当該データをフラッシュメモリ１２に書き込む。
【００３０】
コンフィグレーションＲＯＭ１８には、このメモリカード２のバージョン情報や各種属性情報等が格納されている。コンフィグレーションＲＯＭ１８に格納された情報は、必要に応じて、Ｓ／Ｐ＆Ｐ／Ｓ・インターフェース・シーケンサ１３を介してコマンドジェネレータ１７によって読み出されて使用される。すなわち、コマンドジェネレータ１７は、必要に応じて、コンフィグレーションＲＯＭ１８に格納されている情報を読み出し、この情報に基づいてメモリカード２に関する各種設定を行う。
【００３１】
以上のようなメモリカード２に対して、フラッシュメモリ１２に書き込まれるデータが、上述した３本のデータ線ＳＣＬＫ，Ｓｔａｔｅ，ＤＩＯを介して、データ処理装置１からシリアルデータとして送られてくると、先ず、Ｓ／Ｐ＆Ｐ／Ｓ・インターフェース・シーケンサ１３は、当該シリアルデータをパラレルデータに変換し、当該パラレルデータをページバッファ１５へ送出する。ページバッファ１５は、Ｓ／Ｐ＆Ｐ／Ｓ・インターフェース・シーケンサ１３から送られてきたデータを一時的に記憶する。このとき、ページバッファ１５に記憶されたデータには、エラー訂正回路１６によってエラー訂正符号が付けられる。そして、エラー訂正符号が付けられたデータは、所定のページ単位毎にフラッシュメモリ・インターフェース・シーケンサ１４に送出される。そして、フラッシュメモリ・インターフェース・シーケンサ１４は、ページバッファ１５から送られてきたデータを、コマンドジェネレータ１７からの制御コマンドに基づいて、フラッシュメモリ１２に書き込む。以上の処理により、データ処理装置１から送られてきたデータが、フラッシュメモリ１２に書き込まれる。
【００３２】
また、以上のようなメモリカード２からデータを読み出す際は、先ず、コマンドジェネレータ１７からの制御コマンドに基づいて、フラッシュメモリ・インターフェース・シーケンサ１４によって、フラッシュメモリ１２からデータが読み出される。そして、フラッシュメモリ・インターフェース・シーケンサ１４は、フラッシュメモリ１２から読み出したデータをページバッファ１５に送出する。ページバッファ１５は、フラッシュメモリ・インターフェース・シーケンサ１４から送られてきたデータを一時的に記憶する。このとき、ページバッファ１５に記憶されたデータには、エラー訂正回路１６によってエラー訂正処理が施される。そして、エラー訂正処理が施されたデータは、所定のページ単位毎にＳ／Ｐ＆Ｐ／Ｓ・インターフェース・シーケンサ１３に送出される。そして、Ｓ／Ｐ＆Ｐ／Ｓ・インターフェース・シーケンサ１３は、ページバッファ１５から送られてきたデータを、シリアルデータに変換した上で、上述した３本のデータ線ＳＣＬＫ，Ｓｔａｔｅ，ＤＩＯを介して、データ処理装置１へと送出する。以上の処理により、フラッシュメモリ１２から読み出されたデータが、データ処理装置１へと送出される。
【００３３】
なお、データの書き込みや読み出しを行う際は、フラッシュメモリ１２に書き込まれるデータやフラッシュメモリ１２から読み出されたデータのやり取りが行われるだけでなく、そのやり取りを制御するための制御データも、データ処理装置１からメモリカード２のＳ／Ｐ＆Ｐ／Ｓ・インターフェース・シーケンサ１３へ送られる。この制御データは、Ｓ／Ｐ＆Ｐ／Ｓ・インターフェース・シーケンサ１３からコマンドジェネレータ１７に送られる。そして、コマンドジェネレータ１７は、Ｓ／Ｐ＆Ｐ／Ｓ・インターフェース・シーケンサ１３から送られてきた制御データに基づいて、フラッシュメモリ１２へのアクセスを制御する制御コマンドを生成する。そして、この制御コマンドは、フラッシュメモリ・インターフェース・シーケンサ１４に送られ、フラッシュメモリ・インターフェース・シーケンサ１４は、この制御コマンドに基づいてフラッシュメモリ１２にアクセスして、データの書き込みやデータの読み出しを行う。
【００３４】
なお、メモリカード２は、上述した３本のデータ線ＳＣＬＫ，Ｓｔａｔｅ，ＤＩＯを備えるだけでなく、その他に、電圧供給用の配線や、通常は使用しないリザーブの配線等を備えていてもよい。例えば、図２並びに後掲する図３では、上述した３本のデータ線ＳＣＬＫ，Ｓｔａｔｅ，ＤＩＯの他に、４本の電源用の配線ＶＳＳ１，ＶＳＳ２，ＶＣＣ，ＩＮＴと、３本のリザーブの配線ＲＳＶ１，ＲＳＶ２，ＲＳＶ３とをメモリカード２に設けた例を挙げている。
【００３５】
３．メモリカードの外観
つぎに、以上のようなメモリカード２の具体的な外形について、図３を参照して説明する。
【００３６】
メモリカード２は、合成樹脂等からなり平面形状が長方形とされる薄肉のカード状のケース２１に、上述したコントローラ１１やフラッシュメモリ１２等が内蔵されてなる。そして、このメモリカード２は、当該メモリカード２を装着する装着機構を備えたデータ処理装置１に装着されて使用される。
【００３７】
このメモリカード２のケース２１の前端部には、斜めに切り欠かれた切り欠き部２２が形成されており、更に当該切り欠き部２２が形成された部分に、１０個の凹状部２３が形成されている。そして、これらの凹状部２３の内部には、メモリカード２がデータ処理装置１の装着装置に装着されたときに、データ処理装置１の接続端子に接続される外部接続用端子が、それぞれ配されている。すなわち、このメモリカード２は、外部接続用端子として１０本の端子２４ａ，２４ｂ，２４ｃ，２４ｄ，２４ｅ，２４ｆ，２４ｇ，２４ｈ，２４ｉ，２４ｊを備えている。これらの外部接続用端子の内訳は、３本のデータ線用の端子２４ｂ，２４ｄ，２４ｈ、４本の電源用端子２４ａ，２４ｆ，２４ｉ，２４ｊ、及び３本のリザーブ端子２４ｃ，２４ｅ，２４ｇである。
【００３８】
また、このメモリカード２のケース２１の上面には、誤消去防止部材２５が取り付けられている。誤消去防止部材２５は、ケース２１の内部に収納された上記誤消去防止スイッチ２０に係合されており、この誤消去防止部材２５をスライド操作することにより、誤消去防止スイッチ２０のオン／オフの切り換えを行えるようになっている。
【００３９】
このメモリカード２には、データ処理装置１の装着装置に装着された際にメモリカード２がデータ処理装置１から脱落しないようにするため、ケース２０の側面の一方に円弧状の第１のロック用切欠部２６が形成され、ケース２０の側面の他方に矩形状の第２のロック用切欠部２７が形成されている。そして、このメモリカード２がデータ処理装置１の装着装置に装着されると、メモリカード２が脱落しないように、これらのロック用切欠部２６，２７が、データ処理装置１の装着装置に係合される。
【００４０】
なお、図３に示したメモリカード２は、本発明が適用される外部記憶装置の一例に過ぎない。すなわち、本発明は、外部記憶装置の外形に依存することなく、どんな外形の外部記憶装置にも適用可能である。
【００４１】
４．記憶領域の構造
つぎに、以上のようなメモリカード２に搭載されるフラッシュメモリ１２の記憶領域の構造について説明する。
【００４２】
このフラッシュメモリ１２の記憶領域は、図４（ａ）に示すように、データ消去の単位となる複数のブロックに分割されてなる。なお、これらのブロックには、このメモリカード２が起動されたときにデータ処理装置１によって最初に読み込まれるデータであるブートデータが格納されるブートブロックと、任意のデータが書き込まれるデータブロックとがある。各ブロックには、それぞれ固有の物理アドレスが付けられている。これらのブロックは、データ消去の単位であると同時に、ファイル管理上の最小単位でもある。すなわち、ファイルは１つ又は複数のブロックに格納され、１つのブロックを複数のファイルで利用することはできない。
【００４３】
そして、各ブロックは、「１」又は「０」を示す２つの状態を取りうる複数のビットからなり、初期状態では、全てのビットが「１」とされており、ビット単位での変更は「１」から「０」へだけが可能となっている。すなわち、「１」及び「０」からなるデータを書き込む際、「１」については該当するビットをそのまま保持し、「０」については該当するビットを「１」から「０」に変更する。
【００４４】
そして、一度書き込んだデータを消去する際は、ブロック単位で一括して初期化処理を行い、当該ブロックの全ビットを「１」とする。これにより、当該ブロックに書き込まれたデータが一括して消去され、そのブロックは再びデータの書き込みが可能な状態となる。
【００４５】
なお、「０」から「１」への変更を行うには、ブロック単位で一括して初期化処理を行い、当該ブロックの全ビットを「１」にする必要があるが、「１」から「０」への変更は、ブロック単位で一括して初期化処理を行わなくて可能である。以下の説明では、ブロック単位で一括して初期化処理を行うことなく「１」から「０」へ変更することを、オーバーライトと称する。
【００４６】
なお、本発明は、上述のように各ビットが２つの状態だけを取りうるフラッシュメモリ（いわゆる２値型のフラッシュメモリ）だけでなく、各ビットが３つ以上の状態を取りうるフラッシュメモリ（いわゆる多値型のフラッシュメモリ）にも適用可能である。
【００４７】
上記フラッシュメモリ１２の各ブロックは、図４（ｂ）に示すように、データの書き込みや読み出しの単位となる複数のページから構成される。すなわち、このフラッシュメモリ１２にデータを書き込む際は、上述したように、ページ単位にてページバッファ１５から送られてきたデータが、フラッシュメモリ・インターフェース・シーケンサ１４によってページ単位にてフラッシュメモリ１２に書き込まれる。また、このフラッシュメモリ１２からデータを読み出す際は、フラッシュメモリ・インターフェース・シーケンサ１４によってページ単位毎にデータが読み出されて、ページバッファ１５へと送られる。
【００４８】
各ページは、データエリアと、冗長エリアとを有している。データエリアは、任意のデータが書き込まれる領域である。冗長エリアは、データエリアに書き込まれるデータの管理に必要な情報が格納される領域である。
【００４９】
具体的には、図４（ｃ）に示すように、ブロックの先頭ページの冗長エリアには、当該ブロックを管理するために必要な管理情報として、いわゆる分散管理情報が格納される。また、ブロックの２ページ目以降の各ページの冗長エリアにも、予備の分散管理情報として、先頭ページの冗長エリアに格納された分散管理情報と同じものが格納される。ただし、最終ページの冗長エリアには、分散管理情報ではなく、分散管理情報だけでは管理しきれない追加情報として、いわゆる追加管理情報が格納される。
【００５０】
このように、このフラッシュメモリ１２では、各ブロック内の冗長エリアに分散管理情報が格納される。分散管理情報は、当該分散管理情報が格納されたブロックを管理するための情報である。この分散管理情報により、例えば、当該ブロックがファイルの先頭となるブロックであるか否かについての情報や、複数のブロックからファイルが構成される場合にはそれらのブロックの繋がりを示す情報等を得ることができる。なお、この分散管理情報については、後で詳細に説明する。
【００５１】
そして、このメモリカード２では、各ブロックの分散管理情報を集めることにより、フラッシュメモリ全体を管理するための情報として、いわゆる集合管理情報を作成して、この集合管理情報をファイルとしてフラッシュメモリ１２に格納しておくようにする。
【００５２】
そして、通常は、集合管理情報によって、各ブロックにアクセスするために必要な情報を得るようにする。すなわち、データ処理装置１とメモリカード２との間でデータのやり取りを行う際、データ処理装置１は、集合管理情報をメモリカード２から読み出して内部メモリ４に管理テーブルを作成し、この管理テーブルに基づいてメモリカード２にアクセスする。これにより、データアクセスの都度、個々のブロックに格納された分散管理情報にアクセスするような必要がなくなり、より高速なデータアクセスが可能となる。
【００５３】
５．分散管理情報
つぎに、分散管理情報について詳細に説明する。
【００５４】
分散管理情報は、当該分散管理情報が格納されたブロックを管理するための情報であり、１６バイトの冗長エリアに書き込まれてなる。具体的には、図５に示すように、１バイトの可／不可フラグと、１バイトのブロックフラグと、４ビットの最終フラグと、４ビットの参照フラグと、１バイトの管理フラグと、２バイトの論理アドレスと、２バイトの連結アドレスと、３バイトのリザーブ領域と、２バイトの分散管理情報用エラー訂正符号と、３バイトのデータ用エラー訂正符号とからなる。
【００５５】
可／不可フラグは、ブロックが使用可能状態か使用不可能状態かを示すフラグであり、具体的には、「使用可」と「使用不可」の２つの状態を示す。「使用可」は、当該ブロックが使用可能な状態を示し、「使用不可」は、当該ブロックが使用不可能な状態であることを示す。例えば、ブロック内に回復不能なエラーが生じたようなときに、この可／不可フラグが「使用不可」に設定され、当該ブロックが使用不可とされる。
【００５６】
ブロックフラグは、ブロックの状態を示すフラグであり、具体的には、「未使用」「先頭使用」「使用」「未消去」の４つの状態を示す。「未使用」は、当該ブロックが未使用又は消去済みで、初期状態（全ビットが「１」の状態）とされており、直ぐにデータの書き込みが可能な状態を示す。「先頭使用」は、当該ブロックがファイルの先頭で使用されている状態を示す。なお、ブートデータが格納されたブートブロックにおいて、ブロックフラグは「先頭使用」とされる。「使用」は、当該ブロックがファイルの先頭以外で使用されている状態を示す。ブロックフラグが「使用」のとき、当該ブロックは、他のブロックから連結されていることとなる。「未消去」は、当該ブロックに書かれていたデータが無効となった状態を示す。例えば、データの消去を行うときに、取りあえずブロックフラグを「未消去」にしておき、処理時間に余裕があるときに、ブロックフラグが「未消去」になっているブロックを消去するようにする。これにより、消去処理をより効率良く行うことが可能となる。
【００５７】
最終フラグは、ファイルが終わっているか否かを示すフラグであり、具体的には、「ブロック連続」「ブロック最終」の２つの状態を示す。「ブロック連続」は、次のブロックへの連結があることを示す。すなわち、「ブロック連続」は、当該ブロックに格納されたファイルにはまだ続きがあり、当該ファイルが他のブロックに続いていることを示す。「ブロック最終」は、最終ブロックであることを示す。すなわち、「ブロック最終」は、当該ブロックに格納されたファイルが、このブロックで終了していることを示す。
【００５８】
参照フラグは、追加管理情報の参照を指定するためのフラグであり、具体的には、「参照情報なし」「参照情報あり」の２つの状態を示す。「参照情報なし」は、ブロックの最終ページの冗長領域に、有効な追加管理情報が存在しないことを示す。「参照情報あり」は、ブロックの最終ページの冗長領域に、有効な追加管理情報が存在していることを示す。
【００５９】
管理フラグは、ブロックの属性等を示すフラグである。例えば、この管理フラグによって、当該ブロックが読み出し専用ブロックか、或いは書き込みも可能なブロックであるかが示される。また、例えば、この管理フラグによって、当該ブロックがブートブロックであるか、或いはデータブロックであるかが示される。
【００６０】
論理アドレスは、文字通りそのブロックの論理アドレスを示す。この論理アドレスの値は、データの書き換えを行うときなどに必要に応じて更新される。なお、論理アドレスの値は、正常に処理が行われている限り、同じ論理アドレスの値を同時に複数のブロックが持つことがないように設定される。
【００６１】
ところで、フラッシュメモリの場合、同一ブロック内でデータを書き換えるには、上述したように、先ずブロック消去を行う必要がある。しかしながら、保証されている消去可能回数には上限があり、ブロック消去の回数は出来るだけ少なくすることが要求される。そこで、ブロックのデータを更新する際は、同一のブロックを使って新たなデータに書き換えるのではなく、他のブロックに新たなデータを書き込むようにする。このとき、先にデータが格納されていたブロックは、当該ブロックに格納されていたデータが無効になったことを示すように、ブロックフラグを「未消去」にする。そして、このメモリカード２では、このようにデータを更新した場合でも、当該データが格納されているブロックを示すアドレスが同じとなるように、各ブロックに対して予め設定されている物理アドレスとは別に、動的に変更が可能な論理アドレスを各ブロックに割り当てて、この論理アドレスでデータが格納されているブロックを表すようにする。
【００６２】
連結アドレスは、当該ブロックに連結するブロックの論理アドレスを示す。すなわち、ブロックに格納されたファイルにはまだ続きがあり、当該ファイルが他のブロックに続いている場合、連結アドレスには、そのファイルの続きが格納された次のブロックの論理アドレスの値が設定される。
【００６３】
分散管理情報用エラー訂正符号は、分散管理情報のうち、管理フラグ、論理アドレス、連結アドレス及びリザーブ領域に書き込まれたデータを対象としたエラー訂正符号である。なお、可／不可フラグ、ブロックフラグ、最終フラグ及び参照フラグは、分散管理情報用エラー訂正符号によるエラー訂正の対象となっていない。したがって、可／不可フラグ、ブロックフラグ、最終フラグ及び参照フラグは、分散管理情報用エラー訂正符号を更新することなく書き換えることが可能となっている。
【００６４】
データ用エラー訂正符号は、当該データ用エラー訂正符号が格納されているページのデータエリアに書き込まれたデータを対象としたエラー訂正符号である。
【００６５】
なお、分散管理情報用エラー訂正符号やデータ用エラー訂正符号は、メモリカード２の内部に配されたエラー訂正回路１６によって使用される。したがって、これらのエラー訂正符号を用いてのエラー訂正は、データ処理装置１に依存することなく、メモリカード２に依存した任意の手法を使用することができる。
【００６６】
６．追加管理情報
つぎに、追加管理情報について詳細に説明する。
【００６７】
追加管理情報は、ブロックの最終ページの１６バイトの冗長エリアに格納される情報であり、分散管理情報だけでは管理しきれない追加情報を含んでいる。
【００６８】
具体的には、追加管理情報は、図６に示すように、１バイトの可／不可フラグと、１バイトのブロックフラグと、４ビットの最終フラグと、４ビットの参照フラグと、１バイトの識別番号と、２バイトの有効データサイズと、５バイトのリザーブ領域と、２バイトの追加管理情報用エラー訂正符号と、３バイトのデータ用エラー訂正符号とからなる。
【００６９】
ここで、可／不可フラグ、ブロックフラグ、最終フラグ、参照フラグ、リザーブ領域及びデータ用エラー訂正符号については、分散管理情報の場合と同様である。また、追加管理情報用エラー訂正符号は、分散管理情報における分散管理情報用エラー訂正符号に相当するものであり、追加管理情報のうち、識別番号、有効データサイズ及びリザーブ領域に書き込まれデータを対象としたエラー訂正符号である。
【００７０】
そして、識別番号及び有効データサイズとが、分散管理情報だけでは管理しきれない追加情報として、追加管理情報に含まれている。
【００７１】
識別番号は、エラー処理用の情報であり、ブロックのデータを書き換える度に、この識別番号の値がインクリメントされる。この識別番号は、何らかのエラーが発生して、同じ論理アドレスを持つブロックが複数存在するようになってしまった場合に、それらのブロックに書き込まれたデータの新旧を識別するために使用される。なお、識別番号には１バイトの領域が使用され、その値の範囲は「０」から「２５５」までであり、その初期値は「０」とされる。なお、識別番号が「２５５」を越えたときには「０」に戻される。そして、同じ論理アドレスを持つデータブロックが複数存在する場合には、この識別番号の値が小さい方のデータブロックを有効とする。ただし、ブートブロックについては、ブートブロックの予備がある場合、正常時にはそれらのブートブロックの識別番号は同じ値とされる。何らかの異常により、それらのブートブロックの識別番号が異なるような状態となった場合には、識別番号の値が大きい方のブートブロックを有効とする。
【００７２】
また、有効データサイズは、ブロック内の有効なデータのサイズを示す。すなわち、当該ブロックのデータエリアに空きがある場合、有効データサイズには、当該データエリアに書き込まれたデータのサイズを示す値が設定される。このとき、分散管理情報の参照フラグは「参照情報あり」に設定される。なお、ブロックのデータエリアに空きがない場合、有効データサイズには、当該データエリアに空きがないことを示す値として、「0xffff」が設定される。
【００７３】
なお、以上のような分散管理情報及び追加管理情報は、ブロック内のデータが更新される毎に、常に最新情報となるように更新される。
【００７４】
７．集合管理情報
つぎに、集合管理情報について詳細に説明する。
【００７５】
集合管理情報は、上述したように、各ブロックの分散管理情報を集めて作成されてなる情報であり、ファイルとしてフラッシュメモリ１２に格納される。すなわち、図７に示すように、各ブロックの分散管理情報から、全ブロックをまとめて管理するための情報である集合管理情報のファイルが作成され、この集合管理情報が所定のブロックのデータエリアに格納される。なお、集合管理情報は、１つのブロックに格納されるものであっても、複数のブロックにわたって格納されるものであってもよい。そして、データ処理装置１は、通常は、この集合管理情報によって、各ブロックにアクセスするために必要な情報を得るようにする。
【００７６】
すなわち、メモリカード２に有効な集合管理情報がファイルとして格納されている場合、データ処理装置１は、その集合管理情報のファイルを読み出して内部メモリ４に展開し、メモリカード２を管理するための管理テーブルを作成する。なお、集合管理情報のファイルの先頭が格納されているブロックの物理アドレスは、ブートデータに含まれており、データ処理装置１は、この物理アドレスに基づいて集合管理情報のファイルにアクセスする。
【００７７】
この集合管理情報は、図８に示すように、この集合管理情報のヘッダーと、各ブロックの状態を示すビットマップテーブルと、ブロックにアクセスするときに、指定された論理アドレスから物理アドレスへの変換を行うための変換テーブルと、あるブロックの次のブロックを示す連結テーブルとを有する。
【００７８】
ビットマップテーブルには、各ブロックの分散管理情報から抽出された、可／不可フラグ、ブロックフラグ、最終フラグ、参照フラグ及び管理フラグ等の情報が格納される。
【００７９】
変換テーブルは、図９に示すように、論理アドレスに対応する物理アドレスが記述されたテーブルであり、物理アドレスが格納される領域は、１エントリあたり２バイトとされる。この変換テーブルを分散管理情報から作成するときは、対象となるブロックの分散管理情報に書かれている論理アドレスを調べ、テーブルの対応位置にそのブロックの物理アドレスを登録する。なお、論理アドレスを使用していない場合、対応する物理アドレスには「0xffff」を設定しておく。
【００８０】
連結テーブルは、図１０に示すように、論理アドレスに対応する連結アドレスが記述されたテーブルであり、連結アドレスが格納される領域は、１エントリあたり２バイトとされる。この連結テーブルを分散管理情報から作成するときは、対象となるブロックの分散管理情報に書かれている連結アドレスを調べ、テーブルの対応位置にそのブロックの連結アドレスを登録する。
【００８１】
８．メモリカード起動時の手順
つぎに、メモリカード２の起動時の手順について、図１１のフローチャートを参照して説明する。
【００８２】
このメモリカード２を起動する際は、図１１に示すように、先ず、ステップＳ１において、データ処理装置１は、メモリカード２のブートブロックからブートデータを読み込む。次に、ステップＳ２へ進む。
【００８３】
ステップＳ２において、データ処理装置１は、ブートブロックからのブートデータの読み込みが正常に行われたかを確認する。正常に読み込まれたならば、ステップＳ３へ進み、正常に読み込まれなかったならば、ステップＳ８へ進む。
【００８４】
ステップ３において、データ処理装置１は、読み込んだブートデータに基づいて、メモリカード２が当該データ処理装置１に対応しているか否かを判別する。対応したメモリカードであるならば、ステップＳ４へ進み、対応していないメモリカードならば、ステップＳ８へ進む。
【００８５】
ステップＳ４において、データ処理装置１は、メモリカード２から集合管理情報を読み込む。なお、集合管理情報が格納されているブロックの物理アドレスは、ブートデータの中で指定されている。次に、ステップＳ５へ進む。
【００８６】
ステップＳ５において、データ処理装置１は、有効な集合管理情報の読み込みが正常に行われたかを確認する。正常に読み込めたならば、ステップＳ６へ進み、正常に読み込めなかったならば、ステップＳ７へ進む。
【００８７】
ステップＳ６において、データ処理装置１は、読み込んだ集合管理情報を内部メモリ４に展開し、メモリカード２を管理するための管理テーブルを作成する。以上の処理で、メモリカード２の起動時の初期処理が完了し、メモリカード２の使用が可能となる。
【００８８】
また、ステップＳ５で有効な集合管理情報が正常に読み込めなかったと判断された場合は、上述したようにステップＳ７へ進む。ステップＳ７において、データ処理装置１は、各ブロックの分散管理情報を読み出して、集合管理情報を再構築する。そして、その集合管理情報を内部メモリ４に展開し、メモリカード２を管理するための管理テーブルを作成する。以上の処理で、メモリカード２の起動時の初期処理が完了し、メモリカード２の使用が可能となる。
【００８９】
一方、ステップＳ２でブートデータ読み込み時にエラーが生じたと判断された場合、及び、ステップＳ３でメモリカード２がデータ処理装置１に対応していないと判断された場合は、上述したようにステップＳ８へ進む。
【００９０】
ステップＳ８に進むのは、メモリカード２を使用できないときである。そこで、ステップＳ８において、データ処理装置１は、例えば、利用不可のメッセージを表示するなどの所定のエラー処理を行い、メモリカード２の起動処理を終了する。
【００９１】
９．データ更新処理時の集合管理情報の取り扱い
データ処理装置１は、メモリカード２へデータを書き込む処理や、メモリカード２からデータを消去する処理（以下、これらの処理をまとめて「データ更新処理」と称する。）を行う毎に、内部メモリ４に保持している管理テーブルを、メモリカード２の実際の状態と整合するように（すなわち、分散管理情報の内容と整合するように）、随時更新していく。一方、メモリカード２にファイルとして格納されている集合管理情報は、データ更新処理毎に更新されるのではなく、適当なタイミングにて、その変更内容が一括して更新される。
【００９２】
一般にフラッシュメモリ１２の書き換え可能回数には上限があるが、集合管理情報の書き換えをある程度まとめて一括して行うようにすることで、集合管理情報が格納されているブロックの書き換え回数を削減することができ、メモリカード２の長寿命化を図ることができる。
【００９３】
ただし、データ更新処理を行う際は、メモリカード２に格納されている集合管理情報のファイルを無効にしてから行う。これは、分散管理情報と集合管理情報の一貫性を損なわないためである。データ更新処理時には、処理の対象となるブロックの分散管理情報は同時に更新されるが、集合管理情報の内容は同時には更新されないので、分散管理情報と集合管理情報とが一致しない状態となる。そこで、このような状態のときには、メモリカード２に格納されている集合管理情報のファイルを無効にしておく。
【００９４】
具体的には、データ更新処理時には、図１２に示すように、先ず、ステップＳ１１において、データ処理装置１は、メモリカード２に格納されている集合管理情報が有効であるか無効であるかを判別する。そして、集合管理情報が既に無効となっていたならば、そのままデータ更新処理に移行する。一方、集合管理情報が有効であれば、ステップＳ１２へ進む。
【００９５】
ステップＳ１２において、データ処理装置１は、集合管理情報を無効にする。具体的には、集合管理情報のファイルが格納されているブロックのブロックフラグを「未消去」にするか、或いは当該ブロックに対して消去処理を施してデータを消去する。そして、このように集合管理情報を無効にした上で、データ更新処理に移行する。
【００９６】
なお、メモリカード２に格納されている集合管理情報のファイルは、分散管理情報と集合管理情報の一貫性を損なわないために、データ更新処理時に無効とされるが、データ処理装置１の内部メモリ４に保持されている管理テーブルの内容は、常に最新の状態となるように随時更新される。そして、データ処理装置１は、通常は、この管理テーブルに基づいて各ブロックを管理する。
【００９７】
また、データ更新処理時に無効とされた集合管理情報は、適当なタイミングで、改めてメモリカード２に書き込まれて、再び有効とされる。なお、ここでの適当なタイミングとは、例えば、メモリカード２の使用を終了して電源を落とすときや、メモリカード２へのアクセスが所定時間以上なされなかったときや、データの書き換えが所定回数以上行われたときなどである。
【００９８】
具体的には、例えば、メモリカード２の使用を終了して電源を落とす前に、図１３に示すような終了処理を行い、集合管理情報を有効なものとする。
【００９９】
この終了処理では、先ず、ステップＳ２１において、データ処理装置１は、メモリカード２に格納されている集合管理情報が有効であるか無効であるかを判別する。そして、集合管理情報が有効であれば、そのまま処理を終了する。一方、集合管理情報が無効であれば、ステップＳ２２へ進む。
【０１００】
ステップＳ２２において、データ処理装置１は、集合管理情報のファイルが格納されているブロックに対して、消去処理が施されているか否かを判別する。消去処理が施されていなければ、ステップＳ２３へ進み、消去処理が施されていれば、ステップＳ２４へ進む。
【０１０１】
ステップＳ２３において、データ処理装置１は、集合管理情報のファイルが格納されているブロックに対して消去処理を施す。その後、ステップＳ２４へ進む。
【０１０２】
ステップＳ２４において、データ処理装置１は、メモリカード２に集合管理情報を書き込む。このとき、データ処理装置１は、内部メモリ４に保持している管理テーブルの内容に基づいて新しい集合管理情報のファイルを作成し、その新しい集合管理情報のファイルをメモリカード２に書き込む。これにより、メモリカード２の最新の状態を示す有効な集合管理情報が、メモリカード２に格納されたこととなる。
【０１０３】
以上で終了処理が完了し、メモリカード２に有効な集合管理情報が格納された状態となる。
【０１０４】
１０．新規ファイルの書き込み
つぎに、メモリカード２に新規なファイルを書き込む際の処理手順について説明する。メモリカード２にファイルを書き込む際の処理手順は、ファイルサイズが予め分かっている場合と、分かっていない場合とで異なる。
【０１０５】
１０−１  ファイルサイズが予め分かっている場合
予めファイルのサイズが分かっている場合は、当該ファイルのデータを新規なブロックに書き込む毎に、データが当該ブロックに納まるかどうかを判断する。そして、データがブロック内に納まりきらない場合には、次に続くブロックの論理アドレスを確保しておき、データをデータエリアに書き込むとともに、次に続くブロックの論理アドレスを連結アドレスとして分散管理情報を書き込む。このとき、最終フラグは「ブロック連続」に設定しておく。一方、データがブロック内に納まる場合には、データの端数部分、すなわちデータエリアの空き領域は「0xffff」としておく。このとき、最終フラグは「ブロック最終」に設定しておき、追加管理情報に有効データサイズを書き込んでおく。
【０１０６】
つぎに、以上のように予めサイズが分かっているファイルをメモリカード２に書き込む際の手順について、図１４に示すフローチャートを参照して、詳細に説明する。なお、図１４に示すフローチャート、並びに後掲する図１５及び図１７に示すフローチャートでは、メモリカード２の誤消去防止スイッチ２０のチェックや、何らかのエラーが発生したときの処理等については省略している。
【０１０７】
予めサイズが分かっているファイルをメモリカード２に書き込む際は、先ず、ステップＳ３１において、データ処理装置１は、メモリカード２に書き込む実データと、当該実データのヘッダーとを準備する。換言すれば、ステップＳ３１において、データ処理装置１は、メモリカード２のデータエリアに書き込むファイルを準備する。なお、当該ファイルのヘッダーには、ファイルのサイズの情報が含まれる。次に、ステップＳ３２へ進む。
【０１０８】
ステップＳ３２において、データ処理装置１は、最初にファイルが格納されるブロックのブロックフラグを「先頭使用」に設定するとともに、空いている論理アドレスを確保する。次に、ステップＳ３３へ進む。
【０１０９】
ステップＳ３３において、データ処理装置１は、空いている物理アドレスを検索する。次に、ステップＳ３４へ進む。
【０１１０】
ステップＳ３４において、データ処理装置１は、処理の対象となっているブロックにファイルが納まりきるか否かを判別する。ファイルがブロック内に納まりきらず、ファイルに続きがある場合には、ステップ３５へ進み、一方、ファイルがブロック内に納まり、ファイルに続きがない場合には、ステップ３６へ進む。
【０１１１】
ステップＳ３５において、データ処理装置１は、次に続くブロックの論理アドレスを確保して、この論理アドレスを連結アドレスとして設定する。次に、ステップＳ３７へ進む。
【０１１２】
一方、ステップＳ３６において、データ処理装置１は、最終フラグを「ブロック最終」に設定するとともに、連結アドレスを「0xffff」に設定する。次に、ステップＳ３７へ進む。
【０１１３】
ステップＳ３７において、データ処理装置１は、これまでのステップで設定された情報等に基づいて、処理の対象となっているブロックについての分散管理情報を作成する。次に、ステップＳ３８へ進む。
【０１１４】
ステップＳ３８において、データ処理装置１は、処理の対象となっているブロックに、ページ単位でデータを順次書き込む。ここで、処理の対象となっているブロックにファイルが納まりきらない場合には、１ブロック分のデータがページ単位で書き込まれる。また、処理の対象となっているブロックにファイルが納まりきる場合には、必要なページ分だけページ単位でデータが書き込まれる。なお、このステップＳ３８で、ブロックに書き込まれるのは、新規に書き込むファイルのデータと、ステップＳ３７で作成された分散管理情報とである。次に、ステップＳ３９へ進む。
【０１１５】
ステップＳ３９において、データ処理装置１は、ファイルの全データについて、メモリカード２への書き込みが終了したか否かを判別する。書き込みが終了しておらず、まだデータが残っていれば、ステップＳ３３へ戻って処理を繰り返す。一方、書き込みが終了していれば、ステップ４０へ進む。
【０１１６】
ステップＳ４０において、データ処理装置１は、書き込んだデータが、ブロックの途中で終わっているか否かを判別する。そして、データがブロックの途中で終わっていれば、ステップＳ４１へ進む。一方、ブロックの最後までデータが格納されていれば、これで処理を終了する。
【０１１７】
ステップＳ４１において、データ処理装置１は、最終ページの冗長エリアに格納される追加管理情報に有効データサイズを書き込む。すなわち、データ処理装置１は、ファイルの最後の部分が格納されたブロックのデータエリアに書き込まれたデータのサイズを示す値を、当該ブロックの追加管理情報に有効データサイズとして書き込む。
【０１１８】
以上で、予めサイズが分かっているファイルのメモリカード２への書き込みの処理が完了する。
【０１１９】
１０−２  ファイルサイズが分かっていない場合
ファイルのサイズが予め分からない場合には、次に続くブロックの論理アドレスを常に確保しておき、データが終了した時点で、最終ブロックの最終フラグをオーバーライトにより設定する。なお、その他の分散管理情報及び追加管理情報に関しては、予めファイルサイズが分かっているときと同様に設定される。
【０１２０】
サイズが予め分かっていないファイルをメモリカード２に書き込む際の手順について、図１５に示すフローチャートを参照して、詳細に説明する。
【０１２１】
サイズが予め分かっていないファイルをメモリカード２に書き込む際は、先ず、ステップＳ５１において、データ処理装置１は、メモリカード２に書き込むファイルの仮のヘッダーを作成する。この段階では、ファイルサイズが不明なので、この仮のヘッダーには、ファイルサイズの情報が含まれていない。次に、ステップＳ５２へ進む。
【０１２２】
ステップＳ５２において、データ処理装置１は、最初にファイルが格納されるブロックのブロックフラグを「先頭使用」に設定するとともに、空いている論理アドレスを確保する。次に、ステップＳ５３へ進む。
【０１２３】
ステップＳ５３において、データ処理装置１は、メモリカード２に書き込むデータを準備する。次に、ステップＳ５４へ進む。
【０１２４】
ステップＳ５４において、データ処理装置１は、メモリカード２に書き込むデータが残っているか否かを判別する。データが終了しておらず、まだデータが残っていれば、ステップＳ５５へ進む。一方、データが終了しており、データが残っていなければ、ステップＳ６１へ進む。
【０１２５】
ステップＳ５５において、データ処理装置１は、空いている物理アドレスを検索する。次に、ステップＳ５６へ進む。
【０１２６】
ステップＳ５６において、データ処理装置１は、次に続くブロックの論理アドレスを確保して、この論理アドレスを連結アドレスとして設定する。次に、ステップＳ５７へ進む。
【０１２７】
ステップＳ５７において、データ処理装置１は、これまでのステップで設定された情報等に基づいて、処理の対象となっているブロックについての分散管理情報を作成する。次に、ステップＳ５８へ進む。
【０１２８】
ステップＳ５８において、データ処理装置１は、処理の対象となっているブロックに、ページ単位でデータを順次書き込む。ここで、処理の対象となっているブロックにファイルが納まりきらない場合には、１ブロック分のデータがページ単位で書き込まれる。また、処理の対象となっているブロックにファイルが納まりきる場合には、必要なページ分だけページ単位でデータが書き込まれる。なお、このステップＳ５８でブロックに書き込まれるのは、新規に書き込むファイルのデータと、ステップＳ５７で作成された分散管理情報とである。次に、ステップＳ５９へ進む。
【０１２９】
ステップＳ５９において、データ処理装置１は、書き込んだデータが、ブロックのデータエリアの途中で終わっているか否かを判別する。そして、データエリアの最後に至るまでデータが格納されていれば、ステップＳ５３へ戻って処理を繰り返す。一方、データがデータエリアの途中で終わっていれば、ステップＳ６０へ進む。
【０１３０】
ステップＳ６０において、データ処理装置１は、処理の対象となっているブロックの最終ページの冗長エリアに格納される追加管理情報に、有効データサイズを書き込む。すなわち、データ処理装置１は、ファイルの最後の部分が格納されたブロックのデータエリアに書き込まれたデータのサイズを示す値を、当該ブロックの追加管理情報に有効データサイズとして書き込む。次に、ステップＳ６１へ進む。
【０１３１】
ステップＳ６１において、データ処理装置１は、処理の対象となっているブロックの最終フラグを「ブロック最終」にオーバーライトにより設定する。次に、ステップＳ６２へ進む。
【０１３２】
ステップＳ６２において、データ処理装置１は、ファイルのヘッダーを更新する。すなわち、この段階では、ファイルサイズが明らかとなっているので、ファイルサイズの情報を含むヘッダーを新たに作成して、上述した仮のヘッダーを、ファイルサイズの情報を含む新たなヘッダーに書き換える。
【０１３３】
以上で、予めサイズが分かっていなかったファイルのメモリカード２への書き込みの処理が完了する。
【０１３４】
１１．ファイルの更新
つぎに、メモリカード２に格納されているファイルを更新する際の処理手順について説明する。
【０１３５】
ファイルの更新時には、データの書き換えの対象となるブロックと同じ論理アドレスを別のブロックに付して、当該ブロックに対して新しいデータを書き込む。このとき、古いデータが書かれているブロックは、ファイルの更新が終了するまで開放せずに保持しておく。これにより、ファイル更新中に障害が発生したとしても、ファイル更新前の状態に復旧することが可能となる。
【０１３６】
このようなファイル更新の手順の具体的な例を図１６を参照して説明する。
【０１３７】
図１６（ａ）に示すように、ファイルの先頭が、論理アドレス「１」のブロックに格納され、ファイルの次の部分が、論理アドレス「２」のブロックに格納され、ファイルの次の部分が、論理アドレス「３」のブロックに格納されていたとする。また、論理アドレス「１」のブロックの識別番号は「６」、論理アドレス「２」のブロックの識別番号は「４」、論理アドレス「３」のブロックの識別番号は「１」であったとする。
【０１３８】
そして、このような状態のときに、論理アドレス「２」のブロックのデータを書き換えるとする。このときは、先ず、図１６（ｂ）に示すように、空いている別にブロックに論理アドレス「２」を割り当て、このブロックに新しいデータを書き込む。ここで、新しいデータを書き込むブロックの識別番号には、古いデータが書き込まれているブロックの識別番号を１インクリメントした値、すなわち「５」を設定する。
【０１３９】
この段階では、同じ論理アドレスを持つブロックが２つ存在していることとなる。そして、これらの２つのブロックのうち、識別番号が大きい方のブロックに格納されているデータが新しい方のデータであり、識別番号が小さい方のブロックに格納されているデータが古い方のデータとなる。
【０１４０】
そして、新しいデータの書き込みが正常に完了したら、次に、図１６（ｃ）に示すように、古いデータが書き込まれていたブロックを消去する。なお、このときは、古いデータが書き込まれていたブロックに対して消去処理を施すのではなく、該当するブロックのブロックフラグを「未消去」にするだけにしておき、後から適当なタイミングで、このブロックに対して消去処理を施すようにしてもよい。
【０１４１】
以上のような処理の手順について、図１７に示すフローチャートを参照して、詳細に説明する。
【０１４２】
ファイルを更新する際は、先ず、ステップＳ７１において、データ処理装置１は、更新の対象となるブロックを選択する。次に、ステップＳ７２へ進む。
【０１４３】
ステップＳ７２において、データ処理装置１は、更新の対象となるブロックの識別番号を読み出し、その値を１インクリメントした値を、新しいデータを書き込むブロックの識別番号として設定する。また、新しいデータを書き込むブロックの論理アドレスとして、更新の対象となるブロックの論理アドレスと同じ値を設定する。次に、ステップＳ７３へ進む。
【０１４４】
ステップＳ７３において、データ処理装置１は、ブロックに書き込む新しいデータを準備する。次に、ステップＳ７４に進む。
【０１４５】
ステップＳ７４において、データ処理装置１は、空いている物理アドレスを検索する。次に、ステップＳ７５に進む。
【０１４６】
ステップＳ７５において、データ処理装置１は、データの変更が全て完了しているか否かを判別する。完了していなければ、ステップＳ７６へ進み、完了していれば、ステップＳ７９へ進む。
【０１４７】
ステップＳ７６において、データ処理装置１は、次に続くブロックの論理アドレスを確保して、この論理アドレスを連結アドレスとして設定する。次に、ステップＳ７７へ進む。
【０１４８】
ステップＳ７７において、データ処理装置１は、これまでのステップで設定された情報等に基づいて、新しいデータを書き込むブロックについての分散管理情報を作成する。次に、ステップＳ７８へ進む。
【０１４９】
ステップＳ７８において、データ処理装置１は、ステップＳ７４で検索された物理アドレスのブロックに、ページ単位で新しいデータを順次書き込む。ここで、処理の対象となっているブロックにファイルが納まりきらない場合には、１ブロック分のデータがページ単位で書き込まれる。また、処理の対象となっているブロックにファイルが納まりきる場合には、必要なページ分だけページ単位でデータが書き込まれる。なお、このステップＳ７８で、ブロックに書き込まれるのは、新しいファイルのデータと、ステップＳ７７で作成された分散管理情報とである。そして、このステップＳ７８の後は、ステップＳ７３へ戻って処理を繰り返す。
【０１５０】
一方、ステップＳ７９において、データ処理装置１は、最後に更新の対象となっていたブロックに、連結アドレスが設定されているか否かを判別する。連結アドレスが設定されていなければ、ステップＳ８０へ進み、連結アドレスが設定されていたならば、ステップＳ８１へ進む。
【０１５１】
ステップＳ８０において、データ処理装置１は、最後に新しいデータを書き込んだブロックの最終フラグを「ブロック最終」に設定する。次に、ステップＳ８２へ進む。
【０１５２】
一方、ステップＳ８１において、データ処理装置１は、最後に新しいデータを書き込んだブロックの連結アドレスに、最後に更新の対象となっていたブロックに設定されていた連結アドレスの値を設定する。次に、ステップＳ８２へ進む。
【０１５３】
ステップＳ８２において、データ処理装置１は、ファイルのヘッダーを更新する。すなわち、ファイルの更新により、ファイルサイズが変更となっている可能性があるので、新しいファイルサイズの情報を含むヘッダーを新たに作成して、ファイルのヘッダーを更新する。次に、ステップＳ８３へ進む。
【０１５４】
ステップＳ８３において、データ処理装置１は、古いデータが書き込まれていたブロックを消去する。なお、このときは、古いデータが書き込まれていたブロックに対して消去処理を施すのではなく、該当するブロックのブロックフラグを「未消去」にするだけにしておき、後から適当なタイミングで、これらのブロックに対して消去処理を施すようにしてもよい。
【０１５５】
以上でファイルの更新処理が完了する。
【０１５６】
１２．エラー検出訂正処理
以上のようなシステムでは、メモリカード２に新規ファイルを書き込んでいるときや、メモリカード２に格納されているファイルを更新しているときなどに、いきなり電源が遮断されたり、メモリカード２がデータ処理装置１から強制的に取り外されたりすると、同じ論理アドレスを持つ複数のブロックが同時に存在するような状態（すなわち論理アドレスエラー）となってしまったり、或いは、連結アドレスで指し示されたブロックが存在しないような状態（すなわち連結アドレスエラー）となってしまったりする可能性がある。
【０１５７】
そこで、本発明を適用したシステムでは、集合管理情報を構築する際に、論理アドレスエラーや連結アドレスエラーを検出して訂正するエラー検出訂正処理を行うようにする。以下、このエラー検出訂正処理について、詳細に説明する。
【０１５８】
１２−１  エラー検出テーブル
本発明を適用したシステムでは、集合管理情報を構築する際に、論理アドレスエラーや連結アドレスエラーの検出を行う。そして、連結アドレスエラーを検出するために使用するテーブルとして、エラー検出テーブルを使用する。エラー検出テーブルは、連結アドレスエラーの検出にだけ使用されるテーブルであり、エラー検出訂正処理を行う際に、データ処理装置１の内部メモリ４に一時的に確保される。エラー検出テーブルのために確保されていた領域は、エラー検出訂正処理が終了した後、開放される。
【０１５９】
このエラー検出テーブルは、図１８に示すように、１論理アドレスに対して、各ブロックの連結状態を示す１ビットの領域を備えたテーブルである。換言すれば、エラー検出テーブルは、１エントリあたり１ビットとなっており、各エントリは論理アドレスの連結状態を「０」又は「１」で示す。処理の対象となるブロックがＮ個ある場合、このエラー検出テーブルが占める領域は、Ｎ／８バイトとなる。
【０１６０】
このエラー検出テーブルは、集合管理情報を構築しているときと、集合管理情報の構築が終了したときとで、各ブロックの連結状態を示す値の意味合いが異なる。
【０１６１】
集合管理情報を構築している最中において、連結状態を示す値が「０」のとき、そのエントリは、正常な状態であることを示しているか、或いは、当該エントリに対応する論理アドレスが、現在処理の対象となっているブロックまでの間に他のブロックの連結アドレスで指定されていないことを示している。この状態のときは、今後の処理が進むに従って、値が「１」になる可能性があり、連結アドレスエラーであるかどうか不確定な状態である。
【０１６２】
また、集合管理情報を構築している最中において、連結状態を示す値が「１」のとき、そのエントリは、当該エントリに対応する論理アドレスが、現在処理の対象となっているブロックまでの間に他のブロックの連結アドレスとして指定されているが、物理アドレスに対応していない状態を示す。この状態のときは、今後の処理が進むに従って、値が「０」になる可能性があり、連結アドレスエラーであるかどうか不確定な状態である。
【０１６３】
一方、集合管理情報の構築が終了した段階で、連結状態を示す値が「１」のとき、そのエントリは、当該エントリに対応する論理アドレスが連結アドレスとして指定されているのに、対応する物理アドレスが存在しないことを示している。したがって、この状態のときは、連結アドレスエラーである。
【０１６４】
また、集合管理情報の構築が終了した段階で、連結状態を示す値が「０」のとき、そのエントリは、当該エントリに対応する論理アドレスに関する連結が正常な状態となっていることを示している。
【０１６５】
１２−２  連結アドレスエラーの検出
つぎに、以上のようなエラー検出テーブルを用いて行われる、連結アドレスエラーの検出について、具体的な例を挙げて説明する。
【０１６６】
例えば、図１９に示すように、物理アドレス「１０」のブロックについて、その論理アドレスが「１」、その連結アドレスが「３」であり、また、物理アドレス「１７」のブロックについて、その論理アドレスが「３」、その連結アドレスが「２」であったとする。また、論理アドレスが「２」のブロックは存在しないとする。
【０１６７】
このとき、集合管理情報の再構築の処理が行われると、集合管理情報の再構築に伴って、図２０に示すように、連結アドレスエラーの検出が行われる。
【０１６８】
先ず、初期状態では、図２０（ａ）に示すように、論理アドレス「１」「２」「３」のそれぞれについて、エラー検出テーブルの値は、すべて初期値「０」とする。また、集合管理情報の変換テーブルも、全て初期値「0xffff」とする。このとき、集合管理情報の連結テーブルは、全く値が入っていない状態とする。
【０１６９】
次に、論理アドレス「１」のブロックについての情報を読み込む。これにより、図２０（ｂ）に示すように、論理アドレス「１」に対応する変換テーブルの値は、論理アドレス「１」のブロックの物理アドレスの値、すなわち「１０」とされる。また、論理アドレス「１」に対応する連結テーブルの値は、論理アドレス「１」のブロックの連結アドレスの値、すなわち「３」とされる。
【０１７０】
次に、論理アドレス「１」に対応する連結テーブルの値が指し示す論理アドレス「３」のエントリを確認する。このとき、論理アドレス「３」のエントリには、物理ブロックが割り当てられていないので、図２０（ｃ）に示すように、論理アドレス「３」に対応するエラー検出テーブルの値を「１」とする。また、論理アドレス「３」に対応する変換テーブルの値は、連結元の論理アドレスの値、すなわち「１」とする。
【０１７１】
次に、エラー検出テーブルの値が「１」となっている論理アドレス「３」のブロックについて、その情報を読み込む。このとき、論理アドレス「３」のブロックは存在しており、当該ブロックの情報は正常に読み込むことができる。したがって、図２０（ｄ）に示すように、論理アドレス「３」に対応するエラー検出テーブルの値を「０」とする。また、このとき、論理アドレス「３」に対応する変換テーブルの値は、論理アドレス「３」のブロックの物理アドレスの値、すなわち「１７」とする。また、論理アドレス「３」に対応する連結テーブルの値は、論理アドレス「３」のブロックの連結アドレスの値、すなわち「２」とする。
【０１７２】
次に、論理アドレス「３」に対応する連結テーブルの値が指し示す論理アドレス「２」のエントリを確認する。このとき、論理アドレス「２」のエントリには、物理ブロックが割り当てられていないので、図２０（ｅ）に示すように、論理アドレス「２」に対応するエラー検出テーブルの値を「１」とする。また、論理アドレス「２」に対応する変換テーブルの値は、連結元の論理アドレスの値、すなわち「３」とする。
【０１７３】
次に、エラー検出テーブルの値が「１」となっている論理アドレス「２」のブロックについて、その情報の読み込みを試みる。しかしながら、論理アドレスが「２」のブロックは存在していないので、この段階で、連結アドレスエラーであることが判明する。
【０１７４】
１２−３  エラー訂正処理
本発明を適用したシステムにおいて、論理アドレスエラーに対するエラー訂正処理は、以下のように行う。
【０１７５】
論理アドレスエラーが生じているときには、同じ論理アドレスを持つブロックをそれぞれ調べる。そして、ブロックとして完全なものが１つしかない場合には、完全なブロックを生かして、残りのブロックは無効とする。
【０１７６】
また、同じ論理アドレスを持つ完全なブロック（ブートブロックを除く。）が複数ある場合には、識別番号を比較して値が小さい方のブロックを生かす。なお、一方のブロックの識別番号が「２５５」であり、他方のブロックの識別番号が「０」の場合には、識別番号が「２５５」のブロックを生かすようにする。
【０１７７】
なお、通常は、同じ論理アドレスを持つブロックが複数あったとしても、それらの識別番号の差は１である。この条件に当てはまらないような場合には、システムの側で自動的にエラー訂正処理を行うのではなく、手動復旧モードとする。
【０１７８】
また、本発明を適用したシステムにおいて、連結アドレスエラーが生じた場合には、メモリカード２を使用するアプリケーションソフトウェアやメモリカード２に格納するデータ等に応じた適切なエラー訂正処理を行うようにする。具体的には、例えば、以下に挙げるようなエラー訂正処理を行うようにすればよい。
【０１７９】
すなわち、例えば、最後の連結アドレスが指し示すブロックとして新規ブロックを割り当てる。そして、最後のブロックのデータを正しく読めるページまで読み込んで、そのページまでのデータを新規ブロックにコピーする。このとき、新規ブロックの最終フラグは「ブロック最終」としておく。このようなエラー訂正処理は、対象となるデータが音楽データ等のようにデータの途中でも意味があるデータの場合に、特に好適である。
【０１８０】
１２−４  集合管理情報の構築とエラー検出訂正処理
本発明を適用したシステムにおいて、物理アドレスエラーや連結アドレスエラーが発生するのは、データ更新処理の途中に何らかの障害が発生した場合である。そして、本発明を適用したシステムでは、上述したように、データ更新処理に先だってメモリカード２に格納されている集合管理情報を無効にするようにしている。したがって、物理アドレスエラーや連結アドレスエラーが発生するときには、集合管理情報が無効となっている。そして、集合管理情報が無効となっているときには、次にメモリカード２を起動するときに、全てのブロックの分散管理情報を調べ直して集合管理情報を再構築する処理が必ず行われる。
【０１８１】
そこで、このシステムでは、集合管理情報を再構築する際に、全てのブロックを調べ直すということに着目し、このときにエラー検出訂正処理を同時に行う。換言すれば、集合管理情報が有効となっているときには、物理アドレスエラーや連結アドレスエラーが発生している可能性はないので、このときにはエラー検出訂正処理を行わない。すなわち、この方法では、集合管理情報の再構築時にだけ、エラー検出訂正処理を行う。これにより、エラー検出訂正処理のためにメモリカード２に余分にアクセスする必要がなくなる。その結果、例えば、メモリカード２の速やかな起動が可能となる。
【０１８２】
このエラー検出訂正処理は、以下のような手順によって行われる。
【０１８３】
（１）データ処理装置１の内部メモリ４上の変換テーブルを全て「0xffff」で初期化する。また、内部メモリ４上にエラー検出テーブルの領域を確保し、当該エラー検出テーブルを全て「０」で初期化する。
【０１８４】
（２）ブロックの先頭に移動する。
【０１８５】
（３）ブロックから分散管理情報を読み込み、当該分散管理情報を用いてビットマップテーブルを構築する。このとき、可／不可フラグが「使用不可」であるか、或いはブロックフラグが「未使用」又は「未消去」である場合には、ビットマップテーブルの作成が終了したら、次のブロックへ移動して処理を繰り返す。
【０１８６】
（４）ブロックの論理アドレス（以下、論理アドレスＡとする。）と、連結アドレス（以下、論理アドレスＢとする。）とを調べる。
【０１８７】
（５）論理アドレスＡが「0xffff」の場合は、次のブロックへ移動し、（３）へ戻って処理を繰り返す。
【０１８８】
（６）エラー検出テーブルの論理アドレスＡの欄を調べる。エラー検出テーブルの論理アドレスＡの欄が「１」となっている場合は、「０」に書き換えるとともに、変換テーブルの論理アドレスＡの欄に、論理アドレス「Ａ」のブロックの物理アドレスを書き込む。また、エラー検出テーブルの論理アドレスＡの欄が「０」となっている場合は、変換テーブルの論理アドレスＡの欄を調べる。そして、変換テーブルの論理アドレスＡの値が「0xffff」のときは、そこに、論理アドレスＡのブロックの物理アドレスを書き込む。
【０１８９】
なお、変換テーブルの論理アドレスＡの値として、「0xffff」以外の値が既に入っている場合は、論理アドレスエラーが発生している場合であるので、論理アドレスエラーに対するエラー訂正処理を行う。
【０１９０】
（７）連結テーブルの論理アドレスＡの欄に、論理アドレスＢの値を記入する。
【０１９１】
（８）最終フラグが「ブロック最終」となっているかを調べる。「ブロック最終」となっていれば、連結アドレスは無効なので、次のブロックに移動し、（３）へ戻って処理を繰り返す。
【０１９２】
（９）論理アドレスＢに物理アドレスが対応しているかどうかを、変換テーブルを用いて確認する。変換テーブルの論理アドレスＢの値が「0xffff」以外の場合は、論理アドレスＢに物理アドレスが対応している。一方、変換テーブルの論理アドレスＢの値が「0xffff」の場合は、現在のブロックまでの段階では、論理アドレスＢに物理アドレスが対応していない。このときは、エラー検出テーブルの論理アドレスＢの欄に「１」を書き込むとともに、変換テーブルの論理アドレスＢの欄に論理アドレスＡの値を記入する。その後、次のブロックに移動し、（３）へ戻って処理を繰り返す。
【０１９３】
なお、変換テーブルの論理アドレスＢの値が「0xffff」となっても、ブロックの途中までしか処理を行っていない段階では、論理アドレスＢに物理アドレスが本当に対応していないのかは明らかではない。すなわち、論理アドレスＢに物理アドレスが本当に対応していない場合と、今後処理を進めて行くに従って、対応するブロックが現れる場合との２通りがあり得る。
【０１９４】
（１０）全てのブロックに対して処理を行った後、エラー検出テーブルを参照する。エラー検出テーブルの値が「１」となっている論理アドレスは、物理アドレスが対応していない。すなわち、連結アドレスエラーが発生している。このときは、変換テーブル内に連結元のブロックの論理アドレスが格納されているので、これを用いて元ブロックを特定し、適切なエラー訂正処理を行う。なお、エラー訂正処理を行った後は、エラー検出テーブルの値を「０」にし、該当する変換テーブルの値を「0xffff」にしておく。
【０１９５】
本発明を適用したシステムでは、以上のように、集合管理情報を構築するときにエラー検出訂正処理を行う。以下、このような集合管理情報の構築及びエラー検出訂正処理の具体的な方法について、図２１乃至図２３に示すフローチャートを参照して、更に詳細に説明する。
【０１９６】
なお、ここでは、変数としてＩ，Ａ，Ｂ，Ｃ，Ｄ，Ｔ（Ｉ）を使用し、定数としてＮを使用する。変数Ｉは、物理アドレスが入力される変数であり、変数Ａは、論理アドレスが入力される変数であり、変数Ｂは、連結アドレスが入力される変数であり、変数Ｃ，Ｄは、識別番号の値が入力される変数であり、変数Ｔ（Ｉ）は、論理アドレス「Ｉ」に対応するエラー検出テーブルの値を示す変数である。また、定数Ｎは、総ブロック数を示す定数である。
【０１９７】
集合管理情報を構築する際は、図２１のステップＳ１０１において、データ処理装置１は、変換テーブルを初期化し、全ての値を「0xffff」とする。次にステップＳ１０２へ進む。
【０１９８】
ステップＳ１０２において、データ処理装置１は、エラー検出テーブルを初期化し、全ての値を「０」とする。次にステップＳ１０３へ進む。
【０１９９】
ステップＳ１０３において、データ処理装置１は、変数Ｉに「０」を代入する。次にステップＳ１０４へ進む。
【０２００】
ステップＳ１０４において、データ処理装置１は、物理アドレス「Ｉ」のブロックの分散管理情報をメモリカード２から読み込む。次にステップＳ１０５へ進む。
【０２０１】
ステップＳ１０５において、データ処理装置１は、ステップＳ１０４で読み込んだ分散管理情報の可／不可フラグを参照して、物理アドレス「Ｉ」のブロックが使用可能か否かを判別する。使用可能であれば、ステップＳ１０６へ進み、使用不可能であれば、ステップＳ１２９へ進む。
【０２０２】
ステップＳ１０６において、データ処理装置１は、ステップＳ１０４で読み込んだ分散管理情報のブロックフラグを参照して、物理アドレス「Ｉ」のブロックが使用中であるか否かを判別する。具体的には、ブロックフラグが「先頭使用」又は「使用」になっているか否かを判別する。ブロックフラグが「先頭使用」又は「使用」になっており、当該ブロックが使用中であれば、ステップＳ１０７へ進む。また、当該ブロックが使用中でなければ、ステップＳ１２９へ進む。
【０２０３】
ステップＳ１０７において、データ処理装置１は、物理アドレス「Ｉ」のブロックについての情報をビットマップテーブルに加える。次に、ステップＳ１０８へ進む。
【０２０４】
ステップＳ１０８において、データ処理装置１は、ステップＳ１０４で読み出した分散管理情報に基づいて、物理アドレス「Ｉ」のブロックの論理アドレスを変数Ａに代入し、物理アドレス「Ｉ」のブロックの連結アドレスを変数Ｂに代入する。次にステップＳ１０９へ進む。
【０２０５】
ステップＳ１０９において、データ処理装置１は、Ａの値が「0xffff」であるか否かを判別する。「0xffff」でなければ、ステップＳ１１０へ進み、「0xffff」であれば、図２２のステップＳ１２０へ進む。
【０２０６】
ステップＳ１１０において、データ処理装置１は、エラー検出テーブルの論理アドレス「Ａ」の値を調べる。次にステップＳ１１１へ進む。
【０２０７】
ステップＳ１１１において、データ処理装置１は、エラー検出テーブルの論理アドレス「Ａ」の値が「１」であるかを判別する。「１」であれば、ステップＳ１１２へ進み、「１」でなければステップＳ１３０へ進む。
【０２０８】
ステップＳ１１２において、データ処理装置１は、エラー検出テーブルの論理アドレス「Ａ」の値を「０」に書き換える。次に、ステップＳ１１３へ進む。
【０２０９】
ステップＳ１１３において、データ処理装置１は、変換テーブルの論理アドレス「Ａ」の欄に、変数「Ｉ」（すなわち物理ブロック「Ｉ」）を書き込む。次に、ステップＳ１１４へ進む。
【０２１０】
ステップＳ１１４において、データ処理装置１は、連結テーブルの論理アドレス「Ａ」の欄に、変数「Ｂ」（すなわち連結アドレス「Ｂ」）を書き込む。次に、ステップＳ１１５へ進む。
【０２１１】
ステップＳ１１５において、データ処理装置１は、最終フラグが「ブロック最終」になっているか否かを判別する。「ブロック最終」になっていなければ、ステップＳ１１６へ進み、「ブロック最終」になっていれば、図２２のステップＳ１２０へ進む。
【０２１２】
ステップＳ１１６において、データ処理装置１は、論理アドレス「Ｂ」に対応する変換テーブルの値を調べる。次に、ステップＳ１１７へ進む。
【０２１３】
ステップＳ１１７において、データ処理装置１は、論理アドレス「Ｂ」に対応する変換テーブルの値が「0xffff」であるかを判別する。「0xffff」であれば、ステップＳ１１８へ進み、「0xffff」でなければ、図２２のステップＳ１２０へ進む。
【０２１４】
ステップＳ１１８において、データ処理装置１は、エラー検出テーブルの論理アドレス「Ｂ」の欄を「１」に書き換える。次に、ステップＳ１１９へ進む。
【０２１５】
ステップＳ１１９において、データ処理装置１は、エラー検出テーブルの論理アドレス「Ｂ」の欄に、論理アドレス「Ａ」を書き込む。次に、図２２のステップＳ１２０へ進む。
【０２１６】
図２２のステップＳ１２０において、データ処理装置１は、変数Ｉの値と、総ブロック数を示す定数Ｎの値とを比較する。Ｉ＜Ｎでなければ、ステップＳ１２１へ進み、Ｉ＜Ｎであれば、ステップＳ１２８へ進む。
【０２１７】
ステップＳ１２１において、データ処理装置１は、変数Ｉに「０」を代入する。次にステップＳ１２２へ進む。
【０２１８】
ステップＳ１２２において、データ処理装置１は、エラー検出テーブルの論理アドレス「Ｉ」の値を示す変数Ｔ（Ｉ）が「１」であるかを判別する。「１」でなければステップＳ１２３へ進み、「１」であればステップＳ１２５へ進む。
【０２１９】
ステップＳ１２３において、データ処理装置１は、変数Ｉの値と、総ブロック数を示す定数Ｎの値とを比較する。Ｉ＝Ｎであれば、これで処理を終了する。Ｉ＝Ｎでなければ、ステップＳ１２４へ進む。
【０２２０】
ステップＳ１２４において、データ処理装置１は、変数Ｉの値を１インクリメントする。その後、ステップＳ１２２へ戻って処理を繰り返す。
【０２２１】
また、ステップＳ１２２で変数Ｔ（Ｉ）が「１」であったときは、上述したようにステップＳ１２５へ進む。このステップＳ１２５に進むのは、連結アドレスエラーが生じていたときである。そこで、ステップＳ１２５において、データ処理装置１は、連結アドレスエラーに対する所定のエラー訂正処理を行う。ここでは、上述したように、メモリカード２を使用するアプリケーションソフトウェアやメモリカード２に格納するデータ等に応じた適切なエラー訂正処理を行うようにする。そして、エラー訂正処理が完了したら、ステップＳ１２６へ進む。
【０２２２】
ステップＳ１２６において、データ処理装置１は、エラー検出テーブルの論理アドレス「Ｉ」の値を「０」にする。次に、ステップＳ１２７へ進む。
【０２２３】
ステップＳ１２７において、データ処理装置１は、変換テーブルの論理アドレス「Ｉ」の欄を「0xffff」に書き換える。その後、ステップＳ１２３へ進み、上述した処理を行う。
【０２２４】
また、ステップＳ１２０でＩ＜Ｎであったときは、上述したようにステップＳ１２８へ進む。このステップＳ１２８へ進むのは、全ブロックについての分散管理情報の読み出しが完了していないときである。そこで、このステップＳ１２８において、データ処理装置１は、変数Ｉの値を１インクリメントし、その後、図２１のステップＳ１０４へ戻って処理を繰り返す。
【０２２５】
また、図２１のステップＳ１０５で物理アドレス「Ｉ」のブロックが使用不可能であったとき、及びステップＳ１０６で物理アドレス「Ｉ」のブロックが使用中でなかったときは、上述したようにステップＳ１２９へ進む。
【０２２６】
ステップＳ１２９において、データ処理装置１は、物理アドレス「Ｉ」のブロックについての情報をビットマップテーブルに加える。その後、図２２のステップＳ１２０へ進み、上述した処理を行う。
【０２２７】
また、図２１のステップＳ１１１でエラー検出テーブルの論理アドレス「Ａ」の値が「１」でなかったときは、上述したようにステップＳ１３０へ進む。このステップＳ１３０において、データ処理装置１は、変換テーブルの論理アドレス「Ａ」の値を調べる。次に、ステップＳ１３１へ進む。
【０２２８】
ステップＳ１３１において、データ処理装置１は、変換テーブルの論理アドレス「Ａ」の値が「0xffff」であるかを判別する。「0xffff」であれば、ステップＳ１１３へ進んで上述した処理を行い、「0xffff」でなければ、図２３のステップＳ１３２へ進む。
【０２２９】
図２３のステップＳ１３２に進むのは、論理アドレスエラーが生じて、論理アドレス「Ａ」を持つブロックが２つ存在しているときである。そこで、ステップＳ１３２において、データ処理装置１は、論理アドレス「Ａ」を持つ２つのブロックの識別番号を読み出す。そして、一方のブロックの識別番号が読み出せたら、その値を変数Ｃに代入する。また、他方のブロックの識別番号が読み出せたら、その値を変数Ｄに代入する。次にステップＳ１３３へ進む。
【０２３０】
ステップＳ１３３において、データ処理装置１は、ステップＳ１３２での識別番号の読み出しが正常に行えたかを判別する。変数Ｃに代入される識別番号だけが読み出せたときは、ステップＳ１３４へ進み、それ以外のときは、ステップＳ１３７へ進む。
【０２３１】
ステップＳ１３４において、データ処理装置１は、変数Ｄに対応するブロックのブロックフラグを「未消去」にする。次にステップＳ１３５へ進む。
【０２３２】
ステップＳ１３５において、データ処理装置１は、ステップＳ１３４での処理、すなわち変数Ｄに対応するブロックのブロックフラグを「未消去」にする処理が成功したかを判別する。成功していれば、図２１のステップＳ１１３へ戻って上述した処理を行い、成功していなければ、ステップＳ１３６へ進む。
【０２３３】
ステップＳ１３６において、データ処理装置１は、変数Ｄに対応するブロックの可／不可フラグを「使用不可」にする。その後、図２１のステップＳ１１３へ戻って上述した処理を行う。
【０２３４】
また、ステップＳ１３７において、データ処理装置１は、ステップＳ１３２での識別番号の読み出しが正常に行えたかを判別する。変数Ｄに代入される識別番号だけが読み出せたときは、ステップＳ１３８へ進み、それ以外のときは、ステップＳ１４１へ進む。
【０２３５】
ステップＳ１３８において、データ処理装置１は、変数Ｃに対応するブロックのブロックフラグを「未消去」にする。次にステップＳ１３９へ進む。
【０２３６】
ステップＳ１３９において、データ処理装置１は、ステップＳ１３８での処理、すなわち変数Ｃに対応するブロックのブロックフラグを「未消去」にする処理が成功したかを判別する。成功していれば、図２１のステップＳ１１３へ戻って上述した処理を行い、成功していなければ、ステップＳ１４０へ進む。
【０２３７】
ステップＳ１４０において、データ処理装置１は、変数Ｃに対応するブロックの可／不可フラグを「使用不可」にする。その後、図２１のステップＳ１１３へ戻って上述した処理を行う。
【０２３８】
また、ステップＳ１４１において、データ処理装置１は、ステップＳ１３２での識別番号の読み出しが正常に行えたかを判別する。変数Ｃに代入される識別番号と、変数Ｄに代入される識別番号との両方が正常に読み出せたときは、ステップＳ１４２へ進む。一方、両方とも読み出せなかったときには、手動復旧モードに移行し、手動にてエラーの訂正に必要な適切な処理を行うようにする。
【０２３９】
ステップＳ１４２において、データ処理装置１は、変数Ｃの値と、変数Ｄの値に「１」を加えた値とを比較する。これらの値が等しければ、ステップＳ１３４へ進み上述した処理を行い、これらの値が等しくなければ、ステップＳ１４３へ進む。
【０２４０】
ステップＳ１４３において、データ処理装置１は、変数Ｄの値と、変数Ｃの値に「１」を加えた値とを比較する。これらの値が等しければ、ステップＳ１３８へ進み上述した処理を行う。一方、これらの値が等しくないときは、手動復旧モードに移行し、手動にてエラーの訂正に必要な適切な処理を行うようにする。
【０２４１】
以上のような処理により、集合管理情報の再構築時に、エラー検出訂正処理が同時に行われる。これにより、上述したように、エラー検出訂正処理のためにメモリカード２に余分にアクセスする必要がなくなる。すなわち、本発明を適用したシステムでは、データの書き込みが正常に終了し有効な集合管理情報がメモリカード２に書き戻されている場合には、エラー検出訂正処理は実行されない。
【０２４２】
このように、本発明を適用したシステムでは、不要なエラー検出訂正処理を行わないので、メモリカード２へのアクセスの高効率化を図ることができる。特に、上記エラー検出訂正処理は、分散管理情報から集中管理情報を構築する作業と同時に行われるため、メモリカード２へのアクセスが最小限にとどめられる。
【０２４３】
また、本発明を適用したシステムでは、メモリカード２の各ブロックに識別番号を付し、この識別番号を用いて論理アドレスエラーに対処するようにしているので、データ更新処理を安全に行うことができる。すなわち、データ更新処理時に何らかのエラーが発生して、同じ論理アドレスを持つブロックが複数存在するようになってしまっても、識別番号を用いることで、データ更新処理前の状態のデータを復旧することができる。更に、本発明を適用したシステムでは、エラー検出テーブルを用いることで、連結アドレスエラーを検出することもでき、しかも連結先の存在しないブロックを検出することもできる。
【０２４４】
【発明の効果】
以上詳細に説明したように、本発明によれば、不揮発性メモリのブロックの先頭ページの冗長エリアに、当該ブロックを管理するための論理アドレスを含む管理情報を格納し、かつ上記それぞれのブロックの２ページ目の冗長エリアに、上記先頭ページの冗長エリアに格納された管理情報と同じ情報を、予備の管理情報として格納することで、論理アドレスや連結アドレスを含む管理情報がエラーを起こしても、予備に格納された管理情報を用いることで、エラー訂正が可能となる。なお、このようなエラー訂正処理は、対象となるデータが音楽データ等のようにデータの途中でも意味があるデータの場合に、特に好適である。
【図面の簡単な説明】
【図１】本発明が適用されるシステムの全体構成を示す図である。
【図２】本発明を適用したメモリカードの構成を示すブロック図である。
【図３】本発明を適用したメモリカードの外観を示す斜視図である。
【図４】本発明を適用したメモリカードの記憶領域の構造を示す図である。
【図５】分散管理情報の構成を示す図である。
【図６】追加管理情報の構成を示す図である。
【図７】各ブロックの分散管理情報から集合管理情報を構築する様子を示す図である。
【図８】集合管理情報の構成を示す図である。
【図９】変換テーブルを示す図である。
【図１０】連結テーブルを示す図である。
【図１１】メモリカード起動時の手順を示すフローチャートである。
【図１２】データ更新処理時の手順を示すフローチャートである。
【図１３】終了処理の手順を示すフローチャートである。
【図１４】サイズが分かっているファイルをメモリカードに書き込むときの手順を示すフローチャートである。
【図１５】サイズが分かっていないファイルをメモリカードに書き込むときの手順を示すフローチャートである。
【図１６】ファイル更新の手順について、具体的な例を挙げて示す概念図である。
【図１７】ファイル更新の手順を示すフローチャートである。
【図１８】エラー検出テーブルを示す図である。
【図１９】ブロック間の連結状態の具体的な例を示す図である。
【図２０】連結アドレスエラー検出の例として、ブロック間の連結状態が図１９に示した状態のときの処理の流れを示す図である。
【図２１】集合管理情報の構築とエラー検出訂正処理の手順を示すフローチャートである。
【図２２】集合管理情報の構築とエラー検出訂正処理の手順を示すフローチャートである。
【図２３】集合管理情報の構築とエラー検出訂正処理の手順を示すフローチャートである。
【符号の説明】
１  データ処理装置、  ２  メモリカード、  ３  演算処理装置、  ４  内部メモリ、  ５  補助記憶装置、  ６  シリアルインターフェース回路、  ７  バス、  １１  コントローラ、  １２  フラッシュメモリ、  １３  シリアル／パラレル・パラレル／シリアル・インターフェース・シーケンサ、  １４  フラッシュメモリ・インターフェース・シーケンサ、  １５  ページバッファ、  １６エラー訂正回路、  １７  コマンドジェネレータ、  １８  コンフィグレーションＲＯＭ、  １９  発振器、  ２０  誤消去防止スイッチ
【図１】
0003640154.tif 000002
【図２】
0003640154.tif 000003
【図３】
0003640154.tif 000004
【図４】
0003640154.tif 000005
【図５】
0003640154.tif 000006
【図６】
0003640154.tif 000007
【図７】
0003640154.tif 000008
【図８】
0003640154.tif 000009
【図９】
0003640154.tif 000010
【図１０】
0003640154.tif 000011
【図１１】
0003640154.tif 000012
【図１２】
0003640154.tif 000013
【図１３】
0003640154.tif 000014
【図１４】
0003640154.tif 000015
【図１５】
0003640154.tif 000016
【図１６】
0003640154.tif 000017
【図１７】
0003640154.tif 000018
【図１８】
0003640154.tif 000019
【図１９】
0003640154.tif 000020
【図２０】
0003640154.tif 000021
【図２１】
0003640154.tif 000022
【図２２】
0003640154.tif 000023
【図２３】
0003640154.tif 000024