(57)【要約】【課題】フラッシュメモリへの書込可能回数を飛躍的に増加させる。【解決手段】フラッシュメモリ６に、それぞれ複数のデータの書込領域を有する複数のデータブロックを有する実データブロック２２３を形成する。メモリ制御装置は、データブロックのうち、追記可能な書込領域を有するデータブロックを特定し、特定したデータブロックの追記可能な書込領域に、入力された新たなデータを逐次追記してデータの追記を完了させる。追記前のブロックは、ある時期まで保持した後、ブロック単位で消去する。データブロックにおける書込回数が所定回数に達したときは、次に所定回数のデータ書換を確保するために必要となる数のデータブロックを新たに選択し、選択したデータブロックについて上記動作を繰り返す。【選択図】図４
2009199211.tif 000002
【特許請求の範囲】
【請求項１】
書込領域のデータを消去した後に当該書込領域へのデータ書込を行う不揮発性メモリにアクセス可能な装置が行うメモリ制御方法であって、
前記不揮発性メモリの書込領域を、それぞれシーケンシャルに関連付けて所定数毎にグループ化するとともに、所定回数のデータ書込を可能にする上で必要となるグループ数を確保し、確保した数のグループにおいて、書込時に未書込領域又は書込可能領域が残るグループがあるときはこのグループの当該領域への追記を行い、追記元のグループについては、所定の条件を満たした時点でグループ単位で消去することを特徴とする、
メモリ制御方法。
【請求項２】
前記装置は、前記確保した数のグループによる所定回数のデータ書込を終了したことを検知したときに、前記不揮発性メモリから所定回数のデータ書込を可能にする上でさらに必要となるグループ数を新たに確保することを特徴とする、
請求項１記載のメモリ制御方法。
【請求項３】
前記装置は、前記確保した数のグループによる所定回数のデータ書込を終了する前に制御動作を停止したときは、回復時に、停止前に確保していたグループを再確保することを特徴とする、
請求項１又は２記載のメモリ制御方法。
【請求項４】
書込領域のデータを消去した後に当該書込領域へのデータ書込を行う不揮発性メモリへのデータの書込を制御する装置であって、
前記不揮発性メモリには、それぞれ複数の書込領域をシーケンシャルに関連付けた複数個のデータ領域グループと、どのデータ領域グループのどの書込領域にデータが書き込まれているかを表すヘッダ情報の書込領域を有する複数個のヘッダ領域グループと、どのデータ領域グループ及びどのヘッダ領域グループの書込領域にアクセス可能かを表す管理情報の書込領域を有する管理領域グループとが形成されており、
前記複数個のデータ領域グループのうち、追記可能な書込領域を有するデータ領域グループを前記不揮発性メモリにおいて特定し、特定したデータ領域グループのうち追記可能な書込領域に、入力された新たなデータを逐次追記し、追記可能な書込領域が足りない場合は次のデータ領域グループを前記不揮発性メモリにおいてさらに特定して前記入力されたデータの追記を完了させ、データの追記が完了した１又は複数のデータブロックを前記不揮発性メモリにおいてデータ領域グループ毎に書き換えるとともに、追記したデータ領域グループの書込領域の特定を可能にするアドレス情報を含む前記ヘッダ情報を生成し、生成したヘッダ情報を、前記ヘッダ領域グループの書込領域に追記する書込処理手段と、
前記データ領域グループ又は前記ヘッダ領域グループにおける書込回数が所定回数に達したことを検知する第１の検知手段と、
この第１の検知手段により前記所定回数に達したことが検知されたときに、次に前記所定回数のデータ書換を確保するために必要となる数の前記データ領域グループを前記不揮発性メモリより新たに確保し、確保したデータ領域グループについての前記管理情報を生成し、生成した管理情報を前記管理領域グループに書き込む再構築処理手段と、を有する、メモリ制御装置。
【請求項５】
前記書込処理手段は、前記追記が完了したデータ領域グループが、追記可能な書込領域が残っていたデータ領域グループであるときは、追記前の当該データ領域グループを前記不揮発性メモリの所定領域に一時的に保持しておき、予め定めた条件を満たすことを検出したときに、当該一時的に保持してあるデータ領域グループを消去する、
請求項４記載のメモリ制御装置。
【請求項６】
前記不揮発メモリに、複数回のデータ書込に共通に使用する初期データを書き込むための初期データ書込領域が形成されており、
前記書込処理手段は、前記データの追記を行う際に前記初期データ書込手段に書き込まれている初期データを参照する、
請求項４記載のメモリ制御装置。
【請求項７】
前記再構築処理手段は、前記データ領域グループの消去に先立ち、前記新たなデータ領域グループと共に新たなヘッダ領域グループを選択し、選択したデータ領域グループ及びヘッダ領域グループについての前記管理情報を生成する、
請求項６記載のメモリ制御装置。
【請求項８】
メモリ制御動作の停止後に回復したことを検知する第２の検知手段をさらに備えており、
前記再構築処理手段は、
前記第２の検知手段が、前記回復したことを検知したときは、新たなデータ領域グループ及びヘッダ領域グループの確保に代えて、前記管理領域グループに書き込まれている管理情報に基づいて、停止前の書込状態のデータ領域グループ及びヘッダ領域グループを確保する、
請求項７記載のメモリ制御装置。
【請求項９】
コンピュータを、書込領域のデータを消去した後に当該書込領域へのデータ書込を行う不揮発性メモリへのデータの書込を制御する装置として動作させるためのコンピュータプログラムであって、
前記コンピュータを、
前記不揮発性メモリに、それぞれ複数の書込領域をシーケンシャルに関連付けた複数個のデータ領域グループと、どのデータ領域グループのどの書込領域にデータが書き込まれているかを表すヘッダ情報の書込領域を有する複数個のヘッダ領域グループと、どのデータ領域グループ及びどのヘッダ領域グループの書込領域にアクセス可能かを表す管理情報の書込領域を有する管理領域グループとを形成するグループ形成手段、
前記複数個のデータ領域グループのうち、追記可能な書込領域を有するデータ領域グループを前記不揮発性メモリにおいて特定し、特定したデータ領域グループのうち追記可能な書込領域に、入力された新たなデータを逐次追記し、追記可能な書込領域が足りない場合は次のデータ領域グループを前記不揮発性メモリにおいてさらに特定して前記入力されたデータの追記を完了させ、データの追記が完了した１又は複数のデータブロックを前記不揮発性メモリにおいてデータ領域グループ毎に書き換えるとともに、追記したデータ領域グループの書込領域の特定を可能にするアドレス情報を含む前記ヘッダ情報を生成し、生成したヘッダ情報を、前記ヘッダ領域グループの書込領域に追記する書込処理手段、
前記データ領域グループ又は前記ヘッダ領域グループにおける書込回数が所定回数に達したことを検知する検知手段、
この第１の検知手段により前記所定回数に達したことが検知されたときに、次に前記所定回数のデータ書換を確保するために必要となる数の前記データ領域グループを前記不揮発性メモリより新たに確保し、確保したデータ領域グループについての前記管理情報を生成し、生成した管理情報を前記管理領域グループに書き込む再構築処理手段、として機能させる、コンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ処理装置において、データの書込可能回数に一定の制限のある不揮発性メモリへのデータの書込可能回数を、その不揮発性メモリの一般的な使い方をするよりも、多くする仕組みに関する。より詳しくは、不揮発性メモリとして、例えばＥＥＰＲＯＭ（Electrically Erasable and Programmable Read Only Memory ）の代わりに、ＮＡＮＤ型又はＮＯＲ型のフラッシュメモリを用いたときのように、データの書込可能回数が少なくなっても、もとのＥＥＰＲＯＭと同程度のデータの書き換えをフラッシュメモリにおいて保証するメモリ制御方法、装置、コンピュータプログラムに関する。
【背景技術】
【０００２】
ＥＥＰＲＯＭ及びフラッシュメモリは、データの書込可能回数、正確には消去回数に制限がある。これらのメモリでは、データを書き込む際に、それまで書き込まれていたデータを消去する必要があるためである。フラッシュメモリは、ＥＥＰＲＯＭに比べて、データの書込可能回数が著しく少ないことは、良く知られている。書込可能回数は、例えば、ＥＥＰＲＯＭは約１０万回（参考値）であるのに対し、フラッシュメモリは１０００回（参考値）程度である。そのため、データの書換頻度の高い用途では、ＥＥＰＲＯＭが使われ、そうでない箇所では、一般に、フラッシュメモリが使われている。
【０００３】
ＥＥＰＲＯＭは、書込可能回数が多い反面、フラッシュメモリに比べてかなり高価である。そのため、ＥＥＰＲＯＭをデータを記録媒体として使用する情報処理装置において、このデータ記録媒体をフラッシュメモリで代用することができれば、データ記録媒体を低コストで実現できる期待がある。
【０００４】
ＥＥＰＲＯＭをフラッシュメモリで代用するには、フラッシュメモリにおいてＥＥＰＲＯＭと同じ程度の回数の書込を保証する仕組みが必要となる。そのための従来技術して、例えば非特許文献１に紹介されている「ＥＥＰＲＯＭエミュレーション」と呼ばれる技術がある。フラッシュメモリでは、データ書き込む際に、それまで書き込まれていたデータを消去する必要があることは上述したとおりであるが、ＥＥＰＲＯＭエミュレーション（登録商標）では、そのデータの消去を複数の書込領域毎に行うことで、データ書込時の消去回数を減らし、見かけ上の書込可能回数をＥＥＰＲＯＭ程度まで多くする。
【非特許文献１】「アプリケーションノート Ｕ17057ＪＪ3Ｖ0ＡＮ00」、第3版、ＮＥＣエレクトロニクス株式会社、2004年11月、ｐ．25−27
【発明の開示】
【発明が解決しようとする課題】
【０００５】
非特許文献１に紹介されているＥＥＰＲＯＭエミュレーションでは、データを１回で書き込むことのできる複数の書込領域から成るグループ、すなわち書込単位は、図１６（ａ）に示されるとおり、データ番号、データ、デリミタから構成される。図中、データ番号は、書込単位のアドレスである。データは所定バイト毎に格納される。書き込まれたデータを読み込むときは、先頭のデータ番号から所定バイト毎にインクリメントしながら他のデータ番号をサーチする。そして、最終のデータ番号を、最新のデータが書き込まれた書込単位のアドレスとして扱う。
【０００６】
データの領域は、複数バイトを割り当てることができる。但し、各データは、他のデータ番号で示される書込単位のデータとは独立であり、互いに干渉されることがない。例えば、図１６（ｂ）は、それぞれデータ番号が「0X01」、「0X02」、「0X03」となる３つの書込単位の例を示しているが、データ番号「0X01」の書込単位に、３バイトのデータ「0X11」、「0X22」、「0X33」をこの順に書き込んだ場合、データ番号「0X03」の書込単位から任意の１バイトを読み込もうとしても、データ「0X33」が得られるわけではない。
このため、ＥＥＰＲＯＭエミュレーションのアドレス体系は、ＥＥＰＲＯＭのアドレス体系と一致しない。なお、図１６（ｂ）において、数値は、１６進法（Hexadecimal Numbre）で表現される数値である。
【０００７】
ＥＥＰＲＯＭをフラッシュメモリで代用するときのように、フラッシュメモリにおいてＥＥＰＲＯＭと同程度の回数のデータの書込を保証するには、ＥＥＰＲＯＭのアドレス体系も保持されていると使いやすい。そのためには、アドレス体系管理の汎用化の仕組みが必要となる。
【０００８】
本発明は、書込領域毎のアドレスを管理することができ、不揮発性メモリの書込可能回数も通常の使用形態のときよりも増加させることができる特徴的なメモリ制御方法及び装置、並びに、コンピュータをこのような装置として動作させることができるコンピュータプログラムを提供することを課題とする。
【課題を解決するための手段】
【０００９】
本発明が提供するメモリ制御方法は、書込領域のデータを消去した後に当該書込領域へのデータ書込を行う不揮発性メモリにアクセス可能な装置が行うメモリ制御方法であって、前記不揮発性メモリの書込領域を、それぞれシーケンシャルに関連付けて所定数毎にグループ化するとともに、所定回数のデータ書込を可能にする上で必要となるグループ数を確保し、確保した数のグループにおいて、書込時に未書込領域又は書込可能領域が残るグループがあるときはこのグループの当該領域への追記を行い、追記元のグループについては、所定の条件を満たした時点でグループ単位で消去することを特徴とする方法である。
【００１０】
本発明のある実施の態様では、前記装置は、前記確保した数のグループによる所定回数のデータ書込を終了したことを検知したときに、前記不揮発性メモリから所定回数のデータ書込を可能にする上でさらに必要となるグループ数を新たに確保することを特徴とする。本発明の他の実施の態様では、前記装置は、前記確保した数のグループによる所定回数のデータ書込を終了する前に制御動作を停止したときは、回復時に、停止前に確保していたグループを再確保することを特徴とする。
【００１１】
本発明が提供するメモリ制御装置は、書込領域のデータを消去した後に当該書込領域へのデータ書込を行う不揮発性メモリへのデータの書込を制御する装置であって、前記不揮発性メモリには、それぞれ複数の書込領域をシーケンシャルに関連付けた複数個のデータ領域グループと、どのデータ領域グループのどの書込領域にデータが書き込まれているかを表すヘッダ情報の書込領域を有する複数個のヘッダ領域グループと、どのデータ領域グループ及びどのヘッダ領域グループの書込領域にアクセス可能かを表す管理情報の書込領域を有する管理領域グループとが形成されており、前記複数個のデータ領域グループのうち、追記可能な書込領域を有するデータ領域グループを前記不揮発性メモリにおいて特定し、特定したデータ領域グループのうち追記可能な書込領域に、入力された新たなデータを逐次追記し、追記可能な書込領域が足りない場合は次のデータ領域グループを前記不揮発性メモリにおいてさらに特定して前記入力されたデータの追記を完了させ、データの追記が完了した１又は複数のデータブロックを前記不揮発性メモリにおいてデータ領域グループ毎に書き換えるとともに、追記したデータ領域グループの書込領域の特定を可能にするアドレス情報を含む前記ヘッダ情報を生成し、生成したヘッダ情報を、前記ヘッダ領域グループの書込領域に追記する書込処理手段と、前記データ領域グループ又は前記ヘッダ領域グループにおける書込回数が所定回数に達したことを検知する第１の検知手段と、この第１の検知手段により前記所定回数に達したことが検知されたときに、次に前記所定回数のデータ書換を確保するために必要となる数の前記データ領域グループを前記不揮発性メモリより新たに確保し、確保したデータ領域グループについての前記管理情報を生成し、生成した管理情報を前記管理領域グループに書き込む再構築処理手段と、を有する装置である。
【００１２】
前記書込処理手段は、具体的には、前記書込処理手段は、前記追記が完了したデータ領域グループが、追記可能な書込領域が残っていたデータ領域グループであるときは、追記前の当該データ領域グループを前記不揮発性メモリの所定領域に一時的に保持しておき、予め定めた条件を満たすことを検出したときに、当該一時的に保持してあるデータ領域グループを消去する。また、不揮発メモリに、複数回のデータ書込に共通に使用する初期データを書き込むための初期データ書込領域を形成しておき、書込処理手段で、前記データの追記を行う際に前記初期データ書込手段に書き込まれている初期データを参照するようにしても良い。
【００１３】
前記再構築処理手段は、例えば、前記データ領域グループの消去に先立ち、前記新たなデータ領域グループと共に新たなヘッダ領域グループを選択し、選択したデータ領域グループ及びヘッダ領域グループについての前記管理情報を生成する。
【００１４】
好ましい実施の態様では、メモリ制御動作の停止後に回復したことを検知する第２の検知手段をさらに備えており、前記再構築処理手段は、前記第２の検知手段が、前記回復したことを検知したときは、新たなデータ領域グループ及びヘッダ領域グループの確保に代えて、前記管理領域グループに書き込まれている管理情報に基づいて、停止前の書込状態のデータ領域グループ及びヘッダ領域グループを確保する。
【００１５】
本発明が提供するコンピュータプログラムは、コンピュータを、書込領域のデータを消去した後に当該書込領域へのデータ書込を行う不揮発性メモリへのデータの書込を制御する装置として動作させるためのコンピュータプログラムであって、前記コンピュータを、前記不揮発性メモリに、それぞれ複数の書込領域をシーケンシャルに関連付けた複数個のデータ領域グループと、どのデータ領域グループのどの書込領域にデータが書き込まれているかを表すヘッダ情報の書込領域を有する複数個のヘッダ領域グループと、どのデータ領域グループ及びどのヘッダ領域グループの書込領域にアクセス可能かを表す管理情報の書込領域を有する管理領域グループとを形成するグループ形成手段、前記複数個のデータ領域グループのうち、追記可能な書込領域を有するデータ領域グループを前記不揮発性メモリにおいて特定し、特定したデータ領域グループのうち追記可能な書込領域に、入力された新たなデータを逐次追記し、追記可能な書込領域が足りない場合は次のデータ領域グループを前記不揮発性メモリにおいてさらに特定して前記入力されたデータの追記を完了させ、データの追記が完了した１又は複数のデータブロックを前記不揮発性メモリにおいてデータ領域グループ毎に書き換えるとともに、追記したデータ領域グループの書込領域の特定を可能にするアドレス情報を含む前記ヘッダ情報を生成し、生成したヘッダ情報を、前記ヘッダ領域グループの書込領域に追記する書込処理手段、前記データ領域グループ又は前記ヘッダ領域グループにおける書込回数が所定回数に達したことを検知する検知手段、この第１の検知手段により前記所定回数に達したことが検知されたときに、次に前記所定回数のデータ書換を確保するために必要となる数の前記データ領域グループを前記不揮発性メモリより新たに確保し、確保したデータ領域グループについての前記管理情報を生成し、生成した管理情報を前記管理領域グループに書き込む再構築処理手段、として機能させる、コンピュータプログラムである。
【発明の効果】
【００１６】
本発明のメモリ制御方法によれば、書込は不揮発性メモリにおいて確保したグループの未書込領域への書込領域毎で行うので、書込領域のアドレス体系の汎用化が可能となり、さらに、データの書込の平準化が可能で、消去もグループ単位で行うので、書込可能回数が不揮発性メモリの通常の使用態様よりも格段に増加するという特有の効果が得られる。
本発明のメモリ制御装置においても、データ領域グループの追記可能な書込領域に逐次追記されるので、アドレス体系の汎用化が可能であり、消去回数の減少とデータ書込の平準化も可能となるので、書込可能回数が、不揮発性メモリの通常の使用態様より増加する。
【発明を実施するための最良の形態】
【００１７】
図１は、本発明の実施の形態例となるメモリ制御装置の構成例を示す図である。このメモリ制御装置１は、プロセッサユニット２と、不揮発性メモリの一例となるフラッシュメモリ６とをデータバス７で接続して構成される。プロセッサユニット２は、プロセッサ３と、本発明のコンピュータ・プログラムを格納したプログラムメモリ４と、揮発性メモリであるワーキングメモリ５とを含み、プロセッサ３が、コンピュータ・プログラム４をワーキングメモリ５に展開し、これを実行することにより、フラッシュメモリ６に対して特徴的なメモリ制御、例えばＥＥＰＲＯＭエミュレーションを行うためのグループ形成手段、書込処理手段、読込処理手段、各種検知手段、再構築処理手段の機能をプロセッサユニット２において実現する。ワーキングメモリ５には、一時的なデータの保持を行うバッファも形成される。
【００１８】
まず、本実施形態によるメモリ制御の概念を従来技術との対比で説明する。
図２（ａ）は、一般的に行われている従来のメモリ制御の概念図である。従来は、フラッシュメモリにデータを書き込む場合、メモリ制御装置は、そのフラッシュメモリのアドレスを指定する。このときのアドレスは、物理アドレスである。このアドレスの示す書込領域にデータが存在するかどうかを調べ、存在するときは、それを消去した後にデータを書き込んでいる。例えばアドレス「0X3600」の示す書込領域にデータ「0X11」、「0X22」、「0X33」をこの順に書き込むと、そのアドレス「0X3600」の示す書込領域でのデータは逐次書き換えられ、最後のデータ「0X33」だけが残る。このようなメモリ制御の仕方では、同じアドレスでの書き換えが集中する場合があるために、上述したように約１０００回程度の書き換えしかできない。そのため、このままでは、約１０万回も書き換えが可能で、アドレス体系も異なるＥＥＰＲＯＭの代用はできない。
【００１９】
本実施形態では、データを書き込む際に、同じアドレスに集中しないように、平準化した書込を実現し、書込可能回数の増加を図る。そのために、図２（ｂ）に示すように、アドレス指定は論理アドレスに相当する部分に行い、データを書き込む書込領域は、論理アドレスに相当する部分と関連付けられたアドレスにより特定される書込領域とした。
なお、フラッシュメモリでは消去が伴うので、書込ないし追記は、実際には書き換えとなる。以下、両者を区別する必要がある場合を除き、書込ないし追記と表現する。
【００２０】
図２（ｂ）の例では、アドレス「0X3600」（論理アドレスに相当）への１回目のデータ「0X11」は、そのアドレス「0X3600」とマッピングされたアドレス「0X1000」（物理アドレスに相当）の示す書込領域に書き込む。アドレス「0X3600」への２回目のデータ「0X22」は、アドレス「0X3600」とマッピングされたアドレス「0X1003」の示す書込領域に書き込む。アドレス「0X3600」への３回目のデータ「0X33」は、アドレス「0X3600」とマッピングされたアドレス「0X1004」の示す書込領域に書き込む。このようにすれば、３回のデータ書込が行われても、実際にデータが書き込まれる物理アドレス相当の示す領域での書換は、それぞれ１回だけとなるので、データの書込可能回数は、実質的に３倍となる。
【００２１】
本実施形態のメモリ制御は、このようなアドレスの関連付けの仕組みを採り入れた、新規なＥＥＰＲＯＭエミュレーションを実現可能にする手法である。すなわち、データ書込は、ＥＥＰＲＯＭのアドレス体系を考慮して個々の書込領域毎に行い、消去は、不要になった複数の書込領域から成るグループ毎に行えるようにする。
【００２２】
以後の説明では、書込単位となる複数の書込領域のグループのうち、最小単位のグループをエントリ、複数のエントリのグループをブロックと呼ぶ。複数のエントリは、連続するアドレスによってシーケンシャルにつながっている。ブロックも同様である。本実施形態では、データの書込に際してこのようなグループの再構築を伴う点に一つの特徴がある。この再構築の概念を図３を参照して説明する。
【００２３】
図３（ａ）は、データ書込前のデータ領域グループの構造図である。ここでは、簡略化した構造例として、一つのエントリにおけるアドレスの領域が１６バイトアライメント、データの領域が１６バイト固定長、すなわち、例えばそれぞれ１バイトのデータを書き込む１６個の書込領域を有するものとする。１６個の書込領域並びに他のエントリの書込領域は、連続するアドレスで関連付けることにより、書込領域をそれぞれシーケンシャルに関連付ける。図示の数値は、１６進法で表現されている。［0XFF］は、未書込領域を表す。
【００２４】
このような構造のエントリにおいて、メモリ制御装置１が、アドレス［0X3600］（論理アドレスに相当）を指定して１７バイトのデータを書き込んだとする。データの領域は１６バイト固定長であるため、書込対象となる１７バイトのデータは、アドレス［0X3600］〜［0X360F］のエントリに１６バイト分（それぞれ[0X11]）だけが書き込まれる。残りの１バイト分のデータ（［0X11］）は、シーケンシャルにつながる次のエントリの最初の書込領域（アドレス［0X3610］）に書き込まれる。この状態を図３（ｂ）に示す。この場合、アドレス［0X3610］から１バイトのデータを読み込むと、データ[0X11］が得られる。
【００２５】
この状態で、さらに１バイトのデータ［0X22］をアドレス[0X3611]に追記する場合、その時点で最新となっている、アドレス[0X3611]の１６バイトアライメントであるアドレス［0X3610］のエントリを特定し、そのエントリの１６バイト分のデータのうちアドレス[0X3611]に相当する部分を更新した１６バイトのデータを、新しいエントリとして書き込む処理を行う（read-modify-write）。
【００２６】
更新は、追記前の最終の書込の次の未書込のエントリに、上記の新しいエントリを追記することにより、当該エントリの未書込領域を減らしていく処理である。この状態を示したのが、図３（ｃ）である。追記が行われたエントリを、アドレス［0X3610］の新たなエントリとして書き込む。これにより、追記前のアドレス［0X3610］のエントリ（図３（ｂ）の下段のエントリ）は不要となるので、これを、予め定めた所定条件を満たすことを検知したときに削除する。削除される間では保持される。保持する領域は、その領域を特定できれば、どこであっても良い。
【００２７】
このように、データ書込は個々の未書込領域毎に行い、消去するときはグループ毎（上記の例では、エントリ毎）に行うのが、本実施形態におけるＥＥＰＲＯＭエミュレーションの一つの特徴である。これはブロックの場合も同様となる。これにより、データの書換が特定のアドレスに集中する場合に比べて消去回数が格段に減少するので、書込可能回数が増加する。この削除と必要なデータの保持を「再構築」という。再構築は、書込領域を［0XFF］に置き換える初期化とは区別される。
【００２８】
＜フラッシュメモリのメモリ構造＞
本実施形態によるフラッシュメモリ６のメモリ構造例を図４に示す。このようなメモリ構造は、グループ形成手段として機能するプロセッサユニット２により形成される。
本例では、フラッシュメモリ６は、便宜上、５１２ｋＢのものとする。このフラッシュメモリ６に、１２８ｋＢの割当領域２０を設ける。図２との関係では、フラッシュメモリ６は、図２（ａ）にいう物理アドレスを持つ不揮発性メモリに相当する。
【００２９】
割当領域２０は、それぞれ１２８ｋＢの半分である６４ｋＢのクラスタ＃０（第１系統用）２１と、クラスタ＃１（第２系統用）２２とに分割する。第１系統と第２系統は、例えば、マスター／スレーブ、メイン／サブ、特別モード／通常モードのような使い方に対応するものである。２系統の使い方をしない場合、クラスタの分割は不要となる。
【００３０】
各系統のクラスタ２１，２２は、それぞれ複数のブロックで構成される。ブロックのサイズを２ｋＢとすると、ブロックの数は３２となる。個々のブロックの構成は、２系統のクラスタ２１，２２とも同じとなる。消去は、後述するエントリ毎、あるいは、ブロック毎に行うことができる。
【００３１】
図４の例では、クラスタ＃１（第２系統用）２２について、初期データ用の初期データブロック２２１、管理領域ブロック２２２及びデータ書込用の実データブロック２２３が形成される。
【００３２】
初期データブロック２２１は、フラッシュメモリ６に、初期に書き込む初期データのサイズに応じて、例えば２ブロック分（例えば、０〜３１の番号で識別される３２のブロックのうち、０，１の２つのブロック）を確保する。初期データは、フラッシュメモリ６に、原則として１度だけ書き込まれるデータであり、後述するヘッダ等を含まない、フラッシュメモリ６に書き込まれているデータを読み込むプログラムによってダイレクトに参照されるデータである。初期データとしては、例えば、ＥＥＰＲＯＭエミュレーションの際に、再構築用として確保するデータサイズを圧迫しないように、ＥＥＰＲＯＭエミュレーションにおいて共通に使用されるデータが用いられる。初期データのサイズは、５１２バイトといったように、大きな単位でのデータとなる場合があるので、後述するデータの追記を行う際にこの初期データを参照することにより、再構築の発生周期が長くなり、再構築回数の増加を抑えることができる。
【００３３】
管理領域ブロック２２２は、交互に使用する２ブロック（例えば、２，３の２つのブロック）を割り当てる。この管理領域ブロック２２２は、実データブロック２２３が、現在、どのようなブロック構成になっているかを書き込むための管理情報を書き込むためのブロック（領域グループ）である。
【００３４】
実データブロック２２３は、ヘッダブロックとデータブロックのいずれかとなる。ヘッダブロックは、フラッシュメモリ６のどの領域（どのブロックのどのアドレス）にどのデータが存在するかを示すヘッダだけが書き込まれるブロック（領域グループ）である。データブロックは、メモリ制御装置１の書込制御により、実際に扱うデータ（実データという）を書き込むためのブロック（領域グループ）であり、他のデータブロックとアドレスによってシーケンシャルにつながっている。
なお、管理領域ブロック２２２及び実データブロック２２３は、それぞれ複数のエントリを有する。エントリもまた、それぞれ連続するアドレスによってシーケンシャルにつながっている。図４の例では、実データブロック２２３についてのエントリ２２３１と、管理領域ブロック２２２についてのエントリ２２２１とが示されている。
【００３５】
実データブロック２２３のデータブロック内のエントリ、ヘッダブロック、及び、管理領域ブロック２２２の割当例を図５に示す。データブロックの各エントリは、図５上段に示すように、１６バイト固定長である。書込領域構造は、図３（ａ）に示したエントリｂ１１と同じである（図３（ａ）のアドレスは、便宜上の表現である）。ヘッダブロックは、本例では、書込の最小単位が４バイトとすると、その４バイトがフラッシュメモリ６に書き込まれるかそうでないかをアトミックに保証できる点を利用する。つまり、ヘッダを、４バイトのスタートマーク領域（StartMark：ＳＭと略する）と、４バイトのエンドマーク領域（EndMark：ＥＭと略する）と設定する。そして、アドレスへの書込を、ＳＭ、データブロック、ＥＭの順に行う。このような順番で書込を行うことにより、実際にデータがデータブロックに書き込まれたか書き込まれないかは、ＥＭへの書込が正常に行われたどうかによって、容易に判別することができる。
なお、ＥＭのアドレスが書き込まれていれば、正しくデータが書き込まれたことを示すことになるので、実際には、４バイトの書込がアトミックに保証できる必要はなく、１バイトの書込がアトミックに保証されれば十分である。
【００３６】
ＳＭは、フラグ（１バイト）、シーケンス番号（１バイト）、ブロック番号（１バイト）、エントリ位置（１バイト）の４バイトで構成される。フラグとシーケンス番号は、あるアドレスへの複数回にわたるデータの書込があったときに、これらがシーケンシャルにすべて行われたことを保証するために使用する。従えば２５６バイトの書込があったときは、個々のデータブロックが１６バイト固定長であるために１６回に分けて書込を行うことになる。このとき、１６回の書込がシーケンシャルにすべて行われたことを保証するためにフラグとシーケンス番号が使用される。各回の書込が何番目かを表すのがシーケンス番号である。フラグには、シーケンス番号が有効であることを示す「ＳＥＱ」と、最初のシーケンス番号を示す「ＴＯＰ_ＳＥＱ」とが設定される。検索は、最新に登録されたエントリから行われる。シーケンス番号は、書込が進むにつれて小さい値となる。従って、検索時に、フラグに「ＳＥＱ」があり、且つ、シーケンス番号が「０」であれば、それ以降に続くフラグ「ＴＯＰ_ＳＥＱ」までのデータは、正しくデータブロックに書き込まれて、有効な状態であることを示す。逆に、検索時に、フラグに「ＳＥＱ」があり、且つ、シーケンス番号が「０」以外であれば、それ以降に続くフラグ「ＴＯＰ_ＳＥＱ」までのデータは無いものとして扱う。
【００３７】
ブロック番号は、対象となるデータブロックが何番目のブロックかを識別するための番号であり、エントリ位置は、そのブロックのエントリが何番目のものかを示している。ブロック番号は、本例では、「0」〜「255」のいずれかである。エントリ位置は、データ長が１６バイト固定で１ブロックが２ｋＢとして、「0」〜「127」のいずれかである。
このブロック番号とエントリ位置が、実際にデータを書き込む物理アドレスに対応したものとなる。
【００３８】
ＥＭは、同一アドレスの直前のエントリ位置（２バイト）、アドレス（２バイト）の４バイトで構成される。直前のエントリ位置は、再構築時に必要なデータである。再構築については、後で詳しく述べる。アドレスは、１６バイトアライメント（固定長）であるが、あるアドレスに書込を行うときに、そのアドレスを読み込み、新しいデータで書き込む。これにより、そのアドレスの最新データは、最後に書き込まれたデータだけを読み込めば良いことになる。このアドレスが、ＳＭのブロック番号及びエントリ位置（物理アドレス）と関連付けられた論理アドレスに相当するものとなる。
【００３９】
ＳＭ及びＥＭをこのように構成することにより、あるアドレスのデータを探し出すときに、ＥＭの内容を参照するだけで、そのアドレスへのデータの書込が正常に行われているかどうかを迅速に判別することができる。
【００４０】
管理領域ブロック２２２は、再構築回数（２バイト）、フラグ（１バイト）、ブロック番号（１バイト）の４バイトから成る（図５下段）。再構築回数は、現在までの再構築の回数を示している。「ブロック番号」は、使用している実データブロック２２３を識別するためのブロック番号である。そのブロックが現在どのような状態かを示すのがフラグである。フラグは、「再構築中」、「ヘッダ」、「データ」、「再構築完了」のいずれかを示す。「ヘッダ」及び「データ」は、そのブロックの内容を示している。ブロック番号は、空きブロックの中から選択される。空きブロックは、本例では、消去済みであったときに空きブロックと判定される公知の機能を利用して判定する。
【００４１】
なお、後述するように、再構築を行うと、再構築前のブロック（エントリを含む）の情報は消去されるので、上記の空きブロックは、消去済みのブロックとなる。消去済のブロックは、ブロック内のすべてが未書込であることを示す［0XFF］であれば良いが、実際には、書込のできない不良ブロックの出現の可能性を否定できない。この場合、管理領域ブロック２２２のフラグに「不良ブロック」を設定し、不良ブロックの可能性のあるブロックの最初のエントリ部分を試し書き専用にして判定することも考えられる。しかし、一部のエントリのチェックでそのブロックの判定を行うことは、信頼性に欠ける。空きブロックの選択は、再構築時にだけ行われることに着目すれば、書込に失敗したときに、そのエントリをスキップする仕組みがあれば十分である。
【００４２】
メモリ制御装置１は、フラッシュメモリ６を初期化するときは、再構築すべきかどうかを判定する。再構築済であれば、通常の動作となる。この通常の動作の途中で電源の切断等があっても、ＳＭ、実データブロック、ＥＭの順番に従って書き込まれている限り、データの状態は、特別な処理を必要としなくとも保証される。
【００４３】
＜動作＞
次に、メモリ制御装置１の動作を具体的に説明する。
１．読込処理
フラッシュメモリ６に書き込まれているデータの読込処理を、図６の手順説明図及び図１１のメモリ状態図を参照して説明する。この処理は、プロセッサユニット２が、読込処理手段として動作するときに実行される。
【００４４】
フラッシュメモリ６は、図１１に示される状態にあるものとする。図１１の内容は、図４との関係では、「初期データ」が初期データブロック２２１、「管理領域」が管理領域ブロック２２２、その他のブロックが実データブロック２２３に対応する。各ブロックの後の数値は、「０」〜「３１」のいずれかとなるブロック番号である。図１１右側に示される管理領域のエントリのうち「0|0|S|0」は、フラグ「再構築中（Ｓ）」の次に検索開始の候補となる空きブロック番号が「０」、すなわち初期データブロック２２１なので再構築を開始していないことを示している。エントリ「0|0|H|4」及び「0|0|H|5」は、実データブロック２２３のうちヘッダブロック（Ｈ）としてブロック（４）及びブロック（５）を使用していることを示している。エントリ「0|0|Ｄ|6」〜「0|0|D|9」は、実データブロック２２３のうち、データブロック（Ｄ）として、ブロック（６），（７），（８），（９）を確保していることを示している。エントリ「0|0|E|0」は、フラグ「再構築完了（Ｅ）」が「０」、すなわち、再構築が完了していることを示している。
【００４５】
ヘッダブロック（４）のエントリは、確保しているデータブロックのうち、最初のデータブロック（６）に、データ（１）〜データ（３）の３つのデータが正常に書き込まれていることを示している。すなわち、データ（１）についてＳＭ（１）とＥＭ（１）、データ（２）についてＳＭ（２）とＥＭ（２）、データ（３）についてＳＭ（３）とＥＭ（３）の順に書き込まれていることを示している。
【００４６】
メモリ制御装置１は、データの読み込み要求を行うプログラムが指定する読み込むデータのアドレスの入力をもとに、ブロック情報を計算する（ステップＲ１０１）。ここにいうブロック情報は、上記の管理領域（２）及びヘッダブロック（４）に書き込まれているエントリから特定される情報である。
【００４７】
その後、アドレスのアライメント（a_addr）、オフセット（offset）を計算する（ステップＲ１０２）。アドレスのアライメント（a_addr）は、アドレス（addr）の１６バイトアライメントである。例えば、読み込むデータの最初のアドレス（addr）が［0X3612］のとき、アドレスのアライメント（a_addr）は［0X3610］であり、差分である「２」がオフセット（offset）となる。このステップＲ１０２により計算されたアドレスのデータを読み込む（ステップＲ１０３）。必要なデータ分をワーキングメモリ５のバッファ（buf）に保存し、残りサイズを計算する（ステップＲ１０４）。ここにいう必要なデータ分は、「１６−offset」かサイズ（size）のうち小さい方の値である。残りサイズは、サイズ（size）から（１６−offset）分を差し引いた値となる。これを新たなサイズ（size）としてバッファに記憶する。残りサイズがあるときは、次のアライメントアドレスを計算し、オフセットを「０」にして、ステップＲ１０３の処理に戻る（ステップＲ１０５：Yes、Ｒ１０６）。残りサイズが無いときは、処理結果である読み出しデータを要求元に返し、終了する（ステップＲ１０５：No、Ｒ１０７）。
【００４８】
２．データ書込処理
次に、データ書込処理を、図７〜図９を参照して説明する。書込直前のフラッシュメモリ６は、図１１の状態にあるものとする。この処理は、プロセッサユニット２が、書込処理手段として動作するときに実行される。
図７を参照すると、メモリ制御装置１は、まず、データ書込要求の入力を契機に、ブロック情報を計算する（ステップＷ１０１）。ブロック情報は、上述のとおりである。その後、書込可能なアドレスのアライメント（a_addr）、サイズのオフセット（offset）を計算する（ステップＷ１０２）。書込分割回数SEQ、ＳＭの初期フラグ値を決定する（ステップＷ１０３）。「SEQ＝１」かどうかの判別を行い、「SEQ＝１」であったときは（ステップＷ１０４：Yes）、初期データの書込判定と該当のアライメントアドレスのデータ読込処理へ移る（ステップＷ１０５）。ここで同じデータを書き込もうとしてしている場合は、処理を終える（ステップＷ１０６：Yes）。
【００４９】
本例では、書込分割回数SEQは、サイズ（size）が１６バイトとすると、SEQは「２」となる。すなわち、書込直前の状態では、最後に書き込まれたアドレス（addr）が[0X3612]で、オフセット（offset）が「２」であるから、１回の書込では１４バイト分しか書き込めない。残りの２バイト分は、次のデータブロックへの２回目の書込となる。そのため、２分割ということになり、SEQは「２」となる。
【００５０】
そのため、処理は、初期データの書込判定と該当のアライメントアドレスのデータの読込処理へ移る（ステップＷ１０４：No、Ｗ１０７）。そして新しいデータに更新し（ステップＷ１０８）、書込処理へ移る（ステップＷ１０９）。書込処理については、後述する。ステップＷ１０６において、同じデータを書き込もうとしていない場合も、ステップＷ１０８の処理に移る。書込処理の後、「SEQ−１」の処理を行い、ＳＭの初期フラグ値を調整する（ステップＷ１１０）。「SEQ＞０？」を判別し、そうであった場合は、次のアドレスを計算して（ステップＷ１１１：Yes、Ｗ１１２）、ステップＷ１０７へ戻る。「SEQ＞０」でなければ、処理を終える（ステップＷ１１１：No）。
【００５１】
図７のステップＷ１０５，Ｗ１０７における初期データの書込判定と該当のアライメントアドレスのデータ読込処理は、図８で示す手順で行われる。すなわち、メモリ制御装置１は、プログラムの指定したアライメントアドレスが初期データの範囲に指定されているかを調べる（ステップＤ１０１）。指定されているときは、初期データブロック２２１（図４）におけるアライメントアドレスから、サイズ（size）分のデータが、まだ初期値（0XFF）で埋められているかどうかを調べる（ステップＤ１０１：Yes、Ｄ１０２）。ここにいう初期値（0XFF）は、初期データと異なり、書き込まれているものが何もないことを表す。この初期値（0XFF）で埋められているときは、今回の書込データを初期データとして初期データブロック２２１に書き込み、書込処理を終える（ステップＤ１０２：Yes、Ｄ１０４）。他方、アライメントアドレスが初期データの範囲に指定されておらず、あるいは、指定されているが、指定のアライメントアドレスからサイズ分のデータが、初期値（0XFF）で埋められていない場合、つまり、初期データとして既に書き込まれている場合（ステップＤ１０１：No、Ｄ１０２：No）は、該当のアライメントアドレスのデータを読み込み（ステップＤ１０３）、呼び出し元の処理に戻る。
【００５２】
図７のステップＷ１０９における書込処理は、図９のように行われる
メモリ制御装置１は、データをデータ書込の順番（ＳＭ、データ、ＥＭの順）に従って書き込む。（ステップＷ２０１）。この後、ヘッダブロックの領域に空きが無いかどうかを調べ、空きがあるときは、データ書込処理に戻る（ステップＷ２０２：No）。ヘッダブロックの領域に空き領域が無い場合は、次のヘッダブロックを選択できるかどうかを調べる（ステップＷ２０２：Yes、Ｗ２０３）。選択できるときは、次のヘッダブロックを選択し、ブロック情報を更新する（ステップＷ２０３、Ｗ２０４）。その後、呼び出し元の処理に戻る。ステップＷ２０３において、次のヘッダブロック領域を選択できないと判別できるときは、再構築処理へ移行する（ステップＷ２０３：Yes）。
【００５３】
以上の図７〜図９の処理の結果、フラッシュメモリ６のメモリ状態は、図１２のようになる。データ（４）が書き込まれた結果、ヘッダブロック（４）の内容も更新される。管理領域（２）に変化はない。
【００５４】
３．再構築
再構築の処理を、図１０の処理手順図及び図１３〜図１５のメモリ構造図を参照して説明する。この処理は、プロセッサユニット２が、再構築処理手段、各種検知手段として動作するときに実行される。
再構築は、書込処理手段による書込処理が実行されたときと、検知手段として動作するプロセッサユニット２が電源切断等の理由による動作停止ないし中止からの回復を検知したときに行われる。読込処理のときには行われない。これは、読込処理の速度のワーストケースを保証するためである。
【００５５】
３−１．書込処理時の再構築
まず、書込処理時の再構築の手順を説明する。すなわち、再構築直前のフラッシュメモリ６が図１３のようになっている状態で、図１４のように、新たにデータを追記した場合を想定する。図１３は、２つ目のヘッダブロック（５）に、１回分のデータについてのＳＭ、ＥＭしか書き込めない状態になっている状態（データ（ｎ）によって５１１回の書込が既に行われている状態）、図１４は、この１回分のデータについてのＳＭ、ＥＭを書き込んだ状態（５１２回の書込が行われ、ヘッダブロックのＳＭ，ＥＭが追記された状態）を示している。
【００５６】
メモリ制御装置１は、図１０に示すように、過去の消去可能なブロックが存在するかどうかを調べる（ステップＳ１０１）。過去の消去可能なブロックは、その内容が書き換えられたブロックである。存在するときは、そのブロックを消去する（ステップＳ１０１：Yes、Ｓ１０２）。消去可能なブロックが存在しない場合、あるいは存在するが消去した場合は、再構築開始を示す情報を管理領域ブロック２２２に書き込む（ステップＳ１０１：No、Ｓ１０３）。
【００５７】
新しいヘッダブロックを選択し、管理領域に書き込む（ステップＳ１０４）。また、新しいデータブロックを選択し、管理領域に書き込む（ステップＳ１０５）。５１２回の書込毎に再構築する場合、ヘッダブロックは２つ、データブロックは４つ選択される。つまり、再構築のために６ブロック消費する。これは、１つのヘッダブロックに２５６のヘッダを確保できるので、５１２のヘッダを確保するには、ヘッダブロックは２つとなる。データブロックは、データの領域が１６バイト固定長で、ブロックサイズが２ｋＢであるから１つで１２８回となり、５１２回確保するためには、４つが必要ということになる。図１１〜図１２の右側に示した管理領域ブロック２２２のエントリは、初期化後に行われる上記のことが根拠となっていた。再構築するときは、さらに６ブロックを確保する。
【００５８】
メモリ制御装置１は、古いヘッダブロックが存在するかどうかを調べる（ステップＳ１０６）。存在する場合は、その古いヘッダブロックにおいて登録の順番の新しい側から順にデータを読み込む（ステップＳ１０７）。過去に選択されたスキップすべきアドレスかどうかを調べ、そうでない場合は、新しいデータブロックにデータを書き込む（ステップＳ１０８：No、Ｓ１０９）。そして、選択アドレスと一致する、それより前のデータは不要なデータとなるので、スキップできるようにするために、バッファに記憶しておく（ステップＳ１１０）。
【００５９】
ステップＳ１０８において、スキップすべきアドレスであった場合（ステップＳ１０８：Yes）、あるいは、スキップできるように記憶した後は、すべての古いブロックのデータを確認したかどうかを調べる（ステップＳ１１１）。未確認のブロックのデータが存在するときは、ステップＳ１０８の処理に戻る（ステップＳ１１１：No、Ｓ１１２）。
すべての古いブロックのデータを確認し終えた場合、あるいは、ステップＳ１０６において、古いヘッダブロックが無かった場合は（ステップＳ１０６）、再構築完了の情報を管理領域に書き込み、書込処理のための待機に戻る（ステップＳ１２０）。
【００６０】
再構築の完了により、直前の実データブロックは、新たに不要となった実データブロック（旧実データブロックという）となる。旧実データブロックは、この段階では削除せず、次の再構築のタイミングまで保持される。これは、再構築完了を書き込む前には旧実データブロックは削除できないこともあるが、削除していないことを示すフラグを持つと、その分、後述する回復のときの再構築のときに考慮すべきことが増え、複雑になることを防ぐためである。
【００６１】
なお、旧実データブロックを削除するときは、管理領域ブロック２２２にエントリされているＥＭの「同一アドレスの直前のエントリ位置」が意味をもつ。つまり、古いデータがリンクされ、存在位置が判るので、再構築に要する時間を長引かせることがない。
【００６２】
再構築完了のメモリ状態を示したのが図１５である。管理領域ブロック２２２に追加されたエントリは、再構築中（Ｓ）の最初に検索するブロック番号が「９」で、ヘッダブロックは新たにブロック（１０），（１１）が確保され、データブロックは、ブロック（１２）〜（１５）が確保される内容となる。データは、データ（１）〜データ（ｍ）までが複写され、ヘッダブロックのエントリは、ＳＭ（１），ＥＭ（１）〜ＳＭ（ｍ）、ＥＭ（ｍ）に変化する。最新のエントリから逆順に検索すると、再構築完了（Ｅ）があるので、このフラッシュメモリ６では、再構築が正常に完了していることが保証される。
【００６３】
３−２．回復のときの再構築
回復のときの再構築は、上述のステップＳ１０４，１０５において、２つのヘッダブロック及び４つのデータブロックを選択する際に、新しいものを選択するのでなく、それまで使用していたヘッダブロック及びデータブロックを再選択する。これは、検知手段にとって、再構築時に例えば電源切断が発生したことが容易に検知できることに加え、再度割当を行わないために発生するリスク、例えば、回復できない状態が発生することを減らすためである。
この場合、途中までデータが書き込まれたヘッダブロック、データブロックを選択することも想定されるが、再構築時のアルゴリズムが同じである以上、通常、同じデータが書き込まれることが保証される。こういった場合に、現在と同じデータを書き込む場合は、不揮発性メモリそのものに書き込むことはしない。これは、通常データを書き込む際の高速化と同じである。
【００６４】
このように、本実施形態のメモリ制御装置１によれば、フラッシュメモリ６へのデータの書込に際して、アドレス体系の汎用化が可能な特徴的なＥＥＰＲＯＭエミュレーション及び再構築を繰り返しながらデータ書込が行われるので、フラッシュメモリの通常の使用態様によれば頻出する特定のアドレスへの集中が回避され、データ書込が平準化される。これにより、無駄のないメモリ書込が可能となり、書込可能回数が飛躍的に増加する。例えば、従来の書込方式では１０００回程度の書込可能回数しか許されないフラッシュメモリであっても、後述するように１０万回程度の書込可能回数が確保されるので、同程度のＥＥＰＲＯＭの代わりに、フラッシュメモリを使用することができる。
【００６５】
また、不要になったブロックでも、次の再構築のときまで削除されないで残っているので、例えば電源切断などの障害が発生しても、その発生前のデータが回復時に、再構築に復帰するので、安全性にも優れたものとなる。
【００６６】
＜性能＞
次に、本実施形態のメモリ制御装置１の性能を説明する。
本実施形態によるメモリ構造では、管理領域ブロック２２２の書込可能回数は、実データブロック２２３の書込可能回数に比べて余裕がある。従って、２つの管理領域ブロック２２２が、それぞれ５０〜１００回程度の消去可能であることが保証されれば、一方の管理領域ブロックが、１０００回まで消去しないうちに、突然不良ブロックとなっても、通常は、動作上の問題は生じない。また、初期データブロック２１１は、それぞれのブロックが、仮に一度も消去可能でなくとも、データが書き込めれば十分である。そのため、コスト的にも著しく有利となる。
【００６７】
次に、本実施形態のメモリ制御により書込可能回数がどのくらい増加するかを述べる。
これまで述べた仕組みによりデータの書込可能回数が影響するのは、図４に示したクラスタ毎の３２個のブロックのうち、２８個の実データブロック２２３である。書込可能回数には、いくつかの変動要因がある。代表的な変動要因には、再構築に使用される分のデータサイズ（Ｒバイト）、データの領域を何バイト固定長にするか（これまで説明した例では１６バイト固定長）、次回の再構築を行うまでに使用するヘッダの数がある。ヘッダの数が多くなれば、再構築の回数が減るので、多くの書込要求を実現できるが、ヘッダ間の周期が長くなる分、検索に時間がかかることになる。従って、実際の書込可能回数は、これらの変動要因を考慮した上で、最適な値を決めていくことになる。
【００６８】
これまで説明した例でいえば、データの領域が１６バイト固定長なので、ヘッダの数、すなわち再構築に使用される分のデータサイズは、Ｒ／１６となる。また、個々のブロックのサイズが２ｋＢなので、１ブロック当たりの書込可能回数は、２ｋＢ／１６（＝１２８）回となる。５１２回の書込毎に再構築するとした場合、２８個のブロックのうち、６個のブロックを消費することは上述したとおりである。
【００６９】
従って、書込要求の回数、すなわち書込可能回数は、１つのブロックで１０００回まで書込可能なので、１クラスタ当たり、（５１２−Ｒ／１６）×１０００×２８／６回の書込が可能となる。上記のＲを３ｋＢとすると、１クラスタ当たり、書込可能回数は、1,490,000回となる。このように、本実施形態のメモリ制御装置１によれば、ＥＥＰＲＯＭ並の書込可能回数を確保することができることがわかる。
【００７０】
＜初期データの扱い＞
初期データブロック２２１に書き込まれる初期データは、市場で上書きされない部分である。そのため、単純には、初期データを持っているアドレスが指定されたときは、その初期データを使い、そうでなければ、ＥＥＰＲＯＭエミュレーションで得た値を使うことができる。
【００７１】
例えば、本実施形態において、アドレス[0X3000]〜［0X3100］を初期データ用として確保しておき、あるアドレス［0X3600］〜［0X3700］を、マルチメディア処理の実行の際に参照されるパラメータ値（例えばサウンドのON/OFFや解像度等）の設定データを書き込んだり、API（Application Programming Interface）などを書き込む領域として使用することができる。この場合、上位アドレスである［0X3000］から１６バイトのデータの読込要求があれば、初期データを返し、他方、下位のアドレスである［0X3600］から１６バイトのデータ（API）の読込要求があれば、ＥＥＰＲＯＭエミュレーションで書き込まれたデータを返すという態様で使用することになる。しかし、デバッグ用途、あるいは、市場でも初期データの値を上書きして使いたいことがある。また、初期データを書き込むときと、市場で書き込むAPI等とを区別することなく、あるアドレスに対して読み書きできれば、便利である。
【００７２】
このような場合に、次の手順に従って処理を行うことにより、フラッシュメモリ６を便利に使うことができる。
まず、初期データとして使用する範囲を決めるために、予めフラッシュメモリ６にアクセスしようとするプログラム上にアドレスを指定しておく。例えば、アドレス［0X3000］〜［0X3100］をその範囲とする。アドレス［0X3000］への１回目の書込は、図４に示した初期データブロック２２１に直接書き込まれる。初期データは、上述したとおり、原則として１度だけ書き込まれるものであるが、２回目以降の書込は、上述した本実施形態のＥＥＰＲＯＭエミュレーションでそれを行う。また、ＥＥＰＲＯＭエミュレーションの際の領域検索にも用いられる。初期データブロック２２１を検索し、データが見つかれば終了し、見つからなければ、データが書き込まれていないことを示す［0XFF］を検索要求元に返すことになる。
【００７３】
初期データがＥＥＰＲＯＭエミュレーションにおいて共通に用いられるデータである場合、この初期データを持たずにＥＥＰＲＯＭエミュレーションを行おうとすると、再構築に使用されるときの書込領域の数が増え、その分、再構築の回数が増え、全体の書込可能回数が減るおそれがある。初期データの仕組みの利点は、再構築の回数を抑えることができ、全体の書き込み回数が多くなることが挙げられる。
【００７４】
なお、本実施形態では、不揮発性メモリの例として、フラッシュメモリを例に挙げて説明したが、本発明は、不揮発性メモリへのメモリ制御の仕方に特徴があるので、不揮発性メモリ自体の種類は任意であり、フラッシュメモリに限るものではない。
また、本実施形態では、５１２kＢのフラッシュメモリの場合の例を示したが、データサイズは、５１２ｋＢ以下、あるいはそれ以上であっても良い。
また、本実施形態では、エントリとブロックの２階層のグループでデータの書込を行う場合の例を説明したが、３階層であっても良い。あるいは、エントリ単位であっても良い。
【産業上の利用可能性】
【００７５】
本発明は、不揮発性メモリをデータ記録媒体として使用する情報処理装置において、広く利用することができる。フラッシュメモリに限定しても、パーソナルコンピュータ、ディジタルカメラ、携帯電話端末等、多種多量の機器に搭載されるデータ記録媒体のメモリ制御に利用することができる。
【図面の簡単な説明】
【００７６】
【図１】本発明の実施の一形態となるメモリ制御装置の全体構成図。
【図２】（ａ）は従来のフラッシュメモリにおけるアドレスの使い方、（ｂ）は本実施形態によるアドレスの使い方の説明図である。
【図３】本実施形態による書込方式の概略説明図であり、（ａ）は書込前のメモリ状態、（ｂ）は１７バイトのデータを書き込んだときのメモリ状態、（ｃ）は他のデータを追記したときのメモリ状態を示す。
【図４】本実施形態におけるフラッシュメモリの構造説明図。
【図５】データブロック、ヘッダブロック、管理領域ブロックの内容説明図。
【図６】データ読込処理の手順説明図。
【図７】データ書込処理の手順説明図。
【図８】データ書込処理の手順説明図（部分詳細図）。
【図９】データ書込処理の手順説明図（部分詳細図）。
【図１０】再構築のための手順説明図。
【図１１】割当領域におけるエントリのデータ書込前の内容説明図。
【図１２】割当領域におけるエントリのデータ書込後の内容説明図。
【図１３】割当領域におけるエントリの再構築直前の内容説明図。
【図１４】割当領域におけるエントリの再構築中の内容説明図。
【図１５】割当領域におけるエントリの再構築後の内容説明図。
【図１６】（ａ）はＥＥＰＲＯＭエミュレーションを行うときの従来のメモリ内の構造図、（ｂ）は実際にデータを書き込んだときのメモリ内の構造図。
【符号の説明】
【００７７】
１・・・メモリ制御装置、２・・・プロセッサユニット、３・・・プロセッサ、４・・・プログラムメモリ、５・・・ワーキングメモリ、６・・・フラッシュメモリ、７・・・データバス、２０・・・割当領域、２１，２２・・・クラスタ、２２１・・・初期データブロック、２２２・・・管理領域ブロック、２２３・・・実データブロック、２２２１，２２３１・・・エントリ
【図１】
2009199211.tif 000003
【図２】
2009199211.tif 000004
【図３】
2009199211.tif 000005
【図４】
2009199211.tif 000006
【図５】
2009199211.tif 000007
【図６】
2009199211.tif 000008
【図７】
2009199211.tif 000009
【図８】
2009199211.tif 000010
【図９】
2009199211.tif 000011
【図１０】
2009199211.tif 000012
【図１１】
2009199211.tif 000013
【図１２】
2009199211.tif 000014
【図１３】
2009199211.tif 000015
【図１４】
2009199211.tif 000016
【図１５】
2009199211.tif 000017
【図１６】
2009199211.tif 000018