説明

不揮発性メモリへのデータ書き込み方法

【課題】データを書き込む複数のデータ領域の1つを指示するポインタ値を、書き込むポインタ値領域への書き込みが不可になっても、データ領域への書き込みを可能にする。
【解決手段】不揮発性メモリ6内に、データを書き込むデータ領域8nを複数確保するとともに、データ領域8nを指示するポインタ値を書き込むポインタ値領域7mを複数確保し、ポインタ値で指示されたデータ領域8nが無効になった時点で、他のデータ領域8nを指示するようにポインタ値を変更するときに、ポインタ値領域7mのポインタ値を更新したか否かを判断し、結果が更新しなかったと判断されたときにポインタ値を他のポインタ値領域7mに書き込む。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、データの書き込み及び消去が可能であって、書き込み回数に限度がある不揮発性メモリへのデータ書き込み方法に関し、特に不揮発性メモリ内に、データを書き込むデータ領域を複数確保し、データを書き込むデータ領域をポインタ値で指示し、前記データ領域が無効になった時点で、他のデータ領域を指示するようにポインタ値を更新ポインタ値に変更する不揮発性メモリへのデータ書き込み方法に関する。
【背景技術】
【0002】
従来より、特許文献1に示す通り、データの書き込み及び消去が可能であって、書き込み回数に限度がある不揮発性メモリ内に、データを書き込むデータ領域を複数確保するとともに、データ領域を指示するポインタ値を書き込むポインタ値領域とを確保し、ポインタ値で指示されるデータ領域にデータの書き込みを行い、データ領域の有効/無効をチェックサムを計算することにより判断し、結果が無効と判断されたときに他のデータ領域を指示するようにポインタ値を変更する方法があった。
【0003】
この方法では、データ領域を複数確保し、データ領域が無効になった時点で、別のデータ領域にデータを書き込むので、データ領域の数をnとすると書き込み可能な回数がn倍になる利点があった。しかしこの方法では、ポインタ値領域が初期不良で元々ポインタ値を書き込むことができない場合や、何らかの影響でポインタ値を書き込むことができなくなった場合、データ領域を指示するようにポインタ値を更新することができず、データ領域への書き込みが不可になる欠点があった。
【特許文献1】特開平3−142794号
【発明の開示】
【発明が解決しようとする課題】
【0004】
そこで本発明では、前記欠点を解消するために、データを書き込む複数のデータ領域の1つを指示するポインタ値を、書き込むポインタ値領域への書き込みが不可になっても、データ領域への書き込みが可能な不揮発性メモリへのデータ書き込み方法を提案する点を課題としている。
【課題を解決するための手段】
【0005】
前記課題を解決するために本発明は、書き込み回数に限度がある不揮発性メモリ内に、データを書き込むデータ領域を複数確保し、データを書き込むデータ領域をポインタ値で指示し、前記データ領域が無効になった時点で、他のデータ領域を指示するようにポインタ値を更新ポインタ値に変更する不揮発性メモリへのデータ書き込み方法において、ポインタ値を書き込むポインタ値領域を複数確保し、データ領域が無効になった時点で、他のデータ領域を指示するようにポインタ値を更新ポインタに変更するときに、更新ポインタ値をポインタ値領域に書き込んだ後に、ポインタ値が更新ポインタ値に更新したか否かを判断し、結果が更新しなかったと判断されたときに他のポインタ値領域に更新ポインタ値を書き込み、ポインタ値が更新ポインタ値に更新されるまでこれらの処理動作を続けることを特徴とする不揮発性メモリへのデータ書き込み方法を提案する。
【発明の効果】
【0006】
本発明によれば、データを書き込むデータ領域を複数確保し、データを書き込むデータ領域をポインタ値で指示し、前記データ領域が無効になった時点で、他のデータ領域を指示するようにポインタ値を更新ポインタ値に変更するので、データ領域の数をnとすると書き込み可能な回数がn倍になる。また、ポインタ値領域を複数確保し、ポインタ値領域のポインタ値が更新ポインタ値に更新しなかったとき、別のポインタ値領域にポインタ値を書き込むので、ポインタ値領域への書き込みが不可になっても、データ領域への書き込みが可能である。
【実施例】
【0007】
以後、本発明の実施形態を図面に従って説明する。まず、実施形態の装置構成を図1に従って説明する。なお、点線の矢印は信号の方向を示す。2はCPUでプログラムを実行して外部装置の制御を行う。3はデータの書き込み及び読み出しが可能なRAMで、CPU2がプログラムを実行する上で一時的に必要なデータを記憶するのに用いられる。RAM3は揮発性メモリで、RAM3に記憶されたデータは電源が供給されなくなると消えてしまう。4はデータの読み出しのみ可能なROMで、CPU2が実行するプログラムを記憶するのに用いられる。ROM4は不揮発性メモリで、ROM4に記憶されたデータは電源が供給されなくなっても消えない。5は外部装置と接続されるI/Oで、これを介してマイクロコンピュータ1は外部装置との通信を行う。6はデータの書き込み及び読み出しが可能なEEPROM6でI/O5と接続されており、データの書き込み回数に限度がある。EEPROM6は不揮発性メモリで、ROM4と同様にEEPROM6に記憶されたデータは電源が供給されなくなっても消えない。このEEPROM6へのデータ書き込みに、本発明は適用されるのである。
【0008】
次に、EEPROM6の領域構成を図2に従って説明する。EEPROM6は1つのアドレスに1バイトの値を書き込めるものとし、EEPROM6が初期状態であると全てのアドレスには、0XFF(10進数で255)が書き込まれているものとする。EEPROM6内には、1バイトのポインタ値領域7m(m=0,1,2)が3個、4バイトのデータ領域8n(n=0,1,……,4)が5個、それぞれ確保されている。データ領域8nにはデータが書き込まれ、ポインタ値領域7mにはデータ領域8nを指示するポインタ値が書き込まれる。データ領域8nの末尾の領域はサムデータ9n(n=0,1,……,4)で、EEPROM6のデータ領域8nに書き込まれるデータの全加算値が書き込まれる。ポインタ値領域7mとデータ領域8nとの境界には、これらの領域を区切るために1バイトの領域が空けられている。
【0009】
なお、1つのアドレスに書き込める値の大きさは1バイトであるがこれに限るものではない。また、データ領域8nの容量は3バイトであるがこれに限るものではなく、このために確保される領域がEEPROM6の容量内に収まりさえすれば良い。さらに、ポインタ値領域7mは3個でデータ領域8nの数は5であるが複数であれば良く、これらのために確保される領域がEEPROM6の容量内に収まりさえすれば良い。
【0010】
次に、RAM3の領域構成を図3に従って説明する。EEPROM6と同様にRAM3も1つのアドレスに1バイトの値を書き込めるものとする。RAM3内には、EEPROM6のポインタ値領域7mから読み出されるポインタ値を書き込むポインタ値領域10と、EEPROM6のデータ領域8nから読み出されるデータを書き込む4バイトのデータ領域11と、ポインタ値領域7mを指示するポインタ値番号12と、データ領域8nを指示するデータ番号13と、EEPROM6の初期設定を行うか否かを示す初期設定フラグ14とがそれぞれ確保されている。データ領域8nの末尾の領域はサムデータ15でRAM3のデータ領域11に書き込まれたデータの全加算値が書き込まれる。ポインタ番号がmの場合はポインタ値領域7mを指示するものとし、データ番号がnの場合はデータ領域8nを指示するものとする。なお、1つのアドレスに書き込める値の大きさは1バイトであるがこれに限るものではない。
【0011】
以後、データ書き込み及びデータ読み出しを説明する。データ書き込み及びデータ読み出しが行われる前には、図4に示す通りポインタスキャン(S1,S3)がまず行われる。この処理動作では、EEPROM6のデータ領域8nを指示するポインタ値をRAM3のデータ番号13に書き込む。そして、RAM3のデータ領域11からポインタ値が指示するEEPROM6のデータ領域8nにデータを書き込んだり(S2)、ポインタ値が指示するEEPROM6のデータ領域8nからデータをRAM3のデータ領域11に読み出したり(S4)するのである。
【0012】
まず、ポインタスキャン(S1,S3)を図5に示すフローチャートに従って説明する。最初にポインタ値番号12を0にセットし(S5)、データ番号13を0にセットし(S6)、初期設定フラグ14を1にセットする(S6)。続いて、ポインタ値番号12が指示するEEPROM6のポインタ値領域7mのポインタ値をRAM3のポインタ値領域10に読み出し(S8)、このポインタ値が0XFFであるか否かを判断する(S9)。ポインタ値番号12は0なので、読み出されるポインタ値はEEPROM6の1番先頭のポインタ値領域70のポインタ値である。
【0013】
S9でEEPROM6が初期状態である場合、読み出されるポインタ値は0XFFであるので処理動作はS15へ進む。S15では初期設定フラグ14が1であるか否かを判断する(S15)。初期設定フラグ14は1のままなので処理動作はS16へ進む。S16ではデータ番号を0にセットし(S16)、初期設定のデータをEEPROM6のデータ領域8nに書き込む(S17)。この処理動作は後述する。この結果、EEPROM6のデータ領域80に初期設定のデータが書き込まれ、EEPROM6の1番先頭のポインタ値領域70に0が書き込まれる。このようにしてポインタスキャンは終了する。
【0014】
また、S9でEEPROM6に初期設定のデータ書き込みが終わっている場合、読み出されるポインタ値は0であるので処理動作はS10へ進む。S10ではポインタ値がEEPROM6のデータ領域8nのどれかを指示しているかを判断する(S10)。EEPROM6のポインタ値領域7mの数は3個であり、読み出されたポインタ値は0でEEPROM6のデータ領域80を指示しているので、処理動作はS11へ進む。S11ではデータ番号13にS8で読み出したポインタ値をセットする(S11)。この結果、データ番号13に0をセットするが、データ番号13には元々0がセットされているので値そのものは変化しない。続いて、初期設定フラグ14を0にセットし(S12)、ポインタ値番号12をインクリメントし(S13)、ポインタ値番号12がEEPROM6のポインタ値領域7mの数(3)以上か未満かを判断する(S14)。ポインタ値番号12が3以上の場合は異常終了する。ポインタ値番号12が3未満の場合は再び、ポインタ値番号12が指示するEEPROM6のポインタ値領域7mのポインタ値をRAM3のポインタ値領域10に読み出し(S8)、このポインタ値が0XFFであるか否かを判断する(S9)。ポインタ値番号12は1なので、EEPROM6の2番目のポインタ値領域71のポインタ値をRAM3のポインタ値領域10に読み出す。このポインタ値領域71は初期状態のままであり、読み出されるポインタ値は0XFFであるので、処理動作はS15へ進む。S15では初期設定フラグ14が1であるか否かを判断する(S15)。初期設定フラグ11は0に変化したので、初期設定のデータ書き込み(S17)は行われずにポインタスキャンは終了する。
【0015】
さらに、S9でEEPROM6のポインタ値領域70に、初期不良等の原因で誤った値が書き込まれている場合、読み出されるポインタ値が0X80(10進数で100)であるとすると処理動作はS10へ進む。S10ではポインタ値がEEPROM6のデータ領域8nのいずれかを指示しているかを判断する(S10)。EEPROM6のポインタ値領域7mの数は3個であり、読み出されたポインタ値は0X80でEEPROM6のデータ領域8nのいずれかを指示していないので、処理動作はS18へ進む。S18では初期設定フラグを1にセットし(S18)、ポインタ値番号12をインクリメントし(S13)、ポインタ値番号12がEEPROM6のポインタ値領域7mの数(3)以上か未満かを判断する(S14)。ポインタ値番号12が3未満の場合は再び、ポインタ値番号12が指示するEEPROM6のポインタ値領域7mのポインタ値をRAM3のポインタ値領域10に読み出し(S8)、このポインタ値が0XFFであるか否かを判断する(S9)。ポインタ値番号12は1なので、EEPROM6の2番目のポインタ値領域71のポインタ値をRAM3のポインタ値領域10に読み出す。このポインタ値領域71は初期状態のままであり、読み出されるポインタ値は0XFFであるので、処理動作はS15へ進む。S15では初期設定フラグ11が1であるか否かを判断する(S15)。初期設定フラグ14は1のままなので、処理動作はS16へ進む。S16ではデータ番号を0にセットし(S16)、初期設定のデータをEEPROM6のデータ領域8nに書き込む(S17)。この処理動作は後述する。この結果、EEPROM6のデータ領域80に初期設定のデータが書き込まれ、EEPROM6の2番目のポインタ値領域71に0が書き込まれる。このようにしてポインタスキャンは終了する。
【0016】
次に、EEPROM6のデータ領域8nへのデータ書き込み(S2,S17,S32)を図6に従って詳しく説明する。なお、RAM3のポインタ値領域10、ポインタ値番号12、及びデータ番号13は0であるものとする。まず、RAM3のデータ領域11のデータをデータ番号13が指示するEEPROM6のデータ領域8nに書き込む(S19)。データ番号13は0なので、EEPROM6の1番先頭のデータ領域80にデータを書き込む。続いてチェックサムを計算する(S20)。RAM3のデータ領域11に書き込まれているデータの全加算値を計算してRAM3のサムデータ15に書き込み、EEPROM5のデータ領域80に書き込まれたデータの全加算値を計算してEEPROM6のサムデータ90に書き込む。そして、RAM3のサムデータ15とEEPROM6のサムデータ9nとを比較することでEEPROM6のデータ領域8nの有効/無効を判断する(S21)。RAM3のサムデータと比較されるのはサムデータ90で、有効/無効を判断するデータ領域は80である。
【0017】
S21で結果が有効と判断された場合、処理動作はS22へ進む。S22ではRAM3のポインタ値領域10のポインタ値がデータ番号と等しいか否かを判断する(S22)。
ポインタ値は0でデータ番号も0なのでEEPROM6のデータ領域8nへのデータ書き込みは正常終了する。結果が等しくない場合に処理動作はS23へ進む。S23ではポインタ値番号12が指示するEEPROM6のポインタ値領域7mにデータ番号13を書き込む(S23)。ポインタ値番号10及びデータ番号13はともに0なので、ポインタ値領域70に0を書き込む。次に、ポインタ値番号で指示されたポインタ値領域7mのポインタ値が書き込み番号15に更新されているか否かを判断する(S24)。ポインタ値領域70のポインタ値が0に更新されていた場合、EEPROM6のデータ領域8nへのデータ書き込みは正常終了する。
【0018】
また、S21で無効と判断された場合、処理動作はS27へ進む。S27ではデータ番号13をインクリメントし(S27)、データ番号13がEEPROM6のデータ領域8nの数(5)以上か未満かを判断する(S28)。データ番号13が5以上の場合は異常終了する。データ番号13が5未満の場合は再び、データ番号13が指示するEEPROM6のデータ領域8nにデータを書き込む(S19)。データ番号13は1なので、EEPROM6の2番目のデータ領域80にデータを書き込む。後の処理動作は前述したものと同じである。
【0019】
さらに、S24でポインタ値番号で指示されたポインタ値領域7mのポインタ値が書き込み番号15に更新されていなかった場合、処理動作はS22へ進む。S22ではポインタ値番号12をインクリメントし(S25)、ポインタ値番号12がポインタ値領域7mの数(3)以上か未満かを判断する(S26)。ポインタ値番号12が3以上の場合は異常終了する。ポインタ値番号12が3未満の場合は再び、ポインタ値番号10が指示するEEPROM6のポインタ値領域7mにデータ番号13を書き込む(S23)。ポインタ値番号10は1で、データ番号13は0なので、ポインタ値領域71に0を書き込む。後の処理動作は前述したものと同じである。
【0020】
次に、EEPROM6のデータ領域8nからのデータ読み出し(S4)を図7に従って詳しく説明する。なお、ポインタ値番号12及びデータ番号13はともに0であるものとする。まず、データ番号13が指示するEEPROM6のデータ領域8nのデータをRAM3のデータ領域11に読み出す(S29)。データ番号13は0なので、EEPROM6の1番先頭のデータ領域80のデータを読み出す。続いてチェックサムを計算する(S30)。RAM3のデータ領域11に読み出されたデータの全加算値を計算してRAM3のサムデータ15に書き込む。そして、RAM3のサムデータ15とEEPROM6のサムデータ9nとを比較することで、ポインタ値番号12で指示されたEEPROM6のデータ領域8nに書き込まれたデータの有効/無効を判断する(S31)。データ番号13は0なのでサムデータ90が比較される。結果が有効と判断された場合は、EEPROM6のデータ領域8nからのデータ読み出しは終了する。
【0021】
また、S31で結果が無効と判断された場合に処理動作はS32へ進む。S32ではデータ番号13が指示するEEPROM6のデータ領域8nに初期設定のデータ書き込みを行う(S32)。この処理動作は前述した通りなので省略する。この結果、EEPROM6のデータ領域81に初期設定のデータを書き込み、EEPROM6の1番先頭のポインタ値領域70に1を書き込み、処理動作はS29へ進む。後の処理動作は前述したものと同じである。
【0022】
以上、本発明の実施形態を説明してきたが、本発明の具体的な実施形態は、前述した実施形態に限るものではなく、本発明の要旨を逸脱しない範囲の変更があったとしても本発明に含まれる。例えば、データ領域8nの有効/無効をデータの書き込み回数により判断するようにしても良い。
【図面の簡単な説明】
【0023】
【図1】実施形態の装置構成を示すブロック図である。
【図2】EEPROM6の領域構成を示す説明図である。
【図3】RAM3の領域構成を示す説明図である。
【図4】データ書き込み及びデータ読み出しを示すフローチャート図である。
【図5】ポイントスキャンの処理動作を示すフローチャート図である。
【図6】EEPROM6のデータ領域8nへのデータ書き込みを示すフローチャート図である。
【図7】EEPROM6のデータ領域8nからのデータ読み出しを示すフローチャート図である。
【0024】
1 マイクロコンピュータ
2 CPU
3 RAM
4 ROM
5 I/O
6 不揮発性メモリたるEEPROM
7m ポインタ値領域
8n データ領域
9n サムデータ
10 ポインタ値領域
11 データ領域
12 ポインタ値番号
13 データ番号
14 初期設定フラグ
15 サムデータ

【特許請求の範囲】
【請求項1】
書き込み回数に限度がある不揮発性メモリ内に、データを書き込むデータ領域を複数確保し、データを書き込むデータ領域をポインタ値で指示し、前記データ領域が無効になった時点で、他のデータ領域を指示するようにポインタ値を更新ポインタ値に変更する不揮発性メモリへのデータ書き込み方法において、
ポインタ値を書き込むポインタ値領域を複数確保し、データ領域が無効になった時点で、他のデータ領域を指示するようにポインタ値を更新ポインタに変更するときに、更新ポインタ値をポインタ値領域に書き込んだ後に、ポインタ値が更新ポインタ値に更新したか否かを判断し、結果が更新しなかったと判断されたときに他のポインタ値領域に更新ポインタ値を書き込み、ポインタ値が更新ポインタ値に更新されるまでこれらの処理動作を続けることを特徴とする不揮発性メモリへのデータ書き込み方法。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate