(57)【特許請求の範囲】
【請求項１】
複数のブロックに分けられているフラッシュメモリの記憶領域からＭ個（Ｍは２以上の自然数）の前記ブロックで一単位を構成するステップと、
それぞれのデータサイズが前記ブロックの書き込み可能容量以下であるＮ種類（Ｎは自然数でＮ＜Ｍ）のデータグループを、前記一単位を構成する前記ブロックの空き領域に複数回書き込むステップと、を有し、
新たな前記データグループを書き込む時に、既に書き込まれた前記データグループを保持したまま、新たな前記データグループの書き込み可能な空き領域がある前記ブロックのうちそれまでのデータの消去回数が最も少ない前記ブロックを抽出し、当該ブロックに最新の前記データグループを書き足すフラッシュメモリへのデータ書き込み方法。
【請求項２】
前記一単位を構成する前記ブロックの空き領域にＮ種類の前記データグループを複数回書き込むことにより、Ｎ種類の前記データグループのいずれの最新の前記データグループも存在せず且ついずれの新たな前記データグループも書き込むことができない前記ブロックが現れたときに、当該ブロック内のデータを全て消去するステップをさらに有する請求項１に記載のフラッシュメモリへのデータ書き込み方法。
【請求項３】
前記データグループには、書き込まれたデータグループが正しいか否かの誤り検出をするためのチェックデータが含まれている請求項１又は２に記載のフラッシュメモリへのデータ書き込み方法。
【請求項４】
前記データグループには、前記データグループの書き込み更新回数を示す更新回数データが含まれている請求項１乃至３のいずれか一項に記載のフラッシュメモリへのデータ書き込み方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、書き換え可能な不揮発性メモリの一種であるフラッシュメモリへのデータ書き込み方法に関する。
【背景技術】
【０００２】
近年、装置や機器の動作を統括管理するコントローラには、動作の際に必要となる各種データを記憶する必要性が増大していることから、種々のメモリが搭載されている。その一つとして各種データを電気的に書き込み及び消去が可能な不揮発性メモリであるフラッシュメモリがある。
【０００３】
フラッシュメモリの記憶領域で、一度データの書き込みが完了した領域にはそのままでは再度の書き込み（上書き）ができず、新たに書き込みを行う領域のデータを先に消去する必要がある。ただし、データの消去は１バイト単位では行うことができない。フラッシュメモリは、全体の記憶領域が例えば３２バイトや６４バイト単位の複数のブロック（例えば１２８ブロック）で構成されており、データの消去はブロック単位でのみ可能である。データの書き込み及び消去回数には個別製品による上限がある。
【０００４】
特許文献１には、フラッシュメモリに書き込まれたデータを検索する時間を短縮できる発明が開示されている。この発明では、複数のデータを識別するデータＩＤにブロック領域のアドレス情報が対応付けられたテーブルを持ち、さらに１ブロックの領域を各々のデータＩＤごとに区分している。その結果、各データを書き込める領域が小さくなり検索時間を短縮できる。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１０−１４０３４６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
特許文献１の発明では、当該ブロックのいずれかのデータ領域に書き込み可能な領域がなくなると、各々の既存の最新のデータを一旦ＲＡＭに転記し、当該ブロックを初期化する。その後ＲＡＭから他のブロックに既存の最新のデータを再転記する。しかし、データを転記する際にはデータの一部が破損・欠落してしまうおそれがあり、転記を２回行うとその可能性は高まる。データが正常に転記されなかったときには、最新のデータが喪失してしまうというおそれがあった。同様に、当該ブロックの初期化後且つ他のブロックへの転記完了前に通電が切断されると、ＲＡＭ内のデータが消失するので、最新のデータが喪失してしまうというおそれがあった。
【０００７】
上記問題に鑑み、本発明は、最新のデータが喪失されるおそれがないフラッシュメモリへのデータ書き込み方法を提供することを課題とする。
【課題を解決するための手段】
【０００８】
上記課題を解決するために、本発明に係るフラッシュメモリへのデータ書き込み方法の特徴は、複数のブロックに分けられているフラッシュメモリの記憶領域からＭ個（Ｍは２以上の自然数）の前記ブロックで一単位を構成するステップと、それぞれのデータサイズが前記ブロックの書き込み可能容量以下であるＮ種類（Ｎは自然数でＮ＜Ｍ）のデータグループを前記一単位を構成する前記ブロックの空き領域に複数回書き込むステップとを有し、新たな前記データグループを書き込む時に、既に書き込まれた前記データグループを保持したまま、新たな前記データグループの書き込み可能な空き領域がある前記ブロックのうちそれまでのデータの消去回数が最も少ない前記ブロックを抽出し、当該ブロックに最新の前記データグループを書き足す点にある。
【０００９】
このような特徴によれば、Ｎ種類のデータグループをそれぞれＭ個のブロックの空き領域に複数回書き込む時に、上書きしたりせずに既に書き込まれたデータグループを保持したまま最新のデータグループを書き足すので、データグループの転記が行われず、データが破損・欠落してしまうおそれがない。
【００１０】
本発明に係るフラッシュメモリへのデータ書き込み方法においては、前記一単位を構成する前記ブロックの空き領域にＮ種類の前記データグループを複数回書き込むことによりＮ種類の前記データグループのいずれの最新の前記データグループも存在せず且ついずれの新たな前記データグループも書き込むことができない前記ブロックが現れたときに、当該ブロック内のデータを全て消去するステップをさらに有すると好適である。
【００１１】
本方法によれば、Ｎ種類のデータグループの最新のデータグループが存在せず且ついずれの新たなデータグループも書き込むことができないブロックが現れた段階で、当該ブロック内のデータを全て消去する。このようなブロックはＮ種類のデータグループの最新のデータグループが存在しないので、データを消去しても最新のデータグループが失われることはない。またいずれの新たなデータグループも書き込むことができないのであれば、そのまま放置せずに、ブロック内のデータを消去することにより新たなデータグループを書き込めるようにする。データを消去するときは、既存の最新のデータグループの転記を行わないので、既存の最新のデータグループの一部が破損・欠落してしまうおそれがなく、最新のデータグループのデータを誤りなく維持することができる。また、最新のデータグループを新たに書き込んでいる最中に通電が切断されて最新のデータグループを正常に書き込むことができなくても、既存の最新のデータグループはデータを消去していないブロックに存在している。よって、最新のデータグループのデータを誤りなく維持することができる。
【００１２】
本発明に係るフラッシュメモリへのデータ書き込み方法においては、前記データグループには、書き込まれたデータグループが正しいか否かの誤り検出をするためのチェックデータが含まれていると好適である。
【００１３】
本方法によれば、データグループ書き込み後に正しくデータが書き込まれたか否かの誤り検出を確実に行うことができる。
【００１４】
本発明に係るフラッシュメモリへのデータ書き込み方法においては、前記データグループに、前記データグループの更新回数を示す更新回数データが含まれていると好適である。
【００１５】
本方法によれば、同種のデータグループが複数回書き込まれているときに、いずれのデータグループが最新であるかを容易に判別することができる。
【図面の簡単な説明】
【００１６】
【図１】本発明の実施形態に係るフラッシュメモリを含むＥＣＵのソフトウェア構造を示す概略のブロック図
【図２】フラッシュメモリの構成を示す概念図
【図３】データグループがブロックに書き込まれるフロー
【図４ａ】データグループがブロックに書き込まれた状態を示す概念図
【図４ｂ】データグループがブロックに書き込まれた状態を示す概念図
【図４ｃ】データグループがブロックに書き込まれた状態を示す概念図
【図４ｄ】データグループがブロックに書き込まれた状態を示す概念図
【図４ｅ】データグループがブロックに書き込まれた状態を示す概念図
【図４ｆ】データグループがブロックから消去された状態を示す概念図
【図４ｇ】データグループがブロックに書き込まれた状態を示す概念図
【図４ｈ】データグループがブロックに書き込まれた状態を示す概念図
【図４ｉ】データグループがブロックに書き込まれた状態を示す概念図
【図４ｊ】データグループがブロックから消去された状態を示す概念図
【図４ｋ】データグループがブロックに書き込まれた状態を示す概念図
【図４ｌ】データグループがブロックに書き込まれた状態を示す概念図
【図４ｍ】データグループがブロックから消去された状態を示す概念図
【図４ｎ】データグループがブロックに書き込まれた状態を示す概念図
【図５】データグループのブロックへの書き込みが正常に完了したかをチェックするフロー
【発明を実施するための形態】
【００１７】
以下、本発明の実施の形態について、図面に基づいて詳細に説明する。図１は、本発明の実施形態に係るフラッシュメモリ１を含むＥＣＵ（Electronic Control Unit）２のソフトウェア構造を示す概略のブロック図である。フラッシュメモリ１は、車両用のＥＣＵ２に搭載され、第１の車両用センサＺ１ないし第Ｎの車両用センサＺｎ（Ｎ、ｎは自然数）から取得した検出データや設定値が書き込まれ、読み取られ、または消去される。フラッシュメモリ１への検出データや設定値の書き込み、読み取り、消去等の処理は、第１の車両用センサＺ１ないし第Ｎの車両用センサＺｎを動作させる第１のアプリケーションソフトウェアＹ１ないし第ＮのアプリケーションソフトウェアＹｎから指令を受けた第１のドライバＸ１ないし第Ｎ個のドライバＸｎにより実行される。
【００１８】
本実施形態では、第Ｋの車両センサＺｋと第ＫのアプリケーションソフトウェアＹｋと第ＫのドライバＸｋが対応して一連の処理を実行する。ＫはＮ以下の任意の自然数であり、ｋはｎ以下の任意の自然数である。以後、Ｋおよびｋは他のパラメータでも用いられるがその意味は同じである。第１の車両用センサＺ１ないし第Ｎの車両用センサＺｎの検出データや設定値は適宜更新されるので、直近に更新された最新のデータや最新設定値を誤りなく保持することがフラッシュメモリ１において重要である。図１においては、Ｎ種類のデータグループを得るために、Ｎ種類のセンサやアプリケーションソフトウェア、ドライバを用いているが、これに限られない。１つのセンサやアプリケーションソフトウェアが複数のデータグループを作成するようにしてもよい。
【００１９】
図２は、フラッシュメモリ１の構成を示す概念図である。図２の上段は、フラッシュメモリ１はその内部の記憶領域がＰ個のブロックＢ１、ブロックＢ２、・・・、Ｂｐに分けられていることを示している。Ｐおよびｐは２以上の自然数である。これらのブロックそれぞれがデータ消去の単位である。また、Ｐ個のブロックの中でＭ個のブロックで一単位を構成する。すなわち、ブロックＢ１、ブロックＢ２、・・・、ブロックＢｍで一単位を構成し、ブロックＢｍ＋１、ブロックＢｍ＋２、・・・、ブロックＢ２ｍで一単位を構成する。ＭはＮより大きくＰ以下の自然数である。また、ｍはｎより大きくｐ以下の自然数である。ブロックＢ１、ブロックＢ２、・・・、ブロックＢｐはそれぞれ３２バイトの書き込み可能容量を持っている。
【００２０】
ブロックＢ１、ブロックＢ２、・・・、ブロックＢｍの空き領域には第１のデータグループＤ１、第２のデータグループＤ２、・・・、第ＮのデータグループＤｎが複数回書き込まれる。第１のデータグループＤ１、第２のデータグループＤ２、・・・、第ＮのデータグループＤｎはブロックに新たな書き込みがされるときでも上書きされることなく、既存の第１のデータグループＤ１、第２のデータグループＤ２、・・・、第ＮのデータグループＤｎを保持したまま新たな第１のデータグループＤ１、第２のデータグループＤ２、・・・、第ＮのデータグループＤｎが書き足される。すなわち、複数の第１のデータグループＤ１、複数の第２のデータグループＤ２、・・・、複数の第ＮのデータグループＤｎがブロックＢ１、ブロックＢ２、・・・、ブロックＢｍ内に存在できる。図２の下段は、一単位を構成するブロックＢ１、ブロックＢ２、・・・、ブロックＢｍに第１のデータグループＤ１、第２のデータグループＤ２、・・・、第ＮのデータグループＤｎが複数回書き込まれている状態を表している。第ＫのデータグループＤｋはアプリケーションソフトウェアＹｋにて作成され、そのデータサイズは常に一定である。
【００２１】
第ＫのデータグループＤｋには、そのデータ構成の中にＩＤおよび書き込み回数（更新回数）を示すデータが含まれている。ＩＤおよび書き込み回数のデータにより、ブロックＢ１、ブロックＢ２、・・・、ブロックＢｍに書き込まれたデータグループの中から、最新の第ＫのデータグループＤｋを特定できる。データグループのデータ構成については後述する。
【００２２】
図３に、第ＫのデータグループＤｋがブロックＢ１、ブロックＢ２、・・・、ブロックＢｍのいずれかに書き込まれるフローを示す。アプリケーションソフトウェアＹｋからドライバＸｋが第ＫのデータグループＤｋの書き込み命令を受けると、ドライバＸｋはブロックＢ１、ブロックＢ２、・・・、ブロックＢｍを検索し、ブロックＢ１、ブロックＢ２、・・・、ブロックＢｍのいずれかにデータグループが書き込まれているか否かを確認する（Ｓ１）。ブロックＢ１、ブロックＢ２、・・・、ブロックＢｍのいずれのブロックにもデータグループが書き込まれていないときは（Ｓ１のＮｏ）、ブロックＢ１の先頭のセルから第ＫのデータグループＤｋを書き込む（Ｓ２）。
【００２３】
ブロックＢ１、ブロックＢ２、・・・、ブロックＢｍのいずれかにデータグループが書き込まれているときは（Ｓ１のＹｅｓ）、ドライバＸｋはブロックＢ１、ブロックＢ２、・・・、ブロックＢｍの中から、第ＫのデータグループＤｋを書き込むことができる連続した空きセルを有するブロックを全て抽出する（Ｓ３）。データグループは一塊のデータとしてセルに書き込まれるため、第ＫのデータグループＤｋのデータサイズに相当する連続した空きセルがあるときに、第ＫのデータグループＤｋを書き込むことができると判断する。なお、同一ブロックに書き込まれた複数のデータグループの間には空きセルはなく、各データグループは連続して書き込まれる。
【００２４】
次にドライバＸｋは、抽出されたブロックの中から、ブロックデータの消去回数が最も少ないブロックを全て抽出する（Ｓ４）。各ブロックのそれぞれのブロックデータの消去回数は、不図示の他のメモリに記憶されている。各ブロックのブロックデータが消去されると、ドライバＸｋはデータが消去されたブロックの情報を読み取り、ブロック番号と回数を他のメモリに記録する。アプリケーションソフトウェアＹｋはデータグループの書き込み時に他のメモリから消去回数の情報を読み出して各ブロックの消去回数を把握する。
【００２５】
次にドライバＸｋは、抽出されたブロック数が２以上か否かを判断し（Ｓ５）、抽出されたブロック数が１の場合は（Ｓ５のＮｏ）、当該ブロックに第ＫのデータグループＤｋを書き込む（Ｓ７）。抽出されたブロック数が２以上の場合は（Ｓ５のＹｅｓ）、該当するブロックＢの添え字（１〜ｍの中で該当するもの）の中で最も小さい添え字のブロックに第ＫのデータグループＤｋを書き込む（Ｓ６）。ブロックにデータグループを書き込む際は、当該ブロックに何のデータグループも書き込まれていないときには先頭のセルから書き込み、当該ブロックに既にデータグループが書き込まれているときには書き込まれたデータグループの最後尾のセルの次のセルから書き込む。なお、Ｓ２、Ｓ６、Ｓ７のステップにおいては、新たに書き込んだ第ＫのデータグループＤｋの誤り検出を行うことを含んでいる。誤り検出の手順については後述する。
【００２６】
各ブロックのデータの消去回数は個別製品による上限があるが、データの消去回数の少ないブロックに優先的に新たなデータグループを書き込むことにより、データの消去回数の少ないブロックのデータが優先的に消去される可能性が高くなるので、各ブロックＢ１、ブロックＢ２、・・・、ブロックＢｍの残存消去回数を平準化できる。それにより、各ブロックとも消去回数上限まで図３のフローに沿って第１のデータグループＤ１、第２のデータグループＤ２、・・・、第ＮのデータグループＤｎを新たに書き込むことが可能になり、フラッシュメモリ１の製品としての寿命を長くすることができる。
【００２７】
第ＫのデータグループＤｋの新たな書き込み（Ｓ６、Ｓ７）が正常に完了した後は、当該第ＫのデータグループＤｋを含む最新の第１のデータグループＤ１、最新の第２のデータグループＤ２、・・・、最新の第ＮのデータグループＤｎが書き込まれているブロックを除いたそれ以外のブロックに、新たに第１のデータグループＤ１、第２のデータグループＤ２、・・・、第ＮのデータグループＤｎのいずれかを書き込めるだけの連続した空きセルが存在するか否かを確認する（Ｓ８）。対象となる全てのブロックにおいていずれかのデータグループを書き込み可能な連続した空きセルが存在すれば（Ｓ８のＹｅｓ）、このフローを終了する。もし新たなデータグループを全く書き込むことができないブロックがあれば（Ｓ８のＮｏ）、当該ブロックのデータを全て消去して（Ｓ９）、このフローを終了する。
【００２８】
このように、本実施形態においては、既にブロックに書き込まれている最新のデータグループの転記を行うことなく、第ＫのデータグループＤｋを新たに書き足すことができる。従って、最新のデータグループの一部が破損、欠落してしまうおそれがない。また、ブロックにおけるデータ消去中や第ＫのデータグループＤｋを新たに書き込んでいる最中に通電が切断されても、既存の最新の第ＫのデータグループＤｋはいずれかのブロックに残存しているので、既存の最新の第ＫのデータグループＤｋを誤りなく維持することができる。
【００２９】
次に、データグループのブロックへの書き込みについてより具体的に説明する。以下では、４つのブロック（Ｍ、ｍ＝４）、すなわちブロックＢ１、ブロックＢ２、ブロックＢ３、ブロックＢ４を一単位として、３種類のデータグループ（Ｎ、ｎ＝３）、すなわち第１のデータグループＤ１、第２のデータグループＤ２、第３のデータグループＤ３を書き込む場合について説明する。複数回書き込まれた第ＫのデータグループＤｋのそれぞれを区別して扱うために、最初に書き込まれた第ＫのデータグループをＤｋ１、次に書き込まれた第ＫのデータグループをＤｋ２、３回目に書き込まれた第ＫのデータグループをＤｋ３のように記載する。
【００３０】
図４ａないし図４ｎにはそれぞれ４つのブロックＢ１、ブロックＢ２、ブロックＢ３、ブロックＢ４が示されている。各ブロックは１バイトのセル３２個で構成されており、合計３２バイトである。ブロック名称の右にあるカッコ内の数字、例えば「ブロックＢ１（０）」の「０」はブロックデータの消去回数を表している。
【００３１】
図４ａは、ブロックＢ１の先頭のセルから第１のデータグループＤ１１が書き込まれた状態を示す概念図である。これは図３のＳ２の状態である。左からブロックＢ１、ブロックＢ２、ブロックＢ３、ブロックＢ４の順に並んでいる。図４ａのブロックＢ１の第１のデータグループＤ１１が示すように、ブロックにデータグループが書き込まれたセルは、ハッチングや塗りつぶしにより表示する。一方、ブロックＢ１におけるデータグループＤ１１が書き込まれたセル以外のセル、ブロックＢ２、ブロックＢ３、ブロックＢ４の全てのセルは塗りつぶしをされていない。これらのセルはデータグループが書き込まれていないことを示している。
【００３２】
第１のデータグループＤ１（Ｄ１１）は、先頭から順に１バイトの第１のＩＤ１１、３バイトの第１のデータ１２、２バイトの第１のチェックデータ１３、２バイトの第１の更新回数データ１４から構成される８バイトのデータである。第１のＩＤ１１はこのデータグループが第１のデータグループＤ１であることを示している。第１のデータ１２は、第１の車両用センサＺ１から取得した検出データや設定値のデータである。第１のチェックデータ１３は、第１のデータ１２を入力としてＣＲＣ（Cyclic Redundancy Check）演算により算出された誤り検出用のデータである。第１の更新回数データ１４は、第１のデータグループＤ１１がブロックに書き込まれた回数を示すデータである。なお、図４ａないし図４ｎにおいて、太線で囲まれているデータグループが、書き込まれた最新のデータグループを示している。
【００３３】
図４ｂは、図４ａの状態から、ブロックＢ０に第２のデータグループＤ２１が書き込まれた状態を示す概念図である。これは図３のＳ６の状態である。第２のデータグループＤ２（Ｄ２１）は、先頭から順に１バイトの第２のＩＤ２１、７バイトの第２のデータ２２、２バイトの第２のチェックデータ２３、２バイトの第２の更新回数データ２４から構成される１２バイトのデータである。図４ａの状態では、最新の第１のデータグループＤ１１が書き込まれているブロックＢ１には、２４バイトの空きセルがあり、ブロックＢ２、ブロックＢ３、ブロックＢ４はそれぞれ３２バイトの空きがあるため、ブロックＢ１ないしブロックＢ４のいずれのブロックにも第２のデータグループＤ２１は書き込み可能である（図３のＳ３）。また、ブロックＢ１ないしブロックＢ４のいずれのデータ消去回数も０回である（図３のＳ４からＳ５のＹｅｓ）。従って、ブロックの添字に一番小さいブロックＢ１の第１のデータグループＤ１１の最後尾のセルの次のセルから第２のデータグループＤ２１は書き込まれる。
【００３４】
図４ｃは、図４ｂの状態から、ブロックＢ１に第１のデータグループＤ１２が書き込まれた状態を示す概念図である。これは図３のＳ６の状態である。図４ｂの状態では、ブロックＢ１には１２バイトの空きセルがあり、ブロックＢ２、ブロックＢ３、ブロックＢ４はそれぞれ３２バイトの空きがあるため、ブロックＢ１ないしブロックＢ４のいずれのブロックにも第１のデータグループＤ１２は書き込み可能である（図３のＳ３）。また、ブロックＢ１ないしブロックＢ４のいずれのデータ消去回数も０回である（図３のＳ４からＳ５のＹｅｓ）。従って、ブロックの添字に一番小さいブロックＢ１の第２のデータグループＤ２１の最後尾のセルの次のセルからに第１のデータグループＤ１２は書き込まれる。なお、第１のデータグループＤ１２が最新のデータグループになったので、図４ｃ以降では最新のデータグループではない第１のデータグループＤ１１は濃色で塗りつぶされて表示される。他のデータグループにおいても同様に、最新のデータグループでなくなった時点で濃色に塗りつぶされて表示される。
【００３５】
図４ｄは、図４ｃの状態から、ブロックＢ２に第３のデータグループＤ３１が書き込まれた状態を示す概念図である。これは図３のＳ６の状態である。第３のデータグループＤ３（Ｄ３１）は、先頭から順に１バイトの第３のＩＤ３１、５バイトの第３のデータ３２、２バイトの第３のチェックデータ３３、２バイトの第３の更新回数データ３４から構成される１０バイトのデータである。図４ｃの状態では、ブロックＢ１の空きセルは４バイトなので、ブロックＢ１に第３のデータグループＤ３１を書き込むことはできない。ブロックＢ２、ブロックＢ３、ブロックＢ４はそれぞれ３２バイトの空きがあるため、ブロックＢ２ないしブロックＢ４のいずれのブロックにも第３のデータグループＤ３１は書き込み可能である（図３のＳ３）。また、ブロックＢ２ないしブロックＢ４のいずれのデータ消去回数も０回である（図３のＳ４からＳ５のＹｅｓ）。従って、ブロックの添字に一番小さいブロックＢ２の先頭のセルから第３のデータグループＤ３１は書き込まれる。
【００３６】
図４ｅは、図４ｄの状態から、第３のデータグループＤ３２、第３のデータグループＤ３３、第３のデータグループＤ３４が連続して書き込まれた状態を示す概念図である。これは図３のＳ６の状態である。図４ｄの状態では、ブロックＢ１の空きセルは４バイトなので、ブロックＢ１に第３のデータグループＤ３２を書き込むことはできない。一方、ブロックＢ２は２２バイト、ブロックＢ３、ブロックＢ４はそれぞれ３２バイトの空きがあるため、ブロックＢ２ないしブロックＢ４のいずれのブロックにも第３のデータグループＤ３２は書き込み可能である（図３のＳ３）。また、ブロックＢ２ないしブロックＢ４のいずれのデータ消去回数も０回である（図３のＳ４からＳ５のＹｅｓ）。従って、ブロックの添字に一番小さいブロックＢ２の第３のデータグループＤ３１の最後尾のセルの次のセルから第３のデータグループＤ３２は書き込まれる。第３のデータグループＤ３３についても同様に、ブロックＢ２の第３のデータグループＤ３２の最後尾のセルの次のセルから書き込まれる。
【００３７】
第３のデータグループＤ３３が書き込まれた時点では、ブロックＢ１の空きセルは４バイトでブロックＢ２の空きセルは２バイトであるため、ブロックＢ１およびブロックＢ２には第３のデータグループＤ３４を書き込むことはできない。しかし、ブロックＢ３、ブロックＢ４はそれぞれ３２バイトの空きがあるため、ブロックＢ３およびブロックＢ４には第３のデータグループＤ３４は書き込み可能である（図３のＳ３）。また、ブロックＢ３とブロックＢ４のいずれのデータ消去回数も０回である（図３のＳ４からＳ５のＹｅｓ）。従って、ブロックの添字に一番小さいブロックＢ３の先頭のセルから第３のデータグループＤ３４は書き込まれる。
【００３８】
図４ｆは、図４ｅの状態から、ブロックＢ２の書き込みデータが消去された状態を示す概念図である。これは図３のＳ９の状態である。図４ｅの状態では、最新の第１のデータグループＤ１２と最新の第２のデータグループＤ２１はブロックＢ１に書き込まれており、最新の第３のデータグループＤ３４はブロックＢ３に書き込まれている。ブロックＢ２には第３のデータグループＤ３１ないし第３のデータグループＤ３３が書き込まれているが、いずれも最新のデータグループではない。さらに、ブロックＢ２の空きセルは２バイトであり、８バイトの第１のデータグループＤ１、１２バイトの第２のデータグループＤ２、１０バイトの第３のデータグループＤ３のいずれをも新たに書き込むことができない（図３のＳ８のＮｏ）。そこで、ブロックＢ２に書き込まれているデータを全て消去して（図３のＳ９）、新たなデータグループを書き込める状態にする。
【００３９】
図４ｇは、図４ｆの状態から、ブロックＢ３に第１のデータグループＤ１３、第１のデータグループＤ１４が書き込まれた状態を示す概念図である。これは図３のＳ６の状態である。図４ｆの状態では、ブロックＢ１の空きセルは４バイトなので、ブロックＢ１に第１のデータグループＤ１３を書き込むことはできない。ブロックＢ２には３２バイト、ブロックＢ３には２２バイト、ブロックＢ４には３２バイトの空きがあるため、ブロックＢ２ないしブロックＢ４のいずれのブロックにも第１のデータグループＤ１３は書き込み可能である（図３のＳ３）。また、ブロックＢ２のデータ消去回数は１回、ブロックＢ３とブロックＢ４のデータ消去回数は０回である。そこで、ブロックＢ３とブロックＢ４を書き込み対象のブロックとして抽出する（図３のＳ４からＳ５のＹｅｓ）。ブロックＢ３とブロックＢ４とでは、ブロックＢ３の方がブロックの添字が小さいので、ブロックＢ３の第３のデータグループＤ３４の次のセルから第１のデータグループＤ１３は書き込まれる。同様に、第１のデータグループＤ１４についてもブロックＢ３の第１のデータグループＤ１３の次のセルから書き込まれる。
【００４０】
図４ｈは、図４ｇの状態から、ブロックＢ４に第３のデータグループＤ３５が書き込まれた状態を示す概念図である。これは図３のＳ７の状態である。図４ｇの状態では、ブロックＢ１の空きセルは４バイトで、ブロックＢ３の空きセルは６バイトなので、ブロックＢ１とブロックＢ３には第３のデータグループＤ３５を書き込むことはできない。ブロックＢ２とブロックＢ４には３２バイトの空きがあるため、ブロックＢ２とブロックＢ４のいずれのブロックにも第３のデータグループＤ３５は書き込み可能である（図３のＳ３）。また、ブロックＢ２のデータ消去回数は１回、ブロックＢ４のデータ消去回数は０回である。そこで、ブロックＢ４だけが書き込み対象のブロックとなるので（図３のＳ４からＳ５のＮｏ）、ブロックＢ４の先頭のセルから第３のデータグループＤ３５は書き込まれる。
【００４１】
図４ｉは、図４ｈの状態から、ブロックＢ４に第１のデータグループＤ１５が書き込まれた状態を示す概念図である。これは図３のＳ７の状態である。図４ｈの状態では、ブロックＢ１の空きセルは４バイトで、ブロックＢ３の空きセルは６バイトなので、ブロックＢ１とブロックＢ３には第１のデータグループＤ１５を書き込むことはできない。ブロックＢ２は３２バイト、ブロックＢ４は２２バイトの空きがあるため、ブロックＢ２とブロックＢ４のいずれのブロックにも第１のデータグループＤ１５は書き込み可能である（図３のＳ３）。また、ブロックＢ２のデータ消去回数は１回、ブロックＢ４のデータ消去回数は０回である。そこで、ブロックＢ４だけが書き込み対象のブロックとなるので（図３のＳ４からＳ５のＮｏ）、ブロックＢ４の第３のデータグループＤ３５の最後尾のセルの次のセルから第１のデータグループＤ１５は書き込まれる。
【００４２】
図４ｊは、図４ｉの状態から、ブロックＢ３の書き込みデータが消去された状態を示す概念図である。これは図３のＳ９の状態である。図４ｉの状態では、最新の第１のデータグループＤ１５と最新の第３のデータグループＤ３５はブロックＢ４に書き込まれており、最新の第２のデータグループＤ２１はブロックＢ１に書き込まれている。ブロックＢ３には第３のデータグループＤ３４、第１のデータグループＤ１３、第１のデータグループＤ１４が書き込まれているが、いずれも最新のデータグループではない。さらに、ブロックＢ３の空きセルは６バイトであり、８バイトの第１のデータグループＤ１、１２バイトの第２のデータグループＤ２、１０バイトの第３のデータグループＤ３のいずれをも新たに書き込むことができない（図３のＳ８のＮｏ）。そこで、ブロックＢ３に書き込まれているデータを全て消去して（図３のＳ９）、新たなデータグループを書き込める状態にする。
【００４３】
図４ｋは、図４ｊの状態から、ブロックＢ４に第１のデータグループＤ１６が書き込まれた状態を示す概念図である。これは図３のＳ７の状態である。図４ｊの状態では、ブロックＢ１の空きセルは４バイトなので、ブロックＢ１には第１のデータグループＤ１６を書き込むことはできない。ブロックＢ２とブロックＢ３は３２バイト、ブロックＢ４は１４バイトの空きがあるため、ブロックＢ２ないしブロックＢ４のいずれのブロックにも第１のデータグループＤ１６は書き込み可能である（図３のＳ３）。また、ブロックＢ２とブロックＢ３のデータ消去回数は１回、ブロックＢ４のデータ消去回数は０回である。そこで、ブロックＢ４だけが書き込み対象のブロックとなるので（図３のＳ４からＳ５のＮｏ）、ブロックＢ４の第１のデータグループＤ１５の最後尾のセルの次のセルから第１のデータグループＤ１６は書き込まれる。
【００４４】
図４ｌは、図４ｋの状態から、ブロックＢ２に第２のデータグループＤ２２が書き込まれた状態を示す概念図である。これは図３のＳ６の状態である。図４ｋの状態では、ブロックＢ１の空きセルは４バイトでブロックＢ４の空きセルは６バイトなので、ブロックＢ１とブロックＢ４には第２のデータグループＤ２２を書き込むことはできない。ブロックＢ２とブロックＢ３は３２バイトの空きがあるため、ブロックＢ２とブロックＢ４のいずれのブロックにも第２のデータグループＤ２２は書き込み可能である（図３のＳ３）。また、ブロックＢ２とブロックＢ３のデータ消去回数はどちらも１回である。従って、ブロックの添字に一番小さいブロックＢ２の先頭のセルから第２のデータグループＤ２２は書き込まれる。
【００４５】
図４ｍは、図４ｌの状態から、ブロックＢ１の書き込みデータが消去された状態を示す概念図である。これは図３のＳ９の状態である。図４ｌの状態では、最新の第１のデータグループＤ１６と最新の第３のデータグループＤ３５はブロックＢ４に書き込まれており、最新の第２のデータグループＤ２２はブロックＢ２に書き込まれている。ブロックＢ１には第１のデータグループＤ１１、第２のデータグループＤ２１、第１のデータグループＤ１２が書き込まれているが、いずれも最新のデータグループではない。さらに、ブロックＢ１の空きセルは４バイトであり、８バイトの第１のデータグループＤ１、１２バイトの第２のデータグループＤ２、１０バイトの第３のデータグループＤ３のいずれをも新たに書き込むことができない（図３のＳ８のＮｏ）。そこで、ブロックＢ１に書き込まれているデータを全て消去して（図３のＳ９）、新たなデータグループを書き込める状態にする。
【００４６】
図４ｎは、図４ｍの状態から、ブロックＢ１に第２のデータグループＤ２３が書き込まれた状態を示す概念図である。これは図３のＳ６の状態である。図４ｍの状態では、ブロックＢ４の空きセルは６バイトなので、ブロックＢ４には第２のデータグループＤ２２を書き込むことはできない。一方、ブロックＢ１とブロックＢ３の空きセルは３２バイトあり、ブロックＢ２の空きセルは２０バイトあるため、ブロックＢ１ないじブロックＢ３のいずれのブロックにも第２のデータグループＤ２３は書き込み可能である（図３のＳ３）。また、ブロックＢ１ないしブロックＢ３のデータ消去回数はいずれも１回である。従って、ブロックの添字に一番小さいブロックＢ１の先頭のセルから第２のデータグループＤ２３は書き込まれる。
【００４７】
以後も、図３のフローに従って、第１のデータグループＤ１、第２のデータグループＤ２、第３のデータグループＤ３がブロックに書き込まれたり、ブロックのデータが消去されたりする。このようにブロックにある既存の最新の第１のデータグループＤ１、第２のデータグループＤ２、第３のデータグループＤ３の転記を行うことなく、新たな第１のデータグループＤ１、第２のデータグループＤ２、第３のデータグループＤ３とを書き足すことができる。従って、既存の最新の第１のデータグループＤ１、第２のデータグループＤ２、第３のデータグループＤ３の一部が破損、欠落してしまうおそれがない。また、ブロックにおけるデータ消去中や新たな第１のデータグループＤ１、第２のデータグループＤ２、第３のデータグループＤ３を書き込んでいる最中に通電が切断されても、既存の最新の第１のデータグループＤ１、第２のデータグループＤ２、第３のデータグループＤ３は残存しており、それらを誤りなく維持することができる。さらには、ブロックＢ１ないしブロックＢ４のそれぞれの残り消去回数を平準化できる。それにより、消去回数上限まで図３のフローに沿って第１のデータグループＤ１、第２のデータグループＤ２、第３のデータグループＤ３を新たに書き込むことが可能になり、フラッシュメモリ１の製品としての寿命を長くすることができる。
【００４８】
本実施形態においては、４つのブロックを一単位として、３種類のデータグループを書き込む場合について説明した。しかし、本発明は本実施形態に限られず、Ｍ＞Ｎを充足するＭ個のブロックにＮ種類のデータグループを書き込む場合に適用することができる。
【００４９】
次に、第１のデータグループＤ１１がブロックＢ１に正常に書き込まれたか否かの誤り検出について説明する。第ＫのアプリケーションソフトウェアＹｋは、第ＫのデータグループＤｋのブロックへの書き込み後に、その書き込みが正常に完了したか否かの誤り検出をしている。図５に、第１のデータグループＤ１１がブロックＢ１に正常に書き込まれたか否かの誤り検出をするフローを示す。
【００５０】
まず、第１のデータ１２を第１の車両用センサＺ１から取得し（Ｓ５１）。第１のアプリケーションソフトウェアＹ１は、取得した第１のデータ１２からＣＲＣ演算により書き込み前の第１のチェックデータ１３ａを算出する（Ｓ５２）。そして、第１のＩＤ１１、第１のデータ１２、書き込み前の第１のチェックデータ１３ａ、第１の更新回数データ１４を統合し、第１のデータグループＤ１１を構成する（Ｓ５３）。第１のデータグループＤ１１は、図３の手順に従い、第１のドライバＸ１によりフラッシュメモリ１のブロックＢ１に書き込まれる（Ｓ５４）。
【００５１】
第１のデータグループＤ１１のブロックＢ１への書き込みが完了すると、書き込みが正常に完了したか否かの誤り検出を行う。具体的には、ブロックＢ１に書き込まれた第１のデータ１２が第１のドライバＸ１により読み取られ（Ｓ５５）、第１のアプリケーションソフトウェアＹ１に送られる。第１のアプリケーションソフトウェアＹ１は当該読み取られた第１のデータ１２を入力として新たにＣＲＣ演算し、書き込み後の第１のチェックデータ１３ｂを算出する（Ｓ５６）。そして、書き込み前の第１のチェックデータ１３ａの値と書き込み後の第１のチェックデータ１３ｂの値とを比較する（Ｓ５７）。書き込み前の第１のチェックデータ１３ａと書き込み後の第１のチェックデータ１３ｂの値が同じであれば（Ｓ５７のＹｅｓ）、第１のデータ１２はブロックＢ１に正しく書き込まれたと判断し、フローは終了する。書き込み前の第１のチェックデータ１３ａと書き込み後の第１のチェックデータ１３ｂの値が異なっていれば、ブロックＢ１に正しく書き込まれなかったと判断される（Ｓ５７のＮｏ）。正しく書き込まれなかったと判断されたときには、再度図３の手順に従い、第１のデータグループＤ１１をブロックの他の空き領域に書き込む（Ｓ５８）。このようにして、ブロックＢ１に書き込まれた第１のデータグループＤ１１は正確性が担保される。
【００５２】
本発明は、書き換え可能な不揮発性メモリの一種であるフラッシュメモリに用いることが可能である。
【符号の説明】
【００５３】
１  フラッシュメモリ
１３、１３ａ、１３ｂ  第１のチェックデータ
１４  第１の更新回数データ
２３  第２のチェックデータ
２４  第２の更新回数データ
３３  第３のチェックデータ
３４  第３の更新回数データ
Ｂ１、Ｂ２、Ｂ３、Ｂ４、Ｂｋ、Ｂｍ、Ｂｐ  ブロック
Ｄ１、Ｄ１１、Ｄ１２、Ｄ１３、Ｄ１４、Ｄ１５、Ｄ１６  第１のデータグループ
Ｄ２、Ｄ２１、Ｄ２２、Ｄ２３：第２のデータグループ
Ｄ３、Ｄ３１、Ｄ３２、Ｄ３３、Ｄ３４、Ｄ３５  第３のデータグループ
【図１】
0005838784.tif 000002
【図２】
0005838784.tif 000003
【図３】
0005838784.tif 000004
【図４ａ】
0005838784.tif 000005
【図４ｂ】
0005838784.tif 000006
【図４ｃ】
0005838784.tif 000007
【図４ｄ】
0005838784.tif 000008
【図４ｅ】
0005838784.tif 000009
【図４ｆ】
0005838784.tif 000010
【図４ｇ】
0005838784.tif 000011
【図４ｈ】
0005838784.tif 000012
【図４ｉ】
0005838784.tif 000013
【図４ｊ】
0005838784.tif 000014
【図４ｋ】
0005838784.tif 000015
【図４ｌ】
0005838784.tif 000016
【図４ｍ】
0005838784.tif 000017
【図４ｎ】
0005838784.tif 000018
【図５】
0005838784.tif 000019