(57)【特許請求の範囲】
【請求項１】
半導体装置へのデータの書き込みを制御するコントローラであって、
前記半導体装置に既に書き込まれている第１のデータが書き換え処理中であることを示す第１の管理情報を作成すると共に、前記半導体装置に新たに書き込まれる第２のデータが書き換え処理中であることを示す第２の管理情報を作成するデータ管理部を有し、
前記データ管理部は、
有効なデータのアドレス情報を記録したアドレス管理テーブルと、
データの書き換え時に、前記第１の管理情報と前記第２の管理情報とを記録すると共に、所定のタイミングで前記有効なデータのアドレス情報を前記第１のデータから前記第２のデータに変更する書き換え処理部とを備える、コントローラ。
【請求項２】
前記第１の管理情報は前記第１のデータが書き換え完了前まで有効なデータであることを示す管理情報を含み、前記第２の管理情報は前記第２のデータが書き換え完了後に有効となるデータであることを示す管理情報を含む、請求の範囲１に記載のコントローラ。
【請求項３】
前記第１の管理情報と前記第２の管理情報とを前記第１及び第２データと共に前記半導体装置に記録する部分を更に含む、請求の範囲１に記載のコントローラ。
【請求項４】
前記アドレス情報を他の記憶装置に記録する部分を更に含む、請求の範囲１に記載のコントローラ。
【請求項５】
前記データ管理部は、前記半導体装置に記憶された有効データの物理アドレスに関連付けられた仮想アドレスを記録するアドレス管理テーブルを有し、
前記コントローラは、所定のタイミングで、物理アドレスを前記第１のデータの物理アドレスから前記第２のデータの物理アドレスに変更する書き換え処理部を有する、請求の範囲１に記載のコントローラ。
【請求項６】
半導体装置へのデータの書き込みを制御するコントローラであって、
前記半導体装置に既に書き込まれている第１のデータが書き換え処理中であることを示す第１の管理情報を作成すると共に、前記半導体装置に新たに書き込まれる第２のデータが書き換え処理中であることを示す第２の管理情報を作成するデータ管理部を有し、
前記第１の管理情報は前記第１のデータが書き換え完了前まで有効なデータであることを示す管理情報を含み、前記第２の管理情報は前記第２のデータが書き換え完了後に有効となるデータであることを示す管理情報を含み、
前記データ管理部は有効データのアドレス情報を格納するアドレス管理テーブルを有し、
前記コントローラは、前記第１及び／又は第２の管理情報と前記アドレス管理テーブルとを参照して、前記半導体装置の別の領域に有効データのみを新たに書き込むガーベッジコレクション部を有する、コントローラ。
【請求項７】
半導体装置へのデータの書き込みを制御するコントローラであって、
前記半導体装置に既に書き込まれている第１のデータが書き換え処理中であることを示す第１の管理情報を作成すると共に、前記半導体装置に新たに書き込まれる第２のデータが書き換え処理中であることを示す第２の管理情報を作成するデータ管理部を有し、
前記第１の管理情報は前記第１のデータが書き換え完了前まで有効なデータであることを示す管理情報を含み、前記第２の管理情報は前記第２のデータが書き換え完了後に有効となるデータであることを示す管理情報を含み、
前記データ管理部は有効データのアドレス情報を格納するアドレス管理テーブルを有し、
前記コントローラは、データの書き換え処理中に前記半導体装置への電源供給が停止した場合に、前記第１及び／又は第２の管理情報と前記アドレス管理テーブルによって特定される書き換え処理状況に基づいて書き換えを再開させる回復処理部を有する、コントローラ。
【請求項８】
半導体装置へのデータの書き換え方法であって、
書き換えられる第１のデータを記憶する前記半導体装置のメモリ領域が書き換え処理中であることを示す第１の管理情報を記憶するステップと、
第２のデータを別のメモリ領域へ書き込むステップと、
前記別のメモリ領域は書き換え処理中であることを示す第２の管理情報を記憶するステップと、
有効なデータを登録したアドレス管理テーブルの登録情報を、前記第１のデータのアドレス情報から前記第２のデータのアドレス情報に変更するステップと、
前記第１の管理情報を、書き換え完了を示す第３の管理情報に変更するステップとを有する、方法。
【請求項９】
前記第１及び／又は第２の管理情報を検出するステップと、
検出した管理情報が示すデータが前記アドレス管理テーブルに有効なデータとして登録されているか否かを判定するステップと、
前記有効なデータとして登録されているデータだけを前記半導体装置の他の領域に新たに書き込むステップとを有する、請求の範囲８に記載の方法。
【請求項１０】
データの書き換え処理中に前記半導体装置への電源供給が停止した場合に、前記第１及び／又は第２の管理情報を参照して前記書き換え処理中のデータを特定するステップと、
前記参照した管理情報と前記アドレス管理テーブルで示される有効なデータとから書き換え処理の進行状況を判定するステップと、
前記書き換え処理の進行状況に基づいて書き換えを再開するステップとを有する、請求項８に記載の方法。
【請求項１１】
以下のステップをコンピュータに実効させるコンピュータプログラムであって、
書き換えられる第１のデータを記憶する前記半導体装置のメモリ領域が書き換え処理中であることを示す第１の管理情報を記憶するステップと、
第２のデータを別のメモリ領域へ書き込むステップと、
前記別のメモリ領域は書き換え処理中であることを示す第２の管理情報を記憶するステップと、
有効なデータを登録したアドレス管理テーブルの登録情報を、前記第１のデータのアドレス情報から前記第２のデータのアドレス情報に変更するステップと、
前記第１の管理情報を、書き換え完了を示す第３の管理情報に変更するステップとを有する、コンピュータプログラム。
【請求項１２】
前記第１及び／又は第２の管理情報を検出するステップと、
検出した管理情報が示すデータが前記アドレス管理テーブルに有効なデータとして登録されているか否かを判定するステップと、
前記有効なデータとして登録されているデータだけを前記半導体装置の他の領域に新たに書き込むステップとを有する、請求の範囲１１に記載のコンピュータプログラム。
【請求項１３】
データの書き換え処理中に前記半導体装置への電源供給が停止した場合に、前記第１及び／又は第２の管理情報を参照して前記書き換え処理中のデータを特定するステップと、
前記参照した管理情報と前記アドレス管理テーブルで示される有効なデータとから書き換え処理の進行状況を判定するステップと、
前記書き換え処理の進行状況に基づいて書き換えを再開するステップとを有する、請求項１１に記載のコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、半導体装置へのデータの書き込みを管理するコントローラに関する。より詳細には、書き込み途中で電源断となり処理が中断されたデータであっても回復処理が可能なデータの書き換え方法に関する。
【背景技術】
【０００２】
図１にフラッシュメモリ等の不揮発性半導体記憶装置にデータを記録し、記録したデータを管理するシステムの構成を示す。図１に示すシステム構成では、ＣＰＵ１は、データバス１１を介してＲＡＭ６やフラッシュメモリ８にデータを書き込んだり、ＲＯＭ４、ＲＡＭ６、フラッシュメモリ８からデータやプログラムを読み出したりする。また、ＣＰＵ１は、ＲＯＭ４、ＲＡＭ６、フラッシュメモリ８からデータを読み出すために、アドレスバス１０を介してアドレス情報を送信する。【０００３】
ＲＯＭ４は、ＲＯＭコントローラ３によってデータをデータバス１１上に出力したり、アドレスバス１０上のアドレス情報をＲＯＭコントローラ３によって取り込んだりする。同様にＲＡＭ６は、ＲＡＭコントローラ５によってデータをデータバス１１上に出力したり、データバス１１上に出力されたデータをＲＡＭコントローラ６によって読み込んだりする。またＲＡＭ６は、アドレスバス１０上に出力されたアドレス情報をＲＡＭコントローラ５によって取り込む。同様にフラッシュメモリ８は、フラッシュコントローラ７によってデータをデータバス１１上に出力したり、データバス１１上に出力されたデータをフラッシュコントローラ７によって読み込んだりする。またフラッシュメモリ８は、アドレスバス１０上に出力されたアドレス情報をフラッシュコントローラ７によって取り込む。【０００４】
また図１に示すようにＣＰＵ１、ＲＯＭ４、ＲＡＭ６、フラッシュメモリ８には、これらのメモリに電源を供給するメインバッテリ２が設けられている。【０００５】
フラッシュメモリ８に記録したデータを書き換える手順を図２及び図３を参照しながら説明する。図２には、データの書き換え手順を示すフローチャートが示されている。図３には、フラッシュメモリ８の構成と、フラッシュメモリ８の物理アドレスとＣＰＵ１で使用する仮想アドレスとを管理するアドレス管理テーブルの構成とが示されており、またこれらを使用したデータの書き換え手順も図示されている。なお、仮想アドレスとは、ＣＰＵ１がメモリを管理する際に使用する、仮想的に与えられたアドレスである。この仮想アドレスをメモリの実際の物理アドレスに変換するのがアドレス管理テーブルである。【０００６】
まず、データを書き込む場所の状態を示すフラグを書き込み開始状態にする（ステップＳ１）。図３に示すようにフラッシュメモリ８には、実際のデータが書き込まれるデータ記憶領域と、このデータ記憶領域の状態を示す状態フラグを書き込む状態フラグ（管理）領域とが設けられている。状態フラグには、データの書き込みがなく空いていることを示す空きフラグ、書き換え中であることを示す書き込み開始フラグ、書き込みが完了したことを示す書き込み完了フラグ、データを削除したことを示す削除済みフラグがある。データの書き込み場所の状態を示すフラグを書き込み開始フラグにすることで、データの書き換え処理中であると認識される。【０００７】
状態フラグを書き込んだ後、実際のデータを書き込む（ステップＳ２）。ここでは、図３に示すようにデータ“ａｂｚ”が書き込まれるものとする。【０００８】
次に、アドレス情報の変更を行う（ステップＳ３）。アドレス管理テーブルには、図３に示すように仮想アドレスに対応付けられたフラッシュメモリ８の物理アドレスが登録されている。この仮想アドレスに対応付ける物理アドレスを、書き換え前のデータの物理アドレスから書き換え後のデータの物理アドレスに変更する。この段階で有効なデータが書き換え前のデータから書き換え後のデータに変更される。【０００９】
次に、書き込み完了フラグを書き込む（ステップＳ４）。データを書き込んだ場所の状態フラグを書き込み完了状態にする。書き込み完了フラグにすることで、データの書き換え処理が終了したと認識される。【００１０】
次に、古いデータ（図３に示す“ａｂｃ”）が書き込まれている場所の状態フラグを書き込み完了状態から削除済み状態に変更する。フラグが削除済み状態に変更されることで、後述するガーベッジコレクション処理で無効データであると認識し、データを消去することができる。【００１１】
また、日本国特許公報第２５８２４８７号公報（文献１）には、メモリブロックに含まれる複数のセクタの状況をセクタ管理表に記憶させ、書き込み中に電源が遮断した場合には、状況が無効になっているセクタのデータを利用してファイルを回復させることが開示されている。
【発明の開示】
【発明が解決しようとする課題】
【００１２】
しかしながら、上述したデータの書き換え手順では、データの書き換え中にメインバッテリ２からの電源供給が停止した場合、書き換え前のデータと書き換え後のデータのどちらも有効なデータとして認識してしまう。すなわち、上述したデータの書き換え手順において、ステップＳ４の完了後に電源が落ちると、書き換え前のデータと書き換え後のデータの状態フラグが書き込み完了フラグになった状態で処理が停止する。ガーベッジコレクション処理では状態フラグだけを見てデータが有効データであるのか、無効データであるのかを判定しているため、どちらも有効なデータであると判断してしまう。このため本来無効なデータとなっている古いデータが書かれた部分を書き込み可能な状態に再生することができない。【００１３】
ガーベッジコレクション処理では、書き込み完了の状態フラグが立てられたデータのみを図４（Ａ）に示すフラッシュメモリ８のスペアセクタにコピーする。図４（Ｂ）に示すように書き込み完了のデータのコピーが完了すると図４（Ｃ）に示すようにコピー元のセクタを消去する。従って、図４（Ｂ）に示すように無効となっているデータ“ａｂｃ”までスペアセクタにコピーされてしまい、無効なデータを消去することができない。【００１４】
図３に示すアドレス管理テーブルを参照して、仮想アドレスに割り当てられていない物理アドレスのデータをフラッシュメモリ８の全領域を検索して探せば、無効なデータを検出することもできるが、時間のかかる処理となる。【００１５】
また、文献１は、セクタ管理表を用いてセクタ単位でデータの管理を行っているため、セクタよりもさらに小さい単位でデータが有効なデータであるのか、無効なデータであるのかを判定することはできない。【００１６】
さらに文献１は、データの書き込み中に電源断が発生すると、セクタ管理表を参照して状況が無効になっているセクタのデータを検出する。そして検出したセクタのデータを有効に書き換えている。すなわち、書き込み中に電源断が発生すると、必ず古いデータを有効にして新しいデータを無効にしている。つまり、データの書き込みを最初の工程からやり直しすることになり、電源断が発生する前の工程から処理を再開させるといったことができない。【００１７】
本発明は上記事情に鑑みてなされたものであり、データの書き換え処理中に電源の供給が停止しても、書き換え処理中であった箇所を容易に見つけ出し、電源断の発生タイミングに応じて最適な回復処理を行うことができるコントローラ、データ記憶システム、データ書き換え方法及びコンピュータプログラムプロダクトを提供することを目的とする。
【課題を解決するための手段】
【００１８】
かかる目的を達成するために本発明は、半導体装置へのデータの書き込みを制御するコントローラであって、前記半導体装置に既に書き込まれている第１のデータが書き換え処理中であることを示す第１の管理情報を作成すると共に、前記半導体装置に新たに書き込まれる第２のデータが書き換え処理中であることを示す第２の管理情報を作成するデータ管理部を有する構成としている。【００１９】
データの書き換え時に、前記半導体装置に既に書き込まれている第１のデータが書き換え処理中であることを示す第１の管理情報を作成すると共に、前記半導体装置に書き込まれる第２のデータが書き換え処理中であることを示す第２の管理情報を作成して管理する。従って、書き換え処理中に電源の供給が停止しても、書き換えをしていた箇所を特定することができる。【００２０】
上記のコントローラにおいて、前記データ管理部を、有効なデータのアドレス情報を記録したアドレス管理テーブルと、データの書き換え時に、前記第１の管理情報と前記第２の管理情報とを記録すると共に、所定のタイミングで前記有効なデータのアドレス情報を前記第１のデータから前記第２のデータに変更する書き換え処理部とを備える構成とすることができる。この構成により、データの書き換えの進行状況に応じて、有効にするデータを第１のデータ又は第２のデータとすることができる。このため、電源断が発生して、データの回復処理を行う場合にも書き換え処理の進行状況を把握することができ、データの回復処理を最適に行うことができる。【００２１】
上記のコントローラにおいて、前記第１の管理情報は前記第１のデータが書き換え完了前まで有効なデータであることを示す管理情報を含み、前記第２の管理情報は前記第２のデータが書き換え完了後に有効となるデータであることを示す管理情報を含む構成とすることができる。この構成により、書き換え中のデータが書き換え前のデータである第１のデータなのか、書き換え後のデータである第２のデータであるのかを判定することができる。このため、書き換え処理中に電源の供給が停止しても、書き換え処理の進行状況をより詳細に把握することができ、データの回復処理を最適に行うことができる。【００２２】
上記のコントローラにおいて、前記第１の管理情報と前記第２の管理情報とを前記第１及び第２データと共に前記半導体装置に記録する部分を更に含む構成とすることができる。第１の管理情報と第２の管理情報とをデータと共に半導体装置に記録することで、管理情報を記録する手段を別途設ける必要がない。【００２３】
上記のコントローラにおいて、前記アドレス情報を他の記憶装置に記録する部分を更に含む構成とすることができる。アドレス情報を他の記憶装置に記録することで、半導体装置に管理情報を記録するスペースを設ける必要がなくなる。【００２４】
上記のコントローラにおいて、前記データ管理部は、前記半導体装置に記憶された有効データの物理アドレスに関連付けられた仮想アドレスを記録するアドレス管理テーブルを有し、前記コントローラは、所定のタイミングで、物理アドレスを前記第１のデータの物理アドレスから前記第２のデータの物理アドレスに変更する書き換え処理部を有する構成とすることができる。。仮想アドレスに対応付ける物理アドレスを所定のタイミングで変更することで、外部の装置は半導体装置の物理アドレスを意識することなく、有効なデータを取り出すことができる。【００２５】
上記のコントローラにおいて、前記第１の管理情報は前記第１のデータが書き換え完了前まで有効なデータであることを示す管理情報を含み、前記第２の管理情報は前記第２のデータが書き換え完了後に有効となるデータであることを示す管理情報を含み、前記データ管理部は有効データのアドレス情報を格納するアドレス管理テーブルを有し、前記コントローラは、前記第１及び／又は第２の管理情報と前記アドレス管理テーブルとを参照して、前記半導体装置の別の領域に有効データのみを新たに書き込むガーベッジコレクション部を有する構成とすることができる。ガーベッジコレクション手段が、有効なデータとして登録されているデータだけを半導体装置の他の領域に新たに書き込むことで、不要になったデータを消去することができる。【００２６】
上記のコントローラにおいて、前記第１の管理情報は前記第１のデータが書き換え完了前まで有効なデータであることを示す管理情報を含み、前記第２の管理情報は前記第２のデータが書き換え完了後に有効となるデータであることを示す管理情報を含み、前記データ管理部は有効データのアドレス情報を格納するアドレス管理テーブルを有し、前記コントローラは、データの書き換え処理中に前記半導体装置への電源供給が停止した場合に、前記第１及び／又は第２の管理情報と前記アドレス管理テーブルによって特定される書き換え処理状況に基づいて書き換えを再開させる回復処理部を有する構成とすることができる。データの書き換え処理中に前記半導体装置への電源供給が停止した場合に、回復処理手段が書き換え処理中のデータを検出し、検出した管理情報とアドレス管理テーブルの有効なデータの記録とから書き換え処理の進行状況を判定することで、電源供給の停止により中断された処理から書き換えを再開させることができる。【００２７】
本発明はまた、メモリと、前記メモリに既に書き込まれている第１のデータが書き換え処理中であることを示す第１の管理情報を作成すると共に、前記半導体装置に新たに書き込まれる第２のデータが書き換え処理中であることを示す第２の管理情報を作成するデータ管理部を有するコントローラとを有するシステムを含む。この構成により、データの書き換えの際に有効なデータと無効なデータとを判定して、半導体装置に有効なデータだけを記録したデータ記憶システムを提供することができる。【００２８】
本発明はまた、半導体装置へのデータの書き換え方法であって、書き換えられる第１のデータを記憶する前記半導体装置のメモリ領域が書き換え処理中であることを示す第１の管理情報を記憶するステップと、第２のデータを別のメモリ領域へ書き込むステップと、前記別のメモリ領域は書き換え処理中であることを示す第２の管理情報を記憶するステップとを有する方法を含む。データの書き換え時に、前記半導体装置に既に書き込まれている第１のデータが書き換え処理中であることを示す第１の管理情報を作成すると共に、前記半導体装置に書き込まれる第２のデータが書き換え処理中であることを示す第２の管理情報を作成して管理する。従って、書き換え処理中に電源の供給が停止しても、書き換えをしていた箇所を特定することができる。【００２９】
上記のデータ書き換え方法において、有効なデータを登録したアドレス管理テーブルの登録情報を、前記第１のデータのアドレス情報から前記第２のデータのアドレス情報に変更するステップと、前記第１の管理情報を、書き換え完了を示す第３の管理情報に変更するステップとを有する構成とすることができる。【００３０】
このように、有効となるデータのアドレス情報をアドレス管理テーブルで管理することで、書き換え処理の進行状況に応じて有効にするデータを切り換えることができる。従って、電源断が発生して、データの回復処理を行う場合にも書き換え処理の進行状況を把握することができ、データの回復処理を最適に行うことができる。【００３１】
上記のデータ書き換え方法において、前記第１及び／又は第２の管理情報を検出するステップと、検出した管理情報が示すデータが前記アドレス管理テーブルに有効なデータとして登録されているか否かを判定するステップと、前記有効なデータとして登録されているデータだけを前記半導体装置の他の領域に新たに書き込むステップとを有する構成とすることができる。有効なデータとして登録されているデータだけを半導体装置の他の領域に新たに書き込むことで、不要になったデータを消去することができる。【００３２】
上記のデータ書き換え方法において、データの書き換え処理中に前記半導体装置への電源供給が停止した場合に、前記第１及び／又は第２の管理情報を参照して前記書き換え処理中のデータを特定するステップと、前記参照した管理情報と前記アドレス管理テーブルで示される有効なデータとから書き換え処理の進行状況を判定するステップと、前記書き換え処理の進行状況に基づいて書き換えを再開するステップとを有する構成とすることができる。データの書き換え処理中に半導体装置への電源供給が停止した場合に、書き換え処理中のデータを検出し、検出した管理情報と、アドレス管理テーブルの有効なデータの記録とから書き換え処理の進行状況を判定することで、電源供給の停止により中断された処理から書き換えを再開させることができる。【００３３】
本発明はまた、以下のステップをコンピュータに実効させるコンピュータプログラムプロダクトであって、書き換えられる第１のデータを記憶する前記半導体装置のメモリ領域が書き換え処理中であることを示す第１の管理情報を記憶するステップと、第２のデータを別のメモリ領域へ書き込むステップと、前記別のメモリ領域は書き換え処理中であることを示す第２の管理情報を記憶するステップとを有するコンピュータプログラムプロダクトを含む。
【発明の効果】
【００３４】
本発明によりデータの書き換え処理中に電源の供給が停止しても、書き換え処理中であった箇所を容易に見つけ出し、電源断の発生タイミングに応じて最適な回復処理を選択することができる。
【図面の簡単な説明】
【００３５】
【図１】フラッシュメモリコントローラ７と、フラッシュメモリ８と、フラッシュメモリへデータの書き込みや読み出しを行うＣＰＵ１との接続構成を示す図である。
【図２】従来のデータ書き換えの手順を示すフローチャートである。
【図３】従来のフラッシュメモリ８のデータの書き換え手順を説明するための図である。
【図４】従来のガーベッジコレクションの処理手順を説明する図であり、Ａは、処理前の図であり、Ｂは、データをスペアセクタにコピーする様子を示す図であり、Ｃは、元のセクタのデータを消去する様子を示す図である。
【図５】フラッシュコントローラ８の詳細な構成を示す図である。
【図６】データ書き換えの手順を示すフローチャートである。
【図７】フラッシュメモリ８のデータの書き換え手順を説明するための図である。
【図８】回復処理の手順を示すフローチャートである。
【図９】ガーベッジコレクションの手順を示すフローチャートである。
【図１０】ガーベッジコレクションの処理手順を説明する図であり、Ａは、処理前の図であり、Ｂは、データをスペアセクタにコピーする様子を示す図であり、Ｃは、元のセクタのデータを消去する様子を示す図である。
【発明を実施するための最良の形態】
【００３６】
次に、添付図面を参照しながら本発明の好適な実施例を説明する。【００３７】
まず、本実施例のシステム構成を説明する。本実施例も図１に示すようにＣＰＵ１と、ＲＯＭ４、ＲＡＭ６、フラッシュメモリ８とがデータバス１１、アドレスバス１０を介して接続されている。ＲＯＭ４は、ＲＯＭコントローラ３によってデータバス１１上にデータを出力し、アドレスバス１０上に出力されたアドレス情報を取り込む。ＲＡＭ６もＲＡＭコントローラ５によってアドレスバス１０、データバス１１からアドレス情報、データを取り込んだり、データバス１１上にデータを出力する。フラッシュメモリ８もフラッシュコントローラ７によってアドレスバス１０、データバス１１からアドレス情報、データを取り込み、データバス１１上にデータを出力する。また、ＲＯＭ４、ＲＡＭ６、フラッシュメモリ８、ＲＯＭコントローラ３、ＲＡＭコントローラ５、フラッシュコントローラ９は、図１に示すメインバッテリ２から電源の供給を受けて動作する。【００３８】
ＣＰＵ１は仮想アドレスを使用してフラッシュメモリ８に書き込まれたデータや書き込むデータを指定する。この仮想アドレスは、コントローラ７でフラッシュメモリ８の物理アドレスに変換され、実際のデータの読み出しや書き込みが行われる。フラッシュメモリ８とフラッシュメモリコントローラ７とは、データ記憶システム９として動作する。図１に示すシステム図では、フラッシュコントローラ７とフラッシュメモリ８とをそれぞれ別々に設けているが、フラッシュメモリ８とフラッシュコントローラ７を１チップに集積したＬＳＩとして設けてもよい。またフラッシュコントローラ７はＣＰＵ１に内蔵させることもできる。【００３９】
次に、フラッシュメモリ８へのデータの書き込みと、データの読み出しを制御するフラッシュコントローラ７の詳細な構成を図５を参照しながら説明する。図５に示すようにフラッシュコントローラ７は、アドレス／データ入出力部２０と、アドレス変換部（データ管理手段）２１と、データ書き換え処理部（データ管理手段）２２と、ガーベッジコレクション制御部２３と、電源遮断判断部（回復処理手段）２４と、フラッシュメモリ制御部２５とを備えている。【００４０】
アドレス／データ入出力部２０は、アドレスバス１０、データバス１１上に出力されたアドレス情報やデータをコントローラ８内に取り込む。また、アドレス／データ入出力部２０は、フラッシュメモリ８から読み出されたデータをデータバス１１上に出力する。【００４１】
アドレス変換部（データ管理手段）２１は、後述するアドレス管理テーブル１５を備え、ＣＰＵ１から指定されたアドレス（仮想アドレス）をフラッシュメモリ８のアドレス（物理アドレス）に変換する。【００４２】
データ書き換え処理部（データ管理手段）２２は、ＣＰＵ１から指定されたアドレス（仮想アドレス）のデータを書き換えるため、フラッシュメモリ８を制御する。【００４３】
ガーベッジコレクション制御部２３は、フラッシュメモリ８上の書き込み可能な領域のサイズを管理し、必要な場合にはガーベッジコレクション処理を行う。【００４４】
電源遮断判断部（回復処理手段）２４は、メインバッテリ２等の電源部からの電源の供給を監視する。電源の供給が停止した場合には、フラッシュメモリ８の回復処理を行う。【００４５】
フラッシュメモリ制御部２５は、上述したデータ書き換え処理部（データ管理手段）２２、ガーベッジコレクション制御部２３、電源遮断判断部（回復処理手段）２４の制御を受けて、フラッシュメモリ８へのデータの書き込み、読み出し、データの消去を行う。【００４６】
次に、図６に示すフローチャートと図７を参照しながら本実施例のデータ書き換えの手順を説明する。ここでは、フラッシュメモリ８に既に書き込まれている“ａｂｃ”を“ａｂｚ”に書き換える手順を説明する。なお、図７には、データ書き換え時の手順がフラッシュメモリ８とアドレス管理テーブル１５とを使用して示されている。【００４７】
まず、フラッシュメモリ８の新しいデータを書き込む場所の状態フラグを“書き換え処理中の新しいデータ”を示す状態フラグに変更する（ステップＳ１０）。データ書き換え処理部（データ管理手段）２２は、フラッシュメモリ制御部２５を介して、新しくデータを書き込む場所の状態フラグを“書き換え処理中の新しいデータ”を示す状態フラグにする。また、本実施例は、図７に示すようにデータの消去単位となるセクタよりもさらに小さい単位でデータの書き換えを管理している。図７に示すように状態フラグを、セクタよりも小さい例えば、ページ単位で設けることで、フラッシュメモリ８に書き込まれたデータの状態や空きスペースをより細かな単位で管理することができる。【００４８】
図７に示すようにフラッシュメモリ８には、データを書き込むデータ記憶領域１３の他に、データ記憶領域１３のデータの状態を示す状態フラグ（管理）領域１４が各データ記憶領域１３ごとに設けられている。コントローラ７は、この状態フラグを管理情報として使用し、フラッシュメモリ８に書き込まれるデータを管理する。管理情報としての状態フラグには、他にデータの書き込みがなく開いていることを示す空きフラグ、書き換え処理中の古いデータであることを示すフラグ、書き込みが完了したことを示す書き込み完了フラグ、データを削除したことを示す削除済みフラグがある。【００４９】
状態フラグ（管理）領域１４の状態フラグを変更すると、データ書き換え処理部（データ管理手段）２２は、状態フラグを変更した場所にデータを書き込む（ステップＳ１１）。図７のＳ１１に示すように新しくデータを書き込む場所に“ａｂｚ”のデータが書き込まれる。【００５０】
次に、古いデータ（ａｂｃ）が書き込まれている場所の状態を示すフラグを、“書き換え処理中の古いデータ”を示す状態フラグにする（ステップＳ１２）。データ書き換え処理部（データ管理手段）２２は、図７のＳ１２に示すように古いデータ（ａｂｃ）が書き込まれている場所の状態フラグを“書き換え処理中の古いデータ”に変更する。【００５１】
次に、アドレス情報を変更する（ステップＳ１３）。アドレス変換部（データ管理手段）２１の保持しているアドレス管理テーブル１５を書き換え、仮想アドレスと物理アドレスを結びつけるアドレス情報を変更する。すなわち、古いデータの書き込み場所の物理アドレスに対応付けられていた仮想アドレスを、新しいデータの書き込み場所の物理アドレスに対応付ける。【００５２】
次に、古いデータ（ａｂｃ）が書かれている場所の書き込み状態フラグを“削除済み”を示す状態フラグに変更する（ステップＳ１４）。データ書き換え処理部（データ管理手段）２２は、図７のＳ１４に示すように古いデータが書き込まれている場所の状態フラグを“削除済み”を示すフラグに変更する。書き込み状態フラグを“削除済み”に変更することで、ガーベッジコレクション処理によってデータを消去できる状態にする。【００５３】
次に、新しいデータ（ａｂｚ）が書き込まれた場所の状態フラグを“書き込み完了状態”を示す状態フラグにする（ステップＳ１５）。データ書き換え処理部（データ管理手段）２２は、図７のＳ１５に示すように状態フラグを“書き込み完了状態”にする。この処理によりデータの書き換えが終了する。なお、古いデータが書かれている場所の書き込み状態フラグを、“削除済み”に変更する前に、新しいデータが書き込まれた場所の状態フラグを“書き込み完了状態”にしてもよい。【００５４】
このように本実施例は、該当データが、書き換え中でかつ書き換え完了前まで有効であることを示す“書き換え処理中の古いデータ”の状態フラグと、該当データが、書き換え中でかつ書き換え完了後に有効となることを示す“書き換え処理中の新しいデータ”の状態フラグとをコントローラ７に持たせている。従って、古いデータと新しいデータとが同時に書き換えの完了した有効なデータであると認識されることがない。【００５５】
またデータの書き換え中に電源断が発生しても、書き込み中のフラグを検出することで、データの書き換えを行っていた場所を特定することができる。さらに特定した場所の物理アドレスからアドレス管理テーブル１５を検索することで、古いデータと新しいデータのどちらが有効なデータであるのかを判断することができる。よって、ガーベッジコレクション処理時には有効ではないデータをフラッシュメモリ８から消去することができる。【００５６】
次に、データの書き換え中に電源供給が遮断され、電源断から処理を再開する時の手順を図８に示すフローチャートを参照しながら説明する。コントローラ７の電源遮断判断部（回復処理手段）２４は、電源断が発生したことを認識すると（ステップＳ２０／ＹＥＳ）、回復処理を開始する（ステップＳ２１）。電源遮断判断部（回復処理手段）２４は、まず、フラッシュメモリ８の状態フラグ（管理）領域１４から“書き換え処理中”であることを示す状態フラグを検出する（ステップＳ２２）。“書き換え処理中”の状態フラグを検出すると“書き換え処理中の新しいデータ”を示す状態フラグと、“書き換え処理中の古いデータ”を示す状態フラグの両方を検出することができたか否かを確認する（ステップＳ２３）。【００５７】
“書き換え処理中の新しいデータ”の状態フラグと、“書き換え処理中の古いデータ”の状態フラグの両方を検出した場合には（ステップＳ２３／ＹＥＳ）、アドレス情報を確認して書き込み処理中であった仮想アドレスを確認する。“書き換え処理中の新しいデータ”を示す状態フラグと、“書き換え処理中の古いデータ”を示す状態フラグの両方を検出することができた場合、上述した図６のステップＳ１２までの処理が完了していることを示している。そこで、電源遮断判断部（回復処理手段）２４は、書き換え処理中の仮想アドレスに関連付けされている物理アドレスが、新しいデータを示すものであるのか、古いデータを示すものであるのかを判定して、データの書き換え処理を再開させる。【００５８】
“書き換え処理中”の状態フラグを検出することで、書き換え処理中のデータが記憶されたフラッシュメモリ８の物理アドレスを検出することができる。電源遮断判断部（回復処理手段）２４は、アドレス変換部（データ管理手段）２１のアドレス管理テーブル１５を参照して、検出した物理アドレスに関連付けされた仮想アドレスを検出する（ステップＳ２４）。仮想アドレスを特定すると、電源遮断判断部（回復処理手段）２４は仮想アドレスに関連付けされた物理アドレスは、新しいデータを示すものであるのか、古いデータを示すものであるのかを確認する（ステップＳ２５）。書き換え処理中の仮想アドレスに関連付けされた物理アドレスが古いデータを示すものであった場合には（ステップＳ２５／ＮＯ）、仮想アドレスに新しいデータが書き込まれた場所のアドレスを関連付けしてアドレス管理テーブル１５に記録する（ステップＳ２６）。その後、古いデータの状態フラグを“削除済み”に変更し（ステップＳ２７）、新しいデータの状態フラグを“書き込み完了”にする。また、書き換え処理中の仮想アドレスに関連付けされた物理アドレスが新しいデータを示すものであった場合には（ステップＳ２５／ＹＥＳ）、古いデータの状態フラグを“削除済み”に変更し（ステップＳ２７）、新しいデータの状態フラグを“書き込み完了”にする。【００５９】
また、書き換え処理中を示す状態フラグを１つしか検出することができなかった場合（ステップＳ２３／ＮＯ）、検出した状態フラグは、新しいデータの状態を示すものとなる。上述したように新しいデータを示す状態フラグは、図６に示すデータの書き換え処理手順の最初と最後に変更されるため、古いデータの状態を示すフラグだけが単独で検出されることはない。この場合、電源断は、図６のステップＳ１０の状態フラグの書き換え後か、ステップＳ１１のデータの書き込み中又は書き込み終了後に発生した場合と、ステップＳ１４の古いデータの書き込み状態フラグを“削除済み”に変更した後に発生した場合とが考えられる。そこで、電源遮断判断部（回復処理手段）２４は、検出した状態フラグに該当する物理アドレスに関連付けられた仮想アドレスが存在するか否かを確認する（ステップＳ２９）。検出した状態フラグに該当する物理アドレスに関連付けられた仮想アドレスが存在しない場合には（ステップＳ２９／ＮＯ）、上述したステップＳ１０終了後、又はステップＳ１１の終了後か処理中に電源断になったと判断できる。この場合には、書き込みを再開させることはできないので、新しいデータを書き込んだ場所を“削除済み”に変更する（ステップＳ３０）。また、検出した状態フラグに該当する物理アドレスに関連付けられた仮想アドレスが存在する場合には（ステップＳ２９／ＹＥＳ）、ステップＳ１４の古いデータの書き込み状態フラグを“削除済み”に変更した後に電源断が発生したと判断することができるので、新しいデータの状態フラグを“書き込み完了”にする。【００６０】
このようにして本実施例では、データの書き換え処理中に電源断が発生しても、電源遮断判断部（回復処理手段）２４によってデータの書き換え処理を再開させたり、電源断によって不要になったデータを削除できる状態にすることができる。すなわち、書き換え後のデータが有効になる前に電源断が発生した場合には、書き換え前のデータをそのまま有効なデータとすることができるので、電源断によってデータを消失することがない。また、書き換え後のデータが有効となった後に電源断が発生した場合には、書き換え後のデータを有効なデータに選択することで、後処理を行うだけで書き換え処理を完了させることができる。【００６１】
なお、本実施例では、“書き換え中の新しいデータ”であることを示す状態フラグと、“書き換え中の古いデータ”であることを示す状態フラグとを設けているので、書き換え前のデータと書き換え後のデータとを判定することができる。従ってアドレス管理テーブル１５に登録された有効なデータを参照せずに、これらの状態フラグに従って、書き換え完了前に電源の供給が停止した場合には書き換え前のデータを有効なデータと判定し、書き換えが終了した後に電源供給が停止した場合には書き換え後のデータを有効と判定して処理を行ってもよい。この場合は、アドレス管理テーブルを有効なデータを指すように修正する。このような処理であっても有効なデータと無効なデータとを判定して、無効なデータをフラッシュメモリ８から消去することができる。【００６２】
次に、図９及び図１０を参照しながらガーベッジコレクションの手順を説明する。図９にはガーベッジコレクションの手順が示され、図１０にはガーベッジコレクションの各過程でのフラッシュメモリの状態が示されている。まず、ガーベッジコレクション制御部２３は、フラッシュメモリの状態フラグ（管理）領域１４を参照し、状態フラグのチェックを行う（ステップＳ３１）。状態フラグから図１０（Ａ）に示す“ａｂｃ”のデータと“ａｂｚ”のデータが書き換え中であり、“ｄｅｆ”のデータが書き込みを完了した状態であることが分かる。【００６３】
次に、ガーベッジコレクション制御部２３は、アドレス管理テーブル１５を参照してアドレス情報のチェックを行う（ステップＳ３２）。“ａｂｃ”の物理アドレスと“ａｂｚ”の物理アドレスのどちらが仮想アドレスに関連付けされた有効なデータであるのかを判定する。ここでは、“ａｂｚ”の物理アドレスが仮想アドレスに関連付けされた有効なデータであったとする。【００６４】
有効なデータと無効なデータとの判定が終了すると、有効であると判断されたデータ“ａｂｚ”と“ｄｅｆ”をスペアのセクタにコピーする（ステップＳ３３）。このとき、“ａｂｚ”の状態フラグは、“書き換え中”の状態フラグになっているので、スペアセクタへのコピー時には“書き込み完了”を示す状態フラグに書き換えてからコピーを行う。【００６５】
スペアセクタへの有効なデータのコピーが終了すると、データが書き込まれていた元のセクタのデータを消去し（ステップＳ３４）、スペアセクタにする。以上の手順でガーベッジコレクションの処理が終了する。【００６６】
このように本実施例は、古いデータと新しいデータとが同時に書き換えの完了した有効なデータであると認識されることがないため、不必要となる無効なデータをガーベッジコレクション処理により消去することができる。従って、不要なデータがフラッシュメモリ８に蓄積されることがない。【００６７】
なお、上述した実施例では、状態フラグをフラッシュメモリ８に記録していたが、フラッシュコントローラ７内に記憶部を設けて、ここに書き換え前のデータと書き換え後のデータのフラッシュメモリ８のアドレスを記録しておいてもよい。また、フラッシュコントローラ７とは別のバッテリーバックアップされた揮発性のメモリにアドレス情報を記録しておくことも可能である。【００６８】
また、上述した実施例ではフラッシュメモリへのデータの書き換えを例に説明したが、フラッシュメモリ以外の半導体装置への適用も十分可能である。【００６９】
次に、本発明の実施例２を説明する。本実施例は、ＣＰＵ１がＲＯＭ３又はフラッシュメモリ８に記録されているデータ書き換えプログラムを読み出し、このプログラムに従って、フラッシュメモリ８のデータの書き換えを制御する。すなわち、図５に示すコントローラ７の各機能をＣＰＵ１によるプログラム制御によって実現する。【００７０】
ＣＰＵ１は、図６に示すフローチャートに従って状態フラグやデータをフラッシュメモリ８に書き込んでいく。またＣＰＵ１は、ＲＡＭ６にアドレス管理テーブル１５を保持し、フラッシュメモリ８の物理アドレスをこのアドレス管理テーブル１５で管理する。【００７１】
またガーベッジコレクション処理の際に、ＣＰＵ１は、図９に示すフローチャートに従って、書き換え処理中であることを示す状態フラグを検出し、アドレス管理テーブルに有効なデータとして登録されているデータだけをフラッシュメモリ８の他の記憶領域に転送して、有効データのみの領域を生成する。また回復処理の際には、ＣＰＵ１は、図８に示すフローチャートに従って、中断された書き換え処理の進行状況を判定して、中断された処理から書き換えを再開させる。【００７２】
このようなＣＰＵ１の制御により、上述した実施例１と同様な効果を本実施例でも得ることができる。
なお、上記フローチャートで記述されるプログラムはコンピュータが読み取り可能なプログラムであって、本発明のコンピュータプログラムプロダクトの一実施形態である。本発明のコンピュータプログラムプロダクトは、これ以外にプログラムが記述されたメモリや記録媒体など、他の形態を含む。【００７３】
上述した実施例は本発明の好適な実施例である。但し、これに限定されるものではなく、本発明の要旨を逸脱しない範囲内において種々変形実施可能である。例えば、フラグの他の例として、新しいデータを書き込む記録場所と古いデータを書き込む記録場所とが書き換え処理中であることを示すフラグを用いることも可能である。
【図１】
0004653747.tif 000002
【図２】
0004653747.tif 000003
【図３】
0004653747.tif 000004
【図４】
0004653747.tif 000005
【図５】
0004653747.tif 000006
【図６】
0004653747.tif 000007
【図７】
0004653747.tif 000008
【図８】
0004653747.tif 000009
【図９】
0004653747.tif 000010
【図１０】
0004653747.tif 000011