(57)【特許請求の範囲】
【請求項１】
データ領域とヘッダ領域とから成るブロックを複数有するフラッシュメモリーのうち、１つのブロックのデータ領域内の未書込エリアの先頭アドレスを検出する未書込エリア検出手段と、
前記未書込エリア検出手段によって検出された未書込エリアの先頭アドレスと前記１つのブロックの最終アドレスとから前記未書込エリアのサイズを算出する未書込エリアサイズ算出手段と、
前記未書込エリアサイズ算出手段によって算出された未書込エリアのサイズに基づいて、新たなデータレコードを前記データ領域に書き込めるか否かを判定する書込可否判定手段と、
前記書込可否判定手段によって前記新たなデータレコードを前記データ領域に書き込めると判定されたら、前記新たなデータレコードが属する内容系列がすでに前記ヘッダ領域に登録済みであるか否かを判定する登録済判定手段と、
前記登録済判定手段によって前記新たなデータレコードが属する内容系列が前記ヘッダ領域に登録済みでないと判定されたら、前記未書込エリア検出手段によって検出された未書込エリアの先頭アドレスから前記新たなデータレコードを書き込むと共に、前記新たなデータレコードが書き込まれた先頭アドレスとデータレコードサイズとを前記ヘッダ領域に登録する新規書込手段と、
前記登録済判定手段によって前記新たなデータレコードが属する内容系列が前記ヘッダ領域に登録済みであると判定されたら、前記未書込エリア検出手段によって検出された未書込エリアの先頭アドレスから前記新たなデータレコードを書き込むと共に、前記新たなデータレコードが更新する同じ内容系列のデータレコード内に前記データレコードが無効になったことを示すフラグと前記新たなデータレコードが書き込まれた先頭アドレスを示すリンク情報とを書き込む更新データ書込手段と、
前記書込可否判定手段によって前記新たなデータレコードを前記データ領域に書き込めないと判定されたら、前記データ領域から内容系列毎に最新のデータレコードを抽出して他のブロックに複写する複写手段と、
を備え、
前記未書込エリア検出手段は、前記ヘッダ領域に登録された全ての内容系列のデータレコードを、リンク情報を用いてたどることにより、前記データ領域内の最終のデータレコードの先頭アドレスを検出し、前記最終のデータレコードの先頭アドレスと前記ヘッダ領域に書き込まれたデータレコードサイズとから前記最終のデータレコードの終了アドレスを検出することを特徴とするメモリー制御装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、たとえばフラッシュメモリーのように、消去がある特定サイズのブロック単位でしか行えず、かつ消去回数に制限がある不揮発性メモリーに適用して有効なメモリー制御装置に関する。
【０００２】
【従来の技術】
不揮発性メモリーとして最近多く使われるようになってきたフラッシュメモリーは、その書込をランダムに行うことができるが、その消去はブロック単位でしか行うことができない。したがって、従来においては、そのメモリーの記憶内容を更新するに際し、更新しようとする記憶データが格納されているブロック内の全記憶データを外部へいったん退避させて、その退避させたデータに対して必要な修正を行うとともに、退避元のブロックに対して物理消去を行い、この消去を行ったブロックに修正後の退避データを再度書き込むことが行われていた。
【０００３】
【発明が解決しようとする課題】
しかしながら、上述した技術では、メモリーの記憶内容を更新する度にブロック単位での消去が行われるために、ブロック内の記憶データを部分的に書き換える場合でも、そのブロック全体を物理消去しなければならず、これにより余分な処理時間と消去回数が増えてしまうという問題が生じる。
【０００４】
本発明は、不揮発性メモリーに対する消去の時間および回数を増やすことなく、その記憶データの更新を効率良く行えるようにすることを目的とする。
【０００５】
【課題を解決するための手段】
この課題を解決するために本発明は、データ領域とヘッダ領域とから成るブロックを複数有するフラッシュメモリーのうち、１つのブロックのデータ領域内の未書込エリアの先頭アドレスを検出する未書込エリア検出手段と、前記未書込エリア検出手段によって検出された未書込エリアの先頭アドレスと前記１つのブロックの最終アドレスとから前記未書込エリアのサイズを算出する未書込エリアサイズ算出手段と、前記未書込エリアサイズ算出手段によって算出された未書込エリアのサイズに基づいて、新たなデータレコードを前記データ領域に書き込めるか否かを判定する書込可否判定手段と、前記書込可否判定手段によって前記新たなデータレコードを前記データ領域に書き込めると判定されたら、前記新たなデータレコードが属する内容系列がすでに前記ヘッダ領域に登録済みであるか否かを判定する登録済判定手段と、前記登録済判定手段によって前記新たなデータレコードが属する内容系列が前記ヘッダ領域に登録済みでないと判定されたら、前記未書込エリア検出手段によって検出された未書込エリアの先頭アドレスから前記新たなデータレコードを書き込むと共に、前記新たなデータレコードが書き込まれた先頭アドレスとデータレコードサイズとを前記ヘッダ領域に登録する新規書込手段と、前記登録済判定手段によって前記新たなデータレコードが属する内容系列が前記ヘッダ領域に登録済みであると判定されたら、前記未書込エリア検出手段によって検出された未書込エリアの先頭アドレスから前記新たなデータレコードを書き込むと共に、前記新たなデータレコードが更新する同じ内容系列のデータレコード内に前記データレコードが無効になったことを示すフラグと前記新たなデータレコードが書き込まれた先頭アドレスを示すリンク情報とを書き込む更新データ書込手段と、前記書込可否判定手段によって前記新たなデータレコードを前記データ領域に書き込めないと判定されたら、前記データ領域から内容系列毎に最新のデータレコードを抽出して他のブロックに複写する複写手段と、を備え、前記未書込エリア検出手段は、前記ヘッダ領域に登録された全ての内容系列のデータレコードを、リンク情報を用いてたどることにより、前記データ領域内の最終のデータレコードの先頭アドレスを検出し、前記最終のデータレコードの先頭アドレスと前記ヘッダ領域に書き込まれたデータレコードサイズとから前記最終のデータレコードの終了アドレスを検出するようにしたものである。
【０００６】
このように本発明のメモリー管理装置は、最終のデータレコードの先頭アドレスをリンク情報を用いて検出すると共に、前記最終のデータレコードの先頭アドレスとヘッダ領域に書き込まれたデータレコードサイズとから前記最終のデータレコードの終了アドレスを検出することによって未書込エリアの先頭アドレスを検出する。このため、未書込エリアの先頭アドレスを必要最小限の情報を用いて検出することができるため、データ本体をブロック内に最大限書き込むことができ、メモリーを有効に使用することができる。
【０００７】
【発明の実施の形態】
本発明の請求項１に記載の発明は、データ領域とヘッダ領域とから成るブロックを複数有するフラッシュメモリーのうち、１つのブロックのデータ領域内の未書込エリアの先頭アドレスを検出する未書込エリア検出手段と、前記未書込エリア検出手段によって検出された未書込エリアの先頭アドレスと前記１つのブロックの最終アドレスとから前記未書込エリアのサイズを算出する未書込エリアサイズ算出手段と、前記未書込エリアサイズ算出手段によって算出された未書込エリアのサイズに基づいて、新たなデータレコードを前記データ領域に書き込めるか否かを判定する書込可否判定手段と、前記書込可否判定手段によって前記新たなデータレコードを前記データ領域に書き込めると判定されたら、前記新たなデータレコードが属する内容系列がすでに前記ヘッダ領域に登録済みであるか否かを判定する登録済判定手段と、前記登録済判定手段によって前記新たなデータレコードが属する内容系列が前記ヘッダ領域に登録済みでないと判定されたら、前記未書込エリア検出手段によって検出された未書込エリアの先頭アドレスから前記新たなデータレコードを書き込むと共に、前記新たなデータレコードが書き込まれた先頭アドレスとデータレコードサイズとを前記ヘッダ領域に登録する新規書込手段と、前記登録済判定手段によって前記新たなデータレコードが属する内容系列が前記ヘッダ領域に登録済みであると判定されたら、前記未書込エリア検出手段によって検出された未書込エリアの先頭アドレスから前記新たなデータレコードを書き込むと共に、前記新たなデータレコードが更新する同じ内容系列のデータレコード内に前記データレコードが無効になったことを示すフラグと前記新たなデータレコードが書き込まれた先頭アドレスを示すリンク情報とを書き込む更新データ書込手段と、前記書込可否判定手段によって前記新たなデータレコードを前記データ領域に書き込めないと判定されたら、前記データ領域から内容系列毎に最新のデータレコードを抽出して他のブロックに複写する複写手段と、を備え、前記未書込エリア検出手段は、前記ヘッダ領域に登録された全ての内容系列のデータレコードを、リンク情報を用いてたどることにより、前記データ領域内の最終のデータレコードの先頭アドレスを検出し、前記最終のデータレコードの先頭アドレスと前記ヘッダ領域に書き込まれたデータレコードサイズとから前記最終のデータレコードの終了アドレスを検出するようにしたものである。このように本発明のメモリー管理装置は、最終のデータレコードの先頭アドレスをリンク情報を用いて検出すると共に、前記最終のデータレコードの先頭アドレスとヘッダ領域に書き込まれたデータレコードサイズとから前記最終のデータレコードの終了アドレスを検出することによって未書込エリアの先頭アドレスを検出する。このため、未書込エリアの先頭アドレスを必要最小限の情報を用いて検出することができるため、データ本体をブロック内に最大限書き込むことができ、メモリーを有効に使用することができる。
【００１０】
以下、本発明の実施の形態について、図１から図１６を用いて説明する。
図１は、本発明の第１の実施態様によるメモリー制御装置の概略構成を示す。
【００１１】
同図に示すメモリー制御装置１は、記憶領域管理部１１、レコード書込部１２、ヘッダ書込部１３、レコード削除部１４、ブロック管理部１５、レコード読出部１６などにより構成されている。上記機能（１１〜１６）は、図示を省略するが、汎用処理手段であるマイクロプロセッサを用いて一体的に構成されている。
【００１２】
記憶領域管理部１１は、フラッシュメモリー２の各記憶ブロックＢ１〜Ｂｎ内をデータ領域２１とヘッダ領域２２に分けて管理する。レコード書込部１２は、上記データ領域２１へのデータ書込をレコード単位で行うとともに、各データレコードにレコード間のデータ連結状態を示すリンク情報領域とデータレコードの有効／無効を示すフラグ領域を付加する。ヘッダ書込部１３は、上記データ領域２１に書き込まれたデータレコードの先頭アドレス位置とレコード長からなるヘッド情報を作成して上記ヘッダ領域２２に書き込む。レコード削除部１５は、上記データレコードの削除を、そのデータレコードの有効／無効を示すフラグ領域への無効フラグの書込によって論理的に行う。ブロック管理部１５は、空き領域がなくなったブロックから有効なデータレコードだけを抽出して空き状態にある別ブロックに転送するとともに、転送元のブロックを物理的に消去することによりそのブロックを空き領域として解放する。レコード読出部１６は、ヘッダ領域２２のヘッダ情報に基づいてデータ領域２１から有効なデータレコードを検索して読み出す。
【００１３】
図２は、上記メモリー２の最小消去単位をなす記憶ブロック（Ｂ１〜Ｂｎ）の１つ（Ｂ１）を示す。同図に示すように、記憶ブロックＢ１はデータ領域２１とヘッダ領域２２に区画されて管理される。
【００１４】
データ領域２１には、各種データが内容別のレコード単位で格納される。Ｒ１−１，Ｒ３−１，Ｒ２−１，Ｒ１−２，Ｒ２−２，Ｒ３−２，Ｒ１−３はそれぞれデータレコードを示す。この場合、Ｒ１−１，Ｒ１−２，Ｒ−３は同じ内容系列（Ｒ１）のデータレコードであって、Ｒ１−３，Ｒ１−２，Ｒ１−１の順で新しくなっている。つまり、Ｒ１−１はブロックＢ１に最初に格納されたレコードであり、Ｒ１−２はそのＲ１−１を修正した更新レコード、Ｒ１−３はＲ１−２をさらに修正した最新レコードである。同様に、同じ内容系列のレコードＲ３−１，Ｒ３−２ではＲ３−２が最新レコードであり、Ｒ２−１，Ｒ２−２ではＲ２−２が最新レコードである。
【００１５】
ヘッダ領域２２には、上記データレコードの先頭アドレス位置とレコード長からなるヘッダＨ１〜Ｈ３情報が格納される。このヘッダ情報は、上記データレコードの内容系列ごとに１つずつ作成される。たとえば、Ｒ１−１，Ｒ１−２，Ｒ−３の内容系列（Ｒ１）については、その中の最初のレコードＲ１−１の先頭アドレス位置とレコード長からなるヘッダ情報Ｈ１が作成されて格納される。同様に、Ｒ３−１，Ｒ３−２の内容系列（Ｒ３）についてはＲ３−１のヘッダ情報Ｈ３が、Ｒ２−１，Ｒ２−２の内容系列（Ｒ２）についてはＲ２−１のヘッダ情報Ｈ２が、それぞれに作成されて格納されるようになっている。
【００１６】
図３は上記データレコードおよびヘッダ情報のデータフォーマット例を示す。まず、ヘッダ情報は、上述したように、同一内容系列（Ｒｘ）の最初のデータレコード（Ｒｘ−１）の先頭アドレス位置（ポインタ）とレコード長（データサイズ）により構成される。
【００１７】
データレコードＲｘ−１は、データ本体部１１１と、レコード間のデータ連結状態を示すリンク情報部１１２と、データレコードの有効／無効を示すフラグ部１１３により構成される。この場合、リンク情報部１１２とフラグ部１１３は、データレコードＲｘ−１が更新または削除された場合に追記の形で書き込まれるフィールドであって、最初の書込時点では空白のままとなっている。すなわち、リンク情報部１１２のフィールドには、データレコーダＲｘ−１の内容が更新されて新たなデータレコーダＲｘ−２がデータ領域２１に格納されたときに、その新たなデータレコードＲｘ−２の先頭アドレス位置が書き込まれる。フラグ部１１３には、データレコードＲｘ−１が無効になったことを示すフラグが書き込まれる。この無効フラグが書き込まれたデータレコードＲｘ−１は論理的に仮想削除されたことになる。
【００１８】
図４は上記ブロック管理部１５の動作概念を示す。
同図に示すように、たとえばブロックＢ１の空き容量が少なくなって次のデータレコードを書き加える余地がなくなった場合、そのブロックＢ１内から、同一内容系列ごとに最新のデータレコードを抽出して、次のブロックＢ２に複写する。この複写に際しては、ヘッダ情報も新たに作成し直して、ブロックＢ２のヘッダ領域に書き込む。これにより、元ブロックＢ１に格納されていた無効なレコードデータは実質的に破棄され、ブロックＢ２には、有効なデータレコードだけがブロックＢ２に転送される。この転送の後、元ブロックＢ１の記憶領域は物理消去により解放される。
【００１９】
図５はデータレコードの新規書込または更新処理の概略フローを示す。
同図に示すように、メモリーにデータレコードを書き込む場合は、そのデータレコードと同じ内容系列のレコードがすでに登録済みであるか否かを判定する（ＷＳ−１）。この判定はメモリーの各ブロックに設けてあるヘッダ領域を検索して行われる。
【００２０】
書き込もうとするデータレコードが登録されていなかった場合、つまり新規なレコードを書き込む場合は、そのデータレコードのヘッダ情報をメモリーのヘッダ領域に新規登録してから、そのデータレコードを上述した所定フォーマットでメモリーのデータ領域に書き込むことを行う（ＷＳ−２，ＷＳ−３）。
【００２１】
また、書き込もうとするデータデコードが登録済みであった場合、つまりすでに書き込まれているレコードを更新する場合は、そのデータレコードを上述した所定フォーマットでメモリーのデータ領域に書き込むとともに、旧データレコードのリンク情報部（１１２）に新レコードの先頭アドレス位置を書き込み、かつそのフラグ部（１１３）に無効（削除）を示すフラグを書き込む（ＷＳ−３）。
【００２２】
図６はデータレコードの読出処理の概略フローを示す。
同図に示すように、メモリーからデータレコードを読み出す場合は、そのデータレコードが登録済みか否かを判定する（ＲＳ−１）。この判定は上述したヘッダ情報の検索により行われる。
【００２３】
この場合、読み出そうとするデータレコードが登録されていなければ、該当するデータレコーダがないということで、読み出しは行われない。
【００２４】
読み出そうとするデータレコーダが登録されていたならば、そのデータレコーダのヘッダ情報に基づいて、データ領域から最新のデータレコードを検索する。この検索は、データレコードのリンク情報部（１１２）をチェックして行われる（ＲＳ−２）。
【００２５】
最新のデータレコードが検索されたならば、次にその最新のデータレコードが有効か否かを判定する（ＲＳ−３）。この判定は、データレコーダのフラグ部（１１３）をチェックして行われる。フラグ部（１１３）に無効フラグが書き込まれていたならば、そのデータレコーダは削除されたものとみなして、読み出しは行わない。しかし、フラグ部（１１３）に無効フラグが書き込まれていなかったならば、つまり有効フラグであったならば、そのデータレコードを読み出す（ＲＳ−４）。
【００２６】
図７はデータデコードの登録に際して実行される処理フローを示す。
データレコードの登録に際しては、同図に示すように、ヘッダ領域にヘッダ情報を新規登録するための空き領域が残っているかを確認するサブ処理が実行される（Ｓ１−１，Ｓ１−２）。
【００２７】
図８はデータレコードの書込／更新に際して実行される処理フローを示す。
同図に示すように、データレコードの書込／更新に際しては、まず、データ領域に未書込の空き領域が残っているか否かをサーチし、空き領域が残っていた場合はその空き領域サイズを算出することが行われる（Ｓ２−１）。データレコードを新たに書き込めるだけの空き領域が残っていたならば、その空き領域に新規または更新のデータレコードの書込を行わせる（Ｓ２−２，Ｓ２−４）。空き領域が残っていなかったならば、次ブロックに新しいデータ領域を設定し、この新しいデータ領域を使ってデータレコードの書込を行わせる（Ｓ２−２，Ｓ２−３，Ｓ２−４）。
【００２８】
図９は空き領域のサーチと空き領域サイズの算出に関する概略フローを示す。
同図に示すように、未書込の空き領域サーチは、データ領域内に格納されているすべてのデータレコードのリンク情報部を参照して行われる。リンク情報部には、前述したように、データレコーダの内容が更新されて新たなデータレコーダが書き込まれたときに、その新たなデータレコードの先頭アドレス位置が書き込まれるようになっている。したがって、すべてのデータレコードのリンク情報部をたどることにより、最終のデータレコードの先頭アドレス位置を検出することができる。この最終のデータレコードの終了アドレス位置はヘッダ情報に書き込んであるレコード長により求めることができ、この終了アドレスから未書込の空き領域サイズを算出することができる（Ｓ３−１，Ｓ３−２，Ｓ３−３）。
【００２９】
図１０は次ブロックに新しいデータ領域を設定するときの概略フローを示す。
同図に示すように、次ブロックに新しいデータ領域を設定する場合は、前ブロックのデータ領域から最新かつ有効なデータレコードだけを抽出して次ブロックのデータ領域に転写するとともに、その最新かつ有効なデータレコードに関するヘッダ情報を作成して次ブロックのヘッダ領域に書き込む（Ｓ４−１，Ｓ４−２）。この後、前ブロックを物理消去する（Ｓ４−２）。
【００３９】
図１１は、本発明の技術が適用された通信制御装置の該略構成を示す。
同図に示す通信制御装置３は、ホスト装置をなすユーザ端末装置４と通信回線５の間に介在するファクシミリモデム装置をなすものであって、マイクロプロセッサを用いたマイクロコントローラ３１、フラッシュメモリーを用いた不揮発性メモリー３２、ワークＲＡＭ３３、変復調および回線制御部３４、プログラム格納ＲＯＭ３５、およびホストＩ／Ｆ（インタフェイス）３６などにより構成されている。
【００４０】
ここで、不揮発性メモリー３２には通信設定データなどのシステム情報が格納され、その書込／更新は上述したメモリー制御装置１を用いて行われるようになっている。そのメモリー制御装置１は、マイクロコントローラ（マイクロプロセッサ）３１によりソフトウェア的に構成されている。
【００４１】
図１２は、図１１に示した通信制御装置３の主要構成部分を機能ブロック別に示す。
【００４２】
同図に示すように、上記通信制御装置３には、ホストＩ／Ｆ制御部６１、通信制御処理部６２、データ書込処理部６３、システム情報管理部６４、およびメイン制御部６５などの各機能ブロックが設けられている。各機能ブロックは上記マイクロコントローラ３１によりソフトウェア的に実現される。また、データ書込処理部６３とシステム情報管理部６４は本発明のメモリー制御装置をなし、不揮発性メモリー３２に対するシステム情報の書込／更新をレコード単位で行うようになっている。
【００４３】
なお、以上の説明では、１つのメモリーチップ内に複数の消去ブロックを有するフラッシュメモリーを使用する場合について説明したが、１チップを１消去単位とする多チップ構成のメモリーに対しても本発明は有効である。
【００４４】
【発明の効果】
以上のように本発明によれば、消去がブロック単位でしか行えないメモリーのデータ更新を、その消去の時間および回数を増やすことなく、効率よく行わせることができる、という有利な効果が得られる。
【図面の簡単な説明】
【図１】  本発明の第１の実施態様によるメモリー制御装置の概要構成を示すブロック図
【図２】  メモリーの最小消去単位をなす記憶ブロックの構成図
【図３】  データレコードおよびヘッダ情報のフォーマット例を示す図
【図４】  ブロック管理部の動作概念を示す図
【図５】  データレコードの書込／更新に関する処理概略を示すフローチャート
【図６】  データレコードの読出に関する処理概略を示すフローチャート
【図７】  データレコードの登録に関する処理概略を示すフローチャート
【図８】  データレコードの書込／更新に際して実行される処理のフローチャート
【図９】  空き領域のサーチと空き領域サイズの算出に関する処理のフローチャート
【図１０】  次ブロックに新しいデータ領域を設定するときの処理概略を示すフローチャート
【図１１】  本発明の技術が適用された通信制御装置の概略構成を示すブロック図
【図１２】  図１１に示した通信制御装置内の構成を機能ブロック別に示す図
【符号の説明】
１  メモリー制御装置
１１  記憶領域管理部
１２  レコード書込部
１３  ヘッダ書込部
１４  レコード削除部
１５  ブロック管理部
１６  レコード読出部
２  フラッシュメモリー
２１  データ領域
２２  ヘッダ領域
Ｂ１〜Ｂｎ  記憶ブロック
１１１  データ本体部
１１２  リンク情報部
１１３  フラグ部
３  通信制御装置
３１  マイクロコントローラ（メモリー制御装置１）
３２  フラッシュメモリーを用いた不揮発性メモリー
３３  ワークＲＡＭ
３４  変復調および回線制御部
３５  プログラム格納ＲＯＭ
３６  ホストＩ／Ｆ（インタフェイス）
４  ユーザ端末装置（ホスト装置）
５  通信回線
６１  ホストＩ／Ｆ制御部
６２  通信制御処理部
６３  データ書込処理部（メモリー制御装置１）
６４  システム情報管理部（メモリー制御装置１）
６５  メイン制御部
【図１】
0003954698.tif 000002
【図２】
0003954698.tif 000003
【図３】
0003954698.tif 000004
【図４】
0003954698.tif 000005
【図５】
0003954698.tif 000006
【図６】
0003954698.tif 000007
【図７】
0003954698.tif 000008
【図８】
0003954698.tif 000009
【図９】
0003954698.tif 000010
【図１０】
0003954698.tif 000011
【図１１】
0003954698.tif 000012
【図１２】
0003954698.tif 000013