記憶領域を複数のブロックに分け、それぞれのデータサイズの合計が前記ブロックの書き込み可能容量以下で且つIDを有していない2種類のデータグループを前記ブロックの空き領域に複数回書き込む時に、既に書き込まれた前記データグループを保持したまま最新の前記データグループを書き足すようにし、一方の前記データグループを前記ブロックの先頭セルから順に書き込み、他方の前記データグループを前記ブロックの後尾セルから順に書き込むフラッシュメモリへのデータ書き込み方法。3つの前記ブロックが一単位を構成し、前記一単位を構成する3つの前記ブロックの空き領域に2種類の前記データグループを複数回書き込むことにより2種類の前記データグループのいずれの最新の前記データグループも存在しない前記ブロックが現れたとき、当該ブロック内のデータを全て消去する請求項1に記載のフラッシュメモリへのデータ書き込み方法。前記データグループのデータ列の先頭には、書き込まれたデータグループが正しいか否かの誤り検出をするためのチェックデータが配置されている請求項1又は2に記載のフラッシュメモリへのデータ書き込み方法。前記データグループには、前記データグループの更新回数を示す更新回数データが含まれている請求項1乃至3のいずれか一項に記載のフラッシュメモリへのデータ書き込み方法。1つの前記ブロックに書き込まれた2種類の前記データグループの間には、前記データグループ間の境界を示す境界セルが存在する請求項1乃至4のいずれか一項に記載のフラッシュメモリへのデータ書き込み方法。特許文献1の発明では、各々のデータはそのデータ列内に識別のためのデータIDを有している。データIDの分だけデータサイズが大きくなるため1つのブロック内に書き込むことができるデータの個数が少なくなってしまう。その結果1つのブロック内の記憶領域を有効に活用できないという問題があった。特許文献1の発明では、当該ブロックのいずれかのデータ領域に書き込み可能な領域がなくなると、各々の既存の最新データを一旦RAMに転記し、当該ブロックを初期化する。その後RAMから他のブロックに既存の最新データを再転記する。しかし、データを転記する際にはデータの一部が破損欠落してしまうおそれがあり、転記を2回行うとその可能性は高まる。データが正常に転記されなかったときには、最新データが喪失してしまうという問題があった。同様に、当該ブロックの初期化後且つ他のブロックへの転記完了前に通電が切断されると、RAM内のデータが消失するので、最新データが喪失してしまうという問題があった。上記問題に鑑み、本発明は、ブロック内の記憶領域を有効に活用でき、最新データが喪失されるおそれがないフラッシュメモリへのデータ書き込み方法を提供することを課題とする。上記課題を解決するために、本発明に係るフラッシュメモリへのデータ書き込み方法の特徴は、記憶領域を複数のブロックに分け、それぞれのデータサイズの合計が前記ブロックの書き込み可能容量以下で且つIDを有していない2種類のデータグループを前記ブロックの空き領域に複数回書き込む時に、既に書き込まれた前記データグループを保持したまま最新の前記データグループを書き足すようにし、一方の前記データグループを前記ブロックの先頭セルから順に書き込み、他方の前記データグループを前記ブロックの後尾セルから順に書き込む点にある。このような特徴によれば、2種類のデータグループはそれぞれ先頭セルと後尾セルから順に書き込まれるので、IDがなくても各々のデータグループを識別することができる。また、各々のデータグループのデータサイズがIDのサイズ分だけ小さくなるので、一つのブロック内の記憶領域を有効に活用できる。さらに、先頭セル、又は後尾セルから順に検索することにより、短時間で所望のデータグループ例えば最新のデータグループを抽出することができる。本発明に係るフラッシュメモリへのデータ書き込み方法においては、3つの前記ブロックが一単位を構成し、前記一単位を構成する3つの前記ブロックの空き領域に2種類の前記データグループを複数回書き込むことにより2種類の前記データグループのいずれの最新の前記データグループも存在しない前記ブロックが現れたとき、当該ブロック内のデータを全て消去すると好適である。本方法によれば、2種類のデータグループの最新のデータグループが存在しないブロックが現れた段階で、当該ブロック内のデータを全て消去する。従って、データグループを新たに書き込める領域がなくなるおそれがなく、既存の最新データグループの転記も行う必要がない。その結果、既存の最新のデータグループの一部が破損欠落してしまうおそれがなく、最新のデータグループのデータを誤りなく維持することができる。また、最新データグループを新たに書き込んでいる最中に通電が切断されて最新データグループを正常に書き込むことができなくても、既存の最新のデータグループはデータを消去していないブロックに存在している。よって、最新のデータグループのデータを誤りなく維持することができる。本発明に係るフラッシュメモリへのデータ書き込み方法においては、前記データグループのデータ列の先頭には、書き込まれたデータグループが正しいか否かの誤り検出をするためのチェックデータが配置されていると好適である。本方法によれば、書き込みの際は最初にチェックデータが書き込まれるので、データグループ書き込み後の誤り検出を確実に行うことができる。本発明に係るフラッシュメモリへのデータ書き込み方法においては、前記データグループに、前記データグループの更新回数を示す更新回数データが含まれていると好適である。本方法によれば、同種のデータグループが複数回書き込まれているときに、いずれのデータグループが最新であるかを容易に判別することができる。本発明に係るフラッシュメモリへのデータ書き込み方法においては、1つの前記ブロックに書き込まれた2種類の前記データグループの間には、前記データグループ間の境界を示す境界セルが存在すると好適である。本方法によれば、1つのブロックに2種類のデータグループが複数回書き込まれているときでも、それぞれのデータグループの境界を容易に把握することができる。以下、本発明の実施の形態について、図面に基づいて詳細に説明する。図1は、本発明の実施形態に係るフラッシュメモリ1を含むECUElectronicControlUnit2のソフトウェア構造を示す概略のブロック図である。フラッシュメモリ1は、車両用のECU2に搭載され、車両用センサ5から取得した検出データや設定値が書き込まれ、読み取られ、または消去される。フラッシュメモリ1への検出データや設定値の書き込み、読み取り、消去等の処理は、車両用センサ5を動作させるアプリケーションソフトウェア4から指令を受けたドライバ3により実行される。車両用センサ5の検出データや設定値は適宜更新されるので、直近に更新された最新データや最新設定値を誤りなく保持することがフラッシュメモリ1において重要である。図2は、フラッシュメモリ1の構成を示す概念図である。フラッシュメモリ1はその内部の記憶領域が複数のブロックB0、ブロックB1、ブロックB2、、ブロックBnに分けられている。nは2以上の整数である。これらのブロックがデータ消去の単位である。また、3つのブロックが一単位を構成する。例えばブロックB0、ブロックB1、ブロックB2で一単位、ブロックB3、ブロックB4、ブロックB5で一単位を構成する。本実施形態では、ブロックB0、ブロックB1、ブロックB2を用いて説明する。ブロックB0、ブロックB1、ブロックB2はいずれも32バイトの書き込み可能容量を持っている。ただし、本発明に係るブロックの書き込み可能容量は32バイトに限定されることはない。ブロックB0、ブロックB1、ブロックB2の空き領域には第1のデータグループD1と第2のデータグループD2が複数回書き込まれる。第1のデータグループD1と第2のデータグループD2は新たな書き込みがなされても上書きされることなく、ブロックB0、ブロックB1、ブロックB2に空き領域がある限り既存の第1のデータグループD1と第2のデータグループD2を保持したまま新たな第1のデータグループD1と第2のデータグループD2が書き足される。すなわち、複数の第1のデータグループD1又は複数の第2のデータグループD2がブロックB0、ブロックB1、ブロックB2内に存在できる。第1のデータグループD1、第2のデータグループD2とも、そのデータ構成の中に書き込み回数更新回数を示すデータが含まれている。書き込まれている第1のデータグループD1と第2のデータグループD2のそれぞれの書き込み回数のデータにより、いずれが最新の第1のデータグループD1と最新の第2のデータグループD2であるかが判別できる。第1のデータグループD1と第2のデータグループD2のデータ構成については後述する。以下、複数回書き込まれた第1のデータグループD1及び第2のデータグループD2をそれぞれ区別して扱うときは、第1のデータグループD11、第1のデータグループD12、第1のデータグループD13、第1のデータグループD14、、第2のデータグループD21、第2のデータグループD22、第2のデータグループD23、のように記載する。符号末尾の1、2、3、4、はブロックB0、ブロックB1、ブロックB2に書き込まれた更新された回数を表す。第1のデータグループD1と第2のデータグループD2はアプリケーションソフトウェア4にて作成され、それらのデータサイズは更新されても一定である。図2では、ブロックB0に第1のデータグループD11と第2のデータグループD21、第2のデータグループD22が書き込まれていることを示している。また図2は、ブロックB1に第1のデータグループD12、第1のデータグループD13が書き込まれ、ブロックB2に第1のデータグループD14と第2のデータグループD23が書き込まれていることを示している。第1のデータグループD1はブロックB0、ブロックB1、ブロックB2の先頭のセルから順に書き込まれ、第2のデータグループD2は後尾のセルから順に書き込まれる。これは、図示しないテーブルによって予め決められている。また、1つのブロック内の第1のデータグループD1の最後尾と第2のデータグループD2の最後尾との間には予め決められたサイズ例えば2バイト以上の境界セル空きセル30が存在するように書き込まれる。この境界セル30は第1のデータグループD1と第2のデータグループD2との境界を示すものである。これにより、データ構成にIDが含まれていなくても書き込まれたデータグループが第1のデータグループD1と第2のデータグループD2のどちらであるかを識別することができ、ブロックB0、ブロックB1、ブロックB2内の記憶領域を有効に活用することができる。図3に、第1のデータグループD1がブロックB0、ブロックB1、ブロックB2のいずれかに書き込まれるフローを示す。アプリケーションソフトウェア4からドライバ3が書き込み命令を受けると、ドライバ3はブロックB0、ブロックB1、ブロックB2の順でブロック内を検索し、ブロックB0、ブロックB1、ブロックB2のいずれかに第1のデータグループD1又は第2のデータグループD2が書き込まれているか否かを確認するS1。ブロックB0、ブロックB1、ブロックB2のいずれのブロックにも第1のデータグループD1及び第2のデータグループD2が書き込まれていないときはS1のNo、ブロックB0の先頭のセルから第1のデータグループD1を書き込むS2。ブロックB0、ブロックB1、ブロックB2のいずれかに第1のデータグループD1又は第2のデータグループD2が書き込まれているときはS1のYes、ドライバ3は、最新の第1のデータグループD1が書き込まれているブロックBxを特定するS3。そして、当該ブロックBxの空き領域内で第1のデータグループD1を書き込める領域が存在するか否か、すなわち、第1のデータグループD1を書き込めるだけの連続した空きセルが存在するか否かを以下の手順で確認するS4。なお、ブロックBxはブロックB0、ブロックB1、ブロックB2のいずれか1つのブロックである。当該ブロックBxの先頭のセルが空きセルのときは、ドライバ3は、第1のデータグループD1のデータサイズに相当する空きセルが先頭のセルから連続して存在するかどうかを確認する。ブロックBxの先頭のセルに既に第1のデータグループD1が書き込まれているときには、ドライバ3は、既に書き込まれている第1のデータグループD1の最後尾の次のセルから連続して第1のデータグループD1のデータサイズに相当する空きセルが存在するかどうかを確認する。ブロックBxに第1のデータグループD1を書き込めるだけの連続した空きセルが存在したときはS4のYes、ドライバ3は、第1のデータグループD1をブロックBxに書き込むS5。なお、S2とS5のステップにおいては、新たに書き込んだ第1のデータグループD1の誤り検出を行うことを含んでいる。誤り検出の手順については後述する。ただし、第1のデータグループD1のデータサイズに相当する連続した空きセルが存在していたとしても、その最後尾の空きセルと既に書き込まれている第2のデータグループD2の最後尾のセルとの間に境界セル30が存在できないときは、ドライバ3はブロックBxの空き領域内には第1のデータグループD1を書き込めるだけの連続した空きセルは存在しなかったと判断するS4のNo。上記の他、第1のデータグループD1のデータサイズに相当する連続した空きセルがないなど、ブロックBxに第1のデータグループD1を書き込める連続した空きセルが存在しなかったときはS4のNo、次にドライバ3は最新の第2のデータグループD2が書き込まれているブロックByを特定するS6。そして、ブロックByの空き領域内で第1のデータグループD1を書き込めるだけの連続した空きセルがあるか否かを確認するS7。確認の方法は上述したブロックBxでの手順と同じである。ブロックBy内に第1のデータグループD1を書き込めるだけの連続した空きセルが存在したときはS7のYes、第1のデータグループD1をブロックByに書き込むS5。なお、ブロックByは、ブロックB0、ブロックB1、ブロックB2のいずれか1つのブロックであり、ブロックBxと同じブロックであるときもあれば、異なるブロックであるときもある。ブロックByにも第1のデータグループD1を書き込めるだけの連続した空きセルが存在しなかったときはS7のNo、ドライバ3はブロックBxとブロックByとが同じブロックであるか否かを判断するS8。ブロックBxとブロックByが同じブロックのときはS8のYes、未だ空き領域を確認していないブロックが2つ存在する。その2つのブロックのこれまでのデータ消去回数が同じかどうかを判断するS9。2つのブロックのデータ消去回数が同じであればS9のYes、ブロックの検索順序に沿って次に検索するブロックを特定するS10。そのブロックをブロックBz1とする。すなわち、ブロックBx=ブロックByがブロックB0のときは、ブロックBz1はブロックB1である。ブロックBx=ブロックByがブロックB1のときは、ブロックBz1はブロックB2である。ブロックBx=ブロックByがブロックB2のときは、ブロックBz1はブロックB0である。そしてブロックBz1空き領域内で第1のデータグループD1を書き込めるだけの連続した空きセルがあるか否かを確認するS12。確認の方法は上述したブロックBxでの手順と同じである。ブロックBz1内に第1のデータグループD1を書き込めるだけの連続した空きセルが存在したときはS12のYes、第1のデータグループD1をブロックBz1に書き込むS5。ブロックBz1に第1のデータグループD1を書き込めるだけの連続した空きセルが存在しなかったときはS12のNo、残る1つのブロックの空き領域内で第1のデータグループD1を書き込めるだけの連続した空きセルがあるか否かを確認するS13。当該ブロックをブロックBz2とする。確認の方法は上述したブロックBxでの手順と同じである。ブロックBz2内に第1のデータグループD1を書き込めるだけの連続した空きセルが存在したときはS12のYes、第1のデータグループD1をブロックBz2に書き込むS5。ブロックBz2にも第1のデータグループD1を書き込めるだけの連続した空きセルが存在しなかったときはS13のNo、ブロックB0、ブロックB1、ブロックB2のいずれにも第1のデータグループD1を書き込めるだけの連続した空きセルがないことになる。そのときは、ブロックBz1のデータを全て消去してS14、ブロックBz1の先頭のセルから第1のデータグループD1を書き込むS5。このように、本実施形態においては、ブロックBxにある既存の最新の第1のデータグループD1の転記を行うことなく、第1のデータグループD1を新たに書き足すことができる。従って、既存の最新の第1のデータグループD1の一部が破損、欠落してしまうおそれがない。また、ブロックBz1におけるデータ消去中や第1のデータグループD1を新たに書き込んでいる最中に通電が切断されても、ブロックBxにある既存の最新の第1のデータグループD1は残存しているので、既存の最新の第1のデータグループD1を誤りなく維持することができる。空き領域の確認をしていない2つのブロックのデータ消去回数が異なるときはS9のNo、データの消去回数の少ないブロックをブロックBz1とするS11。その後の流れは上述した手順と同じである。データの消去回数は個別製品による上限があるが、データの消去回数の少ないブロックをブロックBz1としてブロックBz2より優先的にデータを消去することにより、ブロックB0、B1、B2の残存消去回数を平準化できる。それにより、消去回数上限まで図3、図4のフローに沿って第1のデータグループD1と第2のデータグループD2を新たに書き込むことが可能になり、製品としての寿命を長くすることができる。ブロックBxとブロックByが異なるブロックのときはS8のNo、空き領域の確認をしていないブロックは1つだけである。当該空き領域の確認をしていないブロックをブロックBzとする。ブロックBzの領域内で第1のデータグループD1を書き込めるだけの連続した空きセルがあるか否かを確認するS15。確認の手順は上述したブロックBxでの手順と同じである。ブロックBz内に第1のデータグループD1を書き込めるだけの連続した空きセルが存在したときはS15のYes、第1のデータグループD1をブロックBzに書き込むS5。ブロックBzにも第1のデータグループD1を書き込めるだけの連続した空きセルが存在しなかったときはS15のNo、ブロックB0、ブロックB1、ブロックB2のいずれにも第1のデータグループD1を書き込めるだけの連続した空きセルが存在しないことになる。そのときは、ブロックBzのデータを全て消去してS16、ブロックBzの先頭のセルから第1のデータグループD1を書き込むS5。このようにブロックBxにある既存の最新の第1のデータグループD1やByにある既存の最新の第2のデータグループD2の転記を行うことなく、第1のデータグループD1を新たに書き足すことができる。従って、既存の最新の第1のデータグループD1の一部が破損、欠落してしまうおそれがない。また、ブロックBzにおけるデータ消去中や第1のデータグループD1を新たに書き込んでいる最中に通電が切断されても、ブロックBxにある既存の最新の第1のデータグループD1は存在しているので、既存の最新の第1のデータグループD1を誤りなく維持することができる。第1のデータグループD1の新たな書き込みS5が正常に完了した後は、当該第1のデータグループD1を書き込んだブロック及び最新の第2のデータグループD2が存在するブロックByを除くそれ以外のブロックBに、新たに第1のデータグループD1又は第2のデータグループD2を書き込めるだけの連続した空きセルが存在するかどうかを確認するS17。第2のデータグループD2を書き込めるだけの連続した空きセルが存在するかどうかの確認方法は後述する。当該ブロックBに連続した空きセルが存在すればS17のYes、このフローを終了する。当該ブロックBに連続した空きセルが存在しなければS17のNo、当該ブロックBのデータを全て消去してS18、このフローを終了する。図4に、第2のデータグループD2がブロックBに書き込まれるフローを示す。このフローは、基本的に図3と同様である。ただし、第2のデータグループD2はブロックB0、ブロックB1、ブロックB2の後尾から書き込まれていく点で、第1のデータグループD1とは異なっている。アプリケーションソフトウェア4からドライバ3が書き込み命令を受けると、ドライバ3はブロックB0、ブロックB1、ブロックB2の順でブロック内を検索し、ブロックB0、ブロックB1、ブロックB2のいずれかに第1のデータグループD1又は第2のデータグループD2が書き込まれているか否かを確認するS21。ブロックB0、ブロックB1、ブロックB2のいずれのブロックにも第1のデータグループD1及び第2のデータグループD2が書き込まれていないときはS21のNo、ブロックB0の先頭のセルから第2のデータグループD2を書き込むS22。ブロックB0、ブロックB1、ブロックB2のいずれかに第1のデータグループD1又は第2のデータグループD2が書き込まれているときはS21のYes、ドライバ3は、最新の第1のデータグループD1が書き込まれているブロックBxを特定するS23。そして、当該ブロックBxの空き領域内で第2のデータグループD2を書き込める領域が存在するか否か、すなわち、第2のデータグループD2を書き込めるだけの連続した空きセルが存在するか否かを以下の手順で確認するS24。なお、ブロックBxはブロックB0、ブロックB1、ブロックB2のいずれか1つのブロックである。当該ブロックBxの後尾のセルが空きセルのときは、ドライバ3は、第2のデータグループD2のデータサイズに相当する空きセルが後尾のセルから連続して存在するかどうかを確認する。ブロックBxの後尾のセルに既に第2のデータグループD2が書き込まれているときには、ドライバ3は、既に書き込まれている第2のデータグループD2の最後尾の次のセルから連続して第2のデータグループD2のデータサイズに相当する空きセルが存在するかどうかを確認する。ブロックBxに第2のデータグループD2を書き込めるだけの連続した空きセルが存在したときはS24のYes、ドライバ3は、第2のデータグループD2をブロックBxに書き込むS25。なお、S22とS25のステップにおいては、新たに書き込んだ第2のデータグループD2の誤り検出を行うことを含んでいる。誤り検出の手順については後述する。ただし、第2のデータグループD2のデータサイズに相当する連続した空きセルが存在していたとしても、その最後尾の空きセルと既に書き込まれている第1のデータグループD1の最後尾のセルとの間に境界セル30が存在できないときは、ドライバ3はブロックBxの空き領域内には第2のデータグループD2を書き込めるだけの連続した空きセルは存在しなかったと判断するS24のNo。上記の他、第2のデータグループD2のデータサイズに相当する連続した空きセルがないなど、ブロックBxに第2のデータグループD2を書き込める連続した空きセルが存在しなかったときはS24のNo、次にドライバ3は最新の第2のデータグループD2が書き込まれているブロックByを特定するS26。そして、ブロックByの空き領域内で第2のデータグループD2を書き込めるだけの連続した空きセルがあるか否かを確認するS27。確認の方法は上述したブロックBxでの手順と同じである。ブロックBy内に第2のデータグループD2を書き込めるだけの連続した空きセルが存在したときはS27のYes、第2のデータグループD2をブロックByに書き込むS25。なお、ブロックByは、ブロックB0、ブロックB1、ブロックB2のいずれか1つのブロックであり、ブロックBxと同じブロックであるときもあれば、異なるブロックであるときもある。ブロックByにも第2のデータグループD2を書き込めるだけの連続した空きセルが存在しなかったときはS27のNo、ドライバ3はブロックBxとブロックByとが同じブロックであるか否かを判断するS28。ブロックBxとブロックByが同じブロックのときはS28のYes、未だ空き領域を確認していないブロックが2つ存在する。その2つのブロックのこれまでのデータ消去回数が同じかどうかを判断するS29。2つのブロックのデータ消去回数が同じであればS29のYes、ブロックの検索順序に沿って次に検索するブロックを特定するS30。そのブロックをブロックBz1とする。すなわち、ブロックBx=ブロックByがブロックB0のときは、ブロックBz1はブロックB1である。ブロックBx=ブロックByがブロックB1のときは、ブロックBz1はブロックB2である。ブロックBx=ブロックByがブロックB2のときは、ブロックBz1はブロックB0である。そしてブロックBz1空き領域内で第2のデータグループD2を書き込めるだけの連続した空きセルがあるか否かを確認するS32。確認の方法は上述したブロックBxでの手順と同じである。ブロックBz1内に第2のデータグループD2を書き込めるだけの連続した空きセルが存在したときはS32のYes、第2のデータグループD2をブロックBz1に書き込むS25。ブロックBz1に第2のデータグループD2を書き込めるだけの連続した空きセルが存在しなかったときはS32のNo、残る1つのブロックの空き領域内で第2のデータグループD2を書き込めるだけの連続した空きセルがあるか否かを確認するS33。当該ブロックをブロックBz2とする。確認の方法は上述したブロックBxでの手順と同じである。ブロックBz2内に第2のデータグループD2を書き込めるだけの連続した空きセルが存在したときはS32のYes、第2のデータグループD2をブロックBz2に書き込むS5。ブロックBz2にも第2のデータグループD2を書き込めるだけの連続した空きセルが存在しなかったときはS33のNo、ブロックB0、ブロックB1、ブロックB2のいずれにも第2のデータグループD2を書き込めるだけの連続した空きセルがないことになる。そのときは、ブロックBz1のデータを全て消去してS34、ブロックBz1の後尾のセルから第2のデータグループD2を書き込むS25。このように、本実施形態においては、ブロックBxにある既存の最新の第2のデータグループD2の転記を行うことなく、第2のデータグループD2を新たに書き足すことができる。従って、既存の最新の第2のデータグループD2の一部が破損、欠落してしまうおそれがない。また、ブロックBz1におけるデータ消去中や第2のデータグループD2を新たに書き込んでいる最中に通電が切断されても、ブロックBxにある既存の最新の第2のデータグループD2は残存しているので、既存の最新の第2のデータグループD2を誤りなく維持することができる。空き領域の確認をしていない2つのブロックのデータ消去回数が異なるときはS29のNo、データの消去回数の少ないブロックをブロックBz1とするS11。その後の流れは上述した手順と同じである。データの消去回数は個別製品による上限があるが、データの消去回数の少ないブロックをブロックBz1としてブロックBz2より優先的にデータを消去することにより、ブロックB0、B1、B2の残存消去回数を平準化できる。それにより、消去回数上限まで図3、図4のフローに沿って第1のデータグループD1と第2のデータグループD2を新たに書き込むことが可能になり、製品としての寿命を長くすることができる。ブロックBxとブロックByが異なるブロックのときはS28のNo、空き領域の確認をしていないブロックは1つだけである。当該空き領域の確認をしていないブロックをブロックBzとする。ブロックBzの領域内で第2のデータグループD2を書き込めるだけの連続した空きセルがあるか否かを確認するS35。確認の手順は上述したブロックBxでの手順と同じである。ブロックBz内に第2のデータグループD2を書き込めるだけの連続した空きセルが存在したときはS35のYes、第2のデータグループD2をブロックBzに書き込むS25。ブロックBzにも第2のデータグループD2を書き込めるだけの連続した空きセルが存在しなかったときはS35のNo、ブロックB0、ブロックB1、ブロックB2のいずれにも第2のデータグループD2を書き込めるだけの連続した空きセルが存在しないことになる。そのときは、ブロックBzのデータを全て消去してS36、ブロックBzの後尾のセルから第2のデータグループD2を書き込むS25。このようにブロックBxにある既存の最新の第1のデータグループD1やByにある既存の最新の第2のデータグループD2の転記を行うことなく、第2のデータグループD2を新たに書き足すことができる。従って、既存の最新の第2のデータグループD2の一部が破損、欠落してしまうおそれがない。また、ブロックBzにおけるデータ消去中や第2のデータグループD2を新たに書き込んでいる最中に通電が切断されても、ブロックBxにある既存の最新の第2のデータグループD2は存在しているので、既存の最新の第2のデータグループD2を誤りなく維持することができる。第2のデータグループD2の新たな書き込みS25が正常に完了した後は、当該第2のデータグループD2を書き込んだブロック及び最新の第1のデータグループD1が存在するブロックBxを除くそれ以外のブロックBに、新たに第1のデータグループD1又は第2のデータグループD2を書き込めるだけの連続した空きセルが存在するかどうかを確認するS37。当該ブロックBに連続した空きセルが存在すればS37のYes、このフローを終了する。当該ブロックBに連続した空きセルが存在しなければS37のNo、当該ブロックBのデータを全て消去してS38、このフローを終了する。次に、第1のデータグループD1のブロックへの書き込みについてより具体的に説明する。図5aは、ブロックB0の先頭のセルから第1のデータグループD11が書き込まれた状態を示す概念図である。これは図3のS2の状態である。左からブロックB0、ブロックB1、ブロックB2の順に並んでいる。ブロックB1とブロックB2の各セルは無色であるが、これは第1のデータグループD1及び第2のデータグループD2が書き込まれていないことを示している。ブロックB1、ブロックB2、ブロックB3はそれぞれ32バイトの大きさで、1マスが1バイトである。第1のデータグループD1は、先頭から順に2バイトのチェックデータ11、4バイトの第1のデータ13、4バイトの第2のデータ14、3バイトの第3のデータ15、1バイトの更新回数データ12から構成される14バイトのデータである。第1のデータグループD1はアプリケーションソフトウェア4aで、第2のデータグループD2のデータ列はアプリケーションソフトウェア4bでそれぞれ作られる。第1のデータ13、第2のデータ14、第3のデータ15は、車両用センサ5aから取得した検出データや設定値のデータである。チェックデータ11は、第1のデータ13、第2のデータ14、第3のデータ15を入力としてCRCCyclicRedundancyCheck演算により算出された誤り検出用のデータである。更新回数データ12は、第1のデータグループD11がブロックに書き込まれた回数を示すデータである。なお、太線で囲まれているデータグループが、書き込まれた最新の第1のデータグループD1である。図5bは、図5aの状態から、ブロックB0に第2のデータグループD21が書き込まれた状態を示す概念図である。これは図4のS24からS25へ進んだ状態である。最新の第1のデータグループD11が書き込まれているブロックB0には、18バイトの空きセルがある。第2のデータグループD21は、先頭から順に2バイトのチェックデータ21、3バイトの第1のデータ23、2バイトの第2のデータ24、1バイトの更新回数データ22のように構成される8バイトのデータである。また、第2のデータグループD21を書き込んだ後でも第1のデータグループD11との間に2バイトの境界セル30を確保することができる。従って、第2のデータグループD21はブロックB0に書き込み可能である。第1のデータ23、第2のデータ24は、別の車両用センサ5bから取得した検出データや設定値のデータである。チェックデータ21と更新回数データ22は第1のデータグループD1と同じなので詳細な説明は割愛する。第2のデータグループD2はブロックB0の後尾から書き込まれる。すなわち、ブロックB0の最後尾のセルからチェックデータ21、第1のデータ23、第2のデータ24、更新回数データ22の順に書き込まれる。なお、太線で囲まれているデータグループが、書き込まれた最新の第2のデータグループD2である。図5cは、図5bの状態から、ブロックB0に第2のデータグループD22が書き込まれた状態を示す概念図である。これは図4のS24からS25へ進んだ状態である。図5bの状態で最新の第1のデータグループD11が書き込まれているブロックB0には10バイトの空きセルがある。第2のデータグループD22のデータサイズは8バイトである。また、第2のデータグループD22を書き込んだ後でも第1のデータグループD11との間に2バイトの境界セル30を確保することができる。従って、第2のデータグループD22はブロックB0に書き込み可能であり、第2のデータグループD21の最後尾更新回数データ22から連続してブロックB0に書き込まれる。なお、図5bで第2のデータグループD21が書き込まれている領域は図5cでは濃色のセルになっているが、これは第2のデータグループD21が存在していることを示している以降の図でも同様。図5dは、図5cの状態から、ブロックB1に第1のデータグループD12が書き込まれた状態を示す概念図である。これは図3のS10からS12を経てS5へ進んだ状態である。図5cの状態で最新の第1のデータグループD11と最新の第2のデータグループD22が書き込まれているブロックB0には2バイトの空きセルがある。そのため、14バイトの第1のデータグループD12はブロックB0に書き込むことはできない。ブロックB1とブロックB2は共にデータ消去されておらず、また第1のデータグループD1も第2のデータグループD2も書き込まれていない。そこで第1のデータグループD12はブロックB1の先頭のセルから書き込まれる。図5eは、図5dの状態から、ブロックB1に第1のデータグループD13が書き込まれた状態を示す概念図である。これは図3のS4からS5へ進んだ状態である。図5dの状態で、最新の第1のデータグループD12はブロックB1に書き込まれている。ブロックB1には18バイトの空きセルがあり、第1のデータグループD13のデータサイズは14バイトである。よって、第1のデータグループD13はブロックB1の第1のデータグループD12の最後尾更新回数データ12から連続してブロックB1に書き込まれる。図5fは、図5eの状態から、ブロックB2に第2のデータグループD23が書き込まれた状態を示す概念図である。これは図4のS35からS25へ進んだ状態である。図5eの状態で最新の第1のデータグループD13が書き込まれているブロックB1には4バイトの空きがある。また、最新の第2のデータグループD22が書き込まれているブロックB0には2バイトの空きセルがある。第2のデータグループD23のデータサイズは8バイトなので、ブロックB0、ブロックB1のいずれにも書き込むことはできない。しかし、ブロックB2には既存の第1のデータグループD1も第2のデータグループD2も存在しない。よって、第2のデータグループD23はブロックB2の後尾のセルから書き込まれる。図5gは、図5fの状態から、ブロックB0に書き込まれていたデータグループが消去された状態を示す概念図である。これは図4のS25からS37を経てS38へ進んだ状態である。図5fの状態で、最新の第1のデータグループD13はブロックB1に書き込まれており、最新の第2のデータグループD23はブロックB2に書き込まれている。また、ブロックB0の空きセルは2バイトなので、第1のデータグループD1も第2のデータグループD2もブロックB0に書き込むことはできない。よって、ブロックB0に書き込まれていた第1のデータグループD11、第2のデータグループD21、第2のデータグループD22を消去して、新たなデータグループの書き込みを可能にする。図5hは、図5gの状態から、ブロックB2に第1のデータグループD14が書き込まれた状態を示す概念図である。これは図3のS7からS5へ進んだ状態である。図5gの状態で最新の第1のデータグループD13はブロックB1に書き込まれている。また、最新の第2のデータグループD23はブロックB2に書き込まれている。ブロックB1には4バイトしか空きセルがないが、ブロックB2は24バイトの空きセルがある。よって、第1のデータグループD14はブロックB2の先頭のセルから書き込まれる。図5iは、図5hの状態から、ブロックB1に書き込まれていたデータグループが消去された状態を示す概念図である。これは図3のS5からS17、S18へ進んだ状態である。図5hの状態で、最新の第1のデータグループD14、最新の第2のデータグループD23はいずれもブロックB1に書き込まれている。また、ブロックB1の空きセルは4バイトであり、第1のデータグループD1も第2のデータグループD2も書き込むことはできない。よって、ブロックB1に書き込まれていた第1のデータグループD12、第1のデータグループD13を消去して、新たなデータグループの書き込みを可能にする。図5jは、図5iの状態から、ブロックB0に第1のデータグループD15が書き込まれた状態を示す概念図である。これは図3のS10からSs12を経てS5へ進んだ状態である。図5iの状態で最新の第1のデータグループD14、最新の第2のデータグループD23は共にブロックB2に書き込まれている。また、ブロックB2には10バイトしか空きセルがない。よって、ブロックB2には第1のデータグループD15を書き込むことはできない。また、ブロックB0、ブロックB1とも32バイトの空きセルがあるが、どちらも消去回数は1回である。そこで、ブロックB1よりもブロックB0に優先的に書き込みを行う。よって、第1のデータグループD15はブロックB0の先頭のセルから書き込まれる。以後も、図3、図4のフローに従って、第1のデータグループD1と第2のデータグループD2がブロックに書き込まれたり、ブロックのデータが消去されたりする。このようにブロックにある既存の最新の第1のデータグループD1と第2のデータグループD2の転記を行うことなく、新たな第1のデータグループD1と第2のデータグループD2とを書き足すことができる。従って、既存の最新の第1のデータグループD1や第2のデータグループD2の一部が破損、欠落してしまうおそれがない。また、ブロックにおけるデータ消去中や新たな第1のデータグループD1や第2のデータグループD2を書き込んでいる最中に通電が切断されても、既存の最新の第1のデータグループD1や第2のデータグループD2は残存しており、それらを誤りなく維持することができる。さらには、ブロックB0、B1、B2の残り消去回数を平準化できる。それにより、消去回数上限まで図3、図4のフローに沿って第1のデータグループD1と第2のデータグループD2を新たに書き込むことが可能になり、製品としての寿命を長くすることができる。アプリケーションソフトウェア4a、アプリケーションソフトウェア4bは、第1のデータグループD1と第2のデータグループD2のブロックへの書き込み後に、その書き込みが正常に完了したかどうかの誤り検出をしている。図6に、第1のデータグループD11がブロックB0に正常に書き込まれたかどうかの誤り検出をするフローを示す。まず、第1のデータ13、第2のデータ14、第3のデータ15を車両用センサ5aから取得しS61。アプリケーションソフトウェア4aは、取得した第1のデータ13、第2のデータ14、第3のデータ15からCRC演算により書き込み前のチェックデータ11aを算出するS62。そして、書き込み前のチェックデータ11aを先頭に、第1のデータ13、第2のデータ14、第3のデータ15、更新回数データ12を統合し、第1のデータグループD11を構成するS63。第1のデータグループD11は、図3の手順に従い、ドライバ3aによりフラッシュメモリ1に書き込まれるS64。第1のデータグループD11のブロックB0への書き込みが完了すると、書き込みが正常に完了したか否かの誤り検出を行う。具体的には、ブロックB0に書き込まれた第1のデータ13、第2のデータ14、第3のデータ15がドライバ3aにより読み取られS65、アプリケーションソフトウェア4aに送られる。アプリケーションソフトウェア4aは当該読み取られた第1のデータ13、第2のデータ14、第3のデータ15を入力として新たにCRC演算し、書き込み後のチェックデータ11bを算出するS66。そして、書き込み前のチェックデータ11aの値と書き込み後のチェックデータ11bの値とを比較するS67。書き込み前のチェックデータ11aと書き込み後のチェックデータ11bの値が同じであればS67のYes、第1のデータ13、第2のデータ14、第3のデータ15はブロックB0に正しく書き込まれたと判断し、フローは終了する。書き込み前のチェックデータ11aと書き込み後のチェックデータ11bの値が異なっていれば、ブロックB0に正しく書き込まれなかったと判断されるS67のNo。正しく書き込まれなかったと判断されたときには、再度図3の手順に従い、第1のデータグループD11をブロックBの他の空き領域に書き込むS68。このようにして、ブロックB0に書き込まれた第1のデータグループD11は正確性が担保される。本発明は、書き換え可能な不揮発性メモリの一種であるフラッシュメモリに用いることが可能である。