(57)【要約】【課題】不揮発性メモリの内容が不正に書き換えられることを防止する。【解決手段】格納データを書き換えるための自己書き換えプログラムと、自己書き換えプログラムを呼び出すためのアプリケーションプログラムとを有し、電気的にデータを書き換え可能である不揮発性メモリと、プロセッサと、第１保持回路とを備えるマイクロコンピュータにおける不揮発性メモリの書き換え方法であって、プロセッサは、不揮発性メモリから読み出されるアプリケーションプログラムの解読結果に基づいて、第１保持回路に不揮発性メモリの自己書き換えを許可するための第１データを書き込んだ後に自己書き換えプログラムを呼び出し、自己書き換えプログラムの解読結果に基づいて、第１保持回路の内容を判別し、第１保持回路の内容が第１データである場合、自己書き換えプログラムの解読結果に基づいて、不揮発性メモリへの書き込み処理を実行する。【選択図】図１
2007172331.tif 000002
【特許請求の範囲】
【請求項１】
格納データを書き換えるための自己書き換えプログラムと、前記自己書き換えプログラムを呼び出すためのアプリケーションプログラムとを有し、電気的にデータを書き換え可能である不揮発性メモリと、
第１保持回路と、
前記不揮発性メモリから読み出される前記アプリケーションプログラムの解読結果に基づいて、前記第１保持回路に前記不揮発性メモリの自己書き換えを許可するための第１データを書き込み、前記自己書き換えプログラムを呼び出す第１処理回路と、
前記自己書き換えプログラムの解読結果に基づいて、前記第１保持回路の内容を判別する第２処理回路と、
前記第１保持回路の内容が前記第１データである場合、前記自己書き換えプログラムの解読結果に基づいて、前記不揮発性メモリへの書き込み処理を実行する第３処理回路と、
を備えることを特徴とするマイクロコンピュータ。
【請求項２】
請求項１に記載のマイクロコンピュータであって、
前記第３処理回路は、
前記書き込み処理を実行する場合、前記自己書き換えプログラムの解読結果に基づいて前記第１保持回路の内容をクリアすることを特徴とするマイクロコンピュータ。
【請求項３】
請求項１又は２に記載のマイクロコンピュータであって、
第２保持回路を更に備え、
前記第３処理回路は、
前記自己書き換えプログラムの解読結果に基づいて、前記不揮発性メモリの自己書き換えを許可するための第２データを前記第２保持回路に書き込み、前記第１保持回路の内容が前記第１データであり、かつ、前記第２保持回路の内容が前記第２データであれば前記書き込み処理を実行することを特徴とするマイクロコンピュータ。
【請求項４】
請求項１〜３の何れか一項に記載のマイクロコンピュータであって、
前記不揮発性メモリに、少なくとも前記自己書き換えプログラムを含む第１アプリケーションプログラムが格納され、
前記第１アプリケーションプログラムと同一内容の第２アプリケーションプログラムが格納され、データの書き込みが禁止されている書き込み禁止メモリと、
前記第１アプリケーションプログラムと前記第２アプリケーションプログラムとが同一でない場合は、前記不揮発性メモリに格納されている前記第１アプリケーションプログラムを前記書き込み禁止メモリに格納されている前記第２アプリケーションプログラムに書き換える第４処理回路と、
を更に備えることを特徴とするマイクロコンピュータ。
【請求項５】
格納データを書き換えるための自己書き換えプログラムと、前記自己書き換えプログラムを呼び出すためのアプリケーションプログラムとを有し、電気的にデータを書き換え可能である不揮発性メモリと、プロセッサと、第１保持回路とを備えるマイクロコンピュータにおける前記不揮発性メモリの書き換え方法であって、
前記プロセッサは、
前記不揮発性メモリから読み出される前記アプリケーションプログラムの解読結果に基づいて、前記第１保持回路に前記不揮発性メモリの自己書き換えを許可するための第１データを書き込んだ後に前記自己書き換えプログラムを呼び出し、
前記自己書き換えプログラムの解読結果に基づいて、前記第１保持回路の内容を判別し、
前記第１保持回路の内容が前記第１データである場合、前記自己書き換えプログラムの解読結果に基づいて、前記不揮発性メモリへの書き込み処理を実行することを特徴とする不揮発性メモリの書き換え方法。
【請求項６】
請求項５に記載の不揮発性メモリの書き換え方法であって、
前記プロセッサは、
前記書き込み処理を実行する場合、前記自己書き換えプログラムの解読結果に基づいて前記第１保持回路の内容をクリアすることを特徴とする不揮発性メモリの書き換え方法。
【請求項７】
請求項５又は６に記載の不揮発性メモリの書き換え方法であって、
前記プロセッサは、
前記自己書き換えプログラムの解読結果に基づいて、前記不揮発性メモリの自己書き換えを許可するための第２データを前記第２保持回路に書き込み、前記第１保持回路の内容が前記第１データであり、かつ、前記第２保持回路の内容が前記第２データであれば前記書き込み処理を実行することを特徴とする不揮発性メモリの書き換え方法。
【請求項８】
請求項５〜７の何れか一項に記載の不揮発性メモリの書き換え方法であって、
前記不揮発性メモリに、少なくとも前記自己書き換えプログラムを含む第１アプリケーションプログラムが格納され、
前記マイクロコンピュータが備える書き込み禁止メモリに、前記第１アプリケーションプログラムと同一内容の第２アプリケーションプログラムが格納され、
前記プロセッサは、
前記第１アプリケーションプログラムと前記第２アプリケーションプログラムとが同一でない場合は、前記不揮発性メモリに格納されている前記第１アプリケーションプログラムを前記書き込み禁止メモリに格納されている前記第２アプリケーションプログラムに書き換えることを特徴とする不揮発性メモリの書き換え方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マイクロコンピュータ及び不揮発性メモリの書き換え方法に関する。
【背景技術】
【０００２】
マイクロコンピュータでは、プログラムや様々なデータを格納するためのメモリとして、フラッシュメモリ等の不揮発性メモリが用いられることが多い。そして、プログラムのバージョンアップやデータの更新等が必要な際に、マイクロコンピュータが不揮発性メモリに格納されているプログラムやデータを更新することが一般的に行われている。このような、マイクロコンピュータ自身で不揮発性メモリの内容を書き換えることは「自己書き換え」と言われている。
【０００３】
自己書き換えを実現するためには、不揮発性メモリのある領域に自己書き換え処理を実行するためのプログラムである自己書き換えプログラムを格納しておき、自己書き換えを行う際に、自己書き換えプログラムを呼び出す必要がある。
【０００４】
ところで、不揮発性メモリに自己書き換えプログラムを格納する場合、アプリケーションプログラムの不具合等により、自己書き換えプログラムが格納された領域がアドレス指定されると、不揮発性メモリの内容が不正に書き換えられてしまう恐れがある。
【０００５】
そこで、不正な書き換えを防止するために、例えば、自己書き換えプログラムにおいて所定のコマンドシーケンスを実行しないと、不揮発性メモリの内容を書き換えることができないマイクロコンピュータが提案されている（特許文献１）。このようなマイクロコンピュータでは、アプリケーションプログラムの不具合等によって自己書き換えプログラムの途中のアドレスが指定された場合には、所定のコマンドシーケンスが実行されないため、不揮発性メモリの内容が不正に書き換わることを防止することができる。
【特許文献１】特開平１０−１３４０２４号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
ところが、特許文献１に開示されているようなマイクロコンピュータの場合、アプリケーションプログラムの不具合等によって自己書き換えプログラムの先頭のアドレスが指定されてしまうと、所定のコマンドシーケンスが実行されることとなり、不揮発性メモリの内容が不正に書き換えられてしまうこととなる。
【０００７】
本発明は上記課題を鑑みてなされたものであり、不揮発性メモリの内容が不正に書き換えられることを防止することを目的とする。
【課題を解決するための手段】
【０００８】
上記目的を達成するため、本発明のマイクロコンピュータは、格納データを書き換えるための自己書き換えプログラムと、前記自己書き換えプログラムを呼び出すためのアプリケーションプログラムとを有し、電気的にデータを書き換え可能である不揮発性メモリと、第１保持回路と、前記不揮発性メモリから読み出される前記アプリケーションプログラムの解読結果に基づいて、前記第１保持回路に前記不揮発性メモリの自己書き換えを許可するための第１データを書き込み、前記自己書き換えプログラムを呼び出す第１処理回路と、前記自己書き換えプログラムの解読結果に基づいて、前記第１保持回路の内容を判別する第２処理回路と、前記第１保持回路の内容が前記第１データである場合、前記自己書き換えプログラムの解読結果に基づいて、前記不揮発性メモリへの書き込み処理を実行する第３処理回路と、を備えることとする。
【０００９】
なお、前記第３処理回路は、前記書き込み処理を実行する場合、前記自己書き換えプログラムの解読結果に基づいて前記第１保持回路の内容をクリアすることとしてもよい。
【００１０】
また、前記マイクロコンピュータは、第２保持回路を更に備え、前記第３処理回路は、前記自己書き換えプログラムの解読結果に基づいて、前記不揮発性メモリの自己書き換えを許可するための第２データを前記第２保持回路に書き込み、前記第１保持回路の内容が前記第１データであり、かつ、前記第２保持回路の内容が前記第２データであれば前記書き込み処理を実行することとしてもよい。
【００１１】
また、前記マイクロコンピュータは、前記不揮発性メモリに、少なくとも前記自己書き換えプログラムを含む第１アプリケーションプログラムが格納され、前記第１アプリケーションプログラムと同一内容の第２アプリケーションプログラムが格納され、データの書き込みが禁止されている書き込み禁止メモリと、前記第１アプリケーションプログラムと前記第２アプリケーションプログラムとが同一でない場合は、前記不揮発性メモリに格納されている前記第１アプリケーションプログラムを前記書き込み禁止メモリに格納されている前記第２アプリケーションプログラムに書き換える第４処理回路と、を更に備えることとしてもよい。
【００１２】
また、本発明の不揮発性メモリの書き換え方法は、格納データを書き換えるための自己書き換えプログラムと、前記自己書き換えプログラムを呼び出すためのアプリケーションプログラムとを有し、電気的にデータを書き換え可能である不揮発性メモリと、プロセッサと、第１保持回路とを備えるマイクロコンピュータにおける前記不揮発性メモリの書き換え方法であって、前記プロセッサは、前記不揮発性メモリから読み出される前記アプリケーションプログラムの解読結果に基づいて、前記第１保持回路に前記不揮発性メモリの自己書き換えを許可するための第１データを書き込んだ後に前記自己書き換えプログラムを呼び出し、前記自己書き換えプログラムの解読結果に基づいて、前記第１保持回路の内容を判別し、前記第１保持回路の内容が前記第１データである場合、前記自己書き換えプログラムの解読結果に基づいて、前記不揮発性メモリへの書き込み処理を実行することとする。
【００１３】
なお、前記プロセッサは、前記書き込み処理を実行する場合、前記自己書き換えプログラムの解読結果に基づいて前記第１保持回路の内容をクリアすることとしてもよい。
【００１４】
また、前記プロセッサは、前記自己書き換えプログラムの解読結果に基づいて、前記不揮発性メモリの自己書き換えを許可するための第２データを前記第２保持回路に書き込み、前記第１保持回路の内容が前記第１データであり、かつ、前記第２保持回路の内容が前記第２データであれば前記書き込み処理を実行することとしてもよい。
【００１５】
また、前記不揮発性メモリに、少なくとも前記自己書き換えプログラムを含む第１アプリケーションプログラムが格納され、前記マイクロコンピュータが備える書き込み禁止メモリに、前記第１アプリケーションプログラムと同一内容の第２アプリケーションプログラムが格納され、前記プロセッサは、前記第１アプリケーションプログラムと前記第２アプリケーションプログラムとが同一でない場合は、前記不揮発性メモリに格納されている前記第１アプリケーションプログラムを前記書き込み禁止メモリに格納されている前記第２アプリケーションプログラムに書き換えることとしてもよい。
【発明の効果】
【００１６】
不揮発性メモリの内容が不正に書き換えられることを防止することができる。
【発明を実施するための最良の形態】
【００１７】
＝＝回路構成＝＝
図１は、本発明のマイクロコンピュータの一実施形態の構成を示す図である。マイクロコンピュータ１は、フラッシュメモリ１０、プログラムカウンタ１１、命令レジスタ１２、命令デコーダ１３、アドレスバス１４ａ、データバス１４ｄ、レジスタ１５，１６、データ一致検出回路１７〜２０、データ識別回路２１、アドレスレジスタ２２、データレジスタ２３、制御レジスタ２４、ＲＡＭ（Random Access Memory）２５、書き込み制御回路２６、及びマルチプレクサ２７を含んで構成されている。
【００１８】
図２は、マイクロコンピュータ１のアドレス空間の構成例を示す図である。マイクロコンピュータ１のアドレス空間は例えば１６ビットで構成されており、例えば「００００Ｈ」〜「７ＦＦＦＨ」がレジスタ等を制御するための内部Ｉ／Ｏ用に割り当てられ、「８０００Ｈ」〜「ＦＦＦＦＨ」がフラッシュメモリ１０を制御するために割り当てられている。なお、アドレスやデータにおける「Ｈ」は、１６進表記であることを示すものである。
【００１９】
フラッシュメモリ１０は、データを電気的に消去及び書き換えることが可能な不揮発性メモリである。本実施形態では、フラッシュメモリ１０は、例えば１５ビットのアドレス「００００Ｈ」〜「７ＦＦＦＨ」で指定可能な記憶領域を有している。なお、図２に示したように、フラッシュメモリ１０における１５ビットのアドレス「００００Ｈ」〜「７ＦＦＦＨ」は、マイクロコンピュータ１の全体のアドレス空間における「８０００Ｈ」〜「ＦＦＦＦＨ」に対応する。そして、例えばフラッシュメモリ１０の「００００Ｈ」〜「０ＦＦＦＨ」の領域は、マイクロコンピュータ１のブート時に参照されるブートプログラム等が格納されるブート領域であり、「１０００Ｈ」〜「５ＦＦＦＨ」の領域は、マイクロコンピュータ１の動作を制御するアプリケーションプログラムが格納されるプログラム領域であり、「６０００Ｈ」〜「７ＦＦＦＨ」の領域は、プログラム以外のデータが格納されるデータ領域である。
【００２０】
プログラム領域中の領域１０ａには、フラッシュメモリ１０の内容を書き換えるためのプログラムである自己書き換えプログラムが格納されている。なお、本実施形態においては、フラッシュメモリ１０における１ワードは例えば８ビットであり、フラッシュメモリ１０の内容を書き換える際は、例えば１２８ワードからなる１ページ単位で行われるものとする。また、ブート領域中の領域１０ｂには、自己書き換えプログラムや通信プログラム等、プログラム領域中の重要なアプリケーションプログラムと同一内容のプログラムが格納されている。そして、ブート領域は、自己書き換えプログラム等によるデータの書き込みが禁止されている。
【００２１】
なお、本実施形態においては、フラッシュメモリ１０内に、データの書き込みが禁止された領域１０ｂと、アプリケーションプログラムが格納されたプログラム領域とを設けることとしているが、これらの領域は夫々別のメモリ上に構成されることとしてもよい。例えば、ＲＯＭ（Read Only Memory）等のデータ書き込みが禁止されたメモリに領域１０ｂを設けることも可能である。
【００２２】
プログラムカウンタ１１は、マイクロコンピュータ１を動作させるために、フラッシュメモリ１内のアドレスを指定するものである。命令レジスタ１２には、フラッシュメモリ１０に格納されているプログラムのうち、プログラムカウンタ１１によって指定されたアドレスのプログラムが読み出される。命令デコーダ１３は、命令レジスタ１２に格納されているプログラムの内容を解読し、マイクロコンピュータ１の動作を制御するための動作制御信号を出力する。
【００２３】
アドレスバス１４ａは、例えば１６ビットのバスであり、フラッシュメモリ１０内のアドレスを指定するためのデータ（例えば１５ビット）等の転送が行われる。また、データバス１４ｄは、例えば１６ビットのバスであり、フラッシュメモリ１０の指定アドレスへの書き込みデータ（例えば８ビット）、フラッシュメモリ１０に対する書き込みを制御するためのデータ（例えば８ビット）等の転送が行われる。
【００２４】
レジスタ１５は、例えば８ビットの記憶回路であり、データバス１４ｄの所定の８ビットと接続されている。このレジスタ１５には、領域１０ａに格納された自己書き込みプログラムが呼び出される際に、所定のデータ（第１データ：例えば「５４Ｈ」）が設定される。つまり、自己書き込みプログラムを呼び出すアプリケーションプログラムが実行されると、命令デコーダ１３の制御により、レジスタ１５に「５４Ｈ」が設定される。なお、本実施形態では、マイクロプロセッサ１の全体のアドレス空間におけるレジスタ１５のアドレスは、例えば「００５４Ｈ」であることとする。
【００２５】
データ一致検出回路１７は、自己書き換えプログラムが実行される際に、命令デコーダ１３の制御によって所定のデータが書き込まれると、例えば「１」を出力し、それ以外の時は例えば「０」を出力する回路である。図３は、データ一致検出回路１７の構成例を示す図である。データ一致検出回路１７は、レジスタ４１，４２と、これら２つのレジスタ４１，４２の内容を比較する比較回路４３とを含んで構成されている。レジスタ４１，４２は、例えば８ビットの記憶回路であり、データバス１４ｄの所定の８ビットと接続されている。レジスタ４１には、あらかじめ所定のデータ（例えば「Ａ０Ｈ」）が格納されている。そして、レジスタ４２には、自己書き換えプログラムが実行される際に、命令デコーダ１３の制御によってレジスタ４１に格納されているデータと同じデータ（例えば「Ａ０Ｈ」）が設定される。比較回路４３は、レジスタ４１，４２に格納されているデータの比較結果を示す例えば１ビットの比較結果信号を出力する回路である。本実施形態では、レジスタ４１，４２の内容が等しい場合は比較結果信号が「１」となり、レジスタ４１，４２の内容が異なる場合は比較結果信号が「０」となることとする。なお、本実施形態では、マイクロプロセッサ１の全体のアドレス空間におけるレジスタ４２のアドレスは、例えば「０ＡＡＡＨ」であることとする。
【００２６】
レジスタ１６は、例えば８ビットの記憶回路であり、データバス１４ｄの所定の８ビットと接続されている。また、レジスタ１６には、データ一致検出回路１７から出力される比較結果信号が入力されており、この比較結果信号が「１」の場合に書き込み可能な状態となる。このレジスタ１６には、自己書き換えプログラムが実行される際に、命令デコーダ１３の制御によって、所定のデータ（例えば「５５Ｈ」）が設定される。なお、本実施形態では、マイクロプロセッサ１の全体のアドレス空間におけるレジスタ１５のアドレスは、例えば「００５５Ｈ」であることとする。
【００２７】
データ識別回路２１は、レジスタ１６の内容が「５５Ｈ」であるかどうかを識別し、「５５Ｈ」である場合には例えば「１」を出力し、それ以外の場合は「０」を出力する回路である。図４は、データ識別回路２１の構成例を示す図である。データ識別回路２１は、レジスタ４４及び比較回路４５を含んで構成されている。レジスタ４４には、自己書き換えプログラムが実行される際にレジスタ１６に設定されるデータ（「５５Ｈ」）があらかじめ設定されている。比較回路４５は、レジスタ１６，４４に格納されているデータの比較結果を示す例えば１ビットの比較結果信号を出力する回路である。本実施形態では、レジスタ１６，４４の内容が等しい場合は比較結果信号が「１」となり、レジスタ１６，４４の内容が異なる場合は比較結果信号が「０」となることとする。
【００２８】
データ一致検出回路１８は、自己書き換えプログラムが実行される際に、命令デコーダ１３の制御によって所定のデータが書き込まれると、例えば「１」を出力し、それ以外の時は例えば「０」を出力する回路である。図５は、データ一致検出回路１８の構成例を示す図である。データ一致検出回路１８は、レジスタ４６，４７と、これら２つのレジスタ４６，４７の内容を比較する比較回路４８とを含んで構成されている。レジスタ４６，４７は、例えば８ビットの記憶回路であり、データバス１４ｄの所定の８ビットと接続されている。レジスタ４６には、あらかじめ所定のデータ（例えば「Ａ０Ｈ」）が格納されている。また、レジスタ４７には、データ識別回路２１から出力される比較結果信号が入力されており、この比較結果信号が「１」の場合に書き込み可能な状態となる。そして、レジスタ４７には、自己書き換えプログラムが実行される際に、命令デコーダ１３の制御によってレジスタ４６に格納されているデータと同じデータ（例えば「Ａ０Ｈ」）が設定される。比較回路４８は、レジスタ４６，４７に格納されているデータの比較結果を示す例えば１ビットの比較結果信号を出力する回路である。本実施形態では、レジスタ４６，４７の内容が等しい場合は比較結果信号が「１」となり、レジスタ４６，４７の内容が異なる場合は比較結果信号が「０」となることとする。なお、本実施形態では、マイクロプロセッサ１の全体のアドレス空間におけるレジスタ４７のアドレスは、例えば「０ＡＡＢＨ」であることとする。
【００２９】
アドレスレジスタ２２は、例えば１５ビットのレジスタであり、アドレスバス１４ａの所定の１５ビットと接続されている。また、アドレスレジスタ２２には、データ一致検出回路１８から出力される比較結果信号が入力されており、この比較結果信号が「１」の場合に書き込み可能な状態となる。このアドレスレジスタ２２には、フラッシュメモリ１０又はＲＡＭ２５の領域を指定するための１５ビットのアドレスが設定される。なお、アドレスレジスタ２２に設定される１５ビットのアドレスを、ＤＡＴＡ１と表すこととする。
【００３０】
データ一致検出回路１９は、自己書き換えプログラムが実行される際に、命令デコーダ１３の制御によって所定のデータが書き込まれると、例えば「１」を出力し、それ以外の時は例えば「０」を出力する回路である。図６は、データ一致検出回路１９の構成例を示す図である。データ一致検出回路１９は、レジスタ５１，５２と、これら２つのレジスタ５１，５２の内容を比較する比較回路５３とを含んで構成されている。レジスタ５１，５２は、例えば８ビットの記憶回路であり、データバス１４ｄの所定の８ビットと接続されている。レジスタ５１には、あらかじめ所定のデータ（例えば「Ａ０Ｈ」）が格納されている。また、レジスタ５２には、データ識別回路２１から出力される比較結果信号が入力されており、この比較結果信号が「１」の場合に書き込み可能な状態となる。そして、レジスタ５２には、自己書き換えプログラムが実行される際に、命令デコーダ１３の制御によってレジスタ５１に格納されているデータと同じデータ（例えば「Ａ０Ｈ」）が設定される。比較回路５３は、レジスタ５１，５２に格納されているデータの比較結果を示す例えば１ビットの比較結果信号を出力する回路である。本実施形態では、レジスタ５１，５２の内容が等しい場合は比較結果信号が「１」となり、レジスタ５１，５２の内容が異なる場合は比較結果信号が「０」となることとする。なお、本実施形態では、マイクロプロセッサ１の全体のアドレス空間におけるレジスタ５２のアドレスは、例えば「０ＡＡＣＨ」であることとする。
【００３１】
データレジスタ２３は、例えば８ビットのレジスタであり、データバス１４ｄの所定の８ビットと接続されている。また、データレジスタ２３には、データ一致検出回路１９から出力される比較結果信号が入力されており、この比較結果信号が「１」の場合に書き込み可能な状態となる。このデータレジスタ２３には、フラッシュメモリ１０に書き込まれるデータが設定される。なお、データレジスタ２３に設定される８ビットのデータを、ＤＡＴＡ２と表すこととする。
【００３２】
データ一致検出回路２０は、自己書き換えプログラムが実行される際に、命令デコーダ１３の制御によって所定のデータが書き込まれると、例えば「１」を出力し、それ以外の時は例えば「０」を出力する回路である。図７は、データ一致検出回路２０の構成例を示す図である。データ一致検出回路２０は、レジスタ５４，５５と、これら２つのレジスタ５４，５５の内容を比較する比較回路５６とを含んで構成されている。レジスタ５４，５５は、例えば８ビットの記憶回路であり、データバス１４ｄの所定の８ビットと接続されている。レジスタ５４には、あらかじめ所定のデータ（例えば「Ａ０Ｈ」）が格納されている。また、レジスタ５５には、データ識別回路２１から出力される比較結果信号が入力されており、この比較結果信号が「１」の場合に書き込み可能な状態となる。そして、レジスタ５５には、自己書き換えプログラムが実行される際に、命令デコーダ１３の制御によってレジスタ５４に格納されているデータと同じデータ（例えば「Ａ０Ｈ」）が設定される。比較回路５６は、レジスタ５４，５５に格納されているデータの比較結果を示す例えば１ビットの比較結果信号を出力する回路である。本実施形態では、レジスタ５４，５５の内容が等しい場合は比較結果信号が「１」となり、レジスタ５４，５５の内容が異なる場合は比較結果信号が「０」となることとする。なお、本実施形態では、マイクロプロセッサ１の全体のアドレス空間におけるレジスタ５５のアドレスは、例えば「０ＡＡＤＨ」であることとする。
【００３３】
制御レジスタ２４は、例えば８ビットのレジスタであり、データバス１４ｄの所定の８ビットと接続されている。また、制御レジスタ２４には、データ一致検出回路２０から出力される比較結果信号が入力されており、この比較結果信号が「１」の場合に書き込み可能な状態となる。そして、制御レジスタ２４には、自己書き換えプログラムが実行される際に、命令デコーダ１３の制御によってフラッシュメモリ１０を書き込み可能とするための例えば８ビットのデータが設定される。なお、制御レジスタ２４に設定される８ビットのデータを、ＤＡＴＡ３と表すこととする。
【００３４】
ＲＡＭ２５は、例えば１２８ワードの記憶容量を有し、フラッシュメモリ１０に書き込まれるデータを１ページ単位で一時的に保持するバッファである。なお、ＲＡＭ２５のアドレス指定は、アドレスレジスタ２２から出力されるＤＡＴＡ１によって行われる。
【００３５】
書き込み制御回路２６には、制御レジスタ２４から出力されるＤＡＴＡ３が入力される。そして、書き込み制御回路２６は、所定の値のＤＡＴＡ３が入力されると、ＲＡＭ２５に記憶されている１２８ワード分のデータがフラッシュメモリ１０に書き込まれる様にＲＡＭ２５を制御する。
【００３６】
マルチプレクサ２７には、プログラムカウンタ１１及びアドレスレジスタ２２から出力される１５ビットのアドレスが入力されており、命令デコーダ１３の制御によって、何れか一方を選択して出力する。
【００３７】
なお、マイクロコンピュータ１において、フラッシュメモリ１０が本発明の不揮発性メモリに相当する。また、プログラムカウンタ１１、命令レジスタ１２、及び命令デコーダ１３が本発明のプロセッサ（第１〜第４処理回路）に相当する。また、レジスタ１５が本発明の第１保持回路に相当し、自己書き換えプログラムを呼び出すアプリケーションプログラムの解読結果に基づいてレジスタ１５に書き込まれるデータが本発明の第１データに相当する。また、レジスタ１６，４２，４７が本発明の第２保持回路に相当し、自己書き換えプログラムの解読結果に基づいてレジスタ１６，４２，４７に書き込まれるデータが本発明の第２データに相当する。
【００３８】
＝＝自己書き換え処理＝＝
次に、マイクロコンピュータ１における自己書き換え処理について説明する。図８は、メインプログラムの処理フロー、図９は、自己書き換えプログラムの処理フローを示す図である。
【００３９】
まず、プログラムカウンタ１１には、フラッシュメモリ１０のプログラム領域に格納されているメインプログラムのアドレスが格納されているものとする。そして、図８に示すように、メインプログラムが命令レジスタ１２に読み出され、命令デコーダ１３の制御により、レジスタ１５（「０５５４Ｈ」番地）にデータ「５４Ｈ」がセットされる（Ｓ８０１）。続いて、次のステップが命令レジスタ１２に読み出され、命令デコーダ１３の制御により、領域１０ａに格納されている自己書き換えプログラムが呼び出される（Ｓ８０２）。つまり、プログラムカウンタ１１に領域１０ａの先頭アドレスが設定されることにより、図９に示す自己書き換えプログラムが呼び出される。
【００４０】
そして、自己書き換えプログラムの先頭ステップが命令レジスタ１２に読み出され、命令デコーダ１３の制御により、データ一致検出回路１７内のレジスタ４２（「０ＡＡＡＨ」番地）にデータ「Ａ０Ｈ」がセットされる（Ｓ９０１）。これにより、データ一致検出回路１７から出力される比較結果信号が「１」となり、レジスタ１６が書き込み可能な状態となる。続いて、次のステップが命令レジスタ１２に読み出され、命令デコーダ１３の制御により、レジスタ１６（「０５５５Ｈ」番地）にデータ「５５Ｈ」がセットされる（Ｓ９０２）。これにより、データ識別回路２１から出力される比較結果信号が「１」となり、データ一致検出回路１８〜２０内のレジスタ４７，５２，５５が書き込み可能な状態となる。
【００４１】
続いて、次のステップが命令レジスタ１２に読み出され、命令デコーダ１３の制御により、データ一致検出回路１８内のレジスタ４７（「０ＡＡＢＨ」番地）にデータ「Ａ０Ｈ」がセットされる（Ｓ９０３）。これにより、データ一致検出回路１８から出力される比較結果信号が「１」となり、アドレスレジスタ２２が書き込み可能な状態となる。
【００４２】
続いて、次のステップが命令レジスタ１２に読み出され、命令デコーダ１３の制御により、レジスタ１５（「０５５４Ｈ」番地）の内容に応じた分岐処理が実行される（Ｓ９０４）。レジスタ１５の内容が「５４Ｈ」でない場合（Ｓ９０４：Ｎ）、命令デコーダ１３の制御により、自己書き換えプログラムは終了する。つまり、レジスタ１５に「５４Ｈ」が設定されていない場合、自己書き換えプログラムがメインプログラムからの正規の手順で呼び出されていないと判断される。  
レジスタ１５の内容が「５４Ｈ」である場合（Ｓ９０４：Ｙ）、次のステップが命令レジスタ１２に読み出され、命令デコーダ１３の制御により、アドレスレジスタ２２にＲＡＭ２５の先頭アドレスがセットされる（Ｓ９０５）。
【００４３】
続いて、次のステップが命令レジスタ１２に読み出され、命令デコーダ１３の制御により、レジスタ５２（「０ＡＡＣＨ」番地）にデータ「Ａ０Ｈ」がセットされる（Ｓ９０６）。これにより、データ一致検出回路１９から出力される比較結果信号が「１」となり、データレジスタ２３が書き込み可能な状態となる。続いて、次のステップが命令レジスタ１２に読み出され、命令デコーダ１３の制御により、フラッシュメモリ１０に書き込むべき８ビットのＤＡＴＡ２がデータバス１４ｄを介してデータレジスタ２３にセットされる（Ｓ９０７）。そして、命令デコーダ１３の制御により、マルチプレクサ２７の出力がＤＡＴＡ１側に切り替わってＲＡＭ２５がアドレス指定され、ＲＡＭ２５の指定アドレスにＤＡＴＡ２が書き込まれる。
【００４４】
その後、命令デコーダ１３の制御により、マルチプレクサ２７の出力がプログラムカウンタ１１側に切り替わり、次のステップが命令レジスタ１２に読み出され、アドレスレジスタ２２にＲＡＭ２５の次のアドレスがセットされる（Ｓ９０８）。そして、命令デコーダ１３は、ＲＡＭ２５に対して１ページ（１２８ワード）分の書き込みが完了するまで、ＲＡＭ２５に対するデータ書き込みを繰り返し実行する（Ｓ９０９）。
【００４５】
ＲＡＭ２５に対する１ページ分の書き込みが完了すると（Ｓ９０９：Ｙ）、次のステップが命令レジスタ１２に読み出され、命令デコーダ１３の制御により、フラッシュメモリ１０の書き込み先のアドレスがアドレスレジスタ２２にセットされる（Ｓ９１０）。続いて、次のステップが命令レジスタ１２に読み出され、命令デコーダ１３の制御により、データ一致検出回路２０内のレジスタ５５にデータ「Ａ０Ｈ」がセットされる。これにより、データ一致検出回路２０から出力される比較結果信号が「１」となり、制御レジスタ２４が書き込み可能な状態となる。続いて、次のステップが命令レジスタ１２に読み出され、命令デコーダ１３の制御により、制御レジスタ２４に、ＲＡＭ２５に格納されているデータをフラッシュメモリ１０に書き込むためのデータＤＡＴＡ３がセットされるとともに、マルチプレクサ２７の出力がＤＡＴＡ１側に切り替わってフラッシュメモリ１０の書き込み先がアドレス指定される（Ｓ９１２）。そして、ＲＡＭ２５に格納されている１ページ分のデータが、フラッシュメモリ１０の指定アドレスを先頭にして順次書き込まれる。
【００４６】
その後、次のステップが命令レジスタ１２に読み出され、命令デコーダ１３の制御により、レジスタ１５，１６，４２，４７，５２，５５、アドレスレジスタ２２、データレジスタ２３、及び制御レジスタ２４がクリアされる（Ｓ９１３）。なお、本実施形態においては、これらのレジスタのクリアを自己書き換えプログラムにおいて行うこととしたが、自己書き換えプログラムの実行終了後に、メインプログラムで行うこととしてもよい。
【００４７】
このように、自己書き換えプログラムを呼び出す側のメインプログラム（アプリケーションプログラム）においてレジスタ１５に所定のデータ（「５４Ｈ」）を設定しておくことにより、自己書き換えプログラムが正規の手順で呼び出されたかどうかを判定することができる。そして、フラッシュメモリ１０にデータを書き込む際に必要なコマンドシーケンスである第１手順（Ｓ９０１〜Ｓ９０３）及び第２手順（Ｓ９０５〜Ｓ９１２）の間で、レジスタ１５の内容をチェックし、所定のデータ（「５４Ｈ」）が設定されている場合は正規の手順で呼び出されたと判断し、手順２を実行してフラッシュメモリ１０のデータを書き換えることができる。
【００４８】
一方、レジスタ１５に所定のデータ（「５４Ｈ」）が設定されていない場合は、正規の手順ではなく、アプリケーションプログラムの不具合等により不正に自己書き換えプログラムが呼び出されたと判断し、第２手順を実行せずに自己書き換えプログラムを終了する。これにより、アプリケーションプログラムの不具合等により、自己書き換えプログラムの途中のアドレスが指定されてしまった場合はもとより、自己書き換えプログラムの先頭のアドレスが指定された場合であっても、フラッシュメモリ１０のデータが不正に書き換えられてしまうことを防ぐことができる。
【００４９】
＝＝チェック処理＝＝
次に、マイクロコンピュータ１の初期化処理（ブート処理）において実行されるフラッシュメモリ１０のチェック処理について説明する。前述したように、フラッシュメモリ１０のブート領域の領域１０ｂには、自己書き換えプログラムや外部との通信プログラム等の重要なプログラム（「Ａ」と表記）が格納されている。そして、「Ａ」と同一内容のプログラム（「Ｂ」と表記）が、フラッシュメモリ１０のプログラム領域に格納されている。
【００５０】
図１０は、初期化処理におけるフラッシュメモリ１０のチェック処理の処理フローを示す図である。まず、初期化処理において、「Ａ」と「Ｂ」との比較が行われる（Ｓ１００１）。「Ａ」と「Ｂ」の比較は、例えば、「Ａ」及び「Ｂ」のデータを完全比較することも可能であるし、チェックサム等による比較も可能である。
【００５１】
比較の結果、「Ａ」と「Ｂ」とが一致する場合（Ｓ１００１：＝）、チェック処理は終了し、後続の処理が行われることとなる。一方、「Ａ」と「Ｂ」とが一致しない場合（Ｓ１００１：≠）、プログラム領域に格納されている「Ｂ」を領域１０ｂに格納されている「Ａ」に書き換える（Ｓ１００２）。つまり、アプリケーションプログラムの不具合等、何らかの原因によって重要なプログラム「Ｂ」が書き換えられてしまった場合、当該チェック処理により「Ｂ」が修復されることとなる。
【００５２】
なお、プログラム「Ｂ」の対象に自己書き換えプログラム及び外部との通信プログラムを含ませておくことにより、プログラム領域のその他のプログラムやデータ領域に格納されたデータが不正に書き換えられてしまった場合の修復が可能となる。つまり、図１０に示した処理によって自己書き換えプログラム及び通信プログラムが修復されれば、外部から入力されるプログラムやデータを用いて、不正に書き換えられたプログラムやデータを修復することができる。また、領域１０ｂをフラッシュメモリ１０とは別のＲＯＭ等のメモリ上に設ける場合は、そのメモリを交換するだけで、フラッシュメモリ１０上に格納されている重要なプログラム「Ｂ」を変更することができる。
【００５３】
以上、本実施形態のマイクロコンピュータ１について説明した。前述したように、自己書き換えプログラムを呼び出す前にレジスタ１５に第１データ（本例では「５４Ｈ」）を設定しておき、自己書き換えプログラムでレジスタ１５に第１データが設定されているかどうかをチェックすることにより、自己書き換えプログラムが正規の手順で呼び出されたかどうかを確認することができる。つまり、アプリケーションプログラムの不具合等によって自己書き換えプログラムが不正に呼び出された場合は、レジスタ１５に第１データが設定されていないため、フラッシュメモリ１０の内容が不正に書き換えられてしまうことを防ぐことができる。
【００５４】
そして、自己書き換えプログラムにおいてレジスタ１５等のクリアをすることにより、自己書き換えプログラムの実行終了後に不正に自己書き換えプログラムが呼び出されたとしてもフラッシュメモリ１０の内容が不正に書き換えられてしまうことを防ぐことができる。
【００５５】
また、フラッシュメモリ１０への書き込みを行う際に、コマンドシーケンスである第１手順（Ｓ９０１〜Ｓ９０３）及び第２手順（Ｓ９０５〜Ｓ９１２）が必要な場合においては、フラッシュメモリ１０への書き込み処理を含む第２手順を実行する前に、レジスタ１５の内容チェックを行うことにより、フラッシュメモリ１０の内容が不正に書き換えられてしまうことを防ぐことができる。
【００５６】
また、本実施形態においては、自己書き換えプログラムや外部との通信プログラム等、重要なプログラムについては、プログラム領域とは別の書き換え禁止となっている領域１０ｂにも格納されている。そして、万一プログラム領域に格納されたこれらのプログラムが書き換えられてしまった場合であっても、初期化処理において、領域１０ｂに格納されたプログラムを用いてプログラム領域に格納された重要なプログラムの修復が行うことができる。
【００５７】
なお、上記実施形態は本発明の理解を容易にするためのものであり、本発明を限定して解釈するためのものではない。本発明は、その趣旨を逸脱することなく、変更、改良され得ると共に、本発明にはその等価物も含まれる。
【図面の簡単な説明】
【００５８】
【図１】本発明のマイクロコンピュータの一実施形態の構成を示す図である。
【図２】マイクロコンピュータ１のアドレス空間の構成例を示す図である。
【図３】データ一致検出回路１７の構成例を示す図である。
【図４】データ識別回路２１の構成例を示す図である。
【図５】データ一致検出回路１８の構成例を示す図である。
【図６】データ一致検出回路１９の構成例を示す図である。
【図７】データ一致検出回路２０の構成例を示す図である。
【図８】メインプログラムの処理フローを示す図である。
【図９】自己書き換えプログラムの処理フローを示す図である。
【図１０】初期化処理におけるフラッシュメモリ１０のチェック処理の処理フローを示す図である。
【符号の説明】
【００５９】
１  マイクロコンピュータ                １０  フラッシュメモリ
１１  プログラムカウンタ                １２  命令レジスタ
１３  命令デコーダ                      １４ａ  アドレスバス
１４ｄ  データバス                      １５，１６  レジスタ
１７〜２０  データ一致検出回路          ２１  データ識別回路
２２  アドレスレジスタ                  ２３  データレジスタ
２４  制御レジスタ                      ２５  ＲＡＭ
２６  書き込み制御回路
【図１】
2007172331.tif 000003
【図２】
2007172331.tif 000004
【図３】
2007172331.tif 000005
【図４】
2007172331.tif 000006
【図５】
2007172331.tif 000007
【図６】
2007172331.tif 000008
【図７】
2007172331.tif 000009
【図８】
2007172331.tif 000010
【図９】
2007172331.tif 000011
【図１０】
2007172331.tif 000012