(57)【要約】【課題】  フラッシュメモリをＥＥＰＲＯＭのように書換えることができるデータ書込・読出制御装置を提供すること。【解決手段】  メモリ１内の１つのブロックにデータを書き込む際、ブロックの空き領域の容量と書き込むデータのデータ量とを比較し、書き込むデータのデータ量の方が大きい場合、ブロックに書き込まれている全データを消去した後、データをブロックの先頭又は最後から順次書き込み、書き込むデータのデータ量の方が小さい場合、ブロックのデータが書込まれている領域の次からデータを順次書き込み、ブロックからデータを読み出す際、最後にデータが書込まれた領域をブロックの先頭又は最後から順に検索し、この領域に書き込まれているデータを読み出す。【選択図】図１
2005092659.tif 000002
【特許請求の範囲】
【請求項１】
データ書込・読出制御装置であって、
複数のブロックに分割されているメモリと、
前記複数のブロックの内の１つのブロックにデータを書き込む際、前記ブロックの空き領域の容量と書き込むデータのデータ量とを比較し、書き込むデータのデータ量の方が大きい場合、前記ブロックに書き込まれている全データを消去した後、前記データを前記ブロックの先頭又は最後から順次書き込み、前記書き込むデータのデータ量の方が小さい場合、前記ブロックのデータが書込まれている領域の次から前記データを順次書き込んでいく書込手段と、
前記ブロックからデータを読み出す際、最後にデータが書込まれた領域を前記ブロックの先頭又は最後から順に検索し、この領域に書き込まれているデータを読み出す読出手段と
を有することを特徴とするデータ書込・読出制御装置。
【請求項２】
前記書込み手段は、前記ブロックにデータを書き込む際、データに加えて、データの読出しに関する情報である管理データもデータの前又は後ろに書き込むことを特徴とする請求項１に記載のデータ書込・読出制御装置。
【請求項３】
データ書込・読出制御装置であって、
複数のブロックに分割されているメモリと、
前記複数のブロックの内の１つのブロックに書き込まれているデータの読み出しに関する情報である管理データを記憶する管理データ記憶部と、
前記複数のブロックの内の１つのブロックにデータを書き込む際、前記ブロックの空き領域の容量と書き込むデータのデータ量とを比較し、書き込むデータのデータ量の方が大きい場合、前記ブロックに書き込まれている全データを消去した後、前記データを前記ブロックの先頭又は最後から順次書き込み、更に前記書き込んだデータの管理データを前記管理データ記憶部に書き込み、前記書き込むデータのデータ量の方が小さい場合、前記ブロックのデータが書込まれている領域の次から前記データを順次書き込み、更に前記書き込んだデータの管理データを前記管理データ記憶部に書き込む書込手段と、
前記ブロックからデータを読み出す際、前記管理データ記憶部に書込まれている管理データに基づいて、最後にデータが書込まれた領域を検索し、この領域に書き込まれているデータを読み出す読出手段と
を有することを特徴とするデータ書込・読出制御装置。
【請求項４】
前記データ書込・読出制御装置は、
前記書込手段によりデータがブロックに書き込まれると、前記読出手段がデータを読み出すブロックを、前記データが書き込まれたブロックに切り換える切換手段を
更に有することを特徴とする請求項１から３のいずれかに記載のデータ書込・読出制御装置。
【請求項５】
前記書込手段は、ブロックにデータが一杯になると、前記ブロックに書き込まれた最新データを別ブロックにコピーし、この別ブロックが書込及び読出を行う有効ブロックであることを示すフラグを設定すること
を特徴とする請求項１から４のいずれかに記載のデータ書込・読出制御装置。
【請求項６】
前記管理データは、前記ブロックに書き込まれた各データのデータ量、及び／又は前記各データの次に書き込まれたデータのアドレスを示すポインタであることを特徴とする請求項１から５のいずれかに記載のデータ書込・読出制御装置。
【請求項７】
前記管理データは、前記ブロックに、最後に書き込まれたデータのアドレスであることを特徴とする請求項１から５のいずれかに記載のデータ書込・読出制御装置。
【請求項８】
前記書込手段は、前記ブロックにデータを書き込んだ後、前記ブロックをベリファイする書込手段であることを特徴とする請求項１から７のいずれかに記載のデータ書込・読出制御装置。
【請求項９】
前記書込手段は、ベリファイが失敗すると、ベリファイが失敗したデータに、エラーデータであることを示すデータを上書きすることを特徴とする請求項８に記載のデータ書込・読出制御装置。
【請求項１０】
データ書込・読出制御装置であって、
データを一時的に記憶するデータ一時記憶部と、
前記データ一時記憶部にデータを書き込む中央演算処理装置と、
複数のブロックに分割されているメモリと、
前記データ一時記憶部に書き込まれているデータを前記複数のブロックの内の１つのブロックに書き込む際、前記ブロックの空き領域の容量と書き込むデータのデータ量とを比較し、書き込むデータのデータ量の方が大きい場合、前記ブロックに書き込まれている全データを消去した後、前記データを前記ブロックの先頭又は最後から順次書き込み、前記書き込むデータのデータ量の方が小さい場合、前記ブロックのデータが書込まれている領域の次から前記データを順次書き込んでいく書込手段と、前記ブロックからデータを読み出す際、最後にデータが書込まれた領域を前記ブロックの先頭又は最後から順に検索し、この領域に書き込まれているデータを読み出す読出手段とを有する制御部と
を有することを特徴とするデータ書込・読出制御装置。
【請求項１１】
前記書込手段は、前記データ一時記憶部にデータが書き込まれる度に、前記領域に書き込まれたデータを前記ブロックに書き込むこと
を特徴とする請求項１０に記載のデータ書込・読出制御装置。
【請求項１２】
前記書込手段は、予め設定された条件を満たした時に、前記データ一時記憶部に書き込まれたデータを前記ブロックに書込むこと
を特徴とする請求項１０又は請求項１１に記載のデータ書込・読出制御装置。
【請求項１３】
複数のブロックに分割されているメモリにおけるデータの書込・読出を制御するデータ書込・読出制御方法であって、
前記複数のブロックの内の１つのブロックにデータを書き込む際、前記ブロックの空き領域の容量と書き込むデータのデータ量とを比較し、書き込むデータのデータ量の方が大きい場合、前記ブロックに書き込まれている全データを消去した後、前記データを前記ブロックの先頭又は最後から順次書き込み、前記書き込むデータのデータ量の方が小さい場合、前記ブロックのデータが書込まれている領域の次から前記データを順次書き込んでいく書込ステップと、
前記ブロックからデータを読み出す際、最後にデータが書込まれた領域を前記ブロックの先頭又は最後から順に検索し、この領域に書き込まれているデータを読み出す読出ステップと
を有することを特徴とするデータ書込・読出制御方法。
【請求項１４】
前記書込みステップは、前記ブロックにデータを書き込む際、データに加えて、データの読出しに関する情報である管理データもデータの前又は後ろに書き込むことを特徴とする請求項１３に記載のデータ書込・読出制御方法。
【請求項１５】
複数のブロックに分割されているメモリ、及び前記複数のブロックの内の１つのブロックに書き込まれているデータの読み出しに関する情報である管理データを記憶する管理データ記憶部におけるデータの書込・読出を制御するデータ書込・読出制御方法であって、
前記複数のブロックの内の１つのブロックにデータを書き込む際、前記ブロックの空き領域の容量と書き込むデータのデータ量とを比較し、書き込むデータのデータ量の方が大きい場合、前記ブロックに書き込まれている全データを消去した後、前記データを前記ブロックの先頭又は最後から順次書き込み、更に前記書き込んだデータの管理データを前記管理データ記憶部に書き込み、前記書き込むデータのデータ量の方が小さい場合、前記ブロックのデータが書込まれている領域の次から前記データを順次書き込み、更に前記書き込んだデータの管理データを前記管理データ記憶部に書き込む書込ステップと、
前記ブロックからデータを読み出す際、前記管理データ記憶部に書込まれている管理データに基づいて、最後にデータが書込まれた領域を検索し、この領域に書き込まれているデータを読み出す読出ステップと
を有することを特徴とするデータ書込・読出制御方法。
【請求項１６】
前記データ書込・読出制御方法は、データを読み出す対象となるブロックを予め設定し、このブロック以外のブロックにデータが書き込まれた場合、データが書き込まれたブロックと、前記読み出し対象となっているブロックとをスワップさせることにより、読み出し対象のブロックが変更されないようにしたことを特徴とする請求項１３から１５のいずれかに記載のデータ書込・読出制御方法。
【請求項１７】
前記書込ステップは、ブロックにデータが一杯になると、前記ブロックに書き込まれた最新データを別ブロックにコピーし、この別ブロックが書込及び読出を行う有効ブロックであることを示すフラグを設定することを特徴とする請求項１３から１６のいずれかに記載のデータ書込・読出制御方法。
【請求項１８】
前記書込ステップにより書き込まれる前記管理データは、
前記ブロックに書き込まれた各データのデータ量、及び／又は前記各データの次に書き込まれたデータのアドレスを示すポインタであること
を特徴とする請求項１３から１７のいずれかに記載のデータ書込・読出制御方法。
【請求項１９】
前記書込ステップにより書き込まれる前記管理データは、前記ブロックに、最後に書き込まれたデータのアドレスであることを特徴とする請求項１３から１７のいずれかに記載のデータ書込・読出制御方法。
【請求項２０】
前記書込ステップは、前記ブロックにデータを書き込んだ後、前記ブロックをベリファイすることを特徴とする請求項１３から１９のいずれかに記載のデータ書込・読出制御方法。
【請求項２１】
前記書込ステップは、ベリファイが失敗すると、ベリファイが失敗したデータに、エラーデータであることを示すデータを上書きすることを特徴とする請求項２０に記載のデータ書込・読出制御方法。
【請求項２２】
データを一時的に記憶するデータ一時記憶部、及び複数のブロックに分割されているメモリにおけるデータ書込・読出制御方法であって、
前記データ一時記憶部にデータを書き込むステップと、
前記データ一時記憶部に書き込まれているデータを前記複数のブロックの内の１つのブロックに書き込む際、前記ブロックの空き領域の容量と書き込むデータのデータ量とを比較し、書き込むデータのデータ量の方が大きい場合、前記ブロックに書き込まれている全データを消去した後、前記データを前記ブロックの先頭又は最後から順次書き込み、前記書き込むデータのデータ量の方が小さい場合、前記ブロックのデータが書込まれている領域の次から前記データを順次書き込んでいく書込ステップと、
前記ブロックからデータを読み出す際、最後にデータが書込まれた領域を前記ブロックの先頭又は最後から順に検索し、この領域に書き込まれているデータを読み出す読出ステップと
を有することを特徴とするデータ書込・読出制御方法。
【請求項２３】
前記書込ステップは、前記データ一時記憶部にデータが書き込まれる度に、前記領域に書き込まれたデータを前記ブロックに書き込むステップであることを特徴とする請求項２２に記載のデータ書込・読出制御方法。
【請求項２４】
前記書込ステップは、予め設定された条件を満たした時に、前記データ一時記憶部に書き込まれたデータを前記ブロックに書込むステップであることを特徴とする請求項２２又は請求項２３に記載のデータ書込・読出制御方法。
【請求項２５】
複数のブロックに分割されているメモリを有するデータ書込・読出制御装置におけるプログラムであって、前記プログラムは前記データ書込・読出制御装置を、
前記複数のブロックの内の１つのブロックにデータを書き込む際、前記ブロックの空き領域の容量と書き込むデータのデータ量とを比較し、書き込むデータのデータ量の方が大きい場合、前記ブロックに書き込まれている全データを消去した後、前記データを前記ブロックの先頭又は最後から順次書き込み、前記書き込むデータのデータ量の方が小さい場合、前記ブロックのデータが書込まれている領域の次から前記データを順次書き込んでいく書込手段と、
前記ブロックからデータを読み出す際、最後にデータが書込まれた領域を前記ブロックの先頭又は最後から順に検索し、この領域に書き込まれているデータを読み出す読出手段と
して機能させることを特徴とするプログラム。
【請求項２６】
前記プログラムは、前記書込手段を、前記ブロックにデータを書き込む際、データに加えて、データの読出しに関する情報である管理データもデータの前又は後ろに書き込む書込手段として機能させることを特徴とする請求項２５に記載のプログラム。
【請求項２７】
複数のブロックに分割されているメモリと、前記複数のブロックの内の１つのブロックに書き込まれているデータの読み出しに関する情報である管理データを記憶する管理データ記憶部とを有するデータ書込・読出制御装置におけるプログラムであって、前記プログラムは前記データ書込・読出制御装置を、
前記複数のブロックの内の１つのブロックにデータを書き込む際、前記ブロックの空き領域の容量と書き込むデータのデータ量とを比較し、書き込むデータのデータ量の方が大きい場合、前記ブロックに書き込まれている全データを消去した後、前記データを前記ブロックの先頭又は最後から順次書き込み、更に前記書き込んだデータの管理データを前記管理データ記憶部に書き込み、前記書き込むデータのデータ量の方が小さい場合、前記ブロックのデータが書込まれている領域の次から前記データを順次書き込み、更に前記書き込んだデータの管理データを前記管理データ記憶部に書き込む書込手段と、
前記ブロックからデータを読み出す際、前記管理データ記憶部に書込まれている管理データに基づいて、最後にデータが書込まれた領域を検索し、この領域に書き込まれているデータを読み出す読出手段と
して機能させることを特徴とするプログラム。
【請求項２８】
前記プログラムは、前記データ書込・読出制御装置を、
前記書込手段によりデータがブロックに書き込まれると、前記読出手段がデータを読み出すブロックを、前記データが書き込まれたブロックに切り換える切換手段として更に機能させることを特徴とする請求項２５から２７のいずれかに記載のプログラム。
【請求項２９】
前記プログラムは、前記書込手段を、ブロックにデータが一杯になると、前記ブロックに書き込まれた最新データを別ブロックにコピーし、この別ブロックが書込及び読出を行う有効ブロックであることを示すフラグを設定する書込手段として更に機能させることを特徴とする請求項２５から２８のいずれかに記載のプログラム。
【請求項３０】
前記書込部により書き込まれる前記管理データは、前記ブロックに書き込まれた各データのデータ量、及び／又は前記各データの次に書き込まれたデータのアドレスを示すポインタであることを特徴とする請求項２５から２９のいずれかに記載のプログラム。
【請求項３１】
前記書込部により書き込まれる前記管理データは、前記ブロックに、最後に書き込まれたデータのアドレスであることを特徴とする請求項２５から２９のいずれかに記載のプログラム。
【請求項３２】
前記プログラムは、前記書込手段を、前記ブロックにデータを書き込んだ後、前記ブロックをベリファイする書込手段として機能させることを特徴とする請求項２５から３１のいずれかに記載のプログラム。
【請求項３３】
前記プログラムは、前記書込手段を、ベリファイが失敗すると、ベリファイが失敗したデータに、エラーデータであることを示すデータを上書きする書込手段として更に機能させることを特徴とする請求項３２に記載のプログラム。
【請求項３４】
データを一時的に記憶するデータ一時記憶部と、複数のブロックに分割されているメモリとを有するデータ書込・読出制御装置におけるプログラムであって、前記プログラムは前記データ書込・読出制御装置を、
前記データ一時記憶部にデータを書き込む中央演算処理装置と、
前記データ一時記憶部に書き込まれているデータを前記複数のブロックの内の１つのブロックに書き込む際、前記ブロックの空き領域の容量と書き込むデータのデータ量とを比較し、書き込むデータのデータ量の方が大きい場合、前記ブロックに書き込まれている全データを消去した後、前記データを前記ブロックの先頭又は最後から順次書き込み、前記書き込むデータのデータ量の方が小さい場合、前記ブロックのデータが書込まれている領域の次から前記データを順次書き込んでいく書込手段と、前記ブロックからデータを読み出す際、最後にデータが書込まれた領域を前記ブロックの先頭又は最後から順に検索し、この領域に書き込まれているデータを読み出す読出手段とを有する制御部と
して機能させることを特徴とするプログラム。
【請求項３５】
前記プログラムは、前記書込手段を、前記データ一時記憶部にデータが書き込まれる度に、前記領域に書き込まれたデータを前記ブロックに書き込む書込手段として機能させることを特徴とする請求項３４に記載のプログラム。
【請求項３６】
前記プログラムは、前記書込手段を、予め設定された条件を満たした時に、前記データ一時記憶部に書き込まれたデータを前記ブロックに書込む書込手段として機能させることを特徴とする請求項３４又は請求項３５に記載のプログラム。
【請求項３７】
請求項２５から請求項３６のいずれかに記載のプログラムが格納されたことを特徴とする記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データを書込・読出制御する装置、及びその方法に関し、特に、フラッシュメモリのデータ書込・読出制御装置、及びその方法に関する。
【背景技術】
【０００２】
近年、フラッシュメモリとＥＥＰＲＯＭとの両方が組み込まれている電子機器が一般的になっている（例えば、特許文献１参照）。このようにフラッシュメモリとＥＥＰＲＯＭとの両方が組み込まれている電子機器では、記憶させる内容に応じて、フラッシュメモリとＥＥＰＲＯＭとを使い分けていた。
【０００３】
これは、フラッシュメモリにデータを書き込む場合、ブロック単位でデータを消去してからでないと、任意のデータが書き込めないためである。
【０００４】
【特許文献１】特開２００２-３３４０２４号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかしながら、フラッシュメモリとＥＥＰＲＯＭとの両方を搭載することは、コスト的に大きなデメリットになっているため、フラッシュメモリをＥＥＰＲＯＭのように扱える技術が望まれていた。
【０００６】
そこで、本発明は、上記問題点を鑑みてなされたものであって、本発明が解決しようとする課題は、フラッシュメモリをＥＥＰＲＯＭのように書換えることができるデータ書込・読出制御装置を提供することである。
【０００７】
又、本発明が解決しようとする課題は、フラッシュメモリのデータを書き換える際、ＣＰＵのリソースを専有せずに書換えることができるデータ書込・読出制御装置を提供することである。
【課題を解決するための手段】
【０００８】
上記課題を解決するための第１の発明は、データ書込・読出制御装置であって、
複数のブロックに分割されているメモリと、
前記複数のブロックの内の１つのブロックにデータを書き込む際、前記ブロックの空き領域の容量と書き込むデータのデータ量とを比較し、書き込むデータのデータ量の方が大きい場合、前記ブロックに書き込まれている全データを消去した後、前記データを前記ブロックの先頭又は最後から順次書き込み、前記書き込むデータのデータ量の方が小さい場合、前記ブロックのデータが書込まれている領域の次から前記データを順次書き込んでいく書込手段と、
前記ブロックからデータを読み出す際、最後にデータが書込まれた領域を前記ブロックの先頭又は最後から順に検索し、この領域に書き込まれているデータを読み出す読出手段と
を有することを特徴とする。
【０００９】
上記課題を解決するための第２の発明は、上記第１の発明において、前記書込み手段は、前記ブロックにデータを書き込む際、データに加えて、データの読出しに関する情報である管理データもデータの前又は後ろに書き込む書込手段であることを特徴とする。
【００１０】
上記課題を解決するための第３の発明は、データ書込・読出制御装置であって、
複数のブロックに分割されているメモリと、
前記複数のブロックの内の１つのブロックに書き込まれているデータの読み出しに関する情報である管理データを記憶する管理データ記憶部と、
前記複数のブロックの内の１つのブロックにデータを書き込む際、前記ブロックの空き領域の容量と書き込むデータのデータ量とを比較し、書き込むデータのデータ量の方が大きい場合、前記ブロックに書き込まれている全データを消去した後、前記データを前記ブロックの先頭又は最後から順次書き込み、更に前記書き込んだデータの管理データを前記管理データ記憶部に書き込み、前記書き込むデータのデータ量の方が小さい場合、前記ブロックのデータが書込まれている領域の次から前記データを順次書き込み、更に前記書き込んだデータの管理データを前記管理データ記憶部に書き込む書込手段と、
前記ブロックからデータを読み出す際、前記管理データ記憶部に書込まれている管理データに基づいて、最後にデータが書込まれた領域を検索し、この領域に書き込まれているデータを読み出す読出手段と
を有することを特徴とする。
【００１１】
上記課題を解決するための第４の発明は、上記第１から第３の発明のいずれかにおいて、前記データ書込・読出制御装置は、前記書込手段によりデータがブロックに書き込まれると、前記読出手段がデータを読み出すブロックを、前記データが書き込まれたブロックに切り換える切換手段を更に有することを特徴とする。
【００１２】
上記課題を解決するための第５の発明は、上記第１から第４のいずれかの発明において、前記書込手段は、ブロックにデータが一杯になると、前記ブロックに書き込まれた最新データを別ブロックにコピーし、この別ブロックが書込及び読出を行う有効ブロックであることを示すフラグを設定すること
を特徴とする。
【００１３】
上記課題を解決するための第６の発明は、上記第１から第５のいずれかの発明において、前記管理データは、前記ブロックに書き込まれた各データのデータ量、及び／又は前記各データの次に書き込まれたデータのアドレスを示すポインタであることを特徴とする。
【００１４】
上記課題を解決するための第７の発明は、上記第１から第５のいずれかの発明において、前記管理データは、前記ブロックに、最後に書き込まれたデータのアドレスであることを特徴とする。
【００１５】
上記課題を解決するための第８の発明は、上記第１から第７のいずれかの発明において、前記書込手段は、
前記ブロックにデータを書き込んだ後、前記ブロックをベリファイする書込手段であることを特徴とする。
【００１６】
上記課題を解決するための第９の発明は、上記第８の発明において、前記書込手段は、ベリファイが失敗すると、ベリファイが失敗したデータに、エラーデータであることを示すデータを上書きすることを特徴とする。
【００１７】
上記課題を解決するための第１０の発明は、データ書込・読出制御装置であって、
データを一時的に記憶するデータ一時記憶部と、
前記データ一時記憶部にデータを書き込む中央演算処理装置と、
複数のブロックに分割されているメモリと、
前記データ一時記憶部に書き込まれているデータを前記複数のブロックの内の１つのブロックに書き込む際、前記ブロックの空き領域の容量と書き込むデータのデータ量とを比較し、書き込むデータのデータ量の方が大きい場合、前記ブロックに書き込まれている全データを消去した後、前記データを前記ブロックの先頭又は最後から順次書き込み、前記書き込むデータのデータ量の方が小さい場合、前記ブロックのデータが書込まれている領域の次から前記データを順次書き込んでいく書込手段と、前記ブロックからデータを読み出す際、最後にデータが書込まれた領域を前記ブロックの先頭又は最後から順に検索し、この領域に書き込まれているデータを読み出す読出手段とを有する制御部と
を有することを特徴とする。
【００１８】
上記課題を解決するための第１１の発明は、上記第１０の発明において、前記書込手段は、前記データ一時記憶部にデータが書き込まれる度に、前記領域に書き込まれたデータを前記ブロックに書き込むことを特徴とする。
【００１９】
上記課題を解決するための第１２の発明は、上記第１０又は第１１の発明において、前記書込手段は、予め設定された条件を満たした時に、前記データ一時記憶部に書き込まれたデータを前記ブロックに書込むことを特徴とする。
【００２０】
上記課題を解決するための第１３の発明は、複数のブロックに分割されているメモリにおけるデータの書込・読出を制御するデータ書込・読出制御方法であって、
前記複数のブロックの内の１つのブロックにデータを書き込む際、前記ブロックの空き領域の容量と書き込むデータのデータ量とを比較し、書き込むデータのデータ量の方が大きい場合、前記ブロックに書き込まれている全データを消去した後、前記データを前記ブロックの先頭又は最後から順次書き込み、前記書き込むデータのデータ量の方が小さい場合、前記ブロックのデータが書込まれている領域の次から前記データを順次書き込んでいく書込ステップと、
前記ブロックからデータを読み出す際、前記ブロックの先頭又は最後から順に、最後にデータが書込まれた領域を検索し、この領域に書き込まれているデータを読み出す読出ステップと
を有することを特徴とする。
【００２１】
上記課題を解決するための第１４の発明は、上記第１３の発明において、前記書込みステップは、前記ブロックにデータを書き込む際、データに加えて、データの読出しに関する情報である管理データもデータの前又は後ろに書き込むことを特徴とする。
【００２２】
上記課題を解決するための第１５の発明は、複数のブロックに分割されているメモリ、及び前記複数のブロックの内の１つのブロックに書き込まれているデータの読み出しに関する情報である管理データを記憶する管理データ記憶部におけるデータの書込・読出を制御するデータ書込・読出制御方法であって、
前記複数のブロックの内の１つのブロックにデータを書き込む際、前記ブロックの空き領域の容量と書き込むデータのデータ量とを比較し、書き込むデータのデータ量の方が大きい場合、前記ブロックに書き込まれている全データを消去した後、前記データを前記ブロックの先頭又は最後から順次書き込み、更に前記書き込んだデータの管理データを前記管理データ記憶部に書き込み、前記書き込むデータのデータ量の方が小さい場合、前記ブロックのデータが書込まれている領域の次から前記データを順次書き込み、更に前記書き込んだデータの管理データを前記管理データ記憶部に書き込む書込ステップと、
前記ブロックからデータを読み出す際、前記管理データ記憶部に書込まれている管理データに基づいて、最後にデータが書込まれた領域を検索し、この領域に書き込まれているデータを読み出す読出ステップと
を有することを特徴とする。
【００２３】
上記課題を解決するための第１６の発明は、上記第１３から第１５のいずれかの発明において、前記データ書込・読出制御方法は、データを読み出す対象となるブロックを予め設定し、このブロック以外のブロックにデータが書き込まれた場合、データが書き込まれたブロックと、前記読み出し対象となっているブロックとをスワップさせることにより、読み出し対象のブロックが変更されないようにしたことを特徴とする。
【００２４】
上記課題を解決するための第１７の発明は、上記第１３から第１６のいずれかの発明において、前記書込ステップは、ブロックにデータが一杯になると、前記ブロックに書き込まれた最新データを別ブロックにコピーし、この別ブロックが書込及び読出を行う有効ブロックであることを示すフラグを設定することを特徴とする。
【００２５】
上記課題を解決するための第１８の発明は、上記第１３から第１７のいずれかの発明において、前記書込ステップにより書き込まれる前記管理データは、前記ブロックに書き込まれた各データのデータ量、及び／又は前記各データの次に書き込まれたデータのアドレスを示すポインタであることを特徴とする。
【００２６】
上記課題を解決するための第１９の発明は、上記第１３から第１７のいずれかの発明において、前記書込ステップにより書き込まれる前記管理データは、前記ブロックに、最後に書き込まれたデータのアドレスであることを特徴とする。
【００２７】
上記課題を解決するための第２０の発明は、上記第１３から第１９のいずれかの発明において、前記書込ステップは、前記ブロックにデータを書き込んだ後、前記ブロックをベリファイする書込ステップであることを特徴とする。
【００２８】
上記課題を解決するための第２１の発明は、上記第２０の発明において、前記書込ステップは、ベリファイが失敗すると、ベリファイが失敗したデータに、エラーデータであることを示すデータを上書きすることを特徴とする。
【００２９】
上記課題を解決するための第２２の発明は、データを一時的に記憶するデータ一時記憶部、及び複数のブロックに分割されているメモリにおけるデータ書込・読出制御方法であって、
前記データ一時記憶部にデータを書き込むステップと、
前記データ一時記憶部に書き込まれているデータを前記複数のブロックの内の１つのブロックに書き込む際、前記ブロックの空き領域の容量と書き込むデータのデータ量とを比較し、書き込むデータのデータ量の方が大きい場合、前記ブロックに書き込まれている全データを消去した後、前記データを前記ブロックの先頭又は最後から順次書き込み、前記書き込むデータのデータ量の方が小さい場合、前記ブロックのデータが書込まれている領域の次から前記データを順次書き込んでいく書込ステップと、
前記ブロックからデータを読み出す際、前記ブロックの先頭又は最後から最後にデータが書込まれた領域を検索し、この領域に書き込まれているデータを読み出す読出ステップと
を有することを特徴とする。
【００３０】
上記課題を解決するための第２３の発明は、上記第２２の発明において、前記書込ステップは、前記データ一時記憶部にデータが書き込まれる度に、前記領域に書き込まれたデータを前記ブロックに書き込むステップであることを特徴とする。
【００３１】
上記課題を解決するための第２４の発明は、上記第２２又は第２３の発明において、前記書込ステップは、予め設定された条件を満たした時に、前記データ一時記憶部に書き込まれたデータを前記ブロックに書込むステップであることを特徴とする。
【００３２】
上記課題を解決するための第２５の発明は、複数のブロックに分割されているメモリを有するデータ書込・読出制御装置におけるプログラムであって、前記プログラムは前記データ書込・読出制御装置を、
前記複数のブロックの内の１つのブロックにデータを書き込む際、前記ブロックの空き領域の容量と書き込むデータのデータ量とを比較し、書き込むデータのデータ量の方が大きい場合、前記ブロックに書き込まれている全データを消去した後、前記データを前記ブロックの先頭又は最後から順次書き込み、前記書き込むデータのデータ量の方が小さい場合、前記ブロックのデータが書込まれている領域の次から前記データを順次書き込んでいく書込手段と、
前記ブロックからデータを読み出す際、最後にデータが書込まれた領域を前記ブロックの先頭又は最後から順に検索し、この領域に書き込まれているデータを読み出す読出手段と
して機能させることを特徴とする。
【００３３】
上記課題を解決するための第２６の発明は、上記第２５の発明において、前記プログラムは、前記書込手段を、前記ブロックにデータを書き込む際、データに加えて、データの読出しに関する情報である管理データもデータの前又は後ろに書き込む書込手段として機能させることを特徴とする。
【００３４】
上記課題を解決するための第２７の発明は、複数のブロックに分割されているメモリと、前記複数のブロックの内の１つのブロックに書き込まれているデータの読み出しに関する情報である管理データを記憶する管理データ記憶部とを有するデータ書込・読出制御装置におけるプログラムであって、前記プログラムは前記データ書込・読出制御装置を、
前記複数のブロックの内の１つのブロックにデータを書き込む際、前記ブロックの空き領域の容量と書き込むデータのデータ量とを比較し、書き込むデータのデータ量の方が大きい場合、前記ブロックに書き込まれている全データを消去した後、前記データを前記ブロックの先頭又は最後から順次書き込み、更に前記書き込んだデータの管理データを前記管理データ記憶部に書き込み、前記書き込むデータのデータ量の方が小さい場合、前記ブロックのデータが書込まれている領域の次から前記データを順次書き込み、更に前記書き込んだデータの管理データを前記管理データ記憶部に書き込む書込手段と、
前記ブロックからデータを読み出す際、前記管理データ記憶部に書込まれている管理データに基づいて、最後にデータが書込まれた領域を検索し、この領域に書き込まれているデータを読み出す読出手段と
して機能させることを特徴とする。
【００３５】
上記課題を解決するための第２８の発明は、上記第２５から第２７のいずれかの発明において、前記プログラムは、前記データ書込・読出制御装置を、前記書込手段によりデータがブロックに書き込まれると、前記読出手段がデータを読み出すブロックを、前記データが書き込まれたブロックに切り換える切換手段として更に機能させることを特徴とする。
【００３６】
上記課題を解決するための第２９の発明は、上記第２５から第２８のいずれかの発明において、前記プログラムは、前記書込手段を、ブロックにデータが一杯になると、前記ブロックに書き込まれた最新データを別ブロックにコピーし、この別ブロックが書込及び読出を行う有効ブロックであることを示すフラグを設定する書込手段として更に機能させることを特徴とする。
【００３７】
上記課題を解決するための第３０の発明は、上記第２５から第２９のいずれかの発明において、前記書込部により書き込まれる前記管理データは、前記ブロックに書き込まれた各データのデータ量、及び／又は前記各データの次に書き込まれたデータのアドレスを示すポインタであることを特徴とする。
【００３８】
上記課題を解決するための第３１の発明は、上記第２５から第２９の発明において、前記書込部により書き込まれる前記管理データは、前記ブロックに、最後に書き込まれたデータのアドレスであることを特徴とする。
【００３９】
上記課題を解決するための第３２の発明は、上記第２５から第３１のいずれかの発明において、前記プログラムは、前記書込手段を、前記ブロックにデータを書き込んだ後、前記ブロックをベリファイする書込手段として機能させることを特徴とする。
【００４０】
上記課題を解決するための第３３の発明は、上記第３２の発明において、前記プログラムは、前記書込手段を、ベリファイが失敗すると、ベリファイが失敗したデータに、エラーデータであることを示すデータを上書きする書込手段として更に機能させることを特徴とする。
【００４１】
上記課題を解決するための第３４の発明は、データを一時的に記憶するデータ一時記憶部と、複数のブロックに分割されているメモリとを有するデータ書込・読出制御装置におけるプログラムであって、前記プログラムは前記データ書込・読出制御装置を、
前記データ一時記憶部にデータを書き込む中央演算処理装置と、
前記データ一時記憶部に書き込まれているデータを前記複数のブロックの内の１つのブロックに書き込む際、前記ブロックの空き領域の容量と書き込むデータのデータ量とを比較し、書き込むデータのデータ量の方が大きい場合、前記ブロックに書き込まれている全データを消去した後、前記データを前記ブロックの先頭又は最後から順次書き込み、前記書き込むデータのデータ量の方が小さい場合、前記ブロックのデータが書込まれている領域の次から前記データを順次書き込んでいく書込手段と、前記ブロックからデータを読み出す際、最後にデータが書込まれた領域を前記ブロックの先頭又は最後から順に検索し、この領域に書き込まれているデータを読み出す読出手段とを有する制御部と
して機能させることを特徴とする。
【００４２】
上記課題を解決するための第３５の発明は、上記第３４の発明において、前記プログラムは、前記書込手段を、前記データ一時記憶部にデータが書き込まれる度に、前記領域に書き込まれたデータを前記ブロックに書き込む書込手段として機能させることを特徴とする。
【００４３】
上記課題を解決するための第３６の発明は、上記第３４又は第３５の発明において、前記プログラムは、前記書込手段を、予め設定された条件を満たした時に、前記データ一時記憶部に書き込まれたデータを前記ブロックに書込む書込手段として機能させることを特徴とする。
【００４４】
上記課題を解決するための第３７の発明は、上記第２５から第３６のいずれかの発明のプログラムが格納された記録媒体であることを特徴とする。
【発明の効果】
【００４５】
上述した本発明によれば、フラッシュメモリをＥＥＰＲＯＭのように使用することが可能となる。
【００４６】
又、ＣＰＵリソースを専有せずに、フラッシュメモリの書換えが可能となる。
【発明を実施するための最良の形態】
【００４７】
本発明のデータ書込・読出制御装置は、データ、データの読み出しに関する情報の順に、フラッシュメモリの１つのブロックの先頭又は、最終から順次書き込み、フラッシュメモリの１つのブロックに最後に書き込まれた領域を先頭又は、最終から順に検索して読み出すことにより、本発明の目的を達成することができる。
【００４８】
又、本発明のデータ書込・読出制御装置は、データ、データの読み出しに関する情報の順に、フラッシュメモリの１つのブロックの先頭又は、最終から順次書き込み、フラッシュメモリの１つのブロックに最後に書き込まれた領域を先頭又は、最終から順に検索して読み出す処理を専用に行う制御部を有することにより、本発明の目的を達成することができる。
【実施例１】
【００４９】
本発明における第一の実施の形態を説明する。
【００５０】
本実施の形態では、フラッシュメモリに新ユーザデータを書き込む際、書き込もうとするユーザデータである新ユーザデータと新ユーザデータのデータ量とを書き込み、フラッシュメモリをＥＥＰＲＯＭのように使用する方法について説明する。
【００５１】
図1は、本発明における第一の実施の形態を説明するための構成図であり、図２は、フラッシュメモリの構成図である。
【００５２】
図１において、１はフラッシュメモリである。フラッシュメモリ１は、図２に示すように、ブロック０〜ブロックｎの複数の記憶領域に分割されている。これらのブロック０〜ブロックｎは、予め、各種データを記憶するユーザープログラム領域と、ＥＥＰＲＯＭの代替として用いるＥＥＰＲＯＭ領域とが定義されている。尚、本実施形態では、ブロックｎをＥＥＰＲＯＭ領域として用いる。
【００５３】
２はＣＰＵである。ＣＰＵ２は、フラッシュメモリ１のＥＥＰＲＯＭ領域であるブロックｎにユーザデータ、そのユーザデータのデータ量の順に、先頭アドレスから順次書き込むものである。尚、本実施の形態ではＣＰＵ２の書込単位は４バイトとするが、これに限られるものではない。更に、ＣＰＵ２は、ブロックｎに新ユーザデータを書込む際、ブロックｎの最終アドレスから４バイト毎に順番に、ブランクではないアドレスを検索し、ブランクではないアドレスを検索すると、新ユーザデータのデータ量が、ブロックｎのブランク領域の容量より小さいかを判定するものである。又、ブランクではないアドレスを、ブロックｎの最終アドレスから４バイト毎に順番に検索する際、本実施の形態の書き込み単位は４バイトであるため、ブランクであると判定されたアドレスがブロックｎの先頭アドレスであるかを判定するために、１つ前のアドレス、すなわち４バイト前のアドレスが存在するかを判定する。更に、新ユーザデータのデータ量が、ブロックｎのブランク領域の容量より小さいと判定した場合、検索されたブランクではないアドレスの次のアドレスに新ユーザデータを、その次のアドレスに新ユーザデータのデータ量を書込む。一方、新ユーザデータのデータ量が、ブロックｎのブランク領域より大きいと判定した場合、既にブロックｎに書き込まれている全ユーザデータを消去するものである。
【００５４】
更に、ＣＰＵ２は、既にブロックｎに書き込まれているユーザデータを読み出す際、ブロックｎの最終アドレスから４バイト毎に順番に、ブランクではないアドレスを検索する。そして、検索されたアドレスに書き込まれているユーザデータのデータ量に基づいて、ユーザデータが書き込まれているアドレスを算出し、算出したアドレスに書き込まれているユーザデータを読み出す。
【００５５】
３はＲＯＭであり、ＣＰＵ２がフラッシュメモリ１を制御するために実行するプログラムが記憶されており、ＣＰＵ２は、このプログラムに従って動作する。
【００５６】
次に、上述した装置における、ユーザデータの書込みの動作を説明する。
【００５７】
図３は、ＣＰＵ２がフラッシュメモリ１にユーザデータを書込む動作を示すフローチャートである。
【００５８】
まず、ブロックｎの最終アドレスを検索する（ステップＳ３０１）。最終アドレスを検索すると、最終アドレスに書き込まれているデータを読み出す（ステップＳ３０２）。そして、読み出されたデータがブランクであるかを判定する（ステップＳ３０３）。
【００５９】
ここで、ブランクであると判定された場合、ブランクであると判定されたアドレスの１つ前のアドレスが存在するかを判定する（ステップＳ３０４）。本実施の形態における書き込み単位は４バイトであるので、４バイト前のアドレスが存在するかを判断する。
【００６０】
１つ前のアドレスが存在すると判断されると、１つ前のアドレスを検索し（ステップＳ３０５）、ステップＳ３０２に戻る。ステップＳ３０３で、読み出されたデータがブランクでないと判断されるまで、ステップＳ３０２〜ステップＳ３０５までを繰り返す。
【００６１】
ステップＳ３０３で、読み出されたデータがブランクではないと判定されると、新ユーザデータのデータ量がブッロクｎのブランク領域より大きいか否かを判定する（ステップＳ３０６）。
【００６２】
ここで、新ユーザデータのデータ量が、ブッロクｎのブランク領域より大きいと判断された場合、ブロックｎに書き込まれているユーザデータを全部消去する（ステップＳ３０７）。全データが消去された後、先頭アドレスに新ユーザデータを書き込み、その次にそのデータのデータ量を書き込む（ステップＳ３０８）。
【００６３】
一方、ステップＳ３０６で、新ユーザデータのデータ量が、ブッロクｎのブランク領域より小さいと判断された場合、ステップＳ３０８へ進み、ステップＳ３０３で、データがブランクでないと判定されたアドレスの次のアドレスに、ユーザデータを書き込み、その次にそのデータのデータ量を書き込む。
【００６４】
ステップＳ３０４で、1つ前のアドレスが存在しないと判断されると、ブロックｎはＡＬＬブランクであると判断され、ステップＳ３０８へ進む。
【００６５】
次に、上述した書き込み方法で書き込まれたユーザデータの読み出し方法について説明する。
【００６６】
図４は、第一の実施の形態における、ユーザデータの読み出し動作を示すフローチャートである。
【００６７】
まず、ブロックｎの最終アドレスから検索を開始する（ステップＳ４０１）。最終アドレスに書き込まれているデータを読み出す（ステップＳ４０２）。そして、読み出されたデータがブランクであるかを判定する（ステップＳ４０３）。
【００６８】
ここで、読み出されたデータがブランクであると判定された場合、１つ前のアドレス、つまり４バイト前のアドレスが存在するか否かを判断する（ステップＳ４０４）。
【００６９】
1つ前のアドレスが存在すると判断されると、そのアドレスを検索し（ステップＳ４０５）、ステップＳ４０２に戻る。一方、ステップＳ４０５で、前のアドレスが存在しないと判断されると、ブロックｎはＡＬＬブランクであると判断し、読み出しの処理を終了する（ステップＳ４０６）。
【００７０】
一方、ステップＳ４０３で、読み出されたデータがブランクでないと判定された場合、そのアドレスに書き込まれているデータ量に基づいて、最新のユーザデータが書き込まれている先頭のアドレスを算出する（ステップＳ４０７）。算出されたアドレスのユーザデータを読み出す（ステップＳ４０８）。
【００７１】
上述したような構成をとると、ユーザデータ毎のデータ量をユーザデータと一緒に保持しているので、データを可変長で持つことができる。
【００７２】
尚、本実施の形態は、新ユーザデータを先頭アドレスから順に書き込んでいく構成なので、最新のデータを１種類だけ必要なアプリケーションに用いるのが最適である。
【実施例２】
【００７３】
本発明における第二の実施の形態について説明する。
【００７４】
第一の実施の形態では、新ユーザデータとそのユーザデータのデータ量とをブロックの先頭アドレスから順番に記憶させる方法について説明したが、第二の実施の形態では、新ユーザデータとそのユーザデータのデータ量とを、ブロックの最終アドレスから順番に記憶させる方法について説明する。
【００７５】
第二の実施の形態における構成は第一の実施の形態と同様であるため、図１を用いる。図５は、第二の実施の形態におけるフラッシュメモリ１の構成図である。
【００７６】
フラッシュメモリ１は図５に示すように、ブロック０〜ブロックｎの複数の記憶領域に分割されている。これらのブロック０〜ブロックｎは、予め、各種データを記憶するユーザープログラム領域と、ＥＥＰＲＯＭの代替として用いるＥＥＰＲＯＭ領域とが定義されている。尚、第二の実施形態でも、ブロックｎをＥＥＰＲＯＭ領域として用いる。
【００７７】
ＣＰＵ２は、フラッシュメモリ１のＥＥＰＲＯＭ領域であるブロックｎにユーザデータ、そのユーザデータのデータ量の順に、最終アドレスから順次書き込むものである。尚、本実施の形態ではＣＰＵ２の書込単位は４バイトとするが、これに限られるものではない。更に、ＣＰＵ２は、ブロックｎに新ユーザデータを書込む際、ブロックｎの先頭アドレスから４バイト毎に順番に、ブランクではないアドレスを検索する。そして、ブランクではないアドレスを検索すると、新ユーザデータのデータ量が、ブロックｎのブランク領域の容量より小さいかを判定するものである。
【００７８】
又、ブロックｎの先頭アドレスから４バイト毎に順番に、ブランクではないアドレスを検索する際、ブランクであるアドレスを検索すると、そのアドレスが最終アドレスであるかを判定するために次アドレス、すなわち４バイト後ろのアドレスが存在するかを判定する。
【００７９】
更に、新ユーザデータのデータ量が、ブロックｎのブランク領域の容量より小さいと判定されると、検索されたブランクではないアドレスより、新ユーザデータのデータ量分前のアドレスに新ユーザデータを書き込み、新ユーザデータが書き込まれているアドレスの前のアドレスに新ユーザデータのデータ量を書き込む。一方、新ユーザデータのデータ量が、ブロックｎのブランク領域の容量より大きいと判定されると、ブロックｎに書き込まれている全データを消去する。
【００８０】
更に、ＣＰＵ２は、既にブロックｎに書き込まれているユーザデータを読み出す際、ブロックｎの先頭アドレスから４バイト毎に順番に、ブランクではないアドレスを検索する。そして、検索されたアドレスに書き込まれているユーザデータのデータ量に基づいて、ユーザデータが書き込まれているアドレスを算出し、算出したアドレスに書き込まれているユーザデータを読み出す。
【００８１】
次に、第二の実施の形態における、ＣＰＵ２の新ユーザデータの書き込み動作について説明する。
【００８２】
図６は、第二の実施の形態における新ユーザデータの書き込みの動作を示すフローチャートである。
【００８３】
まず、ブロックｎの先頭アドレスを検索する（ステップＳ６０１）。先頭アドレスを検索すると、先頭アドレスに書き込まれているデータを読み出す（ステップＳ６０２）。読み出されたデータがブランクであるかを判定する（ステップＳ６０３）。
【００８４】
ここで、先頭アドレスがブランクであると判定された場合、１つ後ろのアドレスが存在するか否かを判断する（ステップＳ６０４）。本実施の形態における書き込み単位は４バイトであるので、４バイト後ろのアドレスが存在するかを判断する。
【００８５】
１つ後ろのアドレスが存在すると判断されると、１つ後ろのアドレスを検索し（ステップＳ６０５）、ステップＳ６０２に戻る。ステップＳ６０３で、読み出されたデータがブランクでないと判断されるまで、ステップＳ６０２〜ステップＳ６０５までを繰り返す。
【００８６】
ステップＳ６０３で、読み出されたデータがブランクではないと判断されると、新ユーザデータのデータ量がブッロクｎのブランク領域の容量より大きいか否かを判定する（ステップＳ６０６）。
【００８７】
ここで、新ユーザデータのデータ量が、ブッロクｎのブランク領域の容量より大きいと判定された場合、ブロックｎに書き込まれているデータを全部消去する（ステップＳ６０７）。全データが消去された後、最終アドレスから新ユーザデータのデータ量分前のアドレスに新ユーザデータを書き込み、その前のアドレスにデータ量を書き込む（ステップＳ６０８）。
【００８８】
一方、ステップＳ６０６で、新ユーザデータのデータ量が、ブッロクｎのブランク領域の容量より小さいと判断された場合、ステップＳ６０８へ進み、ステップＳ６０３で、ブランクでないと判定されたアドレスより、新ユーザデータ量分前のアドレスに新ユーザデータを書き込み、新ユーザデータが書き込まれたアドレスの前のアドレスに、新ユーザデータのデータ量を書き込む。
【００８９】
ステップＳ６０４で、1つ後ろのアドレスが存在しないと判断されると、ブロックｎはＡＬＬブランクであると判断され、ステップＳ６０８へ進み、最終アドレスから新ユーザデータのデータ量分前のアドレスに新ユーザデータを書き込み、その前のアドレスにデータ量を書き込む。
【００９０】
次に、上述した書き込み方法で書き込まれたユーザデータの読み出し方法について説明する。
【００９１】
図７は、第二の実施の形態における、ユーザデータの読み出し動作を示すフローチャートである。
【００９２】
まず、ブロックｎの先頭アドレスから検索を開始する（ステップＳ７０１）。先頭アドレスに書き込まれているデータを読み出す（ステップＳ７０２）。そして、読み出されたデータがブランクであるかを判定する（ステップＳ７０３）。
【００９３】
ここで、読み出されたデータがブランクであると判定された場合、１つ後ろのアドレスが存在するか否かを判断する（ステップＳ７０４）。
【００９４】
1つ後ろのアドレスが存在すると判断されると、そのアドレスを検索し（ステップＳ７０５）、ステップＳ７０２に戻る。一方、ステップＳ７０４で、後ろのアドレスが存在しないと判断されると、ブロックｎはＡＬＬブランクであると判断され、読み出しの処理を終了する（ステップＳ７０６）。
【００９５】
一方、ステップＳ７０３で、読み出されたデータがブランクでないと判定された場合、そのアドレスには、データ量が書き込まれているので、次のアドレスを検索する（ステップＳ７０７）。検索されたアドレスのユーザデータを読み出す（ステップＳ７０８）。
【００９６】
上述したような構成をとると、最新のデータを１つだけ必要なアプリケーションにおいて、ユーザデータが多くフラッシュメモリに書き込まれている場合、早くユーザデータを読み出すことができる。
【実施例３】
【００９７】
本発明における第三の実施の形態について説明する。
【００９８】
第一及び第二の実施の形態では、ユーザデータとユーザデータのデータ量とをフラッシュメモリ１に記憶する方法について説明した。しかしながら、第一及び第二の実施の形態では、１種類のデータしか書き込むことができないため、最新のデータを１つだけ必要なアプリケーションしか用いることができない。そこで、第三の実施の形態では、ユーザデータと、ユーザデータのデータ量及びポインタとからなる管理データとを記憶することにより、複数種類のアプリケーションのデータを記憶できるように構成したことを特徴とする。
【００９９】
第三の実施の形態における構成は第一の実施の形態と同様であるため、図１を用いる。図８は、第三の実施の形態におけるフラッシュメモリ１の構成図である。
【０１００】
フラッシュメモリ１は図８に示すように、ブロック０〜ブロックｎの複数の記憶領域に分割されている。これらのブロック０〜ブロックｎは、予め、各種データを記憶するユーザープログラム領域と、ＥＥＰＲＯＭの代替として用いるＥＥＰＲＯＭ領域とが定義されている。尚、第三の実施の形態でも、ブロックｎをＥＥＰＲＯＭ領域として用いる。
【０１０１】
ＣＰＵ２は、ブロックｎに新ユーザデータのデータ量及びポインタからなる管理データ、ユーザデータの順に、先頭アドレスから順次書き込むものである。このポインタは、データの種類、すなわち各アプリケーションのデータ毎に管理するようにしており、各アプリケーションのユーザデータのポインタには、該ユーザデータの次のユーザデータのアドレスが書き込まれる。また、各アプリケーションの最終のユーザデータのポインタには何も書き込まず、ブランクにする。各アプリケーションは、ブロックｎに書き込まれている自アプリケーションの先頭ユーザデータのアドレスを先頭ユーザデータアドレスとして保持している。
【０１０２】
尚、本実施の形態では、ＣＰＵ２の書込み単位を４バイトとするが、これに限られるものではない。
【０１０３】
更に、ＣＰＵ２は、ブロックｎに新ユーザデータを書込む際、ブロックｎの先頭アドレスから順に、ブランクのアドレスを検索し、ブランクのアドレスを検索すると、新ユーザデータのデータ量が、ブロックｎのブランク領域の容量より小さいかを判定するものである。新ユーザデータのデータ量が、ブロックｎのブランク領域の容量より小さいと判定すると、ブランクであると判定されたアドレスに管理データを書き込み、その次のアドレスに新ユーザデータを書き込む。新ユーザデータのデータ量が、ブロックｎのブランク領域の容量より大きいと判定すると、ブロックｎに書き込まれている全ユーザデータを消去する。
【０１０４】
又、ブロックｎの先頭アドレスから順に、ブランクのアドレスを検索する際、ブランクでないアドレスを検索すると、現在のアドレスが最終アドレスであるかを判定するために、次アドレスが存在するかを判定する。
【０１０５】
更に、既に書き込まれているユーザデータを読み出す際、アプリケーション側で保持している先頭ユーザデータのアドレスから順に、ポインタデータがブランクであるアドレスを検索する。
【０１０６】
次に、第三の実施の形態における、ＣＰＵ２の新ユーザデータの書き込み動作について説明する。
【０１０７】
図９は、第三の実施の形態における、ユーザデータの書き込みの動作を示すフローチャートであり、図１０は、ユーザデータを書き込む際のブロックｎの遷移図である。尚、本実施形態では、図１０の（ａ）に示すように、２種類のアプリケーションのユーザデータがブロックｎに記憶されているものとし、現在実行中であるアプリケーションのユーザデータＤａｔａ１．０を更新するために新ユーザデータＤａｔａ１．１を書き込む場合について説明する。
【０１０８】
まず、ブロックｎの先頭アドレスを検索する（ステップＳ９０１）。先頭アドレスを検索すると、先頭アドレスに書き込まれているデータを読み出す（ステップＳ９０２）。そして、読み出されたデータがブランクであるかを判定する（ステップＳ９０３）。
【０１０９】
ここで、先頭アドレスがブランクでないと判定された場合、１つ後ろのアドレスが存在するか否かを判断する（ステップＳ９０４）。本実施の形態における書き込み単位は４バイトであるので、４バイト後ろのアドレスが存在するかを判断する。
【０１１０】
１つ後ろのアドレスが存在すると判断すると、１つ後ろのアドレスを検索し（ステップＳ９０５）、ステップＳ９０２に戻る。ステップＳ９０３で、読み出されたデータがブランクでないと判断されるまで、ステップＳ９０２〜ステップＳ９０５までを繰り返す。
【０１１１】
ステップＳ９０３で、読み出されたデータがブランクであると判定されると、新ユーザデータのデータ量がブッロクｎのブランク領域の容量より大きいか否かを判断する（ステップＳ９０６）。
【０１１２】
ここで、新ユーザデータのデータ量が、ブッロクｎのブランク領域の容量より大きいと判断された場合、ブロックｎに書き込まれているデータを全部消去する（ステップＳ９０７）。全データが消去された後、先頭アドレスに管理データを書き込み、その次のアドレスに新ユーザデータを書き込む（ステップＳ９０８）。管理データと新ユーザデータとを書き込み後、アプリケーション側で保持している、先頭ユーザデータアドレスを更新する（ステップＳ９０９）。
【０１１３】
一方、ステップＳ９０６で、新ユーザデータのデータ量が、ブッロクｎのブランク領域の容量より小さいと判断された場合、ステップＳ９０３で、ブランクであると判定されたアドレスに、管理データを書き込み、その次のアドレスに新ユーザデータを書き込む（ステップＳ９１０）。新ユーザデータと管理データとを書き込んだ後、旧ユーザデータの管理データのポインタに、新ユーザデータのアドレスを書き込む（ステップＳ９１１）。この時、ブロックｎは、図１０の（ｂ）の状態になる。
【０１１４】
ステップＳ９０４で、1つ後ろのアドレスが存在しないと判断されると、ブロックｎはＡＬＬブランクであると判断され、ステップＳ９０８へ進み、先頭アドレスに管理データを書き込み、その次のアドレスに新ユーザデータを書き込む。
【０１１５】
次に、上述した書き込み方法で書き込まれたユーザデータの読み出し方法について説明する。
【０１１６】
図１１は、第三の実施の形態における、ユーザデータの読み出し動作を示すフローチャートである。
【０１１７】
まず、現在実行中であるアプリケーションが先頭ユーザデータアドレスを保持しているか否かを判定する（ステップＳ１１０１）。この時、アプリケーションが先頭アドレスを保持していない場合、そのアプリケーションのユーザデータはブロックｎに記憶されていないとして、処理を終了する。
【０１１８】
一方、先頭ユーザデータアドレスを保持していると判定すると、アプリケーションが保持している先頭アドレスをブロックｎから検索する（ステップＳ１１０２）。先頭アドレスを検索すると、先頭アドレスに書き込まれているポインタデータを読み出す（ステップＳ１１０３）。読み出されたポインタデータがブランクであるかを判定する（ステップＳ１１０４）。
【０１１９】
ここで、先頭アドレスのポインタデータがブランクでないと判定された場合、ポインタデータに書き込まれているアドレスを検索し（ステップＳ１１０５）、ステップＳ１１０３に戻る。そして、ステップＳ１１０４で、読み出されたポインタデータがブランクであると判定されるまで、ステップＳ１１０３〜ステップＳ１１０５を繰り返す。
【０１２０】
ステップＳ１１０４で、読み出されたポインタデータがブランクであると判定されると、そのアドレスの次のアドレス、つまり４バイト後ろのアドレスのデータを読み出す（ステップＳ１１０６）。
【０１２１】
尚、上述した実施の形態では、管理データ、ユーザデータの順に、ブロックの先頭アドレスから順次書き込んでいるが、管理データ、ユーザデータの順にブロックの最終アドレスから順次書き込んでも良い。
【０１２２】
第三の実施の形態をとると、ユーザデータのデータ量とポインタデータとからなる管理データを用いることにより、複数種類のアプリケーションのユーザデータを記憶することができる。
【実施例４】
【０１２３】
本発明における第四の実施の形態について説明する。
【０１２４】
第三の実施の形態では、ユーザデータと、ユーザデータのデータ量及びポインタとからなる管理データとを記憶することにより、複数種類のアプリケーションのデータを記憶できるように構成していた。しかしながら、各アプリケーションが保持している先頭ユーザデータアドレスに基づいて、各アプリケーションの先頭ユーザデータから順にポインタをたどって、最後に書き込まれたユーザデータ、すなわち最新ユーザデータのアドレスを検索するので、読出しの際に時間がかかってしまう場合がある。そこで、第四の実施の形態では、フラッシュメモリのＥＥＰＲＯＭ領域とは別の領域に、各アプリケーションの最新ユーザデータが書き込まれているアドレスを管理データを記憶させ、より早く最新ユーザデータを検索できるように構成したことを特徴とする。
【０１２５】
図１２は、第四の実施の形態におけるブロック図であり、図１３は、第四の実施の形態におけるフラッシュメモリと管理データ記憶部とを示す図である。
【０１２６】
１は、フラッシュメモリである。フラッシュメモリ１は、図１３に示す通り、ブロック０〜ブロックｎの記憶領域に分割されている。これらのブロック０〜ブロックｎは、予め、各種データを記憶するユーザープログラム領域と、ＥＥＰＲＯＭの代替として用いるＥＥＰＲＯＭ領域とが定義されている。尚、第四の実施形態では、ブロックｎをＥＥＰＲＯＭ領域として用いる。
【０１２７】
２は、ＣＰＵである。ＣＰＵ２は、ユーザデータをブロックｎの先頭アドレスから順に、又、後述する管理データ記憶部の管理情報格納領域１に対応するアプリケーションのユーザデータのアドレスを書き込むものである。尚、本実施の形態では、ＣＰＵ２の書込単位は４バイトとするが、これに限られるものではない。
【０１２８】
更に、ＣＰＵ２は、ブロックｎに新ユーザデータを書込む際、ブロックｎの先頭アドレスから順に、ブランクのアドレスを検索し、ブランクのアドレスを検索すると、新ユーザデータのデータ量が、ブロックｎのブランク領域の容量より小さいかを判定する。新ユーザデータのデータ量がブロックｎのブランク領域の容量より小さいと判定すると、ブランクであると判定されたアドレスに新ユーザデータを書き込み、後述する管理情報格納領域１の管理データを更新し、管理情報格納領域０と管理情報格納領域１とをスワップさせる。新ユーザデータのデータ量が、ブロックｎのブランク領域の容量より大きいと判定すると、ブロックｎに書き込まれている全ユーザデータを消去する。
【０１２９】
更に、書き込まれているユーザデータを読み出す際、管理情報格納領域０の対応するアプリケーションの管理データを読み出し、管理データに書き込まれているアドレスのデータを読み出す。
【０１３０】
３は、ＲＯＭである。ＲＯＭ３は、ＣＰＵ２がフラッシュメモリ１を制御するために実行するプログラムが記憶されている。
【０１３１】
４は、管理データ記憶部である。管理データ記憶部４は、管理データとして、最新ユーザデータが記憶されているアドレスをアプリケーション毎に保持するものである。各アプリケーションは、管理データ記憶部４に書き込まれている自アプリケーションの最終ユーザデータのアドレスが記憶されている場所を保持している。
【０１３２】
又、管理データ記憶部４は図１３に示す通り、管理情報格納領域０と管理情報格納領域１とに分かれている。管理情報格納領域０及び管理情報格納領域１には、アプリケーション毎の最新のユーザデータの管理データを記憶する領域が予め定義されている。管理情報格納領域０は常に新しい管理データを保持し、管理情報格納領域１は更新される前の管理データを保持する。
【０１３３】
次に、第四の実施の形態における、ＣＰＵ２の新ユーザデータの書き込み動作について説明する。
【０１３４】
図１４は、第四の実施の形態における、データの書き込みの動作を示すフローチャートであり、図１５は、その際のブロックｎの遷移図である。
【０１３５】
尚、本実施形態では、図１５の（ａ）に示すように、５種類のアプリケーションのユーザデータがブロックｎに記憶されており、各アプリケーションの管理データは、管理情報格納領域０及び管理情報格納領域１のＤａｔａ１格納アドレス〜Ｄａｔａ５格納アドレスに記憶されるものとする。又、現在実行中であるアプリケーションのユーザデータはＤａｔａ２とし、Ｄａｔａ２を更新する場合について説明する。
【０１３６】
まず、ブロックｎの最終アドレスを検索する（ステップＳ１４０１）。最終アドレスを検索すると、最終アドレスに書き込まれているデータを読み出す（ステップＳ１４０２）。読み出されたデータがブランクであるかを判定する（ステップＳ１４０３）。ここで、最終アドレスがブランクであると判定された場合、１つ前のアドレスが存在するか否かを判断する（ステップＳ１４０４）。尚、本実施の形態における書き込み単位は４バイトであるので、４バイト前のアドレスが存在するかを判断する。
【０１３７】
１つ前のアドレスが存在すると判断されると、１つ前のアドレスを検索し（ステップＳ１４０５）、ステップＳ１４０２に戻る。ステップＳ１４０３で、読み出されたデータがブランクでないと判断されるまで、ステップＳ１４０２〜ステップＳ１４０５までを繰り返す。
【０１３８】
ステップＳ１４０３で、読み出されたデータがブランクではないと判断されると、新ユーザデータのデータ量がブッロクｎのブランク領域の容量より大きいか否かを判定する（ステップＳ１４０６）。
【０１３９】
ここで、新ユーザデータのデータ量が、ブッロクｎのブランク領域の容量より大きいと判定された場合、ブロックｎに書き込まれているデータを全部消去する（ステップＳ１４０７）。全データが消去された後、先頭アドレスに新ユーザデータを書き込む（ステップＳ１４０８）。新ユーザデータを書き込んだ後、現在実行中のアプリケーションの管理データを、管理情報格納領域１に書き込む（ステップＳ１４０９）。管理情報格納領域１の管理データを更新すると、管理情報格納領域１に記憶されている管理データと管理情報格納領域０に記憶されている管理データとをスワップする（ステップＳ１４１０）。
【０１４０】
一方、ステップＳ１４０６で、新ユーザデータのデータ量が、ブッロクｎのブランク領域の容量より小さいと判断された場合、ステップＳ１４０８へ進み、ステップＳ１４０３で、データがブランクでないと判定されたアドレスの次のアドレスに、ユーザデータを書き込む（ステップＳ１４０８）。新ユーザデータを書き込んだ後、管理情報格納領域１に記憶されているユーザデータ２の管理データを更新する（ステップＳ１４０９）。管理データを更新すると、管理情報格納領域１に記憶されている管理データと管理情報格納領域０に記憶されている管理データとをスワップする（ステップＳ１４１０）。
【０１４１】
ステップＳ１４０４で、1つ前のアドレスが存在しないと判断されると、ブロックｎはＡＬＬブランクであると判断され、ステップＳ１４０８へ進み、先頭アドレスに新ユーザデータを書き込む（ステップＳ１４０８）。新ユーザデータを書き込んだ後、管理情報格納領域１に記憶されているユーザデータ２の管理データを更新する（ステップＳ１４０９）。管理データを更新すると、管理情報格納領域１に記憶されている管理データと管理情報格納領域０に記憶されている管理データとをスワップする（ステップＳ１４１０）。
【０１４２】
次に、上述した書き込み方法で書き込まれたユーザデータの読み出し方法について説明する。
【０１４３】
図１６は、第四の実施の形態におけるユーザデータの読み出し方法を示すフローチャートである。
【０１４４】
まず、管理情報格納領域０に、現在実行中であるアプリケーションの先頭ユーザデータのアドレスを確認する（ステップＳ１６０１）。この時、管理情報格納領域０に、自身のユーザデータが記憶されているアドレスが書き込まれていない場合、そのアプリケーションのユーザデータはブロックｎに記憶されていないとして、処理を終了する。
【０１４５】
一方、先頭アドレスを保持していると判定すると、管理情報格納領域０に記憶されているアドレスをブロックｎから検索する（ステップＳ１６０２）。アドレスを検索すると、検索されたアドレスに書き込まれているポインタデータを読み出す（ステップＳ１６０３）。
【０１４６】
尚、上述した実施の形態では、ユーザデータをブロックの先頭アドレスから順次書き込んでいるが、ブロックの最終アドレスから順次書き込んでも良い。又、上述した実施の形態の管理データ記憶部は、新ユーザデータが書き込まれると、該アプリケーションの管理データを更新していく構成をとっているが、アプリケーション毎に管理データ記憶部を設け、新ユーザデータが書き込まれる度に、管理データ記憶部の先頭又は最終から順に、管理データを順次書き込んでいく構成をとっても良い。その場合、管理データ記憶部の先頭又は最終から順に、最後に書き込まれた管理データを検索して、検索した管理データに基づいてユーザデータを読み出す。
【０１４７】
次に、上述した管理情報格納領域０と管理情報格納領域１とのスワップの方法について説明する。
【０１４８】
図３３は、スワップの方法を説明するための構成図である。
【０１４９】
３３１は、管理データ記憶部である。管理データ記憶部３３１は、図１２に示した管理データ記憶部４と同一である。管理データ記憶部３３１には、０番地のブロック０と1番地のブロック１とがあり、一方に管理情報格納領域０が記憶され、もう一方に管理情報格納領域１が記憶される。
【０１５０】
３３２は、ＣＰＵである。ＣＰＵ３３２は、図１２に示したＣＰＵ２と同一である。ＣＰＵ３３２は、管理情報格納領域１の管理データを更新する際、常に１番地を指定する。更に、ＣＰＵ３３２は、管理情報格納領域０の管理データを読み出す場合、常に０番地を指定する。又、ＣＰＵ３３２は、管理情報格納領域０と管理情報格納領域１とをスワップさせる際、後述するブートブロックレジスタの値を確認して、０又は１をブートブロック指定レジスタに書き込む。
【０１５１】
３３３は、ブートブロック指定レジスタである。ブートブロック指定レジスタ３３３は、管理情報格納領域０と管理情報格納領域１とをスワップさせる際に、ＣＰＵ３３２によって０又は１が書き込まれるものである。
【０１５２】
３３４は、ＥＸＯＲ回路（排他的論理和回路）である。ＥＸＯＲ回路３３４は、ブートブロック指定レジスタ３３３に格納されている値に基づいて、ＣＰＵ３３２からのアドレス信号を反転させる。ブートブロック指定レジスタ３３３に０が格納されている場合、アドレス信号は反転されず、１が格納されている場合、アドレス信号は反転される。
【０１５３】
上述した構成において、管理情報格納領域０と管理情報格納領域１とをスワップさせる方法について説明する。尚、現在ブートブロック指定レジスタ３３３には０が格納されており、ブロック１に管理情報格納領域１が記憶されているものとする。
【０１５４】
ステップＳ１４０９で管理データを更新する際、まずＣＰＵ３３２は、管理データ記憶部の１番地を指定する。すると、ブートブロック指定レジスタ３３３に０が書き込まれているので、現在の管理情報格納領域１はブロック１に記憶されていると判断して、そのまま１番地のブロック１を更新する。１番地のブロック１に書き込まれている管理情報格納領域１を更新後、ＣＰＵ３３２は、ブートブロック指定レジスタ３３３の値を確認し、ブートブロック指定レジスタ３３３の値が０なので、ブートブロック指定レジスタ３３３の値を１にする。
【０１５５】
次の管理データの更新が来ると、ＣＰＵ３３２は管理データ記憶部の１番地を指定するが、ブートブロック指定レジスタ３３３には１が書き込まれているので現在の管理情報格納領域１はブロック０に記憶されていると判断して、ＥＸＯＲ回路３３４はアドレス信号を反転させ０番地のブロック０に書き込まれている管理情報格納領域１を更新する。０番地の管理情報格納領域１を更新後、ＣＰＵ３３２は、ブートブロック指定レジスタ３３３の値を確認し、ブートブロック指定レジスタ３３３の値が１なので、ブートブロック指定レジスタ３３３の値を０にする。
【０１５６】
次に、上述した方法でスワップされたデータの読み出しについて説明する。
【０１５７】
ステップＳ１６０１で、管理情報格納領域０に書き込まれている自身のユーザデータが記憶されているアドレスを確認する際、ＣＰＵ３３２は、管理データ記憶部の０番地を指定する。ここで、ブートブロック指定レジスタ３３３に１が書き込まれている場合、現在の管理情報格納領域０はブロック１に記憶されていると判断して、ＥＸＯＲ回路３３４はアドレス信号を反転させて１番地のブロック１を指定する。一方、ブートブロック指定レジスタ３３３に０が書き込まれている場合、現在の管理情報格納領域０はブロック０に記憶されていると判断して、ＥＸＯＲ回路３３４はアドレス信号を反転させずに０番地のブロック０を指定する。
【実施例５】
【０１５８】
本発明における第五の実施の形態について説明する。
【０１５９】
上述した実施の形態では、フラッシュメモリの内、１ブロックのみをＥＥＰＲＯＭ領域として使用していたが、第五の実施の形態では、第三及び第四の実施の形態のように、ブロックｎに書き込まれている各アプリケーションのユーザデータのアドレスに関する情報が、ユーザデータを書き込む領域とは別の領域に保持されている構成において、複数のブロックをＥＥＰＲＯＭ領域として使用するよう構成したことを特徴とする。尚、本実施の形態では、第四の実施の形態の書き込み方法を使用して説明する。
【０１６０】
図１７は、第五の実施の形態におけるフラッシュメモリ１のブロック図である。
【０１６１】
フラッシュメモリ１は、図１７に示す通り、ブロック０〜ブロックｎの記憶領域に分割されている。これらのブロック０〜ブロックｎは、予め、各種データを記憶するユーザープログラム領域と、ＥＥＰＲＯＭの代替として用いるＥＥＰＲＯＭ領域とが定義されている。尚、第五の実施形態では、ブロックｎとブロックｎ−１とをＥＥＰＲＯＭ領域として用いる。
【０１６２】
ＣＰＵ２は、現在実行中のアプリケーションの新ユーザデータをフラッシュメモリ１に書込む際、ブロックｎ―１に書き込まれているユーザデータを全部消去する。又、ブロックｎ―１のデータを消去後、現在実行中ではないアプリケーションのユーザデータをブロックｎから読み出して、ブロックｎ―１に書き込み、ブロックｎとブロックｎ−１とをスワップさせる。
【０１６３】
更に、ブロックｎに、書き込まれているユーザデータを読み出す際、各アプリケーションが保持している各アプリケーションの最終ユーザデータが書き込まれているアドレスに基づいて、ユーザデータを読み出す。
【０１６４】
次に本実施の形態における、データの書き込みの方法について説明する。
【０１６５】
図１８は、ブロックｎとブロックｎ−１との遷移図であり、図１９は、データ書き込みの動作を示すフローチャートである。図１８（ａ）に示すように、ブロックｎには４種類のアプリケーションのユーザデータが記憶されており、現在実行中であるアプリケーションのユーザデータはＤａｔａ２とし、Ｄａｔａ２を更新する場合について説明する。
【０１６６】
Ｄａｔａ２のユーザデータの書込み処理が開始されると、まず、ブロックｎ―１に記憶されている全ユーザデータを消去する（ステップＳ１９０１）。この時、各ブロックの状態は図１８の（ｂ）となる。
【０１６７】
ブロックｎから更新しないユーザデータを読み込み、更新データと共にブロックｎ―１に書き込む（ステップＳ１９０２）。この時、各ブロックの状態は図１８の（ｃ）となる。
【０１６８】
ブロックｎ−１とブロックｎとをスワップする（ステップＳ１９０３）。この時、各ブロックの状態は図１８の（ｄ）となる。
【０１６９】
次に、上述した書き込み方法で書き込まれたユーザデータの読み出し方法について説明する。
【０１７０】
図２０は、データの読み出しの動作を示すフローチャートである。
【０１７１】
現在実行中のアプリケーションが保持している、自身のユーザデータが記憶されているアドレスを読み出す（ステップＳ２００１）。自身のユーザデータが記憶されているアドレスをブロックｎから検索する（ステップＳ２００２）。検索されたアドレスのデータを読み出す（ステップＳ２００３）。
【０１７２】
上述したような構成をとると、最新のユーザデータが書き込まれたブロックと１つ前のユーザデータが書き込まれたブロックとを保持することができる。
【０１７３】
尚、本実施の形態におけるスワップの方法は、第四の実施の形態で説明したスワップの方法をとるものとする。
【０１７４】
又、上述した実施の形態では、第三と第四の実施の形態のように、ブロックｎに書き込まれている各アプリケーションのユーザデータのアドレスに関する情報が、ユーザデータを書き込む領域とは別の領域に保持されている場合について説明したが、第一と第二の実施の形態の場合においても、複数のブロックをＥＥＰＲＯＭ領域として使用するよう構成してもよい。その場合は、ブロックｎにユーザデータを書き込んでいき、ブロックｎが一杯になった際、ブロックｎとブロックｎ−１とをスワップさせる構成にする。尚、ここでもスワップの方法は、第四の実施の形態で説明したスワップの方法をとるものとする。
【実施例６】
【０１７５】
本発明における第六の実施の形態について説明する。
【０１７６】
本実施の形態では、上述した実施の形態の書き込み方法において、フラッシュメモリのＥＥＰＲＯＭ領域にユーザデータを書き込んだ後、内部ベリファイするよう構成したことを特徴とする。尚、本実施の形態では、第四の実施の形態の書き込み方法を用いて説明する。
【０１７７】
第六の実施の形態における構成は第四の実施の形態と同様であるため、図１２を用い、同様の構成については、同一の番号を付し、詳細な説明は省略する。
【０１７８】
ＣＰＵ２は、新ユーザデータの書き込みが終了すると、ブロックに書き込まれている全データをベリファイする。
【０１７９】
次に、本実施の形態における、ユーザデータを書き込む動作について説明する。
【０１８０】
図２１は、上述した構成の動作を示すフローチャートである。図２２は、ブロックの遷移図である。現在、ブロックｎには、図２２（ａ）に示すように、４種類のアプリケーションのユーザデータである、Ｄａｔａ１〜Ｄａｔａ４が書き込まれているものとする。又、現在実行中であるアプリケーションのユーザデータは、Ｄａｔａ２とし、Ｄａｔａ２を更新する場合について説明する。
【０１８１】
まず、ブロックｎの最終アドレスを検索する（ステップＳ２１０１）。最終アドレスを検索すると、最終アドレスに書き込まれているデータを読み出す（ステップＳ２１０２）。そして、読み出されたデータがブランクであるかを判定する（ステップＳ２１０３）。
【０１８２】
ここで、最終アドレスがブランクであると判定された場合、１つ前のアドレスが存在するか否かを判断する（ステップＳ２１０４）。本実施の形態における書き込み単位は４バイトであるので、４バイト前のアドレスが存在するかを判断する。
【０１８３】
１つ前のアドレスが存在すると判断すると、１つ前のアドレスを検索し（ステップＳ２１０５）、ステップＳ２１０２に戻る。ステップＳ２１０３で、読み出されたデータがブランクでないと判断されるまで、ステップＳ２１０２〜ステップＳ２１０５までを繰り返す。
【０１８４】
ステップＳ２１０３で、読み出されたデータがブランクではないと判定されると、新ユーザデータのデータ量がブッロクｎのブランク領域の容量より大きいか否かを判定する（ステップＳ２１０６）。
【０１８５】
ここで、新ユーザデータのデータ量が、ブッロクｎのブランク領域の容量より大きいと判定された場合、ブロックｎに書き込まれているデータを全部消去する（ステップＳ２１０７）。全データが消去された後、先頭アドレスに新ユーザデータを書き込み、管理データを更新する（ステップＳ２１０８）。
【０１８６】
一方、ステップＳ２１０６で、新ユーザデータのデータ量がブッロクｎのブランク領域の容量より小さいと判定された場合、ステップＳ２１０８へ進み、データがブランクで無いと判断されたアドレスの次のアドレスに新ユーザデータを書き込み、管理データを更新する（ステップＳ２１０８）。この時、ブロックｎは、図２２（ｂ）の状態となる。
【０１８７】
又、ステップＳ２１０４で、１つ前のアドレスが存在しないと判断されると、ブロックｎはＡＬＬブランクであると判断され、ステップＳ２１０８に進む。
【０１８８】
新ユーザデータとデータ量との書き込みが終了すると、ブロックに書き込まれている全データをベリファイする（ステップＳ２１０９）。ここで、ベリファイが失敗した場合、次のアドレスを検索し（ステップＳ２１１０）、全データの最新データを書き込む（ステップＳ２１１１）。この時、ブロックｎの状態は、図２２（ｃ）となる。
【０１８９】
ステップＳ２１０９で、ベリファイが正常に終了されるまでステップＳ２１０９〜ステップＳ２１１１までを繰り返す。
【０１９０】
ステップＳ２１０９でベリファイが正常に終了すると、書き込み処理も終了する。
【０１９１】
次に、上述した方法で書き込まれたユーザデータを読み出す方法について説明する。
【０１９２】
図２３は、ユーザデータを読み出す動作を示したフローチャートである。
【０１９３】
まず、ブロックの最終アドレスから検索を開始する（ステップＳ２３０１）。検索されたアドレスのデータを読み出す（ステップＳ２３０２）。そして、読み出されたデータがブランクであるかを判定する（ステップＳ２３０３）。
【０１９４】
ここで、読み出されたデータがブランクであると判定された場合、１つ前のアドレスが存在するか否かを判断する（ステップＳ２３０４）。
【０１９５】
1つ前のアドレスが存在すると判断されると、そのアドレスを検索し（ステップＳ２３０５）、ステップＳ２３０２に戻る。一方、ステップＳ２３０５で、前のアドレスが存在しないと判断されると、ブロックｎはＡＬＬブランクであると判断し、読み出しの処理を終了する。
【０１９６】
一方、ステップＳ２３０３で、読み出されたデータがブランクではないと判定された場合、そのアドレスに書き込まれているデータ量に基づいて、最新のユーザデータが書き込まれている先頭アドレスを算出する（ステップＳ２３０７）。算出されたアドレスのユーザデータを読み出す（ステップＳ２３０８）。
【０１９７】
尚、本実施の形態では、第四の実施の形態で説明した書き込み方法を用いて説明したが、上述した実施の形態の何れの方法を用いても良い。
【実施例７】
【０１９８】
第六の実施の形態では、ユーザデータ書き込み後に内部ベリファイを行い、内部ベリファイが失敗すると次のブランク領域を検索し、この検索された領域に再度書き込むよう構成されております。しかしながら、内部ベリファイが発生すると言うことは、ユーザデータが正常に書き込めていないことを示す。正常に書き込めていないデータは、同一ブロック内にある、別のデリミタと同じになる可能性がある。もし、同一ブロック内にある、別のデリミタと同じになってしまった場合、本来のユーザデータではない領域を読み出してしまう可能性がある。そこで、第七の実施の形態では、エラーデータを間違って読み出さないように、内部ベリファイが失敗してしまったエラーデータを、ゼロデータ（００ｈ）で上書きするよう構成したことを特徴とする。尚、本実施の形態では、第一の実施の形態の書き込み方法を用いて説明する。
【０１９９】
第七の実施の形態における構成は、第六の実施の形態と同様であるため、詳細な説明は省略する。
【０２００】
本実施の形態における、ユーザデータを書き込む動作について説明する。
【０２０１】
図２４は、本実施の形態の動作を示すフローチャートである。
【０２０２】
まず、ブロックｎの最終アドレスを検索する（ステップＳ２４０１）。最終アドレスを検索すると、最終アドレスに書き込まれているデータを読み出す（ステップＳ２４０２）。そして、読み出されたデータがブランクであるかを判定する（ステップＳ２４０３）。
【０２０３】
ここで、最終アドレスがブランクであると判定された場合、１つ前のアドレスが存在するか否かを判断する（ステップＳ２４０４）。本実施の形態における書き込み単位は４バイトであるので、４バイト前のアドレスが存在するかを判断する。
【０２０４】
１つ前のアドレスが存在すると判断すると、１つ前のアドレスを検索し（ステップＳ２４０５）、ステップＳ２４０２に戻る。ステップＳ２４０３で、読み出されたデータがブランクでないと判断されるまで、ステップＳ２４０２〜ステップＳ２４０５までを繰り返す。
【０２０５】
ステップＳ２４０３で、読み出されたデータがブランクではないと判定されると、新ユーザデータのデータ量がブッロクｎのブランク領域の容量より大きいか否かを判定する（ステップＳ２４０６）。
【０２０６】
ここで、新ユーザデータのデータ量が、ブッロクｎのブランク領域の容量より大きいと判定された場合、ブロックｎに書き込まれているデータを全部消去する（ステップＳ２４０７）。全データが消去された後、先頭アドレスに新ユーザデータを書き込み、管理データを更新する（ステップＳ２４０８）。
【０２０７】
一方、ステップＳ２４０６で、新ユーザデータのデータ量がブッロクｎのブランク領域の容量より小さいと判定された場合、ステップＳ２４０８へ進み、データがブランクで無いと判断されたアドレスの次のアドレスに新ユーザデータを書き込み、管理データを更新する（ステップＳ２４０８）。
【０２０８】
又、ステップＳ２４０４で、１つ前のアドレスが存在しないと判断されると、ブロックｎはＡＬＬブランクであると判断され、ステップＳ２４０８に進む。
【０２０９】
新ユーザデータとデータ量との書き込みが終了すると、ブロックに書き込まれている全データをベリファイする（ステップＳ２４０９）。ここで、ベリファイが失敗した場合、書き込んだユーザデータ及びデータ長をゼロデータで上書きする（ステップＳ２４１０）。そして、次のアドレスを検索し（ステップＳ２４１１）、全データの最新データを書き込む（ステップＳ２４１２）。
【０２１０】
ステップＳ２４０９で、ベリファイが正常に終了されるまでステップＳ２４０９〜ステップＳ２４１２までを繰り返す。
【０２１１】
ステップＳ２４０９でベリファイが正常に終了すると、書き込み処理も終了する。
【０２１２】
尚、上述した実施の形態では、第一の実施の形態で説明した書き込み方法を用いて説明したが、上述した実施の形態の何れの方法を用いても良い。又、第七の実施の形態における、ユーザデータの読出し方法は、上述した第一の実施の形態と同様である。
【実施例８】
【０２１３】
上述した実施の形態において、ユーザデータをフラッシュメモリに書き込む際、予めＥＥＰＲＯＭ領域として１つのブロックを指定している場合、ユーザデータをそのブロックに追記していき、ブランク領域がなくなると、一旦、最新データをRAM等に退避させ、該当ブロックのユーザデータを消去後、ユーザデータを書き戻している。しかしながら、この手順の中で、不慮の事故等で電源が切れると、RAM等の揮発性メモリにある最新データは消えてしまう。そこで、第八の実施の形態では、フラッシュメモリのＥＥＰＲＯＭ領域として２ブロックを使用し、片方のブロックが一杯になった場合、もう一方のブロックにコピーし、元のブロックを消去するように構成したことを特徴とする。
【０２１４】
図２５は、第八の実施の形態におけるフラッシュメモリのブロック図である。
図２５に示す通り、本実施の形態では、ブロックｍとブロックｎとをＥＥＰＲＯＭ領域として使用する。又、ブロックｍとブロックｎとには、予め、有効フラグが入力される有効フラグ領域と、無効フラグが入力される無効フラグ領域と、ユーザデータが入力されるユーザデータ領域とに分かれている。
【０２１５】
次に、ユーザデータをフラッシュメモリに書き込む方法について説明する。尚、本実施の形態におけるユーザデータの書き込み方法は、第一の実施の形態を用いるものとする。
【０２１６】
図２６は第八の実施の形態におけるユーザデータの書き込み方法を示すフローチャートである。
【０２１７】
まず、ブロックｎの最終アドレスを検索する（ステップＳ２６０１）。最終アドレスを検索すると、最終アドレスに書き込まれているデータを読み出す（ステップＳ２６０２）。そして、読み出されたデータがブランクであるかを判定する（ステップＳ２６０３）。
【０２１８】
ここで、ブランクであると判定された場合、ブランクであると判定されたアドレスの１つ前のアドレスが存在するかを判定する（ステップＳ２６０４）。本実施の形態における書き込み単位は４バイトであるので、４バイト前のアドレスが存在するかを判断する。
【０２１９】
１つ前のアドレスが存在すると判断されると、１つ前のアドレスを検索し（ステップＳ２６０５）、ステップＳ２６０２に戻る。ステップＳ２６０３で、読み出されたデータがブランクでないと判断されるまで、ステップＳ２６０２〜ステップＳ２６０５までを繰り返す。
【０２２０】
ステップＳ２６０３で、読み出されたデータがブランクではないと判定されると、新ユーザデータのデータ量がブッロクｎのブランク領域より大きいか否かを判定する（ステップＳ２６０６）。
【０２２１】
ここで、新ユーザデータのデータ量が、ブッロクｎのブランク領域より大きいと判断された場合、ブロックｎに書き込まれている最新ユーザデータをブロックｍにコピーする（ステップＳ２６０７）。最新ユーザデータがブロックｍにコピーされると、ブロックｍの有効フラグ領域にフラグをセットする（ステップＳ２６０８）。そして、ブロックｎの無効フラグ領域にフラグをセットし（ステップＳ２６０９）、ブロックｎの全データを消去する（ステップＳ２６１０）。そして、現在有効フラグ領域にフラグがセットされているブロックｍにユーザデータを書き込んでいく（ステップＳ２６１１）。
【０２２２】
一方、ステップＳ２６０６で、新ユーザデータのデータ量が、ブッロクｎのブランク領域より小さいと判断された場合、有効フラグ領域にフラグをセットして、データがブランクでないと判定されたアドレスの次のアドレスに、ユーザデータを書き込み、その次にそのデータのデータ量を書き込む（ステップＳ２６１２）。
【０２２３】
ステップＳ２６０４で、1つ前のアドレスが存在しないと判断されると、ブロックｎはＡＬＬブランクであると判断され、ステップＳ２６１２へ進む。
【０２２４】
尚、上述した実施の形態では、第一の実施の形態で説明した書き込み方法を用いて説明したが、上述した実施の形態の何れの方法を用いても良い。又、第八の実施の形態における、ユーザデータの読出し方法は、上述した第一の実施の形態と同様である。
【０２２５】
次に、ブロックｍとブロックｎとにおける、フラグのセットの方法について説明する。図２７はブロックｍ及びブロックｎの状態遷移を示す図である。
【０２２６】
まず、両ブロック共、図２７の状態１に示すように何も書き込まれていない状態ですある。次にブロックｎにユーザデータが書き込まれると、状態２になる。そして、ユーザデータが書き込まれたブロックｎを有効ブロックとする為、ブロックｎに有効フラグをセットします。つまり、ブロックｎの有効フラグ領域に００ｈを書き込む。このときの状態は、状態３になる。ユーザデータがブロックｎに書き込まれていき、ブロックｎのブランク領域が無くなると、ブロックｎの最新ユーザデータをブロックｍにコピーする。ここではコピーしたデータをd1とする。このときの状態は、状態４になる。そして、ブロックｍを有効ブロックとする為、ブロックｍに有効フラグをセットする。ここで、両ブロック共、有効フラグがセットされている状態であるが、どちらのブロックにも有効なデータが保存されているので、予め、両ブロック共有効フラグがセットされている場合は、状態ブロック番号が小さい方を有効領域とすると決めておく。このときの状態は状態５となり、有効ブロックはブロックｎとなる。
【０２２７】
次に、状態６に示すように、ブロックｎの無効フラグをセットして、ブロックｍのみを有効領域とする。そして、ブロックｎのデータを消去する。この時の状態は状態７となり、有効ブロックはブロックｍとなる。現在、有効ブロックであるブロックｍにユーザデータが書き込まれていき、ブロックｍのブランク領域が無くなると、ブロックｍの最新ユーザデータをブロックｎにコピーする。この時の状態は、状態８となる。
【０２２８】
ブロックｎを有効ブロックとする為、ブロックｎに有効フラグをセットします。この時の状態は、状態９となる。ここで両ブロック共、有効フラグがセットされている状態であるが、上述したように、ブロック番号が小さい方を有効ブロックとするので、有効ブロックはｎとなる。そして、ブロックｎのみを有効領域とする為に、ブロックｍの無効フラグをセットして、ブロックｍのデータを消去する。
【０２２９】
上述したように本実施の形態は、有効フラグがセットされており、かつ、無効フラグがセットされていないブロックを有効ブロックと判断するように構成されている。
【実施例９】
【０２３０】
次に上述した方法のいずれかを用いて、フラッシュメモリの一部をＥＥＰＲＯＭの代替として使用するデータ処理装置について説明する。
【０２３１】
本発明における第九の実施の形態について説明する。
【０２３２】
従来、フラッシュメモリの一部の領域をＥＥＰＲＯＭの代替として使用する場合、フラッシュメモリのＥＥＰＲＯＭ代替領域全てにユーザデータを書き込み、ＥＥＰＲＯＭ代替領域全てのユーザデータを消去してから新たにユーザデータを書き込もうとすると、ＣＰＵのリソースが専有されて他の処理が停止することがあった。
【０２３３】
そこで、本実施の形態は、上記の従来処理を専用に行うコントローラを搭載して、ＣＰＵのリソースを専有せずに書換えを行うよう構成したことを特徴とする。
【０２３４】
図２８は本発明の実施の形態を示す構成図の一例である。
【０２３５】
２８１は、ＣＰＵである。ＣＰＵ２８１は、データを書き込む際に、データ出力と共にＷＲ信号をアクティブにしてデータを書き込むものである。
【０２３６】
２８２は、ＲＡＭであり、デュアルポートのＲＡＭである。ＲＡＭ２８２は、ＣＰＵ２８１により書き込まれたデータを保持するものである。ＲＡＭ２８２には、固定アドレスにより定義された特定領域が設けられている。尚、特定領域は、後述するコントローラに設けられているレジスタ等で予め設定されたアドレスによって定義しても良い。
【０２３７】
２８３は、デコーダである。デコーダ２８３は、ＣＰＵ２８１がＷＲ信号をアクティブにすると、書き込み先のアドレスをデコードするものである。
【０２３８】
２８４はコントローラである。コントローラ２８４は、ＣＰＵ２８１がＷＲ信号をアクティブにすると、デコーダ２８３がデコードしたアドレスを読み込み、そのアドレスがＲＡＭ２８２の特定領域である場合、アドレス出力と共にＲＤ信号をアクティブにして、ＲＡＭ２８２の特定領域に書き込まれたデータを読み出すものである。
【０２３９】
２８５は、フラッシュメモリ用コントローラである。フラッシュメモリ用コントローラ２８５は、コントローラ２８４が読み出したユーザデータを、後述するフラッシュメモリのＥＥＰＲＯＭ代替領域に書き込む。尚、ＥＥＰＲＯＭ代替領域にユーザデータを書き込む方法は、第一の実施の形態〜第六の実施の形態の何れを用いても良い。又、フラッシュメモリ用コントローラ２８５は、後述するフラッシュメモリのＥＥＰＲＯＭ領域に書き込まれたデータを読み出すものである。
【０２４０】
２８６は、フラッシュメモリである。フラッシュメモリ２８６は、プログラムを記憶するプログラム領域と、ＲＡＭ２８２の特定領域に書き込まれたデータを記憶するＥＥＰＲＯＭ代替領域２８６１とに分けられている。
【０２４１】
次に上述したシステムにおけるデータの書き込みの方法について説明する。
【０２４２】
ＣＰＵ２８１がＲＡＭ２８２に対するＷＲ信号をアクティブにすると、デコーダ２８３は、書き込み先のアドレスをデコードし、書き込み先がＲＡＭ２８２の特定領域の場合、コントローラ２８４は、ＲＡＭ２８２に対するＲＤ信号をアクティブし、ＲＡＭ２８２の特定領域に書き込まれたデータを読み出す。
【０２４３】
コントローラ２８４が読み出したデータは、フラッシュメモリ用コントローラ２８５によりフラッシュメモリ２８６のＥＥＰＲＯＭ代替領域に書き込まれる。ＥＥＰＲＯＭ代替領域２８６１にユーザデータが書き込まれると、フラッシュメモリ用コントローラ２８５は、コントローラ２８４にステータス送信する。
【０２４４】
コントローラ２８４はステータスを受信すると、終了フラグをセットすることにより、ＥＥＰＲＯＭ代替領域２８６１に書き込みが終了したことをＣＰＵ２８１に知らせる。
【０２４５】
上述した構成をとると、ＣＰＵ２８１のリソースを専有せずに、フラッシュメモリ２８６のＥＥＰＲＯＭ代替領域２８６１の書換えができる。
【実施例１０】
【０２４６】
次に、本発明における第十の実施の形態について説明する。
【０２４７】
上述した構成では、ＥＥＰＲＯＭ代替領域への書き込みがＲＡＭの特定領域にユーザデータが書き込まれる度に行われるため、フラッシュメモリの寿命を縮ませることになる。そこで、本実施の形態では、ＣＰＵがスタートトリガにセットした場合、若しくは周辺マクロから割り込みがあった場合にのみフラッシュメモリのＥＥＰＲＯＭ領域にユーザデータを書き込むように構成したことを特徴とする。
【０２４８】
図２９は第十の実施の形態における構成図である。
【０２４９】
２９１は、ＣＰＵである。ＣＰＵ２９１は、データを書き込む際に、データ出力と共にＷＲ信号をアクティブにしてデータを書き込むものである。又、ＣＰＵ２９１は、例えば、電源遮断時等の予め設定された時に、スタートトリガをセットするものである。
【０２５０】
２９２は、ＲＡＭであり、デュアルポートのＲＡＭである。ＲＡＭ２９２は、ＣＰＵ２９１により書き込まれたデータを保持するものである。ＲＡＭ２９２には、固定アドレスにより定義された特定領域が設けられている。尚、特定領域は、後述するコントローラに設けられているレジスタ等で予め設定されたアドレスによって定義しても良い。
【０２５１】
２９４はコントローラである。コントローラ２９４は、ＣＰＵ２９１によりスタートトリガがセットされると、又は後述する周辺マクロから割り込みトリガがセットされると、アドレス出力と共にＲＤ信号をアクティブにして、ＲＡＭ２９２の特定領域に書き込まれたデータを読み出すものである。
【０２５２】
２９５は、フラッシュメモリ用コントローラである。フラッシュメモリ用コントローラ２９５は、コントローラ２９４が読み出したユーザデータを、フラッシュメモリ２９６のＥＥＰＲＯＭ代替領域２９６１に書き込む。尚、ＥＥＰＲＯＭ代替領域にユーザデータを書き込む方法は、第一の実施の形態〜第六の実施の形態の何れを用いても良い。又、フラッシュメモリ用コントローラ２９５は、後述するフラッシュメモリのＥＥＰＲＯＭ領域に書き込まれたデータを読み出すものである。
【０２５３】
２９６は、フラッシュメモリである。フラッシュメモリ２９６は、プログラムを記憶するプログラム領域と、ＲＡＭ２９２の特定領域に書き込まれたデータを記憶するＥＥＰＲＯＭ代替領域２９６１とに分けられている。
【０２５４】
２９７は、周辺マクロである。周辺マクロ２９７は、例えば、ＬＶＩ（低電圧検出回路）マクロがバッテリーの電圧低下を検出した場合等の予め設定された時に、割り込みトリガをセットするものである。
【０２５５】
次に上述したシステムにおけるデータの書き込みの方法について説明する。
【０２５６】
まず、ＣＰＵ２９１は、ＲＡＭ２９２に対してＷＲ信号をアクティブにして、ＲＡＭ２９２の特定領域にデータの書き込む。ＲＡＭ２９２の特定領域にデータが書き込まれた後、コントローラ２９４は、ＣＰＵ２９１によりスタートトリガがセットされると、若しくは周辺マクロ７により割り込みトリガがセットされると、ＲＡＭ２９２に対するＲＤ信号をアクティブにして、特定領域に書き込まれたデータを読み出す。
【０２５７】
コントローラ２９４が読み出したユーザデータは、フラッシュメモリ用コントローラ２９５によりフラッシュメモリ２９６のＥＥＰＲＯＭ代替領域２９６１に書き込まれる。ＥＥＰＲＯＭ代替領域２９６１にユーザデータが書き込まれると、フラッシュメモリ用コントローラ２９５は、コントローラ２９４にステータスを送信する
コントローラ２９４はステータスを受信すると、終了フラグをセットすることにより、ＥＥＰＲＯＭ代替領域２９６１に書き込みが終了したことをＣＰＵ２９１に知らせる。
【０２５８】
上述したような構成をとると、ＣＰＵ２９１がスタートトリガにセットした場合、若しくは周辺マクロから割り込みがあった場合など、必要な場合にのみ、フラッシュメモリ２９６のＥＥＰＲＯＭ領域２９６１にユーザデータを書き込むので、フラッシュメモリの寿命を延ばすことができる。
【実施例１１】
【０２５９】
次に、第十一の実施の形態について説明する。
【０２６０】
本実施の形態では、上述した第九の実施の形態のデュアルポートＲＡＭをシングルポートＲＡＭにした場合について説明する。
【０２６１】
図３０は第十一の実施の形態における構成図である。
【０２６２】
３０１は、ＣＰＵである。ＣＰＵ３０１は、データを書き込む際、データ出力と共にＷＲ信号をアクティブにして、データを書き込むものである。
【０２６３】
３０２は、ＲＡＭである。ＲＡＭ３０２は、ＣＰＵ３０１により書き込まれたデータを保持するものである。ＲＡＭ３０２には、固定アドレスにより定義された特定領域が設けられている。尚、特定領域は、後述するコントローラに設けられているレジスタ等で予め設定されたアドレスによって定義しても良い。
【０２６４】
３０３は、デコーダである。デコーダ３０３は、ＣＰＵ３０１がＷＲ信号をアクティブにすると、書き込み先のアドレスをデコードするものである。
【０２６５】
３０４はコントローラである。コントローラ３０４にはレジスタ３０４１が設けられている。レジスタ３０４１は、ＣＰＵ３０１がＷＲ信号をアクティブにすると、デコーダ３０３がデコードしたアドレスを読み込み、そのアドレスがＲＡＭ３０２の特定領域である場合、ＲＡＭ２の特定領域に書き込まれたデータをラッチする。尚、レジスタ３０３１は独立して設けられてもよい。
【０２６６】
３０５は、フラッシュメモリ用コントローラである。フラッシュメモリ用コントローラ３０５は、コントローラ３０４が読み出したユーザデータを、フラッシュメモリのＥＥＰＲＯＭ代替領域に書き込む。尚、ＥＥＰＲＯＭ代替領域３０６１にユーザデータを書き込む方法は、第一の実施の形態〜第六の実施の形態の何れを用いても良い。又、フラッシュメモリ用コントローラ３０５は、後述するフラッシュメモリのＥＥＰＲＯＭ領域に書き込まれたデータを読み出すものである。
【０２６７】
３０６は、フラッシュメモリである。フラッシュメモリ３０６は、プログラムを記憶するプログラム領域と、ＲＡＭ３０２の特定領域に書き込まれたデータを記憶するＥＥＰＲＯＭ代替領域３０６１とに分けられている。
【０２６８】
次に上述した構成のデータの書き込みの方法について説明する。
【０２６９】
ＣＰＵ３０１がＲＡＭ３０２に対するＷＲ信号をアクティブにすると、デコーダ３は、書き込み先のアドレスをデコードし、書き込み先がＲＡＭ３０２の特定領域の場合、レジスタ３０４１は、そのデータをラッチする。レジスタ３０４１にデータがラッチされると、コントローラ３０４はレジスタ３０４１のデータを読み出す。
【０２７０】
コントローラ３０４が読み出したデータは、フラッシュメモリ用コントローラ３０５により、ＥＥＰＲＯＭ代替領域３０６１に書き込まれる。ＥＥＰＲＯＭ代替領域３０６１にユーザデータが書き込まれると、フラッシュメモリ用コントローラ３０５は、コントローラ３０４にステータスを送信する。
【０２７１】
コントローラ３０４はステータスを受信すると、終了フラグをアクティブにして、ＥＥＰＲＯＭ代替領域に書き込みが終了したことをＣＰＵに知らせる。
【０２７２】
上述したような構成をとると、シングルポートＲＡＭを用いた構成であっても、ＣＰＵ３０１のリソースを専有せずに、フラッシュメモリ３０６のＥＥＰＲＯＭ領域３０６１の書換えができる。
【実施例１２】
【０２７３】
次に、本発明における第十二の実施の形態について説明する。
【０２７４】
上述した第十一の実施の形態では、シングルポートＲＡＭを使用した場合について説明した。しかしながら、ＥＥＰＲＯＭ代替領域への書き込みがＲＡＭの特定領域にユーザデータが書き込まれる度に行われるため、フラッシュメモリの寿命を縮ませることになる。そこで、本実施の形態では、シングルポートＲＡＭを使用し、更に、ＣＰＵがスタートトリガにセットした場合、若しくは周辺マクロから割り込みがあった場合に、フラッシュメモリのＥＥＰＲＯＭ領域にユーザデータを書き込むように構成したことを特徴とする。
【０２７５】
図３１は、第十二の実施の形態の構成図である。
【０２７６】
３１１は、ＣＰＵである。ＣＰＵ３１１は、データを書き込む際、データ出力と共にＷＲ信号をアクティブにして、データを書き込むものである。又、ＣＰＵ３１１は、例えば、電源遮断時など予め設定された時に、スタートトリガをセットするものである。
【０２７７】
３１２は、ＲＡＭであり、シングルポートＲＡＭである。ＲＡＭ３１２は、ＣＰＵ３１１により書き込まれたデータを保持するものである。ＲＡＭ３１２には、固定アドレスにより定義された特定領域が設けられている。尚、特定領域は、後述するコントローラに設けられているレジスタ等で予め設定されたアドレスによって定義しても良い。
【０２７８】
３１３は、デコーダである。デコーダ３１３は、ＣＰＵ３１１がＷＲ信号をアクティブにすると、書き込み先のアドレスをデコードするものである。
【０２７９】
３１４はコントローラである。コントローラ３１４にはレジスタ３１４１が設けられている。レジスタ３１４１は、ＣＰＵ３１１がＷＲ信号をアクティブにすると、デコーダ３１３がデコードしたアドレスを読み込み、そのアドレスがＲＡＭ３１２の特定領域である場合、ＲＡＭ３１２の特定領域に書き込まれたデータをラッチする。尚、レジスタ３１３１は独立して設けられてもよい。
【０２８０】
又、コントローラ３１４は、ＣＰＵ３１１によりスタートトリガが、又は後述する周辺マクロにより割り込みトリガがセットされると、レジスタ３１４１のデータを読み出す。
【０２８１】
３１５は、フラッシュメモリ用コントローラである。フラッシュメモリ用コントローラ３１５は、コントローラ３１４が読み出したユーザデータを、フラッシュメモリのＥＥＰＲＯＭ代替領域に書き込む。尚、ＥＥＰＲＯＭ代替領域３１６１にユーザデータを書き込む方法は、第一の実施の形態〜第六の実施の形態の何れを用いても良い。又、フラッシュメモリ用コントローラ３１５は、後述するフラッシュメモリのＥＥＰＲＯＭ領域に書き込まれたデータを読み出すものである。
【０２８２】
３１６は、フラッシュメモリである。フラッシュメモリ３１６は、プログラムを記憶するプログラム領域と、ＲＡＭ３１２の特定領域に書き込まれたデータを記憶するＥＥＰＲＯＭ代替領域３１６１とに分けられている。
【０２８３】
３１７は周辺マクロである。周辺マクロ３１７は、例えば、ＬＶＩ（低電圧検出回路）マクロがバッテリーの電圧低下を検出した場合等の予め設定された時に、割り込みトリガをセットするものである。
【０２８４】
次に上述した構成のデータの書き込みの方法について説明する。
【０２８５】
ＣＰＵ３１１は、ＲＡＭ３１２に対するＷＲ信号をアクティブにして、ＲＡＭ３１２の特定領域にデータを書き込む。ＣＰＵ３１１がＲＡＭ３１２に対するＷＲ信号をアクティブにすると、デコーダ３１３は、書き込み先のアドレスをデコードし、書き込み先がＲＡＭ３１２の特定領域の場合、レジスタ３１４１は、そのデータをラッチする。レジスタ３１４１にデータがラッチされた後、コントローラ３１４は、ＣＰＵ３１１によりスタートトリガがセットされると、若しくは周辺マクロ３１７により割り込みトリガがセットされると、レジスタ３１４１のデータを読み出す。
【０２８６】
コントローラ３１４が読み出したデータは、フラッシュメモリ用コントローラ３１５により、ＥＥＰＲＯＭ代替領域３１６１に書き込まれる。ＥＥＰＲＯＭ代替領域３１６１にユーザデータが書き込まれると、フラッシュメモリ用コントローラ３１５は、コントローラ３１４にステータスを送信する。
【０２８７】
コントローラ３１４はステータスを受信すると、終了フラグをアクティブにして、ＥＥＰＲＯＭ代替領域に書き込みが終了したことをＣＰＵに知らせる。
【０２８８】
上述したような構成にすると、シングルポートＲＡＭを用いた構成であっても、ＣＰＵ３１１がスタートトリガにセットした場合、若しくは周辺マクロから割り込みがあった場合など、必要な場合にのみ、フラッシュメモリ３１６のＥＥＰＲＯＭ領域３１６１にユーザデータを書き込むので、フラッシュメモリの寿命を延ばすことができる。
【実施例１３】
【０２８９】
次に、本発明における第十三の実施の形態について説明する。
【０２９０】
第十三の実施の形態では、ＲＡＭを用いない構成について説明する。
【０２９１】
図３２は、第十三の実施の形態における構成図である。
【０２９２】
３２１は、ＣＰＵである。ＣＰＵ３２１は、データを書き込む際、データ出力と共にＷＲ信号をアクティブにして、データを書き込むものである。又、ＣＰＵ３２１は、例えば、電源遮断時など、予め設定された時に、スタートトリガをセットする。
【０２９３】
３２４はコントローラである。コントローラ３２４は、後述するレジスタにデータが書き込まれると、その書き込まれたデータを読み出すものである。
【０２９４】
３２５は、フラッシュメモリ用コントローラである。フラッシュメモリ用コントローラ３２５は、コントローラ３２４が読み出したユーザデータを、フラッシュメモリのＥＥＰＲＯＭ代替領域に書き込む。尚、ＥＥＰＲＯＭ代替領域にユーザデータを書き込む方法は、第一の実施の形態〜第六の実施の形態の何れを用いても良い。
【０２９５】
３２６は、フラッシュメモリである。フラッシュメモリ３２６は、プログラムを記憶するプログラム領域と、レジスタに書き込まれたデータを記憶するＥＥＰＲＯＭ代替領域３２６１とに分けられている。
【０２９６】
３２７は周辺マクロである。周辺マクロ７は、例えば、ＬＶＩ（低電圧検出回路）マクロがバッテリーの電圧低下を検出した場合等の予め設定された時に、割り込みトリガをセットするものである。
【０２９７】
３２８は、レジスタである。レジスタ３２８は、ＣＰＵ３２１により書き込まれたデータを保持するものである。
【０２９８】
次に上述したシステムにおけるデータの書き込みの方法について説明する。
【０２９９】
ＣＰＵ３２１は、レジスタ３２８に対するＷＲ信号をアクティブにして、レジスタ３２８にデータを書き込む。ＣＰＵ３２１がレジスタ３２８に対するＷＲ信号をアクティブにすると、コントローラ３２４は、レジスタ３２８のデータを読み出す。
【０３００】
コントローラ３２４が読み出したデータは、フラッシュメモリ用コントローラ３２５により、ＥＥＰＲＯＭ代替領域３２６１に書き込まれる。ＥＥＰＲＯＭ代替領域３２６１にユーザデータが書き込まれると、フラッシュメモリ用コントローラ３２５は、コントローラ３２４にステータスを送信する。
【０３０１】
コントローラ３２４はステータスを受信すると、終了フラグをアクティブにして、ＥＥＰＲＯＭ代替領域に書き込みが終了したことをＣＰＵに知らせる。
【０３０２】
尚、上述した動作では、ＣＰＵ３２１によりスタートトリガがセットされた場合に、コントローラ３２４がレジスタ３２８のデータを読み出す動作の説明をしたが、周辺マクロ３２７により割り込みトリガがセットされた場合に、レジスタ３２８のデータを読み出すようにしてもよい。
【産業上の利用可能性】
【０３０３】
上述した本発明は、フラッシュメモリを搭載した機器に適用することができる。
【図面の簡単な説明】
【０３０４】
【図１】本発明の実施の形態の構成図である。
【図２】本発明の第一の実施の形態におけるフラッシュメモリの構成図である。
【図３】本発明の第一の実施の形態におけるデータの書込のフロー図である。
【図４】本発明の第一の実施の形態におけるデータの読出のフロー図である。
【図５】本発明の第二の実施の形態におけるフラッシュメモリの構成図である。
【図６】本発明の第二の実施の形態におけるデータの書込のフロー図である。
【図７】本発明の第二の実施の形態におけるデータの読出のフロー図である。
【図８】本発明の第三の実施の形態におけるフラッシュメモリの構成図である。
【図９】本発明の第三の実施の形態におけるデータの書込のフロー図である。
【図１０】本発明の第三の実施の形態におけるブロックの遷移図である。
【図１１】本発明の第三の実施の形態におけるデータの読出のフロー図である。
【図１２】本発明の第四の実施の形態における構成図である。
【図１３】本発明の第四の実施の形態におけるフラッシュメモリの構成図である。
【図１４】本発明の第四の実施の形態におけるデータの書込のフロー図である。
【図１５】本発明の第四の実施の形態におけるブロックの遷移図である。
【図１６】本発明の第四の実施の形態におけるデータの読出しのフロー図である。
【図１７】本発明の第五の実施の形態におけるブロックの構成図である。
【図１８】本発明の第五の実施の形態におけるブロックの遷移図である。
【図１９】本発明の第五の実施の形態におけるデータの書込のフロー図である。
【図２０】本発明の第五の実施の形態におけるデータの読出のフロー図である。
【図２１】本発明の第六の実施の形態におけるデータの書込のフロー図である。
【図２２】本発明の第六の実施の形態におけるブロックの遷移図である。
【図２３】本発明の第六の実施の形態におけるデータの読出のフロー図である。
【図２４】本発明の第七の実施の形態におけるブロックの構成図である。
【図２５】本発明の第七の実施の形態におけるデータの書込のフロー図である。
【図２６】本発明の第八の実施の形態におけるブロックの構成図である。
【図２７】本発明の第八の実施の形態におけるデータの書込のフロー図である。
【図２８】本発明の第九の実施の形態を説明するための構成図である。
【図２９】本発明の第十の実施の形態を説明するための構成図である。
【図３０】本発明の第十一の実施の形態を説明するための構成図である。
【図３１】本発明の第十二の実施の形態を説明するための構成図である。
【図３２】本発明の第十三の実施の形態を説明するための構成図である。
【図３３】本発明におけるスワップを説明するための構成図である。
【符号の説明】
【０３０５】
１      フラッシュメモリ
２      ＣＰＵ
３      ＲＯＭ
４      管理データ記憶部
２８１  ＣＰＵ
２８２  ＲＡＭ
２８３  デコーダ
２８４  コントローラ
２８５  フラッシュメモリ用コントローラ
２８６  フラッシュメモリ
３３１    管理データ記憶部
３３２    ＣＰＵ
３３３    ブートブロック指定レジスタ
３３４    ＥＸＯＲ回路
【図１】
2005092659.tif 000003
【図２】
2005092659.tif 000004
【図３】
2005092659.tif 000005
【図４】
2005092659.tif 000006
【図５】
2005092659.tif 000007
【図６】
2005092659.tif 000008
【図７】
2005092659.tif 000009
【図８】
2005092659.tif 000010
【図９】
2005092659.tif 000011
【図１０】
2005092659.tif 000012
【図１１】
2005092659.tif 000013
【図１２】
2005092659.tif 000014
【図１３】
2005092659.tif 000015
【図１４】
2005092659.tif 000016
【図１５】
2005092659.tif 000017
【図１６】
2005092659.tif 000018
【図１７】
2005092659.tif 000019
【図１８】
2005092659.tif 000020
【図１９】
2005092659.tif 000021
【図２０】
2005092659.tif 000022
【図２１】
2005092659.tif 000023
【図２２】
2005092659.tif 000024
【図２３】
2005092659.tif 000025
【図２４】
2005092659.tif 000026
【図２５】
2005092659.tif 000027
【図２６】
2005092659.tif 000028
【図２７】
2005092659.tif 000029
【図２８】
2005092659.tif 000030
【図２９】
2005092659.tif 000031
【図３０】
2005092659.tif 000032
【図３１】
2005092659.tif 000033
【図３２】
2005092659.tif 000034
【図３３】
2005092659.tif 000035