(57)【要約】【課題】データを書き込む複数のデータ領域の１つを指示するポインタ値を、書き込むポインタ値領域への書き込みが不可になっても、データ領域への書き込みを可能にする。【解決手段】不揮発性メモリ６内に、データを書き込むデータ領域８ｎを複数確保するとともに、データ領域８ｎを指示するポインタ値を書き込むポインタ値領域７ｍを複数確保し、ポインタ値で指示されたデータ領域８ｎが無効になった時点で、他のデータ領域８ｎを指示するようにポインタ値を変更するときに、ポインタ値領域７ｍのポインタ値を更新したか否かを判断し、結果が更新しなかったと判断されたときにポインタ値を他のポインタ値領域７ｍに書き込む。【選択図】図２
2008305476.tif 000002
【特許請求の範囲】
【請求項１】
書き込み回数に限度がある不揮発性メモリ内に、データを書き込むデータ領域を複数確保し、データを書き込むデータ領域をポインタ値で指示し、前記データ領域が無効になった時点で、他のデータ領域を指示するようにポインタ値を更新ポインタ値に変更する不揮発性メモリへのデータ書き込み方法において、
ポインタ値を書き込むポインタ値領域を複数確保し、データ領域が無効になった時点で、他のデータ領域を指示するようにポインタ値を更新ポインタに変更するときに、更新ポインタ値をポインタ値領域に書き込んだ後に、ポインタ値が更新ポインタ値に更新したか否かを判断し、結果が更新しなかったと判断されたときに他のポインタ値領域に更新ポインタ値を書き込み、ポインタ値が更新ポインタ値に更新されるまでこれらの処理動作を続けることを特徴とする不揮発性メモリへのデータ書き込み方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データの書き込み及び消去が可能であって、書き込み回数に限度がある不揮発性メモリへのデータ書き込み方法に関し、特に不揮発性メモリ内に、データを書き込むデータ領域を複数確保し、データを書き込むデータ領域をポインタ値で指示し、前記データ領域が無効になった時点で、他のデータ領域を指示するようにポインタ値を更新ポインタ値に変更する不揮発性メモリへのデータ書き込み方法に関する。
【背景技術】
【０００２】
従来より、特許文献１に示す通り、データの書き込み及び消去が可能であって、書き込み回数に限度がある不揮発性メモリ内に、データを書き込むデータ領域を複数確保するとともに、データ領域を指示するポインタ値を書き込むポインタ値領域とを確保し、ポインタ値で指示されるデータ領域にデータの書き込みを行い、データ領域の有効／無効をチェックサムを計算することにより判断し、結果が無効と判断されたときに他のデータ領域を指示するようにポインタ値を変更する方法があった。
【０００３】
この方法では、データ領域を複数確保し、データ領域が無効になった時点で、別のデータ領域にデータを書き込むので、データ領域の数をｎとすると書き込み可能な回数がｎ倍になる利点があった。しかしこの方法では、ポインタ値領域が初期不良で元々ポインタ値を書き込むことができない場合や、何らかの影響でポインタ値を書き込むことができなくなった場合、データ領域を指示するようにポインタ値を更新することができず、データ領域への書き込みが不可になる欠点があった。
【特許文献１】特開平３−１４２７９４号
【発明の開示】
【発明が解決しようとする課題】
【０００４】
そこで本発明では、前記欠点を解消するために、データを書き込む複数のデータ領域の１つを指示するポインタ値を、書き込むポインタ値領域への書き込みが不可になっても、データ領域への書き込みが可能な不揮発性メモリへのデータ書き込み方法を提案する点を課題としている。
【課題を解決するための手段】
【０００５】
前記課題を解決するために本発明は、書き込み回数に限度がある不揮発性メモリ内に、データを書き込むデータ領域を複数確保し、データを書き込むデータ領域をポインタ値で指示し、前記データ領域が無効になった時点で、他のデータ領域を指示するようにポインタ値を更新ポインタ値に変更する不揮発性メモリへのデータ書き込み方法において、ポインタ値を書き込むポインタ値領域を複数確保し、データ領域が無効になった時点で、他のデータ領域を指示するようにポインタ値を更新ポインタに変更するときに、更新ポインタ値をポインタ値領域に書き込んだ後に、ポインタ値が更新ポインタ値に更新したか否かを判断し、結果が更新しなかったと判断されたときに他のポインタ値領域に更新ポインタ値を書き込み、ポインタ値が更新ポインタ値に更新されるまでこれらの処理動作を続けることを特徴とする不揮発性メモリへのデータ書き込み方法を提案する。
【発明の効果】
【０００６】
本発明によれば、データを書き込むデータ領域を複数確保し、データを書き込むデータ領域をポインタ値で指示し、前記データ領域が無効になった時点で、他のデータ領域を指示するようにポインタ値を更新ポインタ値に変更するので、データ領域の数をｎとすると書き込み可能な回数がｎ倍になる。また、ポインタ値領域を複数確保し、ポインタ値領域のポインタ値が更新ポインタ値に更新しなかったとき、別のポインタ値領域にポインタ値を書き込むので、ポインタ値領域への書き込みが不可になっても、データ領域への書き込みが可能である。
【実施例】
【０００７】
以後、本発明の実施形態を図面に従って説明する。まず、実施形態の装置構成を図１に従って説明する。なお、点線の矢印は信号の方向を示す。２はＣＰＵでプログラムを実行して外部装置の制御を行う。３はデータの書き込み及び読み出しが可能なＲＡＭで、ＣＰＵ２がプログラムを実行する上で一時的に必要なデータを記憶するのに用いられる。ＲＡＭ３は揮発性メモリで、ＲＡＭ３に記憶されたデータは電源が供給されなくなると消えてしまう。４はデータの読み出しのみ可能なＲＯＭで、ＣＰＵ２が実行するプログラムを記憶するのに用いられる。ＲＯＭ４は不揮発性メモリで、ＲＯＭ４に記憶されたデータは電源が供給されなくなっても消えない。５は外部装置と接続されるＩ／Ｏで、これを介してマイクロコンピュータ１は外部装置との通信を行う。６はデータの書き込み及び読み出しが可能なＥＥＰＲＯＭ６でＩ／Ｏ５と接続されており、データの書き込み回数に限度がある。ＥＥＰＲＯＭ６は不揮発性メモリで、ＲＯＭ４と同様にＥＥＰＲＯＭ６に記憶されたデータは電源が供給されなくなっても消えない。このＥＥＰＲＯＭ６へのデータ書き込みに、本発明は適用されるのである。
【０００８】
次に、ＥＥＰＲＯＭ６の領域構成を図２に従って説明する。ＥＥＰＲＯＭ６は１つのアドレスに１バイトの値を書き込めるものとし、ＥＥＰＲＯＭ６が初期状態であると全てのアドレスには、０ＸＦＦ（１０進数で２５５）が書き込まれているものとする。ＥＥＰＲＯＭ６内には、１バイトのポインタ値領域７ｍ（ｍ＝０，１，２）が３個、４バイトのデータ領域８ｎ（ｎ＝０，１，……，４）が５個、それぞれ確保されている。データ領域８ｎにはデータが書き込まれ、ポインタ値領域７ｍにはデータ領域８ｎを指示するポインタ値が書き込まれる。データ領域８ｎの末尾の領域はサムデータ９ｎ（ｎ＝０，１，……，４）で、ＥＥＰＲＯＭ６のデータ領域８ｎに書き込まれるデータの全加算値が書き込まれる。ポインタ値領域７ｍとデータ領域８ｎとの境界には、これらの領域を区切るために１バイトの領域が空けられている。
【０００９】
なお、１つのアドレスに書き込める値の大きさは１バイトであるがこれに限るものではない。また、データ領域８ｎの容量は３バイトであるがこれに限るものではなく、このために確保される領域がＥＥＰＲＯＭ６の容量内に収まりさえすれば良い。さらに、ポインタ値領域７ｍは３個でデータ領域８ｎの数は５であるが複数であれば良く、これらのために確保される領域がＥＥＰＲＯＭ６の容量内に収まりさえすれば良い。
【００１０】
次に、ＲＡＭ３の領域構成を図３に従って説明する。ＥＥＰＲＯＭ６と同様にＲＡＭ３も１つのアドレスに１バイトの値を書き込めるものとする。ＲＡＭ３内には、ＥＥＰＲＯＭ６のポインタ値領域７ｍから読み出されるポインタ値を書き込むポインタ値領域１０と、ＥＥＰＲＯＭ６のデータ領域８ｎから読み出されるデータを書き込む４バイトのデータ領域１１と、ポインタ値領域７ｍを指示するポインタ値番号１２と、データ領域８ｎを指示するデータ番号１３と、ＥＥＰＲＯＭ６の初期設定を行うか否かを示す初期設定フラグ１４とがそれぞれ確保されている。データ領域８ｎの末尾の領域はサムデータ１５でＲＡＭ３のデータ領域１１に書き込まれたデータの全加算値が書き込まれる。ポインタ番号がｍの場合はポインタ値領域７ｍを指示するものとし、データ番号がｎの場合はデータ領域８ｎを指示するものとする。なお、１つのアドレスに書き込める値の大きさは１バイトであるがこれに限るものではない。
【００１１】
以後、データ書き込み及びデータ読み出しを説明する。データ書き込み及びデータ読み出しが行われる前には、図４に示す通りポインタスキャン（Ｓ１，Ｓ３）がまず行われる。この処理動作では、ＥＥＰＲＯＭ６のデータ領域８ｎを指示するポインタ値をＲＡＭ３のデータ番号１３に書き込む。そして、ＲＡＭ３のデータ領域１１からポインタ値が指示するＥＥＰＲＯＭ６のデータ領域８ｎにデータを書き込んだり（Ｓ２）、ポインタ値が指示するＥＥＰＲＯＭ６のデータ領域８ｎからデータをＲＡＭ３のデータ領域１１に読み出したり（Ｓ４）するのである。
【００１２】
まず、ポインタスキャン（Ｓ１，Ｓ３）を図５に示すフローチャートに従って説明する。最初にポインタ値番号１２を０にセットし（Ｓ５）、データ番号１３を０にセットし（Ｓ６）、初期設定フラグ１４を１にセットする（Ｓ６）。続いて、ポインタ値番号１２が指示するＥＥＰＲＯＭ６のポインタ値領域７ｍのポインタ値をＲＡＭ３のポインタ値領域１０に読み出し（Ｓ８）、このポインタ値が０ＸＦＦであるか否かを判断する（Ｓ９）。ポインタ値番号１２は０なので、読み出されるポインタ値はＥＥＰＲＯＭ６の１番先頭のポインタ値領域７０のポインタ値である。
【００１３】
Ｓ９でＥＥＰＲＯＭ６が初期状態である場合、読み出されるポインタ値は０ＸＦＦであるので処理動作はＳ１５へ進む。Ｓ１５では初期設定フラグ１４が１であるか否かを判断する（Ｓ１５）。初期設定フラグ１４は１のままなので処理動作はＳ１６へ進む。Ｓ１６ではデータ番号を０にセットし（Ｓ１６）、初期設定のデータをＥＥＰＲＯＭ６のデータ領域８ｎに書き込む（Ｓ１７）。この処理動作は後述する。この結果、ＥＥＰＲＯＭ６のデータ領域８０に初期設定のデータが書き込まれ、ＥＥＰＲＯＭ６の１番先頭のポインタ値領域７０に０が書き込まれる。このようにしてポインタスキャンは終了する。
【００１４】
また、Ｓ９でＥＥＰＲＯＭ６に初期設定のデータ書き込みが終わっている場合、読み出されるポインタ値は０であるので処理動作はＳ１０へ進む。Ｓ１０ではポインタ値がＥＥＰＲＯＭ６のデータ領域８ｎのどれかを指示しているかを判断する（Ｓ１０）。ＥＥＰＲＯＭ６のポインタ値領域７ｍの数は３個であり、読み出されたポインタ値は０でＥＥＰＲＯＭ６のデータ領域８０を指示しているので、処理動作はＳ１１へ進む。Ｓ１１ではデータ番号１３にＳ８で読み出したポインタ値をセットする（Ｓ１１）。この結果、データ番号１３に０をセットするが、データ番号１３には元々０がセットされているので値そのものは変化しない。続いて、初期設定フラグ１４を０にセットし（Ｓ１２）、ポインタ値番号１２をインクリメントし（Ｓ１３）、ポインタ値番号１２がＥＥＰＲＯＭ６のポインタ値領域７ｍの数（３）以上か未満かを判断する（Ｓ１４）。ポインタ値番号１２が３以上の場合は異常終了する。ポインタ値番号１２が３未満の場合は再び、ポインタ値番号１２が指示するＥＥＰＲＯＭ６のポインタ値領域７ｍのポインタ値をＲＡＭ３のポインタ値領域１０に読み出し（Ｓ８）、このポインタ値が０ＸＦＦであるか否かを判断する（Ｓ９）。ポインタ値番号１２は１なので、ＥＥＰＲＯＭ６の２番目のポインタ値領域７１のポインタ値をＲＡＭ３のポインタ値領域１０に読み出す。このポインタ値領域７１は初期状態のままであり、読み出されるポインタ値は０ＸＦＦであるので、処理動作はＳ１５へ進む。Ｓ１５では初期設定フラグ１４が１であるか否かを判断する（Ｓ１５）。初期設定フラグ１１は０に変化したので、初期設定のデータ書き込み（Ｓ１７）は行われずにポインタスキャンは終了する。
【００１５】
さらに、Ｓ９でＥＥＰＲＯＭ６のポインタ値領域７０に、初期不良等の原因で誤った値が書き込まれている場合、読み出されるポインタ値が０Ｘ８０（１０進数で１００）であるとすると処理動作はＳ１０へ進む。Ｓ１０ではポインタ値がＥＥＰＲＯＭ６のデータ領域８ｎのいずれかを指示しているかを判断する（Ｓ１０）。ＥＥＰＲＯＭ６のポインタ値領域７ｍの数は３個であり、読み出されたポインタ値は０Ｘ８０でＥＥＰＲＯＭ６のデータ領域８ｎのいずれかを指示していないので、処理動作はＳ１８へ進む。Ｓ１８では初期設定フラグを１にセットし（Ｓ１８）、ポインタ値番号１２をインクリメントし（Ｓ１３）、ポインタ値番号１２がＥＥＰＲＯＭ６のポインタ値領域７ｍの数（３）以上か未満かを判断する（Ｓ１４）。ポインタ値番号１２が３未満の場合は再び、ポインタ値番号１２が指示するＥＥＰＲＯＭ６のポインタ値領域７ｍのポインタ値をＲＡＭ３のポインタ値領域１０に読み出し（Ｓ８）、このポインタ値が０ＸＦＦであるか否かを判断する（Ｓ９）。ポインタ値番号１２は１なので、ＥＥＰＲＯＭ６の２番目のポインタ値領域７１のポインタ値をＲＡＭ３のポインタ値領域１０に読み出す。このポインタ値領域７１は初期状態のままであり、読み出されるポインタ値は０ＸＦＦであるので、処理動作はＳ１５へ進む。Ｓ１５では初期設定フラグ１１が１であるか否かを判断する（Ｓ１５）。初期設定フラグ１４は１のままなので、処理動作はＳ１６へ進む。Ｓ１６ではデータ番号を０にセットし（Ｓ１６）、初期設定のデータをＥＥＰＲＯＭ６のデータ領域８ｎに書き込む（Ｓ１７）。この処理動作は後述する。この結果、ＥＥＰＲＯＭ６のデータ領域８０に初期設定のデータが書き込まれ、ＥＥＰＲＯＭ６の２番目のポインタ値領域７１に０が書き込まれる。このようにしてポインタスキャンは終了する。
【００１６】
次に、ＥＥＰＲＯＭ６のデータ領域８ｎへのデータ書き込み（Ｓ２，Ｓ１７，Ｓ３２）を図６に従って詳しく説明する。なお、ＲＡＭ３のポインタ値領域１０、ポインタ値番号１２、及びデータ番号１３は０であるものとする。まず、ＲＡＭ３のデータ領域１１のデータをデータ番号１３が指示するＥＥＰＲＯＭ６のデータ領域８ｎに書き込む（Ｓ１９）。データ番号１３は０なので、ＥＥＰＲＯＭ６の１番先頭のデータ領域８０にデータを書き込む。続いてチェックサムを計算する（Ｓ２０）。ＲＡＭ３のデータ領域１１に書き込まれているデータの全加算値を計算してＲＡＭ３のサムデータ１５に書き込み、ＥＥＰＲＯＭ５のデータ領域８０に書き込まれたデータの全加算値を計算してＥＥＰＲＯＭ６のサムデータ９０に書き込む。そして、ＲＡＭ３のサムデータ１５とＥＥＰＲＯＭ６のサムデータ９ｎとを比較することでＥＥＰＲＯＭ６のデータ領域８ｎの有効／無効を判断する（Ｓ２１）。ＲＡＭ３のサムデータと比較されるのはサムデータ９０で、有効／無効を判断するデータ領域は８０である。
【００１７】
Ｓ２１で結果が有効と判断された場合、処理動作はＳ２２へ進む。Ｓ２２ではＲＡＭ３のポインタ値領域１０のポインタ値がデータ番号と等しいか否かを判断する（Ｓ２２）。
ポインタ値は０でデータ番号も０なのでＥＥＰＲＯＭ６のデータ領域８ｎへのデータ書き込みは正常終了する。結果が等しくない場合に処理動作はＳ２３へ進む。Ｓ２３ではポインタ値番号１２が指示するＥＥＰＲＯＭ６のポインタ値領域７ｍにデータ番号１３を書き込む（Ｓ２３）。ポインタ値番号１０及びデータ番号１３はともに０なので、ポインタ値領域７０に０を書き込む。次に、ポインタ値番号で指示されたポインタ値領域７ｍのポインタ値が書き込み番号１５に更新されているか否かを判断する（Ｓ２４）。ポインタ値領域７０のポインタ値が０に更新されていた場合、ＥＥＰＲＯＭ６のデータ領域８ｎへのデータ書き込みは正常終了する。
【００１８】
また、Ｓ２１で無効と判断された場合、処理動作はＳ２７へ進む。Ｓ２７ではデータ番号１３をインクリメントし（Ｓ２７）、データ番号１３がＥＥＰＲＯＭ６のデータ領域８ｎの数（５）以上か未満かを判断する（Ｓ２８）。データ番号１３が５以上の場合は異常終了する。データ番号１３が５未満の場合は再び、データ番号１３が指示するＥＥＰＲＯＭ６のデータ領域８ｎにデータを書き込む（Ｓ１９）。データ番号１３は１なので、ＥＥＰＲＯＭ６の２番目のデータ領域８０にデータを書き込む。後の処理動作は前述したものと同じである。
【００１９】
さらに、Ｓ２４でポインタ値番号で指示されたポインタ値領域７ｍのポインタ値が書き込み番号１５に更新されていなかった場合、処理動作はＳ２２へ進む。Ｓ２２ではポインタ値番号１２をインクリメントし（Ｓ２５）、ポインタ値番号１２がポインタ値領域７ｍの数（３）以上か未満かを判断する（Ｓ２６）。ポインタ値番号１２が３以上の場合は異常終了する。ポインタ値番号１２が３未満の場合は再び、ポインタ値番号１０が指示するＥＥＰＲＯＭ６のポインタ値領域７ｍにデータ番号１３を書き込む（Ｓ２３）。ポインタ値番号１０は１で、データ番号１３は０なので、ポインタ値領域７１に０を書き込む。後の処理動作は前述したものと同じである。
【００２０】
次に、ＥＥＰＲＯＭ６のデータ領域８ｎからのデータ読み出し（Ｓ４）を図７に従って詳しく説明する。なお、ポインタ値番号１２及びデータ番号１３はともに０であるものとする。まず、データ番号１３が指示するＥＥＰＲＯＭ６のデータ領域８ｎのデータをＲＡＭ３のデータ領域１１に読み出す（Ｓ２９）。データ番号１３は０なので、ＥＥＰＲＯＭ６の１番先頭のデータ領域８０のデータを読み出す。続いてチェックサムを計算する（Ｓ３０）。ＲＡＭ３のデータ領域１１に読み出されたデータの全加算値を計算してＲＡＭ３のサムデータ１５に書き込む。そして、ＲＡＭ３のサムデータ１５とＥＥＰＲＯＭ６のサムデータ９ｎとを比較することで、ポインタ値番号１２で指示されたＥＥＰＲＯＭ６のデータ領域８ｎに書き込まれたデータの有効／無効を判断する（Ｓ３１）。データ番号１３は０なのでサムデータ９０が比較される。結果が有効と判断された場合は、ＥＥＰＲＯＭ６のデータ領域８ｎからのデータ読み出しは終了する。
【００２１】
また、Ｓ３１で結果が無効と判断された場合に処理動作はＳ３２へ進む。Ｓ３２ではデータ番号１３が指示するＥＥＰＲＯＭ６のデータ領域８ｎに初期設定のデータ書き込みを行う（Ｓ３２）。この処理動作は前述した通りなので省略する。この結果、ＥＥＰＲＯＭ６のデータ領域８１に初期設定のデータを書き込み、ＥＥＰＲＯＭ６の１番先頭のポインタ値領域７０に１を書き込み、処理動作はＳ２９へ進む。後の処理動作は前述したものと同じである。
【００２２】
以上、本発明の実施形態を説明してきたが、本発明の具体的な実施形態は、前述した実施形態に限るものではなく、本発明の要旨を逸脱しない範囲の変更があったとしても本発明に含まれる。例えば、データ領域８ｎの有効／無効をデータの書き込み回数により判断するようにしても良い。
【図面の簡単な説明】
【００２３】
【図１】実施形態の装置構成を示すブロック図である。
【図２】ＥＥＰＲＯＭ６の領域構成を示す説明図である。
【図３】ＲＡＭ３の領域構成を示す説明図である。
【図４】データ書き込み及びデータ読み出しを示すフローチャート図である。
【図５】ポイントスキャンの処理動作を示すフローチャート図である。
【図６】ＥＥＰＲＯＭ６のデータ領域８ｎへのデータ書き込みを示すフローチャート図である。
【図７】ＥＥＰＲＯＭ６のデータ領域８ｎからのデータ読み出しを示すフローチャート図である。
【００２４】
１        マイクロコンピュータ
２        ＣＰＵ
３        ＲＡＭ
４        ＲＯＭ
５        Ｉ／Ｏ
６        不揮発性メモリたるＥＥＰＲＯＭ
７ｍ      ポインタ値領域
８ｎ      データ領域
９ｎ      サムデータ
１０      ポインタ値領域
１１      データ領域
１２      ポインタ値番号
１３      データ番号
１４      初期設定フラグ
１５      サムデータ
【図１】
2008305476.tif 000003
【図２】
2008305476.tif 000004
【図３】
2008305476.tif 000005
【図４】
2008305476.tif 000006
【図５】
2008305476.tif 000007
【図６】
2008305476.tif 000008
【図７】
2008305476.tif 000009