JP3640154B2 - 不揮発性メモリ、不揮発性メモリの管理方法、不揮発性メモリを有する記憶装置、不揮発性メモリを管理するデータ管理装置及びデータ処理システム - Google Patents
不揮発性メモリ、不揮発性メモリの管理方法、不揮発性メモリを有する記憶装置、不揮発性メモリを管理するデータ管理装置及びデータ処理システム Download PDFInfo
- Publication number
- JP3640154B2 JP3640154B2 JP34682699A JP34682699A JP3640154B2 JP 3640154 B2 JP3640154 B2 JP 3640154B2 JP 34682699 A JP34682699 A JP 34682699A JP 34682699 A JP34682699 A JP 34682699A JP 3640154 B2 JP3640154 B2 JP 3640154B2
- Authority
- JP
- Japan
- Prior art keywords
- block
- data
- management information
- logical address
- stored
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Landscapes
- Techniques For Improving Reliability Of Storages (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Description
【発明の属する技術分野】
本発明は、記憶領域が複数のブロックに分割されてなる不揮発性メモリ、不揮発性メモリの管理方法、不揮発性メモリを有する記憶装置、不揮発性メモリを管理するデータ管理装置及びデータ処理システムに関する。
【0002】
【従来の技術】
パーソナルコンピュータやデジタルスチルカメラ等のようなデータ処理装置に用いられる外部記憶装置として、フラッシュメモリを備えた外部記憶装置がある。
【0003】
フラッシュメモリを備えた外部記憶装置は、記憶領域を複数のブロックに分割し、データ領域の管理をブロック単位で行う。ここで、各ブロックはデータ消去の単位となる。すなわち、データを消去する際は、当該データを含むブロック全体に対して初期化処理を施す。これにより、当該ブロックに格納されているデータが一括して消去される。
【0004】
このような外部記憶装置では、データをブロックに格納するときに、それらのブロックに対してユニークな論理アドレスが設定される。そして、各ブロックは、この論理アドレスを用いて管理される。
【0005】
また、外部記憶装置に格納されるデータは、通常、ファイル単位で外部記憶装置に格納されるが、一つのファイルが複数のブロックにわたる場合には、それらのブロックの連結情報が必要となる。そこで、一つのファイルが複数のブロックにわたる場合には、当該ファイルを格納しているブロックのそれぞれに、次のブロックの論理アドレス(以下、連結アドレスと称する。)が格納される。
【0006】
【発明が解決しようとする課題】
従来、このような外部記憶装置では、記憶領域内にエラーがあるか否かを検査する処理や、エラーがあった場合に当該エラーの修復を試みる処理を、外部記憶装置の起動時に毎回実行するようにしていた。なお、以下の説明では、このような処理のことを、エラー検出訂正処理と称する。通常、このようなエラー検出訂正処理は、比較的に負荷が大きく処理に時間を要する処理である。したがって、従来の外部記憶装置は、エラー検出訂正処理のために、速やかに起動することができないという問題があった。
【0007】
また、データ領域の管理をブロック単位で行うような外部記憶装置では、ブロックにデータを新規に書き込んでいるときや、ブロックに格納されているデータを更新しているときなどに、いきなり電源が遮断されたり、データ処理装置から外部記憶装置が強制的に取り外されたりしたような場合に、同じ論理アドレスを持つ複数のブロックが同時に存在するような状態(以下、論理アドレスエラーと称する。)となったり、連結アドレスで指し示されたブロックが存在しないような状態(以下、連結アドレスエラーと称する。)となったりする可能性がある。当然の事ながら、このような状態になると、ファイルが予期せぬブロックに連結されてしまったりして、外部記憶装置を正常に使用することができなくなってしまう。
【0008】
しかしながら、従来の外部記憶装置は、論理アドレスエラーや連結アドレスエラーを検出して適切に修復するような機能を備えていなかった。そのため、従来は、いきなり電源が遮断されたり、データ処理装置から外部記憶装置が強制的に取り外されたりしたような場合に、その後、外部記憶装置を正常に使用することができなくなってしまうことがあった。
【0009】
本発明は、以上のような従来の実情に鑑みて提案されたものであり、外部記憶装置に論理アドレスエラーや連結アドレスエラーが生じても、それらのエラーを検出し適切に修復できるようにすることを目的としている。
【0010】
【課題を解決するための手段】
本発明に係る不揮発性メモリは、一括消去可能な複数のブロックを有し、上記ブロックは、複数のページから構成され、上記複数のページは、それぞれ冗長エリアを有し、上記それぞれのブロックの先頭ページの冗長エリアには、上記それぞれのブロックを管理するための論理アドレスを含む管理情報が格納され、かつ上記それぞれのブロックの2ページ目の冗長エリアには、上記先頭ページの冗長エリアに格納された管理情報と同じ情報が、予備の管理情報として格納される。
【0011】
また、本発明に係る不揮発性メモリの管理方法は、一括消去可能な複数のブロックを有し、上記ブロックが、複数のページから構成され、上記複数のページが、それぞれ冗長エリアを有する不揮発性メモリを管理する管理方法において、上記それぞれのブロックの先頭ページの冗長エリアには、上記それぞれのブロックを管理するための論理アドレスを含む管理情報を格納し、かつ上記それぞれのブロックの2ページ目の冗長エリアには、上記先頭ページの冗長エリアに格納された管理情報と同じ情報を、予備の管理情報として格納する。
【0012】
また、本発明に係る不揮発性メモリを有する記憶装置は、一括消去可能な複数のブロックを有し、上記ブロックは、複数のページから構成され、上記複数のページは、それぞれ冗長エリアを有し、上記それぞれのブロックの先頭ページの冗長エリアには、上記それぞれのブロックを管理するための論理アドレスを含む管理情報が格納され、かつ上記それぞれのブロックの2ページ目の冗長エリアには、上記先頭ページの冗長エリアに格納された管理情報と同じ情報が、予備の管理情報として格納される。
また、本発明に係る不揮発性メモリを管理するデータ管理装置は、一括消去可能な複数のブロックを有し、上記ブロックが、複数のページから構成され、上記複数のページが、それぞれ冗長エリアを有する不揮発性メモリを管理するデータ管理装置において、上記それぞれのブロックの先頭ページの冗長エリアには、上記それぞれのブロックを管理するための論理アドレスを含む管理情報を格納し、かつ上記それぞれのブロックの2ページ目の冗長エリアには、上記先頭ページの冗長エリアに格納された管理情報と同じ情報を、予備の管理情報として格納する。
更に、本発明に係るデータ処理システムは、一括消去可能な複数のブロックを有し、上記ブロックが、複数のページから構成され、上記複数のページが、それぞれ冗長エリアを有する不揮発性メモリを有する外部記憶装置と、この外部記憶装置を管理するデータ管理装置とを備えたデータ処理システムにおいて、上記データ管理装置は、上記外部記憶装置の上記それぞれのブロックの先頭ページの冗長エリアに、上記それぞれのブロックを管理するための論理アドレスを含む管理情報を格納し、かつ上記それぞれのブロックの2ページ目の冗長エリアに、上記先頭ページの冗長エリアに格納された管理情報と同じ情報を、予備の管理情報として格納する。
【0013】
【発明の実施の形態】
以下、本発明の実施の形態について、図面を参照しながら詳細に説明する。
【0014】
1.システムの全体構成
本発明が適用されるシステムの一例について、その全体構成を図1に示す。このシステムは、ホスト側システムとなるデータ処理装置1と、シリアルインターフェースを介してデータ処理装置1に接続される外部記憶装置であるメモリカード2とから構成される。
【0015】
データ処理装置1は、演算処理装置(CPU)3と、内部メモリ4と、補助記憶装置5と、シリアルインターフェース回路6とを備え、これらがバス7によって相互に接続されてなる。このデータ処理装置1は、例えば、補助記憶装置5に格納されているプログラムを読み出して、当該プログラムを、内部メモリ4をワークエリアとして使用して、CPU3により実行する。このとき、必要に応じて、シリアルインターフェース回路6を介してメモリカード2との間でデータのやり取りを行う。
【0016】
なお、本発明が適用されるシステムに使用されるデータ処理装置1は、外部記憶装置との間でデータのやり取りが可能なものであるならば特に限定されるものではなく、本発明は、パーソナルコンピュータ、デジタルスチルカメラ、デジタルビデオカメラ等、種々のデータ処理装置に適用可能である。
【0017】
データ処理装置1とメモリカード2とは、シリアルインターフェースによって接続されており、具体的には、少なくとも3本のデータ線SCLK,State,DIOによって接続される。すなわち、データ処理装置1とメモリカード2とは、少なくとも、データ伝送時にクロック信号を伝送する第1のデータ線SCLKと、データ伝送時に必要なステータス信号を伝送する第2のデータ線Stateと、メモリカード2に書き込むデータ又はメモリカード2から読み出すデータ等をシリアルに伝送する第3のデータ線DIOとによって接続され、これらを介して、データ処理装置1とメモリカード2との間でのデータのやり取りを行う。
【0018】
データ処理装置1とメモリカード2との間でのデータのやり取りは、通常、ヘッダーと実データとから構成されるファイル単位で行われる。なお、ファイルのヘッダーには、例えば、ファイルにアクセスするための情報や、データ処理装置1で実行されるプログラムで必要とされる情報等が格納される。
【0019】
2.メモリカードの構成
メモリカード2は、図2に示すように、いわゆるコントロールICからなるコントローラ11と、コントローラ11によって管理されるフラッシュメモリ12とを備えている。
【0020】
コントローラ11は、シリアル/パラレル変換やパラレル/シリアル変換等を行うシリアル/パラレル・パラレル/シリアル・インターフェース・シーケンサ13(以下、S/P&P/S・インターフェース・シーケンサ13と称する。)と、フラッシュメモリ12へのインターフェースを司るフラッシュメモリ・インターフェース・シーケンサ14と、S/P&P/S・インターフェース・シーケンサ13とフラッシュメモリ・インターフェース・シーケンサ14との間でやり取りされるデータを一時的に記憶するページバッファ15と、エラー訂正の処理を行うエラー訂正回路16と、フラッシュメモリ12へのアクセスを制御する制御コマンドの生成等を行うコマンドジェネレータ17と、このメモリカード2のバージョン情報や各種属性情報等が格納されているコンフィグレーションROM18と、各回路に対してそれらの動作に必要なクロック信号を供給する発振器19とを備えている。
【0021】
S/P&P/S・インターフェース・シーケンサ13は、少なくとも上述した3本のデータ線SCLK,State,DIOを介して、データ処理装置1のシリアルインターフェース回路6に接続され、これらのデータ線SCLK,State,DIOを介して、データ処理装置1との間でデータのやり取りを行う。すなわち、S/P&P/S・インターフェース・シーケンサ13は、ページバッファ15から送られてきたパラレルデータをシリアルデータに変換して、データ処理装置1のシリアルインターフェース回路6へ送出する。また、S/P&P/S・インターフェース・シーケンサ13は、データ処理装置1のシリアルインターフェース回路6から送られてきたシリアルデータをパラレルデータに変換して、ページバッファ15へ送出する。
【0022】
このS/P&P/S・インターフェース・シーケンサ13とデータ処理装置1との間でのシリアルデータの伝送は、第1のデータ線SCLKによってデータ処理装置1から送られてくるクロック信号によって同期を取りながら、第3のデータ線DIOによって行われる。このとき、第3のデータ線DIOによってやり取りされるシリアルデータのデータ種別は、第2のデータ線Stateによって伝送されるステータス信号によって判別される。ここで、シリアルデータの種別には、例えば、フラッシュメモリ12に書き込むべきデータ、フラッシュメモリ12から読み出されたデータ、又はこのメモリカード2の動作を制御するための制御データ等がある。なお、ステータス信号は、メモリカード2の状態を示すためにも使用される。ステータス信号によって示されるメモリカード2の状態には、例えば、メモリカード2が何らかの処理の最中でデータ処理装置1からのデータ入力を受け付けない状態や、メモリカード2の側での処理が終了してデータ処理装置1からのデータ入力を待っている状態等がある。
【0023】
また、S/P&P/S・インターフェース・シーケンサ13は、データ処理装置1から送られてきたデータがメモリカード2の動作を制御するための制御データである場合には、当該制御データをコマンドジェネレータ17に送出する。
【0024】
コマンドジェネレータ17は、データ処理装置1からS/P&P/S・インターフェース・シーケンサ13を介して送られてきた制御データに基づいて、フラッシュメモリ12へのアクセスを制御する制御コマンドを生成し、当該制御コマンドをフラッシュメモリ・インターフェース・シーケンサ14へ送出する。フラッシュメモリ・インターフェース・シーケンサ14は、後述するように、この制御コマンドに基づいて、フラッシュメモリ12にデータを書き込んだり、フラッシュメモリ12からデータを読み出したりする。
【0025】
なお、このコマンドジェネレータ17には、誤消去防止スイッチ20が接続されている。そして、この誤消去防止スイッチ20がオンになっているときには、フラッシュメモリ12に書かれているデータを消去するように指示する制御データがデータ処理装置1から送られてきたとしても、コマンドジェネレータ17は、フラッシュメモリ12に書かれているデータを消去するような制御コマンドを生成しない。すなわち、このメモリカード2は、誤消去防止スイッチ20によって、フラッシュメモリ12に保存されているデータの消去が行えない状態と、フラッシュメモリ12に保存されているデータの消去が行える状態とを切り換えることが可能となっている。
【0026】
S/P&P/S・インターフェース・シーケンサ13とフラッシュメモリ・インターフェース・シーケンサ14との間に配されたページバッファ15は、いわゆるバッファメモリであり、S/P&P/S・インターフェース・シーケンサ13とフラッシュメモリ・インターフェース・シーケンサ14との間でやり取りされるデータを一時的に記憶する。
【0027】
すなわち、S/P&P/S・インターフェース・シーケンサ13からフラッシュメモリ・インターフェース・シーケンサ14へ送られるデータは、先ず、S/P&P/S・インターフェース・シーケンサ13からページバッファ15に送られて、このページバッファ15によって一時的に記憶される。このとき、ページバッファ15に記憶されたデータは、エラー訂正回路16によってエラー訂正符号が付けられる。そして、エラー訂正符号が付けられたデータは、ページバッファ15から所定のページ単位毎(例えば1ページ=512バイトとされる。)に、フラッシュメモリ・インターフェース・シーケンサ14へと送られる。
【0028】
或いは、フラッシュメモリ・インターフェース・シーケンサ14からS/P&P/S・インターフェース・シーケンサ13へ送られるデータは、先ず、フラッシュメモリ・インターフェース・シーケンサ14からページバッファ15に送られて、このページバッファ15によって一時的に記憶される。このとき、ページバッファ15に記憶されたデータは、エラー訂正回路16によってエラー訂正処理が施される。そして、エラー訂正処理が施されたデータは、ページバッファ15から所定のページ単位毎に、S/P&P/S・インターフェース・シーケンサ13へと送られる。
【0029】
フラッシュメモリ・インターフェース・シーケンサ14は、コマンドジェネレータ17からの制御コマンドに基づいて、フラッシュメモリ12へのデータの書き込みや、フラッシュメモリ12からのデータの読み出し等を行う。すなわち、フラッシュメモリ・インターフェース・シーケンサ14は、コマンドジェネレータ17からの制御コマンドに基づいて、フラッシュメモリ12からデータを読み出して、当該データを上述のようにページバッファ15を介して、S/P&P/S・インターフェース・シーケンサ13へと送出する。或いは、フラッシュメモリ・インターフェース・シーケンサ14は、コマンドジェネレータ17からの制御コマンドに基づいて、S/P&P/S・インターフェース・シーケンサ13からのデータを、上述のようにページバッファ15を介して受け取り、当該データをフラッシュメモリ12に書き込む。
【0030】
コンフィグレーションROM18には、このメモリカード2のバージョン情報や各種属性情報等が格納されている。コンフィグレーションROM18に格納された情報は、必要に応じて、S/P&P/S・インターフェース・シーケンサ13を介してコマンドジェネレータ17によって読み出されて使用される。すなわち、コマンドジェネレータ17は、必要に応じて、コンフィグレーションROM18に格納されている情報を読み出し、この情報に基づいてメモリカード2に関する各種設定を行う。
【0031】
以上のようなメモリカード2に対して、フラッシュメモリ12に書き込まれるデータが、上述した3本のデータ線SCLK,State,DIOを介して、データ処理装置1からシリアルデータとして送られてくると、先ず、S/P&P/S・インターフェース・シーケンサ13は、当該シリアルデータをパラレルデータに変換し、当該パラレルデータをページバッファ15へ送出する。ページバッファ15は、S/P&P/S・インターフェース・シーケンサ13から送られてきたデータを一時的に記憶する。このとき、ページバッファ15に記憶されたデータには、エラー訂正回路16によってエラー訂正符号が付けられる。そして、エラー訂正符号が付けられたデータは、所定のページ単位毎にフラッシュメモリ・インターフェース・シーケンサ14に送出される。そして、フラッシュメモリ・インターフェース・シーケンサ14は、ページバッファ15から送られてきたデータを、コマンドジェネレータ17からの制御コマンドに基づいて、フラッシュメモリ12に書き込む。以上の処理により、データ処理装置1から送られてきたデータが、フラッシュメモリ12に書き込まれる。
【0032】
また、以上のようなメモリカード2からデータを読み出す際は、先ず、コマンドジェネレータ17からの制御コマンドに基づいて、フラッシュメモリ・インターフェース・シーケンサ14によって、フラッシュメモリ12からデータが読み出される。そして、フラッシュメモリ・インターフェース・シーケンサ14は、フラッシュメモリ12から読み出したデータをページバッファ15に送出する。ページバッファ15は、フラッシュメモリ・インターフェース・シーケンサ14から送られてきたデータを一時的に記憶する。このとき、ページバッファ15に記憶されたデータには、エラー訂正回路16によってエラー訂正処理が施される。そして、エラー訂正処理が施されたデータは、所定のページ単位毎にS/P&P/S・インターフェース・シーケンサ13に送出される。そして、S/P&P/S・インターフェース・シーケンサ13は、ページバッファ15から送られてきたデータを、シリアルデータに変換した上で、上述した3本のデータ線SCLK,State,DIOを介して、データ処理装置1へと送出する。以上の処理により、フラッシュメモリ12から読み出されたデータが、データ処理装置1へと送出される。
【0033】
なお、データの書き込みや読み出しを行う際は、フラッシュメモリ12に書き込まれるデータやフラッシュメモリ12から読み出されたデータのやり取りが行われるだけでなく、そのやり取りを制御するための制御データも、データ処理装置1からメモリカード2のS/P&P/S・インターフェース・シーケンサ13へ送られる。この制御データは、S/P&P/S・インターフェース・シーケンサ13からコマンドジェネレータ17に送られる。そして、コマンドジェネレータ17は、S/P&P/S・インターフェース・シーケンサ13から送られてきた制御データに基づいて、フラッシュメモリ12へのアクセスを制御する制御コマンドを生成する。そして、この制御コマンドは、フラッシュメモリ・インターフェース・シーケンサ14に送られ、フラッシュメモリ・インターフェース・シーケンサ14は、この制御コマンドに基づいてフラッシュメモリ12にアクセスして、データの書き込みやデータの読み出しを行う。
【0034】
なお、メモリカード2は、上述した3本のデータ線SCLK,State,DIOを備えるだけでなく、その他に、電圧供給用の配線や、通常は使用しないリザーブの配線等を備えていてもよい。例えば、図2並びに後掲する図3では、上述した3本のデータ線SCLK,State,DIOの他に、4本の電源用の配線VSS1,VSS2,VCC,INTと、3本のリザーブの配線RSV1,RSV2,RSV3とをメモリカード2に設けた例を挙げている。
【0035】
3.メモリカードの外観
つぎに、以上のようなメモリカード2の具体的な外形について、図3を参照して説明する。
【0036】
メモリカード2は、合成樹脂等からなり平面形状が長方形とされる薄肉のカード状のケース21に、上述したコントローラ11やフラッシュメモリ12等が内蔵されてなる。そして、このメモリカード2は、当該メモリカード2を装着する装着機構を備えたデータ処理装置1に装着されて使用される。
【0037】
このメモリカード2のケース21の前端部には、斜めに切り欠かれた切り欠き部22が形成されており、更に当該切り欠き部22が形成された部分に、10個の凹状部23が形成されている。そして、これらの凹状部23の内部には、メモリカード2がデータ処理装置1の装着装置に装着されたときに、データ処理装置1の接続端子に接続される外部接続用端子が、それぞれ配されている。すなわち、このメモリカード2は、外部接続用端子として10本の端子24a,24b,24c,24d,24e,24f,24g,24h,24i,24jを備えている。これらの外部接続用端子の内訳は、3本のデータ線用の端子24b,24d,24h、4本の電源用端子24a,24f,24i,24j、及び3本のリザーブ端子24c,24e,24gである。
【0038】
また、このメモリカード2のケース21の上面には、誤消去防止部材25が取り付けられている。誤消去防止部材25は、ケース21の内部に収納された上記誤消去防止スイッチ20に係合されており、この誤消去防止部材25をスライド操作することにより、誤消去防止スイッチ20のオン/オフの切り換えを行えるようになっている。
【0039】
このメモリカード2には、データ処理装置1の装着装置に装着された際にメモリカード2がデータ処理装置1から脱落しないようにするため、ケース20の側面の一方に円弧状の第1のロック用切欠部26が形成され、ケース20の側面の他方に矩形状の第2のロック用切欠部27が形成されている。そして、このメモリカード2がデータ処理装置1の装着装置に装着されると、メモリカード2が脱落しないように、これらのロック用切欠部26,27が、データ処理装置1の装着装置に係合される。
【0040】
なお、図3に示したメモリカード2は、本発明が適用される外部記憶装置の一例に過ぎない。すなわち、本発明は、外部記憶装置の外形に依存することなく、どんな外形の外部記憶装置にも適用可能である。
【0041】
4.記憶領域の構造
つぎに、以上のようなメモリカード2に搭載されるフラッシュメモリ12の記憶領域の構造について説明する。
【0042】
このフラッシュメモリ12の記憶領域は、図4(a)に示すように、データ消去の単位となる複数のブロックに分割されてなる。なお、これらのブロックには、このメモリカード2が起動されたときにデータ処理装置1によって最初に読み込まれるデータであるブートデータが格納されるブートブロックと、任意のデータが書き込まれるデータブロックとがある。各ブロックには、それぞれ固有の物理アドレスが付けられている。これらのブロックは、データ消去の単位であると同時に、ファイル管理上の最小単位でもある。すなわち、ファイルは1つ又は複数のブロックに格納され、1つのブロックを複数のファイルで利用することはできない。
【0043】
そして、各ブロックは、「1」又は「0」を示す2つの状態を取りうる複数のビットからなり、初期状態では、全てのビットが「1」とされており、ビット単位での変更は「1」から「0」へだけが可能となっている。すなわち、「1」及び「0」からなるデータを書き込む際、「1」については該当するビットをそのまま保持し、「0」については該当するビットを「1」から「0」に変更する。
【0044】
そして、一度書き込んだデータを消去する際は、ブロック単位で一括して初期化処理を行い、当該ブロックの全ビットを「1」とする。これにより、当該ブロックに書き込まれたデータが一括して消去され、そのブロックは再びデータの書き込みが可能な状態となる。
【0045】
なお、「0」から「1」への変更を行うには、ブロック単位で一括して初期化処理を行い、当該ブロックの全ビットを「1」にする必要があるが、「1」から「0」への変更は、ブロック単位で一括して初期化処理を行わなくて可能である。以下の説明では、ブロック単位で一括して初期化処理を行うことなく「1」から「0」へ変更することを、オーバーライトと称する。
【0046】
なお、本発明は、上述のように各ビットが2つの状態だけを取りうるフラッシュメモリ(いわゆる2値型のフラッシュメモリ)だけでなく、各ビットが3つ以上の状態を取りうるフラッシュメモリ(いわゆる多値型のフラッシュメモリ)にも適用可能である。
【0047】
上記フラッシュメモリ12の各ブロックは、図4(b)に示すように、データの書き込みや読み出しの単位となる複数のページから構成される。すなわち、このフラッシュメモリ12にデータを書き込む際は、上述したように、ページ単位にてページバッファ15から送られてきたデータが、フラッシュメモリ・インターフェース・シーケンサ14によってページ単位にてフラッシュメモリ12に書き込まれる。また、このフラッシュメモリ12からデータを読み出す際は、フラッシュメモリ・インターフェース・シーケンサ14によってページ単位毎にデータが読み出されて、ページバッファ15へと送られる。
【0048】
各ページは、データエリアと、冗長エリアとを有している。データエリアは、任意のデータが書き込まれる領域である。冗長エリアは、データエリアに書き込まれるデータの管理に必要な情報が格納される領域である。
【0049】
具体的には、図4(c)に示すように、ブロックの先頭ページの冗長エリアには、当該ブロックを管理するために必要な管理情報として、いわゆる分散管理情報が格納される。また、ブロックの2ページ目以降の各ページの冗長エリアにも、予備の分散管理情報として、先頭ページの冗長エリアに格納された分散管理情報と同じものが格納される。ただし、最終ページの冗長エリアには、分散管理情報ではなく、分散管理情報だけでは管理しきれない追加情報として、いわゆる追加管理情報が格納される。
【0050】
このように、このフラッシュメモリ12では、各ブロック内の冗長エリアに分散管理情報が格納される。分散管理情報は、当該分散管理情報が格納されたブロックを管理するための情報である。この分散管理情報により、例えば、当該ブロックがファイルの先頭となるブロックであるか否かについての情報や、複数のブロックからファイルが構成される場合にはそれらのブロックの繋がりを示す情報等を得ることができる。なお、この分散管理情報については、後で詳細に説明する。
【0051】
そして、このメモリカード2では、各ブロックの分散管理情報を集めることにより、フラッシュメモリ全体を管理するための情報として、いわゆる集合管理情報を作成して、この集合管理情報をファイルとしてフラッシュメモリ12に格納しておくようにする。
【0052】
そして、通常は、集合管理情報によって、各ブロックにアクセスするために必要な情報を得るようにする。すなわち、データ処理装置1とメモリカード2との間でデータのやり取りを行う際、データ処理装置1は、集合管理情報をメモリカード2から読み出して内部メモリ4に管理テーブルを作成し、この管理テーブルに基づいてメモリカード2にアクセスする。これにより、データアクセスの都度、個々のブロックに格納された分散管理情報にアクセスするような必要がなくなり、より高速なデータアクセスが可能となる。
【0053】
5.分散管理情報
つぎに、分散管理情報について詳細に説明する。
【0054】
分散管理情報は、当該分散管理情報が格納されたブロックを管理するための情報であり、16バイトの冗長エリアに書き込まれてなる。具体的には、図5に示すように、1バイトの可/不可フラグと、1バイトのブロックフラグと、4ビットの最終フラグと、4ビットの参照フラグと、1バイトの管理フラグと、2バイトの論理アドレスと、2バイトの連結アドレスと、3バイトのリザーブ領域と、2バイトの分散管理情報用エラー訂正符号と、3バイトのデータ用エラー訂正符号とからなる。
【0055】
可/不可フラグは、ブロックが使用可能状態か使用不可能状態かを示すフラグであり、具体的には、「使用可」と「使用不可」の2つの状態を示す。「使用可」は、当該ブロックが使用可能な状態を示し、「使用不可」は、当該ブロックが使用不可能な状態であることを示す。例えば、ブロック内に回復不能なエラーが生じたようなときに、この可/不可フラグが「使用不可」に設定され、当該ブロックが使用不可とされる。
【0056】
ブロックフラグは、ブロックの状態を示すフラグであり、具体的には、「未使用」「先頭使用」「使用」「未消去」の4つの状態を示す。「未使用」は、当該ブロックが未使用又は消去済みで、初期状態(全ビットが「1」の状態)とされており、直ぐにデータの書き込みが可能な状態を示す。「先頭使用」は、当該ブロックがファイルの先頭で使用されている状態を示す。なお、ブートデータが格納されたブートブロックにおいて、ブロックフラグは「先頭使用」とされる。「使用」は、当該ブロックがファイルの先頭以外で使用されている状態を示す。ブロックフラグが「使用」のとき、当該ブロックは、他のブロックから連結されていることとなる。「未消去」は、当該ブロックに書かれていたデータが無効となった状態を示す。例えば、データの消去を行うときに、取りあえずブロックフラグを「未消去」にしておき、処理時間に余裕があるときに、ブロックフラグが「未消去」になっているブロックを消去するようにする。これにより、消去処理をより効率良く行うことが可能となる。
【0057】
最終フラグは、ファイルが終わっているか否かを示すフラグであり、具体的には、「ブロック連続」「ブロック最終」の2つの状態を示す。「ブロック連続」は、次のブロックへの連結があることを示す。すなわち、「ブロック連続」は、当該ブロックに格納されたファイルにはまだ続きがあり、当該ファイルが他のブロックに続いていることを示す。「ブロック最終」は、最終ブロックであることを示す。すなわち、「ブロック最終」は、当該ブロックに格納されたファイルが、このブロックで終了していることを示す。
【0058】
参照フラグは、追加管理情報の参照を指定するためのフラグであり、具体的には、「参照情報なし」「参照情報あり」の2つの状態を示す。「参照情報なし」は、ブロックの最終ページの冗長領域に、有効な追加管理情報が存在しないことを示す。「参照情報あり」は、ブロックの最終ページの冗長領域に、有効な追加管理情報が存在していることを示す。
【0059】
管理フラグは、ブロックの属性等を示すフラグである。例えば、この管理フラグによって、当該ブロックが読み出し専用ブロックか、或いは書き込みも可能なブロックであるかが示される。また、例えば、この管理フラグによって、当該ブロックがブートブロックであるか、或いはデータブロックであるかが示される。
【0060】
論理アドレスは、文字通りそのブロックの論理アドレスを示す。この論理アドレスの値は、データの書き換えを行うときなどに必要に応じて更新される。なお、論理アドレスの値は、正常に処理が行われている限り、同じ論理アドレスの値を同時に複数のブロックが持つことがないように設定される。
【0061】
ところで、フラッシュメモリの場合、同一ブロック内でデータを書き換えるには、上述したように、先ずブロック消去を行う必要がある。しかしながら、保証されている消去可能回数には上限があり、ブロック消去の回数は出来るだけ少なくすることが要求される。そこで、ブロックのデータを更新する際は、同一のブロックを使って新たなデータに書き換えるのではなく、他のブロックに新たなデータを書き込むようにする。このとき、先にデータが格納されていたブロックは、当該ブロックに格納されていたデータが無効になったことを示すように、ブロックフラグを「未消去」にする。そして、このメモリカード2では、このようにデータを更新した場合でも、当該データが格納されているブロックを示すアドレスが同じとなるように、各ブロックに対して予め設定されている物理アドレスとは別に、動的に変更が可能な論理アドレスを各ブロックに割り当てて、この論理アドレスでデータが格納されているブロックを表すようにする。
【0062】
連結アドレスは、当該ブロックに連結するブロックの論理アドレスを示す。すなわち、ブロックに格納されたファイルにはまだ続きがあり、当該ファイルが他のブロックに続いている場合、連結アドレスには、そのファイルの続きが格納された次のブロックの論理アドレスの値が設定される。
【0063】
分散管理情報用エラー訂正符号は、分散管理情報のうち、管理フラグ、論理アドレス、連結アドレス及びリザーブ領域に書き込まれたデータを対象としたエラー訂正符号である。なお、可/不可フラグ、ブロックフラグ、最終フラグ及び参照フラグは、分散管理情報用エラー訂正符号によるエラー訂正の対象となっていない。したがって、可/不可フラグ、ブロックフラグ、最終フラグ及び参照フラグは、分散管理情報用エラー訂正符号を更新することなく書き換えることが可能となっている。
【0064】
データ用エラー訂正符号は、当該データ用エラー訂正符号が格納されているページのデータエリアに書き込まれたデータを対象としたエラー訂正符号である。
【0065】
なお、分散管理情報用エラー訂正符号やデータ用エラー訂正符号は、メモリカード2の内部に配されたエラー訂正回路16によって使用される。したがって、これらのエラー訂正符号を用いてのエラー訂正は、データ処理装置1に依存することなく、メモリカード2に依存した任意の手法を使用することができる。
【0066】
6.追加管理情報
つぎに、追加管理情報について詳細に説明する。
【0067】
追加管理情報は、ブロックの最終ページの16バイトの冗長エリアに格納される情報であり、分散管理情報だけでは管理しきれない追加情報を含んでいる。
【0068】
具体的には、追加管理情報は、図6に示すように、1バイトの可/不可フラグと、1バイトのブロックフラグと、4ビットの最終フラグと、4ビットの参照フラグと、1バイトの識別番号と、2バイトの有効データサイズと、5バイトのリザーブ領域と、2バイトの追加管理情報用エラー訂正符号と、3バイトのデータ用エラー訂正符号とからなる。
【0069】
ここで、可/不可フラグ、ブロックフラグ、最終フラグ、参照フラグ、リザーブ領域及びデータ用エラー訂正符号については、分散管理情報の場合と同様である。また、追加管理情報用エラー訂正符号は、分散管理情報における分散管理情報用エラー訂正符号に相当するものであり、追加管理情報のうち、識別番号、有効データサイズ及びリザーブ領域に書き込まれデータを対象としたエラー訂正符号である。
【0070】
そして、識別番号及び有効データサイズとが、分散管理情報だけでは管理しきれない追加情報として、追加管理情報に含まれている。
【0071】
識別番号は、エラー処理用の情報であり、ブロックのデータを書き換える度に、この識別番号の値がインクリメントされる。この識別番号は、何らかのエラーが発生して、同じ論理アドレスを持つブロックが複数存在するようになってしまった場合に、それらのブロックに書き込まれたデータの新旧を識別するために使用される。なお、識別番号には1バイトの領域が使用され、その値の範囲は「0」から「255」までであり、その初期値は「0」とされる。なお、識別番号が「255」を越えたときには「0」に戻される。そして、同じ論理アドレスを持つデータブロックが複数存在する場合には、この識別番号の値が小さい方のデータブロックを有効とする。ただし、ブートブロックについては、ブートブロックの予備がある場合、正常時にはそれらのブートブロックの識別番号は同じ値とされる。何らかの異常により、それらのブートブロックの識別番号が異なるような状態となった場合には、識別番号の値が大きい方のブートブロックを有効とする。
【0072】
また、有効データサイズは、ブロック内の有効なデータのサイズを示す。すなわち、当該ブロックのデータエリアに空きがある場合、有効データサイズには、当該データエリアに書き込まれたデータのサイズを示す値が設定される。このとき、分散管理情報の参照フラグは「参照情報あり」に設定される。なお、ブロックのデータエリアに空きがない場合、有効データサイズには、当該データエリアに空きがないことを示す値として、「0xffff」が設定される。
【0073】
なお、以上のような分散管理情報及び追加管理情報は、ブロック内のデータが更新される毎に、常に最新情報となるように更新される。
【0074】
7.集合管理情報
つぎに、集合管理情報について詳細に説明する。
【0075】
集合管理情報は、上述したように、各ブロックの分散管理情報を集めて作成されてなる情報であり、ファイルとしてフラッシュメモリ12に格納される。すなわち、図7に示すように、各ブロックの分散管理情報から、全ブロックをまとめて管理するための情報である集合管理情報のファイルが作成され、この集合管理情報が所定のブロックのデータエリアに格納される。なお、集合管理情報は、1つのブロックに格納されるものであっても、複数のブロックにわたって格納されるものであってもよい。そして、データ処理装置1は、通常は、この集合管理情報によって、各ブロックにアクセスするために必要な情報を得るようにする。
【0076】
すなわち、メモリカード2に有効な集合管理情報がファイルとして格納されている場合、データ処理装置1は、その集合管理情報のファイルを読み出して内部メモリ4に展開し、メモリカード2を管理するための管理テーブルを作成する。なお、集合管理情報のファイルの先頭が格納されているブロックの物理アドレスは、ブートデータに含まれており、データ処理装置1は、この物理アドレスに基づいて集合管理情報のファイルにアクセスする。
【0077】
この集合管理情報は、図8に示すように、この集合管理情報のヘッダーと、各ブロックの状態を示すビットマップテーブルと、ブロックにアクセスするときに、指定された論理アドレスから物理アドレスへの変換を行うための変換テーブルと、あるブロックの次のブロックを示す連結テーブルとを有する。
【0078】
ビットマップテーブルには、各ブロックの分散管理情報から抽出された、可/不可フラグ、ブロックフラグ、最終フラグ、参照フラグ及び管理フラグ等の情報が格納される。
【0079】
変換テーブルは、図9に示すように、論理アドレスに対応する物理アドレスが記述されたテーブルであり、物理アドレスが格納される領域は、1エントリあたり2バイトとされる。この変換テーブルを分散管理情報から作成するときは、対象となるブロックの分散管理情報に書かれている論理アドレスを調べ、テーブルの対応位置にそのブロックの物理アドレスを登録する。なお、論理アドレスを使用していない場合、対応する物理アドレスには「0xffff」を設定しておく。
【0080】
連結テーブルは、図10に示すように、論理アドレスに対応する連結アドレスが記述されたテーブルであり、連結アドレスが格納される領域は、1エントリあたり2バイトとされる。この連結テーブルを分散管理情報から作成するときは、対象となるブロックの分散管理情報に書かれている連結アドレスを調べ、テーブルの対応位置にそのブロックの連結アドレスを登録する。
【0081】
8.メモリカード起動時の手順
つぎに、メモリカード2の起動時の手順について、図11のフローチャートを参照して説明する。
【0082】
このメモリカード2を起動する際は、図11に示すように、先ず、ステップS1において、データ処理装置1は、メモリカード2のブートブロックからブートデータを読み込む。次に、ステップS2へ進む。
【0083】
ステップS2において、データ処理装置1は、ブートブロックからのブートデータの読み込みが正常に行われたかを確認する。正常に読み込まれたならば、ステップS3へ進み、正常に読み込まれなかったならば、ステップS8へ進む。
【0084】
ステップ3において、データ処理装置1は、読み込んだブートデータに基づいて、メモリカード2が当該データ処理装置1に対応しているか否かを判別する。対応したメモリカードであるならば、ステップS4へ進み、対応していないメモリカードならば、ステップS8へ進む。
【0085】
ステップS4において、データ処理装置1は、メモリカード2から集合管理情報を読み込む。なお、集合管理情報が格納されているブロックの物理アドレスは、ブートデータの中で指定されている。次に、ステップS5へ進む。
【0086】
ステップS5において、データ処理装置1は、有効な集合管理情報の読み込みが正常に行われたかを確認する。正常に読み込めたならば、ステップS6へ進み、正常に読み込めなかったならば、ステップS7へ進む。
【0087】
ステップS6において、データ処理装置1は、読み込んだ集合管理情報を内部メモリ4に展開し、メモリカード2を管理するための管理テーブルを作成する。以上の処理で、メモリカード2の起動時の初期処理が完了し、メモリカード2の使用が可能となる。
【0088】
また、ステップS5で有効な集合管理情報が正常に読み込めなかったと判断された場合は、上述したようにステップS7へ進む。ステップS7において、データ処理装置1は、各ブロックの分散管理情報を読み出して、集合管理情報を再構築する。そして、その集合管理情報を内部メモリ4に展開し、メモリカード2を管理するための管理テーブルを作成する。以上の処理で、メモリカード2の起動時の初期処理が完了し、メモリカード2の使用が可能となる。
【0089】
一方、ステップS2でブートデータ読み込み時にエラーが生じたと判断された場合、及び、ステップS3でメモリカード2がデータ処理装置1に対応していないと判断された場合は、上述したようにステップS8へ進む。
【0090】
ステップS8に進むのは、メモリカード2を使用できないときである。そこで、ステップS8において、データ処理装置1は、例えば、利用不可のメッセージを表示するなどの所定のエラー処理を行い、メモリカード2の起動処理を終了する。
【0091】
9.データ更新処理時の集合管理情報の取り扱い
データ処理装置1は、メモリカード2へデータを書き込む処理や、メモリカード2からデータを消去する処理(以下、これらの処理をまとめて「データ更新処理」と称する。)を行う毎に、内部メモリ4に保持している管理テーブルを、メモリカード2の実際の状態と整合するように(すなわち、分散管理情報の内容と整合するように)、随時更新していく。一方、メモリカード2にファイルとして格納されている集合管理情報は、データ更新処理毎に更新されるのではなく、適当なタイミングにて、その変更内容が一括して更新される。
【0092】
一般にフラッシュメモリ12の書き換え可能回数には上限があるが、集合管理情報の書き換えをある程度まとめて一括して行うようにすることで、集合管理情報が格納されているブロックの書き換え回数を削減することができ、メモリカード2の長寿命化を図ることができる。
【0093】
ただし、データ更新処理を行う際は、メモリカード2に格納されている集合管理情報のファイルを無効にしてから行う。これは、分散管理情報と集合管理情報の一貫性を損なわないためである。データ更新処理時には、処理の対象となるブロックの分散管理情報は同時に更新されるが、集合管理情報の内容は同時には更新されないので、分散管理情報と集合管理情報とが一致しない状態となる。そこで、このような状態のときには、メモリカード2に格納されている集合管理情報のファイルを無効にしておく。
【0094】
具体的には、データ更新処理時には、図12に示すように、先ず、ステップS11において、データ処理装置1は、メモリカード2に格納されている集合管理情報が有効であるか無効であるかを判別する。そして、集合管理情報が既に無効となっていたならば、そのままデータ更新処理に移行する。一方、集合管理情報が有効であれば、ステップS12へ進む。
【0095】
ステップS12において、データ処理装置1は、集合管理情報を無効にする。具体的には、集合管理情報のファイルが格納されているブロックのブロックフラグを「未消去」にするか、或いは当該ブロックに対して消去処理を施してデータを消去する。そして、このように集合管理情報を無効にした上で、データ更新処理に移行する。
【0096】
なお、メモリカード2に格納されている集合管理情報のファイルは、分散管理情報と集合管理情報の一貫性を損なわないために、データ更新処理時に無効とされるが、データ処理装置1の内部メモリ4に保持されている管理テーブルの内容は、常に最新の状態となるように随時更新される。そして、データ処理装置1は、通常は、この管理テーブルに基づいて各ブロックを管理する。
【0097】
また、データ更新処理時に無効とされた集合管理情報は、適当なタイミングで、改めてメモリカード2に書き込まれて、再び有効とされる。なお、ここでの適当なタイミングとは、例えば、メモリカード2の使用を終了して電源を落とすときや、メモリカード2へのアクセスが所定時間以上なされなかったときや、データの書き換えが所定回数以上行われたときなどである。
【0098】
具体的には、例えば、メモリカード2の使用を終了して電源を落とす前に、図13に示すような終了処理を行い、集合管理情報を有効なものとする。
【0099】
この終了処理では、先ず、ステップS21において、データ処理装置1は、メモリカード2に格納されている集合管理情報が有効であるか無効であるかを判別する。そして、集合管理情報が有効であれば、そのまま処理を終了する。一方、集合管理情報が無効であれば、ステップS22へ進む。
【0100】
ステップS22において、データ処理装置1は、集合管理情報のファイルが格納されているブロックに対して、消去処理が施されているか否かを判別する。消去処理が施されていなければ、ステップS23へ進み、消去処理が施されていれば、ステップS24へ進む。
【0101】
ステップS23において、データ処理装置1は、集合管理情報のファイルが格納されているブロックに対して消去処理を施す。その後、ステップS24へ進む。
【0102】
ステップS24において、データ処理装置1は、メモリカード2に集合管理情報を書き込む。このとき、データ処理装置1は、内部メモリ4に保持している管理テーブルの内容に基づいて新しい集合管理情報のファイルを作成し、その新しい集合管理情報のファイルをメモリカード2に書き込む。これにより、メモリカード2の最新の状態を示す有効な集合管理情報が、メモリカード2に格納されたこととなる。
【0103】
以上で終了処理が完了し、メモリカード2に有効な集合管理情報が格納された状態となる。
【0104】
10.新規ファイルの書き込み
つぎに、メモリカード2に新規なファイルを書き込む際の処理手順について説明する。メモリカード2にファイルを書き込む際の処理手順は、ファイルサイズが予め分かっている場合と、分かっていない場合とで異なる。
【0105】
10−1 ファイルサイズが予め分かっている場合
予めファイルのサイズが分かっている場合は、当該ファイルのデータを新規なブロックに書き込む毎に、データが当該ブロックに納まるかどうかを判断する。そして、データがブロック内に納まりきらない場合には、次に続くブロックの論理アドレスを確保しておき、データをデータエリアに書き込むとともに、次に続くブロックの論理アドレスを連結アドレスとして分散管理情報を書き込む。このとき、最終フラグは「ブロック連続」に設定しておく。一方、データがブロック内に納まる場合には、データの端数部分、すなわちデータエリアの空き領域は「0xffff」としておく。このとき、最終フラグは「ブロック最終」に設定しておき、追加管理情報に有効データサイズを書き込んでおく。
【0106】
つぎに、以上のように予めサイズが分かっているファイルをメモリカード2に書き込む際の手順について、図14に示すフローチャートを参照して、詳細に説明する。なお、図14に示すフローチャート、並びに後掲する図15及び図17に示すフローチャートでは、メモリカード2の誤消去防止スイッチ20のチェックや、何らかのエラーが発生したときの処理等については省略している。
【0107】
予めサイズが分かっているファイルをメモリカード2に書き込む際は、先ず、ステップS31において、データ処理装置1は、メモリカード2に書き込む実データと、当該実データのヘッダーとを準備する。換言すれば、ステップS31において、データ処理装置1は、メモリカード2のデータエリアに書き込むファイルを準備する。なお、当該ファイルのヘッダーには、ファイルのサイズの情報が含まれる。次に、ステップS32へ進む。
【0108】
ステップS32において、データ処理装置1は、最初にファイルが格納されるブロックのブロックフラグを「先頭使用」に設定するとともに、空いている論理アドレスを確保する。次に、ステップS33へ進む。
【0109】
ステップS33において、データ処理装置1は、空いている物理アドレスを検索する。次に、ステップS34へ進む。
【0110】
ステップS34において、データ処理装置1は、処理の対象となっているブロックにファイルが納まりきるか否かを判別する。ファイルがブロック内に納まりきらず、ファイルに続きがある場合には、ステップ35へ進み、一方、ファイルがブロック内に納まり、ファイルに続きがない場合には、ステップ36へ進む。
【0111】
ステップS35において、データ処理装置1は、次に続くブロックの論理アドレスを確保して、この論理アドレスを連結アドレスとして設定する。次に、ステップS37へ進む。
【0112】
一方、ステップS36において、データ処理装置1は、最終フラグを「ブロック最終」に設定するとともに、連結アドレスを「0xffff」に設定する。次に、ステップS37へ進む。
【0113】
ステップS37において、データ処理装置1は、これまでのステップで設定された情報等に基づいて、処理の対象となっているブロックについての分散管理情報を作成する。次に、ステップS38へ進む。
【0114】
ステップS38において、データ処理装置1は、処理の対象となっているブロックに、ページ単位でデータを順次書き込む。ここで、処理の対象となっているブロックにファイルが納まりきらない場合には、1ブロック分のデータがページ単位で書き込まれる。また、処理の対象となっているブロックにファイルが納まりきる場合には、必要なページ分だけページ単位でデータが書き込まれる。なお、このステップS38で、ブロックに書き込まれるのは、新規に書き込むファイルのデータと、ステップS37で作成された分散管理情報とである。次に、ステップS39へ進む。
【0115】
ステップS39において、データ処理装置1は、ファイルの全データについて、メモリカード2への書き込みが終了したか否かを判別する。書き込みが終了しておらず、まだデータが残っていれば、ステップS33へ戻って処理を繰り返す。一方、書き込みが終了していれば、ステップ40へ進む。
【0116】
ステップS40において、データ処理装置1は、書き込んだデータが、ブロックの途中で終わっているか否かを判別する。そして、データがブロックの途中で終わっていれば、ステップS41へ進む。一方、ブロックの最後までデータが格納されていれば、これで処理を終了する。
【0117】
ステップS41において、データ処理装置1は、最終ページの冗長エリアに格納される追加管理情報に有効データサイズを書き込む。すなわち、データ処理装置1は、ファイルの最後の部分が格納されたブロックのデータエリアに書き込まれたデータのサイズを示す値を、当該ブロックの追加管理情報に有効データサイズとして書き込む。
【0118】
以上で、予めサイズが分かっているファイルのメモリカード2への書き込みの処理が完了する。
【0119】
10−2 ファイルサイズが分かっていない場合
ファイルのサイズが予め分からない場合には、次に続くブロックの論理アドレスを常に確保しておき、データが終了した時点で、最終ブロックの最終フラグをオーバーライトにより設定する。なお、その他の分散管理情報及び追加管理情報に関しては、予めファイルサイズが分かっているときと同様に設定される。
【0120】
サイズが予め分かっていないファイルをメモリカード2に書き込む際の手順について、図15に示すフローチャートを参照して、詳細に説明する。
【0121】
サイズが予め分かっていないファイルをメモリカード2に書き込む際は、先ず、ステップS51において、データ処理装置1は、メモリカード2に書き込むファイルの仮のヘッダーを作成する。この段階では、ファイルサイズが不明なので、この仮のヘッダーには、ファイルサイズの情報が含まれていない。次に、ステップS52へ進む。
【0122】
ステップS52において、データ処理装置1は、最初にファイルが格納されるブロックのブロックフラグを「先頭使用」に設定するとともに、空いている論理アドレスを確保する。次に、ステップS53へ進む。
【0123】
ステップS53において、データ処理装置1は、メモリカード2に書き込むデータを準備する。次に、ステップS54へ進む。
【0124】
ステップS54において、データ処理装置1は、メモリカード2に書き込むデータが残っているか否かを判別する。データが終了しておらず、まだデータが残っていれば、ステップS55へ進む。一方、データが終了しており、データが残っていなければ、ステップS61へ進む。
【0125】
ステップS55において、データ処理装置1は、空いている物理アドレスを検索する。次に、ステップS56へ進む。
【0126】
ステップS56において、データ処理装置1は、次に続くブロックの論理アドレスを確保して、この論理アドレスを連結アドレスとして設定する。次に、ステップS57へ進む。
【0127】
ステップS57において、データ処理装置1は、これまでのステップで設定された情報等に基づいて、処理の対象となっているブロックについての分散管理情報を作成する。次に、ステップS58へ進む。
【0128】
ステップS58において、データ処理装置1は、処理の対象となっているブロックに、ページ単位でデータを順次書き込む。ここで、処理の対象となっているブロックにファイルが納まりきらない場合には、1ブロック分のデータがページ単位で書き込まれる。また、処理の対象となっているブロックにファイルが納まりきる場合には、必要なページ分だけページ単位でデータが書き込まれる。なお、このステップS58でブロックに書き込まれるのは、新規に書き込むファイルのデータと、ステップS57で作成された分散管理情報とである。次に、ステップS59へ進む。
【0129】
ステップS59において、データ処理装置1は、書き込んだデータが、ブロックのデータエリアの途中で終わっているか否かを判別する。そして、データエリアの最後に至るまでデータが格納されていれば、ステップS53へ戻って処理を繰り返す。一方、データがデータエリアの途中で終わっていれば、ステップS60へ進む。
【0130】
ステップS60において、データ処理装置1は、処理の対象となっているブロックの最終ページの冗長エリアに格納される追加管理情報に、有効データサイズを書き込む。すなわち、データ処理装置1は、ファイルの最後の部分が格納されたブロックのデータエリアに書き込まれたデータのサイズを示す値を、当該ブロックの追加管理情報に有効データサイズとして書き込む。次に、ステップS61へ進む。
【0131】
ステップS61において、データ処理装置1は、処理の対象となっているブロックの最終フラグを「ブロック最終」にオーバーライトにより設定する。次に、ステップS62へ進む。
【0132】
ステップS62において、データ処理装置1は、ファイルのヘッダーを更新する。すなわち、この段階では、ファイルサイズが明らかとなっているので、ファイルサイズの情報を含むヘッダーを新たに作成して、上述した仮のヘッダーを、ファイルサイズの情報を含む新たなヘッダーに書き換える。
【0133】
以上で、予めサイズが分かっていなかったファイルのメモリカード2への書き込みの処理が完了する。
【0134】
11.ファイルの更新
つぎに、メモリカード2に格納されているファイルを更新する際の処理手順について説明する。
【0135】
ファイルの更新時には、データの書き換えの対象となるブロックと同じ論理アドレスを別のブロックに付して、当該ブロックに対して新しいデータを書き込む。このとき、古いデータが書かれているブロックは、ファイルの更新が終了するまで開放せずに保持しておく。これにより、ファイル更新中に障害が発生したとしても、ファイル更新前の状態に復旧することが可能となる。
【0136】
このようなファイル更新の手順の具体的な例を図16を参照して説明する。
【0137】
図16(a)に示すように、ファイルの先頭が、論理アドレス「1」のブロックに格納され、ファイルの次の部分が、論理アドレス「2」のブロックに格納され、ファイルの次の部分が、論理アドレス「3」のブロックに格納されていたとする。また、論理アドレス「1」のブロックの識別番号は「6」、論理アドレス「2」のブロックの識別番号は「4」、論理アドレス「3」のブロックの識別番号は「1」であったとする。
【0138】
そして、このような状態のときに、論理アドレス「2」のブロックのデータを書き換えるとする。このときは、先ず、図16(b)に示すように、空いている別にブロックに論理アドレス「2」を割り当て、このブロックに新しいデータを書き込む。ここで、新しいデータを書き込むブロックの識別番号には、古いデータが書き込まれているブロックの識別番号を1インクリメントした値、すなわち「5」を設定する。
【0139】
この段階では、同じ論理アドレスを持つブロックが2つ存在していることとなる。そして、これらの2つのブロックのうち、識別番号が大きい方のブロックに格納されているデータが新しい方のデータであり、識別番号が小さい方のブロックに格納されているデータが古い方のデータとなる。
【0140】
そして、新しいデータの書き込みが正常に完了したら、次に、図16(c)に示すように、古いデータが書き込まれていたブロックを消去する。なお、このときは、古いデータが書き込まれていたブロックに対して消去処理を施すのではなく、該当するブロックのブロックフラグを「未消去」にするだけにしておき、後から適当なタイミングで、このブロックに対して消去処理を施すようにしてもよい。
【0141】
以上のような処理の手順について、図17に示すフローチャートを参照して、詳細に説明する。
【0142】
ファイルを更新する際は、先ず、ステップS71において、データ処理装置1は、更新の対象となるブロックを選択する。次に、ステップS72へ進む。
【0143】
ステップS72において、データ処理装置1は、更新の対象となるブロックの識別番号を読み出し、その値を1インクリメントした値を、新しいデータを書き込むブロックの識別番号として設定する。また、新しいデータを書き込むブロックの論理アドレスとして、更新の対象となるブロックの論理アドレスと同じ値を設定する。次に、ステップS73へ進む。
【0144】
ステップS73において、データ処理装置1は、ブロックに書き込む新しいデータを準備する。次に、ステップS74に進む。
【0145】
ステップS74において、データ処理装置1は、空いている物理アドレスを検索する。次に、ステップS75に進む。
【0146】
ステップS75において、データ処理装置1は、データの変更が全て完了しているか否かを判別する。完了していなければ、ステップS76へ進み、完了していれば、ステップS79へ進む。
【0147】
ステップS76において、データ処理装置1は、次に続くブロックの論理アドレスを確保して、この論理アドレスを連結アドレスとして設定する。次に、ステップS77へ進む。
【0148】
ステップS77において、データ処理装置1は、これまでのステップで設定された情報等に基づいて、新しいデータを書き込むブロックについての分散管理情報を作成する。次に、ステップS78へ進む。
【0149】
ステップS78において、データ処理装置1は、ステップS74で検索された物理アドレスのブロックに、ページ単位で新しいデータを順次書き込む。ここで、処理の対象となっているブロックにファイルが納まりきらない場合には、1ブロック分のデータがページ単位で書き込まれる。また、処理の対象となっているブロックにファイルが納まりきる場合には、必要なページ分だけページ単位でデータが書き込まれる。なお、このステップS78で、ブロックに書き込まれるのは、新しいファイルのデータと、ステップS77で作成された分散管理情報とである。そして、このステップS78の後は、ステップS73へ戻って処理を繰り返す。
【0150】
一方、ステップS79において、データ処理装置1は、最後に更新の対象となっていたブロックに、連結アドレスが設定されているか否かを判別する。連結アドレスが設定されていなければ、ステップS80へ進み、連結アドレスが設定されていたならば、ステップS81へ進む。
【0151】
ステップS80において、データ処理装置1は、最後に新しいデータを書き込んだブロックの最終フラグを「ブロック最終」に設定する。次に、ステップS82へ進む。
【0152】
一方、ステップS81において、データ処理装置1は、最後に新しいデータを書き込んだブロックの連結アドレスに、最後に更新の対象となっていたブロックに設定されていた連結アドレスの値を設定する。次に、ステップS82へ進む。
【0153】
ステップS82において、データ処理装置1は、ファイルのヘッダーを更新する。すなわち、ファイルの更新により、ファイルサイズが変更となっている可能性があるので、新しいファイルサイズの情報を含むヘッダーを新たに作成して、ファイルのヘッダーを更新する。次に、ステップS83へ進む。
【0154】
ステップS83において、データ処理装置1は、古いデータが書き込まれていたブロックを消去する。なお、このときは、古いデータが書き込まれていたブロックに対して消去処理を施すのではなく、該当するブロックのブロックフラグを「未消去」にするだけにしておき、後から適当なタイミングで、これらのブロックに対して消去処理を施すようにしてもよい。
【0155】
以上でファイルの更新処理が完了する。
【0156】
12.エラー検出訂正処理
以上のようなシステムでは、メモリカード2に新規ファイルを書き込んでいるときや、メモリカード2に格納されているファイルを更新しているときなどに、いきなり電源が遮断されたり、メモリカード2がデータ処理装置1から強制的に取り外されたりすると、同じ論理アドレスを持つ複数のブロックが同時に存在するような状態(すなわち論理アドレスエラー)となってしまったり、或いは、連結アドレスで指し示されたブロックが存在しないような状態(すなわち連結アドレスエラー)となってしまったりする可能性がある。
【0157】
そこで、本発明を適用したシステムでは、集合管理情報を構築する際に、論理アドレスエラーや連結アドレスエラーを検出して訂正するエラー検出訂正処理を行うようにする。以下、このエラー検出訂正処理について、詳細に説明する。
【0158】
12−1 エラー検出テーブル
本発明を適用したシステムでは、集合管理情報を構築する際に、論理アドレスエラーや連結アドレスエラーの検出を行う。そして、連結アドレスエラーを検出するために使用するテーブルとして、エラー検出テーブルを使用する。エラー検出テーブルは、連結アドレスエラーの検出にだけ使用されるテーブルであり、エラー検出訂正処理を行う際に、データ処理装置1の内部メモリ4に一時的に確保される。エラー検出テーブルのために確保されていた領域は、エラー検出訂正処理が終了した後、開放される。
【0159】
このエラー検出テーブルは、図18に示すように、1論理アドレスに対して、各ブロックの連結状態を示す1ビットの領域を備えたテーブルである。換言すれば、エラー検出テーブルは、1エントリあたり1ビットとなっており、各エントリは論理アドレスの連結状態を「0」又は「1」で示す。処理の対象となるブロックがN個ある場合、このエラー検出テーブルが占める領域は、N/8バイトとなる。
【0160】
このエラー検出テーブルは、集合管理情報を構築しているときと、集合管理情報の構築が終了したときとで、各ブロックの連結状態を示す値の意味合いが異なる。
【0161】
集合管理情報を構築している最中において、連結状態を示す値が「0」のとき、そのエントリは、正常な状態であることを示しているか、或いは、当該エントリに対応する論理アドレスが、現在処理の対象となっているブロックまでの間に他のブロックの連結アドレスで指定されていないことを示している。この状態のときは、今後の処理が進むに従って、値が「1」になる可能性があり、連結アドレスエラーであるかどうか不確定な状態である。
【0162】
また、集合管理情報を構築している最中において、連結状態を示す値が「1」のとき、そのエントリは、当該エントリに対応する論理アドレスが、現在処理の対象となっているブロックまでの間に他のブロックの連結アドレスとして指定されているが、物理アドレスに対応していない状態を示す。この状態のときは、今後の処理が進むに従って、値が「0」になる可能性があり、連結アドレスエラーであるかどうか不確定な状態である。
【0163】
一方、集合管理情報の構築が終了した段階で、連結状態を示す値が「1」のとき、そのエントリは、当該エントリに対応する論理アドレスが連結アドレスとして指定されているのに、対応する物理アドレスが存在しないことを示している。したがって、この状態のときは、連結アドレスエラーである。
【0164】
また、集合管理情報の構築が終了した段階で、連結状態を示す値が「0」のとき、そのエントリは、当該エントリに対応する論理アドレスに関する連結が正常な状態となっていることを示している。
【0165】
12−2 連結アドレスエラーの検出
つぎに、以上のようなエラー検出テーブルを用いて行われる、連結アドレスエラーの検出について、具体的な例を挙げて説明する。
【0166】
例えば、図19に示すように、物理アドレス「10」のブロックについて、その論理アドレスが「1」、その連結アドレスが「3」であり、また、物理アドレス「17」のブロックについて、その論理アドレスが「3」、その連結アドレスが「2」であったとする。また、論理アドレスが「2」のブロックは存在しないとする。
【0167】
このとき、集合管理情報の再構築の処理が行われると、集合管理情報の再構築に伴って、図20に示すように、連結アドレスエラーの検出が行われる。
【0168】
先ず、初期状態では、図20(a)に示すように、論理アドレス「1」「2」「3」のそれぞれについて、エラー検出テーブルの値は、すべて初期値「0」とする。また、集合管理情報の変換テーブルも、全て初期値「0xffff」とする。このとき、集合管理情報の連結テーブルは、全く値が入っていない状態とする。
【0169】
次に、論理アドレス「1」のブロックについての情報を読み込む。これにより、図20(b)に示すように、論理アドレス「1」に対応する変換テーブルの値は、論理アドレス「1」のブロックの物理アドレスの値、すなわち「10」とされる。また、論理アドレス「1」に対応する連結テーブルの値は、論理アドレス「1」のブロックの連結アドレスの値、すなわち「3」とされる。
【0170】
次に、論理アドレス「1」に対応する連結テーブルの値が指し示す論理アドレス「3」のエントリを確認する。このとき、論理アドレス「3」のエントリには、物理ブロックが割り当てられていないので、図20(c)に示すように、論理アドレス「3」に対応するエラー検出テーブルの値を「1」とする。また、論理アドレス「3」に対応する変換テーブルの値は、連結元の論理アドレスの値、すなわち「1」とする。
【0171】
次に、エラー検出テーブルの値が「1」となっている論理アドレス「3」のブロックについて、その情報を読み込む。このとき、論理アドレス「3」のブロックは存在しており、当該ブロックの情報は正常に読み込むことができる。したがって、図20(d)に示すように、論理アドレス「3」に対応するエラー検出テーブルの値を「0」とする。また、このとき、論理アドレス「3」に対応する変換テーブルの値は、論理アドレス「3」のブロックの物理アドレスの値、すなわち「17」とする。また、論理アドレス「3」に対応する連結テーブルの値は、論理アドレス「3」のブロックの連結アドレスの値、すなわち「2」とする。
【0172】
次に、論理アドレス「3」に対応する連結テーブルの値が指し示す論理アドレス「2」のエントリを確認する。このとき、論理アドレス「2」のエントリには、物理ブロックが割り当てられていないので、図20(e)に示すように、論理アドレス「2」に対応するエラー検出テーブルの値を「1」とする。また、論理アドレス「2」に対応する変換テーブルの値は、連結元の論理アドレスの値、すなわち「3」とする。
【0173】
次に、エラー検出テーブルの値が「1」となっている論理アドレス「2」のブロックについて、その情報の読み込みを試みる。しかしながら、論理アドレスが「2」のブロックは存在していないので、この段階で、連結アドレスエラーであることが判明する。
【0174】
12−3 エラー訂正処理
本発明を適用したシステムにおいて、論理アドレスエラーに対するエラー訂正処理は、以下のように行う。
【0175】
論理アドレスエラーが生じているときには、同じ論理アドレスを持つブロックをそれぞれ調べる。そして、ブロックとして完全なものが1つしかない場合には、完全なブロックを生かして、残りのブロックは無効とする。
【0176】
また、同じ論理アドレスを持つ完全なブロック(ブートブロックを除く。)が複数ある場合には、識別番号を比較して値が小さい方のブロックを生かす。なお、一方のブロックの識別番号が「255」であり、他方のブロックの識別番号が「0」の場合には、識別番号が「255」のブロックを生かすようにする。
【0177】
なお、通常は、同じ論理アドレスを持つブロックが複数あったとしても、それらの識別番号の差は1である。この条件に当てはまらないような場合には、システムの側で自動的にエラー訂正処理を行うのではなく、手動復旧モードとする。
【0178】
また、本発明を適用したシステムにおいて、連結アドレスエラーが生じた場合には、メモリカード2を使用するアプリケーションソフトウェアやメモリカード2に格納するデータ等に応じた適切なエラー訂正処理を行うようにする。具体的には、例えば、以下に挙げるようなエラー訂正処理を行うようにすればよい。
【0179】
すなわち、例えば、最後の連結アドレスが指し示すブロックとして新規ブロックを割り当てる。そして、最後のブロックのデータを正しく読めるページまで読み込んで、そのページまでのデータを新規ブロックにコピーする。このとき、新規ブロックの最終フラグは「ブロック最終」としておく。このようなエラー訂正処理は、対象となるデータが音楽データ等のようにデータの途中でも意味があるデータの場合に、特に好適である。
【0180】
12−4 集合管理情報の構築とエラー検出訂正処理
本発明を適用したシステムにおいて、物理アドレスエラーや連結アドレスエラーが発生するのは、データ更新処理の途中に何らかの障害が発生した場合である。そして、本発明を適用したシステムでは、上述したように、データ更新処理に先だってメモリカード2に格納されている集合管理情報を無効にするようにしている。したがって、物理アドレスエラーや連結アドレスエラーが発生するときには、集合管理情報が無効となっている。そして、集合管理情報が無効となっているときには、次にメモリカード2を起動するときに、全てのブロックの分散管理情報を調べ直して集合管理情報を再構築する処理が必ず行われる。
【0181】
そこで、このシステムでは、集合管理情報を再構築する際に、全てのブロックを調べ直すということに着目し、このときにエラー検出訂正処理を同時に行う。換言すれば、集合管理情報が有効となっているときには、物理アドレスエラーや連結アドレスエラーが発生している可能性はないので、このときにはエラー検出訂正処理を行わない。すなわち、この方法では、集合管理情報の再構築時にだけ、エラー検出訂正処理を行う。これにより、エラー検出訂正処理のためにメモリカード2に余分にアクセスする必要がなくなる。その結果、例えば、メモリカード2の速やかな起動が可能となる。
【0182】
このエラー検出訂正処理は、以下のような手順によって行われる。
【0183】
(1)データ処理装置1の内部メモリ4上の変換テーブルを全て「0xffff」で初期化する。また、内部メモリ4上にエラー検出テーブルの領域を確保し、当該エラー検出テーブルを全て「0」で初期化する。
【0184】
(2)ブロックの先頭に移動する。
【0185】
(3)ブロックから分散管理情報を読み込み、当該分散管理情報を用いてビットマップテーブルを構築する。このとき、可/不可フラグが「使用不可」であるか、或いはブロックフラグが「未使用」又は「未消去」である場合には、ビットマップテーブルの作成が終了したら、次のブロックへ移動して処理を繰り返す。
【0186】
(4)ブロックの論理アドレス(以下、論理アドレスAとする。)と、連結アドレス(以下、論理アドレスBとする。)とを調べる。
【0187】
(5)論理アドレスAが「0xffff」の場合は、次のブロックへ移動し、(3)へ戻って処理を繰り返す。
【0188】
(6)エラー検出テーブルの論理アドレスAの欄を調べる。エラー検出テーブルの論理アドレスAの欄が「1」となっている場合は、「0」に書き換えるとともに、変換テーブルの論理アドレスAの欄に、論理アドレス「A」のブロックの物理アドレスを書き込む。また、エラー検出テーブルの論理アドレスAの欄が「0」となっている場合は、変換テーブルの論理アドレスAの欄を調べる。そして、変換テーブルの論理アドレスAの値が「0xffff」のときは、そこに、論理アドレスAのブロックの物理アドレスを書き込む。
【0189】
なお、変換テーブルの論理アドレスAの値として、「0xffff」以外の値が既に入っている場合は、論理アドレスエラーが発生している場合であるので、論理アドレスエラーに対するエラー訂正処理を行う。
【0190】
(7)連結テーブルの論理アドレスAの欄に、論理アドレスBの値を記入する。
【0191】
(8)最終フラグが「ブロック最終」となっているかを調べる。「ブロック最終」となっていれば、連結アドレスは無効なので、次のブロックに移動し、(3)へ戻って処理を繰り返す。
【0192】
(9)論理アドレスBに物理アドレスが対応しているかどうかを、変換テーブルを用いて確認する。変換テーブルの論理アドレスBの値が「0xffff」以外の場合は、論理アドレスBに物理アドレスが対応している。一方、変換テーブルの論理アドレスBの値が「0xffff」の場合は、現在のブロックまでの段階では、論理アドレスBに物理アドレスが対応していない。このときは、エラー検出テーブルの論理アドレスBの欄に「1」を書き込むとともに、変換テーブルの論理アドレスBの欄に論理アドレスAの値を記入する。その後、次のブロックに移動し、(3)へ戻って処理を繰り返す。
【0193】
なお、変換テーブルの論理アドレスBの値が「0xffff」となっても、ブロックの途中までしか処理を行っていない段階では、論理アドレスBに物理アドレスが本当に対応していないのかは明らかではない。すなわち、論理アドレスBに物理アドレスが本当に対応していない場合と、今後処理を進めて行くに従って、対応するブロックが現れる場合との2通りがあり得る。
【0194】
(10)全てのブロックに対して処理を行った後、エラー検出テーブルを参照する。エラー検出テーブルの値が「1」となっている論理アドレスは、物理アドレスが対応していない。すなわち、連結アドレスエラーが発生している。このときは、変換テーブル内に連結元のブロックの論理アドレスが格納されているので、これを用いて元ブロックを特定し、適切なエラー訂正処理を行う。なお、エラー訂正処理を行った後は、エラー検出テーブルの値を「0」にし、該当する変換テーブルの値を「0xffff」にしておく。
【0195】
本発明を適用したシステムでは、以上のように、集合管理情報を構築するときにエラー検出訂正処理を行う。以下、このような集合管理情報の構築及びエラー検出訂正処理の具体的な方法について、図21乃至図23に示すフローチャートを参照して、更に詳細に説明する。
【0196】
なお、ここでは、変数としてI,A,B,C,D,T(I)を使用し、定数としてNを使用する。変数Iは、物理アドレスが入力される変数であり、変数Aは、論理アドレスが入力される変数であり、変数Bは、連結アドレスが入力される変数であり、変数C,Dは、識別番号の値が入力される変数であり、変数T(I)は、論理アドレス「I」に対応するエラー検出テーブルの値を示す変数である。また、定数Nは、総ブロック数を示す定数である。
【0197】
集合管理情報を構築する際は、図21のステップS101において、データ処理装置1は、変換テーブルを初期化し、全ての値を「0xffff」とする。次にステップS102へ進む。
【0198】
ステップS102において、データ処理装置1は、エラー検出テーブルを初期化し、全ての値を「0」とする。次にステップS103へ進む。
【0199】
ステップS103において、データ処理装置1は、変数Iに「0」を代入する。次にステップS104へ進む。
【0200】
ステップS104において、データ処理装置1は、物理アドレス「I」のブロックの分散管理情報をメモリカード2から読み込む。次にステップS105へ進む。
【0201】
ステップS105において、データ処理装置1は、ステップS104で読み込んだ分散管理情報の可/不可フラグを参照して、物理アドレス「I」のブロックが使用可能か否かを判別する。使用可能であれば、ステップS106へ進み、使用不可能であれば、ステップS129へ進む。
【0202】
ステップS106において、データ処理装置1は、ステップS104で読み込んだ分散管理情報のブロックフラグを参照して、物理アドレス「I」のブロックが使用中であるか否かを判別する。具体的には、ブロックフラグが「先頭使用」又は「使用」になっているか否かを判別する。ブロックフラグが「先頭使用」又は「使用」になっており、当該ブロックが使用中であれば、ステップS107へ進む。また、当該ブロックが使用中でなければ、ステップS129へ進む。
【0203】
ステップS107において、データ処理装置1は、物理アドレス「I」のブロックについての情報をビットマップテーブルに加える。次に、ステップS108へ進む。
【0204】
ステップS108において、データ処理装置1は、ステップS104で読み出した分散管理情報に基づいて、物理アドレス「I」のブロックの論理アドレスを変数Aに代入し、物理アドレス「I」のブロックの連結アドレスを変数Bに代入する。次にステップS109へ進む。
【0205】
ステップS109において、データ処理装置1は、Aの値が「0xffff」であるか否かを判別する。「0xffff」でなければ、ステップS110へ進み、「0xffff」であれば、図22のステップS120へ進む。
【0206】
ステップS110において、データ処理装置1は、エラー検出テーブルの論理アドレス「A」の値を調べる。次にステップS111へ進む。
【0207】
ステップS111において、データ処理装置1は、エラー検出テーブルの論理アドレス「A」の値が「1」であるかを判別する。「1」であれば、ステップS112へ進み、「1」でなければステップS130へ進む。
【0208】
ステップS112において、データ処理装置1は、エラー検出テーブルの論理アドレス「A」の値を「0」に書き換える。次に、ステップS113へ進む。
【0209】
ステップS113において、データ処理装置1は、変換テーブルの論理アドレス「A」の欄に、変数「I」(すなわち物理ブロック「I」)を書き込む。次に、ステップS114へ進む。
【0210】
ステップS114において、データ処理装置1は、連結テーブルの論理アドレス「A」の欄に、変数「B」(すなわち連結アドレス「B」)を書き込む。次に、ステップS115へ進む。
【0211】
ステップS115において、データ処理装置1は、最終フラグが「ブロック最終」になっているか否かを判別する。「ブロック最終」になっていなければ、ステップS116へ進み、「ブロック最終」になっていれば、図22のステップS120へ進む。
【0212】
ステップS116において、データ処理装置1は、論理アドレス「B」に対応する変換テーブルの値を調べる。次に、ステップS117へ進む。
【0213】
ステップS117において、データ処理装置1は、論理アドレス「B」に対応する変換テーブルの値が「0xffff」であるかを判別する。「0xffff」であれば、ステップS118へ進み、「0xffff」でなければ、図22のステップS120へ進む。
【0214】
ステップS118において、データ処理装置1は、エラー検出テーブルの論理アドレス「B」の欄を「1」に書き換える。次に、ステップS119へ進む。
【0215】
ステップS119において、データ処理装置1は、エラー検出テーブルの論理アドレス「B」の欄に、論理アドレス「A」を書き込む。次に、図22のステップS120へ進む。
【0216】
図22のステップS120において、データ処理装置1は、変数Iの値と、総ブロック数を示す定数Nの値とを比較する。I<Nでなければ、ステップS121へ進み、I<Nであれば、ステップS128へ進む。
【0217】
ステップS121において、データ処理装置1は、変数Iに「0」を代入する。次にステップS122へ進む。
【0218】
ステップS122において、データ処理装置1は、エラー検出テーブルの論理アドレス「I」の値を示す変数T(I)が「1」であるかを判別する。「1」でなければステップS123へ進み、「1」であればステップS125へ進む。
【0219】
ステップS123において、データ処理装置1は、変数Iの値と、総ブロック数を示す定数Nの値とを比較する。I=Nであれば、これで処理を終了する。I=Nでなければ、ステップS124へ進む。
【0220】
ステップS124において、データ処理装置1は、変数Iの値を1インクリメントする。その後、ステップS122へ戻って処理を繰り返す。
【0221】
また、ステップS122で変数T(I)が「1」であったときは、上述したようにステップS125へ進む。このステップS125に進むのは、連結アドレスエラーが生じていたときである。そこで、ステップS125において、データ処理装置1は、連結アドレスエラーに対する所定のエラー訂正処理を行う。ここでは、上述したように、メモリカード2を使用するアプリケーションソフトウェアやメモリカード2に格納するデータ等に応じた適切なエラー訂正処理を行うようにする。そして、エラー訂正処理が完了したら、ステップS126へ進む。
【0222】
ステップS126において、データ処理装置1は、エラー検出テーブルの論理アドレス「I」の値を「0」にする。次に、ステップS127へ進む。
【0223】
ステップS127において、データ処理装置1は、変換テーブルの論理アドレス「I」の欄を「0xffff」に書き換える。その後、ステップS123へ進み、上述した処理を行う。
【0224】
また、ステップS120でI<Nであったときは、上述したようにステップS128へ進む。このステップS128へ進むのは、全ブロックについての分散管理情報の読み出しが完了していないときである。そこで、このステップS128において、データ処理装置1は、変数Iの値を1インクリメントし、その後、図21のステップS104へ戻って処理を繰り返す。
【0225】
また、図21のステップS105で物理アドレス「I」のブロックが使用不可能であったとき、及びステップS106で物理アドレス「I」のブロックが使用中でなかったときは、上述したようにステップS129へ進む。
【0226】
ステップS129において、データ処理装置1は、物理アドレス「I」のブロックについての情報をビットマップテーブルに加える。その後、図22のステップS120へ進み、上述した処理を行う。
【0227】
また、図21のステップS111でエラー検出テーブルの論理アドレス「A」の値が「1」でなかったときは、上述したようにステップS130へ進む。このステップS130において、データ処理装置1は、変換テーブルの論理アドレス「A」の値を調べる。次に、ステップS131へ進む。
【0228】
ステップS131において、データ処理装置1は、変換テーブルの論理アドレス「A」の値が「0xffff」であるかを判別する。「0xffff」であれば、ステップS113へ進んで上述した処理を行い、「0xffff」でなければ、図23のステップS132へ進む。
【0229】
図23のステップS132に進むのは、論理アドレスエラーが生じて、論理アドレス「A」を持つブロックが2つ存在しているときである。そこで、ステップS132において、データ処理装置1は、論理アドレス「A」を持つ2つのブロックの識別番号を読み出す。そして、一方のブロックの識別番号が読み出せたら、その値を変数Cに代入する。また、他方のブロックの識別番号が読み出せたら、その値を変数Dに代入する。次にステップS133へ進む。
【0230】
ステップS133において、データ処理装置1は、ステップS132での識別番号の読み出しが正常に行えたかを判別する。変数Cに代入される識別番号だけが読み出せたときは、ステップS134へ進み、それ以外のときは、ステップS137へ進む。
【0231】
ステップS134において、データ処理装置1は、変数Dに対応するブロックのブロックフラグを「未消去」にする。次にステップS135へ進む。
【0232】
ステップS135において、データ処理装置1は、ステップS134での処理、すなわち変数Dに対応するブロックのブロックフラグを「未消去」にする処理が成功したかを判別する。成功していれば、図21のステップS113へ戻って上述した処理を行い、成功していなければ、ステップS136へ進む。
【0233】
ステップS136において、データ処理装置1は、変数Dに対応するブロックの可/不可フラグを「使用不可」にする。その後、図21のステップS113へ戻って上述した処理を行う。
【0234】
また、ステップS137において、データ処理装置1は、ステップS132での識別番号の読み出しが正常に行えたかを判別する。変数Dに代入される識別番号だけが読み出せたときは、ステップS138へ進み、それ以外のときは、ステップS141へ進む。
【0235】
ステップS138において、データ処理装置1は、変数Cに対応するブロックのブロックフラグを「未消去」にする。次にステップS139へ進む。
【0236】
ステップS139において、データ処理装置1は、ステップS138での処理、すなわち変数Cに対応するブロックのブロックフラグを「未消去」にする処理が成功したかを判別する。成功していれば、図21のステップS113へ戻って上述した処理を行い、成功していなければ、ステップS140へ進む。
【0237】
ステップS140において、データ処理装置1は、変数Cに対応するブロックの可/不可フラグを「使用不可」にする。その後、図21のステップS113へ戻って上述した処理を行う。
【0238】
また、ステップS141において、データ処理装置1は、ステップS132での識別番号の読み出しが正常に行えたかを判別する。変数Cに代入される識別番号と、変数Dに代入される識別番号との両方が正常に読み出せたときは、ステップS142へ進む。一方、両方とも読み出せなかったときには、手動復旧モードに移行し、手動にてエラーの訂正に必要な適切な処理を行うようにする。
【0239】
ステップS142において、データ処理装置1は、変数Cの値と、変数Dの値に「1」を加えた値とを比較する。これらの値が等しければ、ステップS134へ進み上述した処理を行い、これらの値が等しくなければ、ステップS143へ進む。
【0240】
ステップS143において、データ処理装置1は、変数Dの値と、変数Cの値に「1」を加えた値とを比較する。これらの値が等しければ、ステップS138へ進み上述した処理を行う。一方、これらの値が等しくないときは、手動復旧モードに移行し、手動にてエラーの訂正に必要な適切な処理を行うようにする。
【0241】
以上のような処理により、集合管理情報の再構築時に、エラー検出訂正処理が同時に行われる。これにより、上述したように、エラー検出訂正処理のためにメモリカード2に余分にアクセスする必要がなくなる。すなわち、本発明を適用したシステムでは、データの書き込みが正常に終了し有効な集合管理情報がメモリカード2に書き戻されている場合には、エラー検出訂正処理は実行されない。
【0242】
このように、本発明を適用したシステムでは、不要なエラー検出訂正処理を行わないので、メモリカード2へのアクセスの高効率化を図ることができる。特に、上記エラー検出訂正処理は、分散管理情報から集中管理情報を構築する作業と同時に行われるため、メモリカード2へのアクセスが最小限にとどめられる。
【0243】
また、本発明を適用したシステムでは、メモリカード2の各ブロックに識別番号を付し、この識別番号を用いて論理アドレスエラーに対処するようにしているので、データ更新処理を安全に行うことができる。すなわち、データ更新処理時に何らかのエラーが発生して、同じ論理アドレスを持つブロックが複数存在するようになってしまっても、識別番号を用いることで、データ更新処理前の状態のデータを復旧することができる。更に、本発明を適用したシステムでは、エラー検出テーブルを用いることで、連結アドレスエラーを検出することもでき、しかも連結先の存在しないブロックを検出することもできる。
【0244】
【発明の効果】
以上詳細に説明したように、本発明によれば、不揮発性メモリのブロックの先頭ページの冗長エリアに、当該ブロックを管理するための論理アドレスを含む管理情報を格納し、かつ上記それぞれのブロックの2ページ目の冗長エリアに、上記先頭ページの冗長エリアに格納された管理情報と同じ情報を、予備の管理情報として格納することで、論理アドレスや連結アドレスを含む管理情報がエラーを起こしても、予備に格納された管理情報を用いることで、エラー訂正が可能となる。なお、このようなエラー訂正処理は、対象となるデータが音楽データ等のようにデータの途中でも意味があるデータの場合に、特に好適である。
【図面の簡単な説明】
【図1】本発明が適用されるシステムの全体構成を示す図である。
【図2】本発明を適用したメモリカードの構成を示すブロック図である。
【図3】本発明を適用したメモリカードの外観を示す斜視図である。
【図4】本発明を適用したメモリカードの記憶領域の構造を示す図である。
【図5】分散管理情報の構成を示す図である。
【図6】追加管理情報の構成を示す図である。
【図7】各ブロックの分散管理情報から集合管理情報を構築する様子を示す図である。
【図8】集合管理情報の構成を示す図である。
【図9】変換テーブルを示す図である。
【図10】連結テーブルを示す図である。
【図11】メモリカード起動時の手順を示すフローチャートである。
【図12】データ更新処理時の手順を示すフローチャートである。
【図13】終了処理の手順を示すフローチャートである。
【図14】サイズが分かっているファイルをメモリカードに書き込むときの手順を示すフローチャートである。
【図15】サイズが分かっていないファイルをメモリカードに書き込むときの手順を示すフローチャートである。
【図16】ファイル更新の手順について、具体的な例を挙げて示す概念図である。
【図17】ファイル更新の手順を示すフローチャートである。
【図18】エラー検出テーブルを示す図である。
【図19】ブロック間の連結状態の具体的な例を示す図である。
【図20】連結アドレスエラー検出の例として、ブロック間の連結状態が図19に示した状態のときの処理の流れを示す図である。
【図21】集合管理情報の構築とエラー検出訂正処理の手順を示すフローチャートである。
【図22】集合管理情報の構築とエラー検出訂正処理の手順を示すフローチャートである。
【図23】集合管理情報の構築とエラー検出訂正処理の手順を示すフローチャートである。
【符号の説明】
1 データ処理装置、 2 メモリカード、 3 演算処理装置、 4 内部メモリ、 5 補助記憶装置、 6 シリアルインターフェース回路、 7 バス、 11 コントローラ、 12 フラッシュメモリ、 13 シリアル/パラレル・パラレル/シリアル・インターフェース・シーケンサ、 14 フラッシュメモリ・インターフェース・シーケンサ、 15 ページバッファ、 16エラー訂正回路、 17 コマンドジェネレータ、 18 コンフィグレーションROM、 19 発振器、 20 誤消去防止スイッチ
Claims (12)
- 一括消去可能な複数のブロックを有し、
上記ブロックは、複数のページから構成され、
上記複数のページは、それぞれ冗長エリアを有し、
上記それぞれのブロックの先頭ページの冗長エリアには、上記それぞれのブロックを管理するための論理アドレスを含む管理情報が格納され、かつ上記それぞれのブロックの2ページ目の冗長エリアには、上記先頭ページの冗長エリアに格納された管理情報と同じ情報が、予備の管理情報として格納されることを特徴とする不揮発性メモリ。 - 上記各ページの冗長エリアには、管理情報として当該ブロックに連結するブロックの論理アドレスである連結アドレスが格納されることを特徴とする請求項1記載の不揮発性メモリ。
- 一括消去可能な複数のブロックを有し、上記ブロックが、複数のページから構成され、上記複数のページが、それぞれ冗長エリアを有する不揮発性メモリを管理する管理方法において、
上記それぞれのブロックの先頭ページの冗長エリアには、上記それぞれのブロックを管理するための論理アドレスを含む管理情報を格納し、かつ上記それぞれのブロックの2ページ目の冗長エリアには、上記先頭ページの冗長エリアに格納された管理情報と同じ情報を、予備の管理情報として格納することを特徴とする不揮発性メモリの管理方法。 - 上記各ページの冗長エリアに、管理情報として当該ブロックに連結するブロックの論理アドレスである連結アドレスを格納することを特徴とする請求項3記載の不揮発性メモリの管理方法。
- 一括消去可能な複数のブロックを有し、
上記ブロックは、複数のページから構成され、
上記複数のページは、それぞれ冗長エリアを有し、
上記それぞれのブロックの先頭ページの冗長エリアには、上記それぞれのブロックを管理するための論理アドレスを含む管理情報が格納され、かつ上記それぞれのブロックの2ページ目の冗長エリアには、上記先頭ページの冗長エリアに格納された管理情報と同じ情報が、予備の管理情報として格納されることを特徴とする不揮発性メモリを有する記憶装置。 - 上記各ページの冗長エリアには、管理情報として当該ブロックに連結するブロックの論理アドレスである連結アドレスが格納されることを特徴とする請求項5記載の不揮発性メモリを有する記憶装置。
- 上記不揮発性メモリは、カード形状のケースに収容されており、メモリカードであることを特徴とする請求項5記載の不揮発性メモリを有する記憶装置。
- 一括消去可能な複数のブロックを有し、上記ブロックが、複数のページから構成され、上記複数のページが、それぞれ冗長エリアを有する不揮発性メモリを管理するデータ管理装置において、
上記それぞれのブロックの先頭ページの冗長エリアには、上記それぞれのブロックを管理するための論理アドレスを含む管理情報を格納し、かつ上記それぞれのブロックの2ページ目の冗長エリアには、上記先頭ページの冗長エリアに格納された管理情報と同じ情報を、予備の管理情報として格納することを特徴とする不揮発性メモリを管理するデータ管理装置。 - 上記各ページの冗長エリアに、管理情報として当該ブロックに連結するブロックの論理アドレスである連結アドレスを格納することを特徴とする請求項8記載の不揮発性メモリを管理するデータ管理装置。
- 一括消去可能な複数のブロックを有し、上記ブロックが、複数のページから構成され、上記複数のページが、それぞれ冗長エリアを有する不揮発性メモリを有する外部記憶装置と、この外部記憶装置を管理するデータ管理装置とを備えたデータ処理システムにおいて、
上記データ管理装置は、上記外部記憶装置の上記それぞれのブロックの先頭ページの冗長エリアに、上記それぞれのブロックを管理するための論理アドレスを含む管理情報を格納し、かつ上記それぞれのブロックの2ページ目の冗長エリアに、上記先頭ページの冗長エリアに格納された管理情報と同じ情報を、予備の管理情報として格納することを特徴とするデータ処理システム。 - 上記各ページの冗長エリアには、管理情報として当該ブロックに連結するブロックの論理アドレスである連結アドレスが格納されることを特徴とする請求項10記載のデータ処理システム。
- 上記外部記憶装置は、不揮発性メモリをカード形状のケースに収容したメモリカードであることを特徴とする請求項10記載のデータ処理システム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP34682699A JP3640154B2 (ja) | 1997-09-30 | 1999-12-06 | 不揮発性メモリ、不揮発性メモリの管理方法、不揮発性メモリを有する記憶装置、不揮発性メモリを管理するデータ管理装置及びデータ処理システム |
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP9267178A JP3070539B2 (ja) | 1997-09-30 | 1997-09-30 | 外部記憶装置、データ処理装置及びデータ処理方法 |
JP34682699A JP3640154B2 (ja) | 1997-09-30 | 1999-12-06 | 不揮発性メモリ、不揮発性メモリの管理方法、不揮発性メモリを有する記憶装置、不揮発性メモリを管理するデータ管理装置及びデータ処理システム |
Related Parent Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP9267178A Division JP3070539B2 (ja) | 1997-09-30 | 1997-09-30 | 外部記憶装置、データ処理装置及びデータ処理方法 |
Related Child Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2003354281A Division JP3912355B2 (ja) | 2003-10-14 | 2003-10-14 | データ管理装置、データ管理方法、不揮発性メモリ、不揮発性メモリを有する記憶装置及びデータ処理システム |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2000163302A JP2000163302A (ja) | 2000-06-16 |
JP3640154B2 true JP3640154B2 (ja) | 2005-04-20 |
Family
ID=34575814
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP34682699A Expired - Fee Related JP3640154B2 (ja) | 1997-09-30 | 1999-12-06 | 不揮発性メモリ、不揮発性メモリの管理方法、不揮発性メモリを有する記憶装置、不揮発性メモリを管理するデータ管理装置及びデータ処理システム |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP3640154B2 (ja) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6763424B2 (en) | 2001-01-19 | 2004-07-13 | Sandisk Corporation | Partial block data programming and reading operations in a non-volatile memory |
JP2007241539A (ja) * | 2006-03-07 | 2007-09-20 | Hitachi Systems & Services Ltd | 半導体フラッシュメモリにおけるデータ管理及び制御システムと半導体フラッシュメモリ収容装置 |
JP4984666B2 (ja) * | 2006-06-12 | 2012-07-25 | ソニー株式会社 | 不揮発性メモリ |
JP7089423B2 (ja) * | 2018-07-12 | 2022-06-22 | ルネサスエレクトロニクス株式会社 | 情報処理装置及び制御方法 |
CN112783418B (zh) * | 2019-11-01 | 2023-03-31 | 华为技术有限公司 | 一种存储应用程序数据的方法及移动终端 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH03246645A (ja) * | 1990-02-23 | 1991-11-05 | Nec Corp | データ管理方式 |
JP2675429B2 (ja) * | 1990-10-08 | 1997-11-12 | 富士写真フイルム株式会社 | メモリカードにおけるデータ管理方式 |
US6256642B1 (en) * | 1992-01-29 | 2001-07-03 | Microsoft Corporation | Method and system for file system management using a flash-erasable, programmable, read-only memory |
JP3391479B2 (ja) * | 1992-09-14 | 2003-03-31 | 富士写真フイルム株式会社 | メモリカード管理方法および方式 |
JPH07210438A (ja) * | 1994-01-24 | 1995-08-11 | Fujitsu Ltd | ファイル管理方法 |
JPH08227372A (ja) * | 1995-02-20 | 1996-09-03 | Canon Inc | データ処理装置 |
-
1999
- 1999-12-06 JP JP34682699A patent/JP3640154B2/ja not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
JP2000163302A (ja) | 2000-06-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP3912355B2 (ja) | データ管理装置、データ管理方法、不揮発性メモリ、不揮発性メモリを有する記憶装置及びデータ処理システム | |
KR100642529B1 (ko) | 외부기억장치및데이터처리방법 | |
US6845434B2 (en) | Method for updating parametric data for use in data management system | |
US6687784B2 (en) | Controller for controlling nonvolatile memory unit | |
US6098077A (en) | Data management apparatus, data management method, and recording medium | |
JP3682256B2 (ja) | ディスクアレイ装置及び同装置におけるパリティ処理方法 | |
JP3233079B2 (ja) | データ処理システム及びデータ処理方法 | |
KR100849446B1 (ko) | 기억 장치, 메모리 관리 장치, 메모리 관리 방법, 및 컴퓨터-판독가능한 기록 매체 | |
KR100370893B1 (ko) | 일괄 소거형 비휘발성 메모리 장치 | |
KR20020009564A (ko) | 메모리 시스템 | |
KR100746198B1 (ko) | 데이터 저장장치, 데이터 저장방법, 및 그 기록매체 | |
JPH10124384A (ja) | 不揮発性半導体メモリの制御方法 | |
JP2008033801A (ja) | メモリデータ管理装置 | |
JP3070539B2 (ja) | 外部記憶装置、データ処理装置及びデータ処理方法 | |
JP3640154B2 (ja) | 不揮発性メモリ、不揮発性メモリの管理方法、不揮発性メモリを有する記憶装置、不揮発性メモリを管理するデータ管理装置及びデータ処理システム | |
JP2005115561A (ja) | フラッシュrom制御装置 | |
JP2002278850A (ja) | 半導体装置 | |
US6646917B1 (en) | Storage device managing nonvolatile memory by converting logical address to physical address of nonvolatile memory | |
JP2910745B2 (ja) | 記憶装置及びデータ処理方法 | |
JP3620478B2 (ja) | 記憶装置、この記憶装置を用いたデータ処理システム及びデータ読み出し方法 | |
JP4183237B2 (ja) | 記憶装置 | |
JP3319361B2 (ja) | 記憶装置、データ処理装置及びデータ処理方法 | |
JP3863479B2 (ja) | Icカード | |
JP2006099419A (ja) | 不揮発性メモリの制御方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20040928 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20041129 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20041228 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20050110 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20080128 Year of fee payment: 3 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20090128 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100128 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100128 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110128 Year of fee payment: 6 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110128 Year of fee payment: 6 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120128 Year of fee payment: 7 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120128 Year of fee payment: 7 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130128 Year of fee payment: 8 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20140128 Year of fee payment: 9 |
|
LAPS | Cancellation because of no payment of annual fees |