(57)【要約】【課題】セルフプログラミング中のブート領域切り替え処理中に電源瞬断等が発生した場合でも、必ずブートプログラムより起動を行えることができるようにする。【解決手段】メモリブロック６１、６２、メモリブロック６３、６４をそれぞれ１つのブロック対とする。どちらか一方のブロック対がブート領域として指定されている際に他方のブロック対を新たなブート領域として指定する場合、一方のブロック対の２つのブートエリア指定フラグの値から１減じた値を他方のブロック対の２つのメモリブロックのブートエリア指定フラグとしてそれぞれ格納する。同一内容のブートエリア指定フラグを２つのメモリブロックに格納するため、電源瞬断が発生して一方の値が不定となっても、２つの値を比較することによりそのブートエリア指定フラグが有効か否かを判定でき、ブートプログラムが格納されているメモリブロックを確実に特定できる。【選択図】　　　図１
2004046453.tif 000002
【特許請求の範囲】
【請求項１】
システムの起動時に最初に実行されるブートプログラムが当該メモリブロックのユーザ領域内に格納されていることを示すブートエリア指定フラグを格納するための領域と、ユーザがプログラムコードを格納するためのユーザ領域とをそれぞれ備えた第１から第４のメモリブロックにより構成されるとともにブート領域切り替え処理が行われていない初期状態においては前記第１および第２のメモリブロックからなるブロック対のユーザ領域内にブートプログラムが格納されていて、各メモリブロック毎にデータの消去が行われる不揮発性メモリと、
前記第１または第２のメモリブロックと前記第３または第４のメモリブロックのどちらのメモリブロック対のユーザ領域にブートプログラムが格納されているかを示す領域切り替えフラグを記憶するための手段と、
前記第１および第２のメモリブロックのユーザ領域がブート領域として指定されている際に、前記第３および第４のメモリブロックを新たなブート領域として指定する場合、前記第１および第２のメモリブロック内のブートエリア指定フラグの値から１減じた値を前記第３および第４のメモリブロック内のブートエリア指定フラグとしてそれぞれ格納し、システムの立ち上げ時には、前記第３および第４のメモリブロック内のブートエリア指定フラグの値が異なる場合または該２つのブートエリア指定フラグを構成する全てのビットが“０”または“１”の場合には、前記第３および第４のメモリブロック内のブートエリア指定フラグが無効であると判定して前記第１または第２のメモリブロックのユーザ領域にブートプログラムが格納されていると判定し、前記第１および第２のメモリブロック内のブートエリア指定フラグの値が異なる場合または該２つのブートエリア指定フラグを構成する全てのビットが“０”の場合には、前記第１および第２のメモリブロック内のブートエリア指定フラグが無効であると判定して前記第３または第４のメモリブロックのユーザ領域にブートプログラムが格納されていると判定し、前記第１および第２のメモリブロック内のブートエリア指定フラグが有効であり、かつ、前記第３および第４のメモリブロック内のブートエリア指定フラグが有効である場合には、前記第１および第２のメモリブロックまたは前記第３および第４のメモリブロックのうち値の小さいブートエリア指定フラグを格納しているメモリブロック対にブートプログラムが格納されていると判定して、前記領域切り替えフラグの設定を行うＣＰＵと、を備えているシングルチップマイクロコンピュータ。
【請求項２】
システムの起動時に最初に実行されるブートプログラムが当該メモリブロックのユーザ領域内に格納されていることを示すブートエリア指定フラグを格納するための領域とユーザがプログラムコードを格納するためのユーザ領域とをそれぞれ備えた第１から第４のメモリブロックにより構成されるとともに初期状態においては前記第１および第２のメモリブロックからなるメモリブロック対のユーザ領域にブートプログラムが格納されている不揮発性メモリと、ＣＰＵとを備えたシングルチップマイクロコンピュータにおいて、不揮発性メモリのある領域がブートプログラムが格納されたブート領域として指定されている場合に、他の領域を新たなブート領域として切り替えるための、シングルチップマイクロコンピュータのブート領域指定方法であって、
前記第１および第２のメモリブロックのユーザ領域がブート領域として指定されている際に、前記第３および第４のメモリブロックを新たなブート領域として指定する場合、前記第１および第２のメモリブロック内のブートエリア指定フラグの値から１減じた値を前記第３および第４のメモリブロック内のブートエリア指定フラグとしてそれぞれ格納するステップと、
システムの立ち上げ時には、前記第３および第４のメモリブロック内のブートエリア指定フラグの値が異なる場合または該２つのブートエリア指定フラグを構成する全てのビットが“０”または“１”の場合には、前記第３および第４のメモリブロック内のブートエリア指定フラグが無効であると判定して前記第１または第２のメモリブロックのユーザ領域にブートプログラムが格納されていると判定するステップと、
前記第１および第２のメモリブロック内のブートエリア指定フラグの値が異なる場合または該２つのブートエリア指定フラグを構成する全てのビットが“０”の場合には、前記第１および第２のメモリブロック内のブートエリア指定フラグが無効であると判定して前記第３または第４のメモリブロックのユーザ領域にブートプログラムが格納されていると判定するステップと、
前記第１および第２のメモリブロック内のブートエリア指定フラグが有効であり、かつ、前記第３および第４のメモリブロック内のブートエリア指定フラグが有効である場合には、前記第１および第２のメモリブロックまたは前記第３および第４のメモリブロックのうち値の小さいブートエリア指定フラグを格納しているメモリブロック対にブートプログラムが格納されていると判定するステップと、
前記判定に基づいて前記ブートエリア指定フラグの設定を行うステップと、を備えたシングルチップマイクロコンピュータのブート領域切り替え方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、ＣＰＵと不揮発性メモリとを備えたシングルチップマイクロコンピュータに関し、特に不揮発性メモリのある領域がブートプログラムが格納されたブート領域として指定されている場合に、他の領域を新たなブート領域として切り替えるためのブート領域切り替え方法に関する。
【０００２】
【従来の技術】
シングルチップマイクロコンピュータ（又はシングルチップマイコン）とは、制御プログラムを格納した記憶領域と、この制御プログラムに基づいて演算処理を行うＣＰＵ（中央演算処理装置）とが１つの半導体チップ上に構成された半導体装置である。
【０００３】
このようなシングルチップマイコンでは、制御プログラムの変更を容易にするために、制御プログラムを格納するためのメモリとしてフラッシュメモリ等の不揮発性メモリを用いたものがある。
【０００４】
このようなフラッシュメモリを搭載したシングルチップマイコンでは、フラッシュメモリに格納した制御プログラムを修正する必要が発生した場合でも、一旦格納した制御プログラムの書き換えを行うことができる。
【０００５】
このような制御プログラムの書き換え方法としては、フラッシュライタを用いて制御プログラムを書き換えるライタ書き換えモードや、ユーザの使用段階で不揮発性メモリ６を書き換えるセルフプログラミングモード等がある。ライタ書き換えモードは、ブートメモリから命令実行を開始し外部と通信を行うことによりフラッシュメモリの書き換えを制御するモードであり、ユーザモードは、同じくブートメモリから起動を行うが、開始アドレスの選択を行い、ユーザ領域の実行を行うモードである。セルフプログラミングモードでは、ＲＡＭにブートプログラムその他書き換えに必要な命令を不揮発性メモリまたは外部から転送し、このＲＡＭから読み出した命令によって不揮発性メモリの書き換えを行っている。尚、セルフプログラミングモードでは、ブートブロックを含む領域の書き換えを行う場合のみ、書き込みデータとしてブートプログラムが必要となる。ここで、ブートプログラムとは、起動用のプログラムのことであり、システムがリセットされた後のシステムの起動時に最初に実行されるプログラである。
【０００６】
このようにセルフプログラミングモードにより不揮発性メモリのあるメモリブロックの書き換えを行う場合またはブートプログラムを新たなブートプログラムと入れ換える場合、そのメモリブロックに格納されているブートプログラムを別のメモリブロックに書き換えるか、または新たなブートプログラムを別のメモリブロックに格納し、ブートプログラムを格納した領域を新たなブート領域として切り替えるためのブート領域切り替え処理が行われる。
【０００７】
しかし、単純にあるメモリブロックのユーザ領域に格納されたブートプログラムをＲＡＭに格納し、元のブートプログラムを消去し、ＲＡＭから読み出したブートプログラムを別のメモリブロックのユーザ領域に格納したのでは、不揮発性メモリのブートプログラムを含むプログラム（以下、ブートプログラムと称する）が記憶されているユーザ領域を消去中に電源の瞬断等が起こってシングルチップマイコンのシステムが正常動作を続けられなくなることがある。また、消去後の新プログラムの書き込み中に電源の瞬断等が起こり、書き込みが完全に行われないこともある。このようなときに、システムをリセットして再起動を行っても、ブートプログラムが正常に書き換えられていないことが多く、再起動が不能となってしまう。従って、ユーザの使用段階で不揮発性メモリを書き換えるセルフプログラミングモードでは、ブートプログラムの記憶されているユーザ領域の消去を安全に行うことができないという問題があった。
【０００８】
この問題の対処方法として、特開平８−２５５０８４号または特開平１０−１４９２８２号にブートプログラムが記憶されているユーザ領域の書き換えを安全に行うための技術が開示されている。ここでは、ブートエリアのプログラムを書き換えるとき、旧ブートプログラムを空いたユーザ領域にコピーして待避させ、前記ブートエリアの記憶内容を消去してからここに新ブートプログラムを書き込み、書き込み終了の確認後に空いたユーザ領域にコピーされた旧ブートプログラムを消去する方法を採っている。このため、電源の瞬断等によって新プログラムの書き込みが完全に行われない状況が起こっても、旧ブートプログラムによってシステムの再起動が可能であり、修復不能の状態となることはない。
【０００９】
ところが上述の方法では、旧ブートプログラムの空きエリアへのコピー、不要になったときの旧ブートプログラムの消去等、アクションの回数が多く、取り扱いが煩雑で時間がかかるという課題があった。
【００１０】
このような問題を解決するための従来のシングルチップマイクロコンピュータが特開２００１−１９５２４１号公報に記載されている。
【００１１】
この従来のシングルチップマイクロコンピュータは、ユーザ領域毎にブートエリア指定フラグを設けることによって不揮発性メモリに記憶されたブートプログラムをユーザの使用段階のオンボードモードで少ないアクションによって安全に書き換えを行うことができるようにしたものである。この従来のシングルチップマイコンの構成を図４に示す。
【００１２】
ブートエリア指定フラグとは、各メモリブロック毎に設けられていて、ブートプログラムが当該メモリブロックのユーザ領域内に格納されていることを示すためのフラグである。
【００１３】
この従来のシングルチップマイコンは、図４に示されるように、不揮発性メモリ４１と、ＣＰＵ２と、ブートメモリ３と、領域切り替えフラグ４と、ＲＡＭ５とを備えている。
【００１４】
不揮発性メモリ４１はブートプログラムを含むプログラムが記憶されていて、２つのメモリブロック１６１、１６２に分割されている。メモリブロック１６１は、ユーザがプログラムコード等のデータを書き込むためのユーザ領域Ａとこれに対応するブートエリア指定フラグＡを格納する領域により構成され、メモリブロック１６２は、ユーザ領域Ｂとこれに対応するブートエリア指定フラグＢを格納する領域により構成されている。
【００１５】
ＣＰＵ２はメインプロセッサであり、不揮発性メモリ４１に記憶されたプログラムに従って制御、演算を行う。ＣＰＵ２は、ブートエリア指定フラグの内容に基づいて、領域切り替えフラグ４の設定を行っている。ブートメモリ３は、指定した制御モードに従ってシステムを立ち上げる機能を備えている。システム立ち上げ後に不揮発性メモリ１に記憶されたプログラムのうち、ブートプログラムが最初に処理される。ブートプログラムの書き換えは、コンピュータを単体で工場で扱っているときはフラッシュライタによる書き換えを行い、ユーザの使用段階のオンボードモードではセルフモードで書き換えを行う。領域切り替えフラグ４は、システム立ち上げ時にブートプログラムが記憶されたユーザ領域を指定する機能を備えているつ。ＲＡＭ５は、ＣＰＵ２からの指令によって必要なデータの一時記憶を行う。
【００１６】
このような構成による従来のシングルチップマイコンでは、メモリブロック１６１のユーザ領域Ａがブート指定されている（ブートエリア指定フラグＡ＝“０”、ブートエリア指定フラグＢ＝“１”）場合に、セルフプログラミングモードでユーザ領域のブートプログラムを含むプログラムの書き換えを行う手順を図５のフローチャートを参照して説明する。なお、不揮発性メモリ４１のデータ内容は、消去されると消去されたすべてのビットにおいて“１”が記憶されるようになっている。
【００１７】
ここでは、メモリブロック１６１のユーザ領域およびブートエリア指定フラグを、それぞれユーザ領域Ａ、ブートエリア指定フラグＡとし、メモリブロック１６２のユーザ領域およびブートエリア指定フラグを、それぞれユーザ領域Ｂ、ブートエリア指定フラグＢとして表現する。
【００１８】
まず、新しくブートプログラムを書き込むユーザ領域Ｂおよびブートエリア指定フラグＢの記憶内容を消去する（ステップ２０１）。そして、ユーザ領域Ｂに新しいブートプログラムを書き込む（ステップ２０２）。次に、ブートエリア指定フラグＢをブート指定（データ“０”）するようにデータを書き込む（ステップ２０３）。
【００１９】
そして、ユーザ領域Ａおよびブートエリア指定フラグＡの記憶内容を消去する（ステップ２０４）。このとき、ブートエリア指定フラグＡの書込みは行なわず、データ“１”のままとする。次に、消去されたユーザ領域Ａに必要に応じて、ブートプログラムではない他のプログラムを書き込む。
【００２０】
ユーザモードでは、リセットによってシステムの立ち上げが行われるとき、ブートメモリ３からプログラムが実行されるが、このプログラムに従って、ブートエリア指定フラグＡおよびブートエリア指定フラグＢの値が読み出され、ユーザ領域Ａまたはユーザ領域Ｂのうち、いずれが新しいブートプログラムを含むエリアかが判断されて、領域切り替えフラグ４に該当するユーザ領域のデータが書き込まれる。この判断結果を領域切り替えフラグ４に設定し、システム立ち上げ時に新しいブートプログラムが記憶されたユーザ領域に分岐して記憶内容の読み込みを行う。
【００２１】
なお、ステップ２０３終了後で、かつ、ステップ２０４終了前に電源瞬断が起こった場合などには、複数のユーザ領域がブート指定されている場合が起こりうる。このような場合には、いずれかのユーザ領域、例えばユーザ領域Ａを優先的にブート指定するというように定めておけばよい。
【００２２】
この従来のシングルチップマイコンでは、ブートエリア指定フラグおよび領域切り替えフラグを設けることにより、システム立ち上げを行うブートプログラムを含むユーザ領域を切り替えることを可能とし、常に旧ブートプログラムが存在する状態で不揮発性メモリのブートプログラム書き換えを行うようにしたので、セルフモードで書き換えを行うときに電源瞬断等により書き換えが終了しなかったときでも再書き込みによる修復が可能で、かつ少ないアクション回数で短時間に書き換えを行うことができるという効果が得られる。
【００２３】
しかし、このような従来のシングルチップマイクロコンピュータでは、ユーザ領域Ｂの消去中、つまり図５におけるステップ２０１の処理中に電源瞬断等が発生した場合、ブートエリア指定フラグＢの値も不定となり、場合によっては有効な値となってしまうこともある。しかし、この段階ではユーザ領域Ｂへの新ブートプログラムの書き込みを行うステップ２０２の処理は終了していない。　そのため、システムがリセットされて再起動した場合、２つのブートエリア指定フラグＡ、Ｂが共に有効となってしまい、もしここでユーザ領域Ｂを優先的にブート指定するように設定されていた場合、ブートプログラムが格納されていないユーザ領域がブート指定されてしまうという不具合が発生する。
【００２４】
特にフラッシュメモリでは、書き込まれているデータを消去する前に一旦書き込みを行って全てのメモリセルに保持されている電圧レベルを同じレベルとするプリライトが行われる。そのため、あるメモリブロックのプリライト中に電源瞬断等が発生すると、そのメモリブロックのブートエリア指定フラグが本来は“０”であるはずが“１”となったり、本来は“１”であるはずが“０”となってしまう可能性がある。
【００２５】
そのため、図４に示した従来のシングルチップマイコンにおいても、電源瞬断が発生するタイミングによっては、ブートプログラムが格納されているメモリブロックを特定できなくなり、ブートプログラムから起動を行うことができなくなるという問題が発生し得る。そして、ブートプログラムからの起動が行われない場合、システムの動作が正常に行われず動作不良になってしまう可能性がある。
【００２６】
【発明が解決しようとする課題】
上述した従来のシングルチップマイクロコンピュータでは、セルフプログラミング中のブートプログラムの書き換え処理中に電源瞬断等が発生した場合、ブートプログラムから起動を行うことができなくなり動作不良になってしまうという問題点があった。
【００２７】
本発明の目的は、セルフプログラミング中のブート領域切り替え処理中に電源瞬断等が発生した場合でも、必ずブートプログラムより起動を行うことができるシングルチップマイクロコンピュータを提供することである。
【００２８】
【課題を解決するための手段】
上記目的を達成するために、本発明のシングルチップマイクロコンピュータは、システムの起動時に最初に実行されるブートプログラムが当該メモリブロックのユーザ領域内に格納されていることを示すブートエリア指定フラグを格納するための領域と、ユーザがプログラムコードを格納するためのユーザ領域とをそれぞれ備えた第１から第４のメモリブロックにより構成されるとともにブート領域切り替え処理が行われていない初期状態においては前記第１および第２のメモリブロックからなるブロック対のユーザ領域内にブートプログラムが格納されていて、各メモリブロック毎にデータの消去が行われる不揮発性メモリと、
前記第１または第２のメモリブロックと前記第３または第４のメモリブロックのどちらのメモリブロック対のユーザ領域にブートプログラムが格納されているかを示す領域切り替えフラグを記憶するための手段と、
前記第１および第２のメモリブロックのユーザ領域がブート領域として指定されている際に、前記第３および第４のメモリブロックを新たなブート領域として指定する場合、前記第１および第２のメモリブロック内のブートエリア指定フラグの値から１減じた値を前記第３および第４のメモリブロック内のブートエリア指定フラグとしてそれぞれ格納し、システムの立ち上げ時には、前記第３および第４のメモリブロック内のブートエリア指定フラグの値が異なる場合または該２つのブートエリア指定フラグを構成する全てのビットが“０”または“１”の場合には、前記第３および第４のメモリブロック内のブートエリア指定フラグが無効であると判定して前記第１または第２のメモリブロックのユーザ領域にブートプログラムが格納されていると判定し、前記第１および第２のメモリブロック内のブートエリア指定フラグの値が異なる場合または該２つのブートエリア指定フラグを構成する全てのビットが“０”の場合には、前記第１および第２のメモリブロック内のブートエリア指定フラグが無効であると判定して前記第３または第４のメモリブロックのユーザ領域にブートプログラムが格納されていると判定し、前記第１および第２のメモリブロック内のブートエリア指定フラグが有効であり、かつ、前記第３および第４のメモリブロック内のブートエリア指定フラグが有効である場合には、前記第１および第２のメモリブロックまたは前記第３および第４のメモリブロックのうち値の小さいブートエリア指定フラグを格納しているメモリブロック対にブートプログラムが格納されていると判定して、前記領域切り替えフラグの設定を行うＣＰＵとを備えている。
【００２９】
本発明によれば、同一内容のブートエリア指定フラグを同時に消去が行われることがない複数の領域に格納するようにしているため、たとえ電源瞬断が発生して一方のブートエリア指定フラグが不定値となった場合でも、他方のブートエリア指定フラグの値は正常な値が保持される。そのため、２つのブートエリア指定フラグが一致するか否か等を検出することによりそのブートエリア指定フラグが有効であるか無効であるかを判定することができるので、実際にはブートプログラムが格納されていないメモリブロックをブート指定してしまうという誤動作が発生することを防ぐことができる。
【００３０】
【発明の実施の形態】
次に、本発明の実施の形態について図面を参照して詳細に説明する。図１は本発明の一の実施形態のシングルチップマイクロコンピュータの構成を示すブロック図である。図１において、図４中の構成要素と同一の構成要素には同一の符号を付し、説明を省略するものとする。
【００３１】
本実施形態のシングルチップマイコンは、図４に示した従来のシングルチップマイコンに対して、不揮発性メモリ４１が不揮発性メモリ１に置き換えられている点が異なっている。尚、本実施形態では、不揮発性メモリとしてフラッシュメモリを用いた場合について説明する。
【００３２】
本実施形態における不揮発性メモリ１は、４つのメモリブロック６１〜６４に分割されている。そして、この４つのメモリブロック６１〜６４は、それぞれ、ユーザがプログラムコード等のデータを書き込むためのユーザ領域と、ブートエリア指定フラグを格納するための領域とに分けられている。本実施形態では、このブートエリア指定フラグは、一例として、３２ビットにより構成されているものとして説明する。
【００３３】
また、ブートプログラムが格納されているメモリブロックを示すブート指定は、２つのメモリブッロク毎に指定を行うものとして、ここでは、２つのメモリブロック６１、６２または２つのメモリブロック６３、６４のいずれかのメモリブロック対を指定することによりブート指定が行われる。
【００３４】
そして、従来のシングルチップマイコンでは、このブートエリア指定フラグは、当該ブロックメモリにブートプログラムが格納されているかいないかを示すのみであったが、本実施形態のシングルチップマイコンでは、このブートエリア指定フラグの値によってメモリブロック６１、６２、またはメモリブロック６３、６４のどちらのメモリブロック対にブートプログラムが格納されているかの判定が行われる。
【００３５】
このフラッシュメモリでは、あるメモリブロックの消去を行うと、そのメモリブロック内のブートエリア指令フラグとユーザ領域に格納されているデータは同時に消去され、いずれかの領域に格納されたデータのみを残すことはできないようになっている。また、どのような方法の消去であっても内部的には必ず１メモリブロック毎に消去が行われる。
【００３６】
本実施形態におけるＣＰＵ２は、各メモリブロック６１〜６４に格納されているブートエリア指定フラグの値に基づいて、２つのメモリブロック６１、６２、メモリブロック６３、６４のうちのいずれのメモリブロック対に次回システムがリセットされた際に実行されるべきブートプログラムが格納されているかを判定し、その判定結果をフラグ領域切り替えフラグ４に設定する。
【００３７】
次に、本実施形態のシングルチップマイコンにおいて行われるブート領域切り替え処理を図２を参照して説明する。尚、この図２では、ブートエリア指定フラグの値“ＦＦＦＦＦＦＦＦ（Ｈ：１６進数表記）”を単に“ＦＦ”として表現し、“ＦＦＦＦＦＦＦＥ（Ｈ）”を単に“ＦＥ”として表現し、“００００００００（Ｈ）”を単に“００”として表現する。そして、このブート領域切り替え処理は、ＣＰＵ２によって行われる。
【００３８】
ここでは、メモリブロック６１のユーザ領域に格納されているブートプログラムを、メモリブロックの６３のユーザ領域に書き換える場合を用いて説明する。また、ブートエリア指定フラグの初期値（消去状態での値）は“ＦＦＦＦＦＦＦＦ（Ｈ）”である。
【００３９】
ブート領域切り替え処理が行われる前の不揮発性メモリ１の状態を図２（ａ）に示す。この図２（ａ）では、ブートプログラムはメモリブロック６１のユーザ領域に格納されていて、メモリブロック６１〜６４の各ブートエリア指定フラグは“ＦＦＦＦＦＦＦＦ（Ｈ）”となっている。
【００４０】
この図２（ａ）の状態からのブート領域切り替え処理が以下のようにして行われる。
（１）先ず、メモリブロック６３、６４の消去が行われれ（図２（ｂ））、メモリブロック６３のユーザ領域に新ブートプログラムが書き込まれる（図２（ｃ））。消去が行われる際のブートエリア指定フラグの値は、“ＦＦＦＦＦＦＦＦ”から一旦“００００００００”となった後に再度“ＦＦＦＦＦＦＦＦ”となる。
（２）次に、メモリブロック６３のブートエリア指定フラグとして、“ＦＦＦＦＦＦＦＦ”から１減じた値である“ＦＦＦＦＦＦＦＦＥ”を書き込み（図２（ｄ））、その後同様にしてメモリブロック６４のブートエリア指定フラグとして、“ＦＦＦＦＦＦＦＦ”から１減じた値である“ＦＦＦＦＦＦＦＦＥ”が書き込まれる（図２（ｅ））。
（３）そして、最後に、メモリブロック６１、６２の消去が行われ、従来と同様な方法によりデータの書き換えが行われる。この処理においては、メモリブロック６１、６２のブートエリア指定フラグの書き換えは行われない。
【００４１】
次に、このようにしてブート領域切り替え処理が行われた後に、ＣＰＵ２がブートエリア指定フラグの値からブートプログラムが格納されているメモリブロック対を判定するブートエリア判定処理を図３のフローチャートを参照して説明する。ここでは、メモリブロック６１〜６４のブートエリア指定フラグをそれぞれブートエリア指定フラグＡ〜Ｄとして表現する。
【００４２】
先ず、ＣＰＵ２は、ブート領域切り替え処理が終了した後に、メモリブロック６１〜６４からブートエリア指令フラグＡ〜Ｄの値を読み出す（ステップ１０１）。そして、ブートエリア指定フラグＣの値とブートエリア指定フラグＤの値が等しいか否かの判定が行われる（ステップ１０２）。このステップ１０２においてブートエリア指定フラグＣとブートエリア指定フラグＤの値が等しくない場合、メモリブロック６３、６４へのブート領域切り替え処理は正常に終了していないので、メモリブロック６１、６２のユーザ領域に正常なブートプログラムが格納されているものと判断され、メモリブロック６１、６２のブート指定が行われる（ステップ１０７）。
【００４３】
ステップ１０２においてブートエリア指定フラグＣとブートエリア指定フラグＤの値が等しいと判定された場合、次に、このブートエリア指定フラグＣ、Ｄの値が“００００００００”または“ＦＦＦＦＦＦＦＦ”であるかの判定が行われる（ステップ１０３）。このステップ１０３において、ブートエリア指定フラグＣ、Ｄの値が“００００００００”または“ＦＦＦＦＦＦＦＦ”である場合、メモリブロック６３、６４には何等かの異常が発生しているものと判断され、メモリブロック６１、６２のブート指定が行われる（ステップ１０７）。
【００４４】
ここで、ブートエリア指定フラグＣ、Ｄの値が“００００００００”または“ＦＦＦＦＦＦＦＦ”の場合には何等かの異常が発生したものと判断できるのは、あるメモリブロックの消去処理中に電源瞬断が発生した場合、消去状態のデータは“ＦＦＦＦＦＦＦＦ”となる可能性が高く、消去処理の途中のプリライト中に電源瞬断が発生した場合は“００００００００”となる可能性が高いからである。
【００４５】
そして、正常な処理が行われている場合、ブートエリア指定フラグＣ、Ｄの値が“００００００００”または“ＦＦＦＦＦＦＦＦ”となることは、下記に示す理由により、ほとんどあり得ないからである。
【００４６】
先ず、ブートエリア指定フラグＣ、Ｄの値が“ＦＦＦＦＦＦＦＦ”の場合について説明する。ブートプログラムが初期状態でメモリブロック６１、６２のいずれかに格納されている場合、メモリブロック６３、６４にブートプログラムが格納されているということは、ブート領域切り替え処理が少なくとも１回は行われたはずであり、ブートエリア指定フラグＣ、Ｄの値が“ＦＦＦＦＦＦＦＦ”のままということはあり得ない。逆に、ブートエリア指定フラグＣ、Ｄの値が“ＦＦＦＦＦＦＦＦ”であるということはブート領域切り替え処理が１度も行われていないことになり、ブートプログラムはメモリブロック６１、６２に格納されているはずであると判定することができる。
【００４７】
次に、ブートエリア指定フラグＣ、Ｄの値が“００００００００”の場合について説明する。ブートエリア指定フラグの値は、ブート領域切り替え処理が行われる毎に初期値“ＦＦＦＦＦＦＦＦ”から１ずつ減じられていくため、最後には“００００００００”となる可能性があるが、例えばブートエリア指定フラグが３２ビットの場合には２３２回ブート領域切り替え処理が行われないと“００００００００”とならないため現実的には発生することはあり得ない。そのため、ブートエリア指定フラグの値が“００００００００”の場合には何等かの異常が発生していると判断することができる。
【００４８】
つまり、ＣＰＵ２は、初期状態である場合を除いて、ブートエリア指定フラグを構成する全てのビットが“０”または“１”の場合には、例え複数のメモリブロックに格納するようにした２つのブートエリア指定フラグの値が一致しても無効とする。
【００４９】
ステップ１０３において、ブートエリア指定フラグＣ、Ｄの値が“００００００００”または“ＦＦＦＦＦＦＦＦ”のいずれでも無い場合い、ブートエリア指定フラグＡの値とブートエリア指定フラグＢの値が一致しているか否かの判定が行われる（ステップ１０４）。このステップ１０４においてブートエリア指定フラグＡとブートエリア指定フラグＢの値が等しくない場合、メモリブロック６１、６２へのブート領域切り替え処理は正常に終了していないので、メモリブロック６１、６２のユーザ領域に正常なブートプログラムが格納されているものと判断され、メモリブロック６３、６４のブート指定が行われる（ステップ１０８）。
【００５０】
ステップ１０４においてブートエリア指定フラグＡとブートエリア指定フラグＢの値が等しいと判定された場合、次に、このブートエリア指定フラグＡ、Ｂの値が“００００００００”であるかの判定が行われる（ステップ１０５）。このステップ１０５において、ブートエリア指定フラグＡ、Ｂの値が“００００００００”である場合、上記で説明したのと同様の理由により、メモリブロック６１、６２には何等かの異常が発生しているものと判断され、メモリブロック６３、６４のブート指定が行われる（ステップ１０８）。
【００５１】
そして、ステップ１０５において、ブートエリア指定フラグＡ、Ｂの値が“００００００００”でない場合、ブートエリア指定フラグＡ、Ｂの値がブートエリア指定フラグＣ、Ｄの値よりも大きいか否かの判定が行われる（ステップ１０５）。このステップ１０５において、ブートエリア指定フラグＡ、Ｂの値がブートエリア指定フラグＣ、Ｄの値よりも大きい場合、ブートプログラムはメモリブロック６３、６４のユーザ領域に格納されているものと判断されて、メモリブロック６３、６４のブート指定が行われる（ステップ１０８）。逆に、ステップ１０５において、ブートエリア指定フラグＡ、Ｂの値がブートエリア指定フラグＣ、Ｄの値よりも小さい場合、ブートプログラムはメモリブロック６１、６２のユーザ領域に格納されているものと判断されて、メモリブロック６１、６２のブート指定が行われる（ステップ１０７）。
【００５２】
上記のような処理が行われることにより、本実施形態のシングルチップマイコンによれば、セルフプログラミング中のどのようなタイミングで電源瞬断が発生しても、必ずブートプログラムが格納されているメモリブロックを特定して、ブートプログラムより起動を行うことができる。
【００５３】
なお、図３に示したフローチャートにおいて、ブートエリア指定フラグの値と“００００００００”または“ＦＦＦＦＦＦＦＦ”との比較を行っているが、この比較処理を行うことにより、電源瞬断等によりブートエリア指定フラグの値が不定となって偶然２つのブートエリア指定フラグの値が一致してしまうという可能性を下げることができる。
【００５４】
例えば、図１に示したシングルチップマイコンの初期状態において、ブートプログラムがメモリブロック６２のユーザ領域とは関係無くメモリブロック６１のユーザ領域のみに格納されている場合を用いて説明する。このような場合、ブート領域切り替え処理が一度も行われていなければ、ブートエリア指令フラグＡ〜Ｄの値は全て初期値の“ＦＦＦＦＦＦＦＦ”となっている。この状態から、セルフプログラミング処理が行われメモリブロック６２の内容の書き換えが行われた場合、このメモリブロック６２の書き換え終了前に電源瞬断が発生するとメモリブロック６２のブートエリア指定フラグＢの値は不定値となる。
【００５５】
このような場合に、ブートエリア指定フラグＣ、Ｄの値が“ＦＦＦＦＦＦＦＦ”で一致していることを理由としてメモリブロック６３、６４をブート領域として指定してしまうと、実際にはブートプログラムはメモリブロック６１のユーザ領域に格納されているため誤動作となってしまう。そのため、このような場合でもメモリブロック６１、６２をブート領域として指定できるようにするために、ブートエリア指定フラグＣ、Ｄの値と、“ＦＦＦＦＦＦＦＦ”との比較を行っているのである。
【００５６】
本実施形態のシングルチップマイコンでは、同一内容のブートエリア指定フラグを同時に消去が行われることがない複数の領域に格納するようにしているため、たとえ電源瞬断が発生して一方のブートエリア指定フラグが不定値となった場合でも、他方のブートエリア指定フラグの値は正常な値が保持される。そのため、２つのブートエリア指定フラグが一致するか否かを判定することによりそのブートエリア指定フラグが有効であるか否かを判定することができ、実際にはブートプログラムが格納されていないメモリブロックをブート指定してしまうという誤動作が発生することを防ぐことができる。
【００５７】
例えば、図２（ｂ）に示すような、メモリブロック６３、６４の消去処理中に電源瞬断が発生してメモリブロック６３、６４内のデータが不定となった場合を考える。この場合メモリブロック６３、６４のブートエリア指定フラグのいずれか一方が“ＦＦＦＦＦＦＦＦ”よりも小さい値となっても、もう一方のブートエリア指定フラグの値が同じ値とならなければメモリブロック６３、６４が誤ってブート指定されることはない。２つのブートエリア指定フラグの値が偶然一致する確率は、ブートエリア指定フラグが３２ビットの場合１／２３２となるため、実際に発生することはあり得ない。
【００５８】
また、図２（ｆ）に示すような、メモリブロック６１、６２の消去処理中に電源瞬断が発生してメモリブロック６１、６２内のデータが不定となった場合にも同様な理由により誤動作が発生することは実際上あり得ない。
【００５９】
本実施形態では、説明を簡単にするためにメモリブロックの数が４の場合を用いて説明したが、本発明はこれに限定されるものではなく、メモリブロックの数は少なくとも４以上であればよく、メモリブロックの数が４以上の場合にも同様に本発明を適用することができるものである。この場合には、同一内容のブートエリア指定フラグが複数のメモリブロック内に格納されるようになっていればよい。
【００６０】
また、本実施形態では、記憶領域を４つのメモリブロックに分割し、さらに１つのメモリブロックをブートエリア指定フラグを格納するための領域とユーザ領域とに分割して、同一内容のブートエリア指定フラグをそれぞれ異なる２つの領域に格納するようにしていたが、同一内容のブートエリア指定フラグを、同時に消去が行われることが無い２つ以上の領域に格納することができれば同様の効果を得ることができる。
【００６１】
【発明の効果】
以上説明したように、本発明によれば、同一内容のブートエリア指定フラグを同時に消去が行われることがない複数のメモリブロックに格納するようにしているので、セルフプログラミング中のブート領域切り替え処理中に電源瞬断が発生した場合でも、ブートプログラムが格納されている絵もブロックを特定して、ブートプログラムより起動を行うことができるという効果を得ることができる。
【図面の簡単な説明】
【図１】本発明の一実施形態のシングルチップマイクロコンピュータの構成を示すブロック図である。
【図２】本発明の一実施形態のシングルチップマイクロコンピュータにおけるブート領域切り替え処理を説明するための図である。
【図３】図１のシングルチップマイクロコンピュータの動作を示すフローチャートである。
【図４】従来のシングルチップマイクロコンピュータの構成を示すブロック図である。
【図５】図４に示す従来のシングルチップマイクロコンピュータの動作を示すフローチャートである。
【符号の説明】
１　　不揮発性メモリ
２　ＣＰＵ
３　　ブートメモリ
４　　エリア指定フラグ
５　　ＲＡＭ
６１〜６４　　メモリブロック
１６１、１６２　　メモリブロック
４１　　不揮発性メモリ
１０１〜１０８　　ステップ
２０１〜２０４　　ステップ
【図１】
2004046453.tif 000003
【図２】
2004046453.tif 000004
【図３】
2004046453.tif 000005
【図４】
2004046453.tif 000006
【図５】
2004046453.tif 000007