(57)【要約】【課題】プログラムの暴走により、意図しないメモリへの書き込みを防止する。【解決手段】メモリ書き込み制御装置は、命令を実行する処理部１７と、処理部１７から不揮発性メモリ１１への書き込み命令信号が入力されると、電源電圧に基づいて、不揮発性メモリ１１への書き込みを許可するプロテクト部（プロテクト回路１０）と、を備える。処理部１７のＣＰＵ５がユーザプログラムの命令を実行する電圧と、メモリへの書き込みの命令を実行する電圧とを異なる範囲に設定し、電源電圧に応じて、不揮発性メモリ１１への書き込みを制御する。【選択図】図１
2011095951.tif 000002
【特許請求の範囲】
【請求項１】
命令を実行する処理部と、
前記処理部からメモリへの書き込み命令信号が入力されると、電源電圧に基づいて、メモリへの書き込みを許可するプロテクト部と、を備えるメモリ書き込み制御装置。
【請求項２】
前記処理部は、命令実行可能電圧において、メモリへの書き込みを除く命令を実行し、前記命令実行可能電圧とは異なる書き込み可能電圧において、前記メモリへの書き込み命令を実行し、
前記プロテクト部は、電源電圧が前記書き込み可能電圧の範囲内である場合、メモリへの書き込み命令を有効とし、電源電圧が前記書き込み可能電圧の範囲外である場合、メモリへの書き込み命令を無効とすることを特徴とする請求項１記載のメモリ書き込み制御装置。
【請求項３】
前記プロテクト部は、
前記書き込み可能電圧の上限値と下限値との少なくとも一方を保持し、電源電圧が前記書き込み可能電圧の範囲に含まれるか否かを判定し、メモリ書き込み許可信号を出力するメモリ書き込み電圧検出値設定部と、
前記メモリ書き込み命令信号と、前記メモリ書き込み許可信号とに基づいて、メモリへの書き込みを制御する制御部と、を備えることを特徴とする請求項２記載のメモリ書き込み制御装置。
【請求項４】
前記処理部は、前記上限値と前記下限値との少なくとも一方を、命令実行により前記メモリ書き込み電圧検出値設定部へ設定させることを特徴とする請求項３記載のメモリ書き込み制御装置。
【請求項５】
前記メモリ書き込み電圧検出値設定部は、前記上限値と前記下限値とを予め保持することを特徴とする請求項３記載のメモリ書き込み制御装置。
【請求項６】
前記処理部は、
前記メモリへの書き込みを除く命令を実行するユーザモードと、前記メモリへの書き込み命令を実行するメモリ書き換えモードとを判定するモード判定部を備えることを特徴とする請求項１乃至５のいずれか一項に記載のメモリ書き込み制御装置。
【請求項７】
メモリへの書き込みを制御するメモリ書き込み制御方法であって、
メモリへの書き込み命令を実行可能とする書き込み可能電圧を、他の命令を実行可能とする命令実行可能電圧とは異なる電圧範囲に設定し、
メモリへの書き込み命令信号が発行されると、電源電圧に基づいてメモリの書き込みを許可するメモリ書き込み制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、メモリを備えるマイクロコントローラにおけるメモリ制御に関し、特に、不揮発性メモリを備えるマイクロコントローラにおける不揮発性メモリ制御に関する。
【背景技術】
【０００２】
マイクロコントローラ分野において、プログラムによって不揮発性メモリへデータ書き込む（プログラム書き込み）利用の需要が拡大している。このため、プログラム書き込みの安全性への要求が高まってきており、メモリデータの誤書き換え防止のシステムを実現する必要がある。
【０００３】
図１１は、特許文献１に開示された書き込み制御回路の構成を示すブロック図である。ＣＰＵ６０と、メモリ６２は、書き込み制御信号ライン７４、チップ選択信号ライン７６、アドレスバス７７、データバス７８で接続されている。そして、書き込み制御信号ライン７４及びチップ選択信号をＬ（Low Level）にしたときに、アドレスバス７７上の値で決定される、メモリ６２のアドレスに、データバス７８上のデータが書き込まれる。
【０００４】
図１１の構成では、書き込み制御信号ライン７４にプロテクト回路７０が挿入配置されている。このプロテクト回路７０は、リセット回路７２からリセット信号７５が供給される。プロテクト回路７０は、例えば図示のようにオアゲートで構成され、リセット信号７５がＨ（High Level）の場合には、出力はＨに固定される。従って、リセット信号７５がＨの期間は、書き込み制御信号ライン７４がＬになることが禁止される。電源電圧低下時にリセット回路７２からリセット信号７５を出力させることによって、電源オンオフ時におけるメモリ６２への誤書き込みの発生を防止することができる。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００２−９９４６８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
図１１の構成によると、電源オンオフ時におけるメモリ６２への誤書き込みの発生を防止する効果が得られる。
しかしながら、不揮発性メモリの内容が変更されてしまうのは主に、（ｉ）電源オンオフ時等のシステム電源不安定時、（ｉｉ）プログラムの暴走でのメモリ６２へのライトアクセス時である。図１１の構成では、所望の電圧より低い状態において、リセット信号を発生する手段からリセット信号が発生しているときに書き込み許可を禁止する。すなわち、動作不可能電圧を検出し書き込みを禁止するものである。
【０００７】
正常動作しているときの電源電圧時において、ノイズ等の影響により命令実行時においてプログラムが暴走し、プログラムの暴走により書き込みプログラムが実行されてしまう場合を考える。このような場合、図１１の構成では、書き込み制御信号はプロテクトされない。従って、暴走により、書き込みプログラムの実行をしてしまい、意図しないメモリデータの書き換えが発生する。
このように、メモリの書き込み制御において、プログラムの暴走により、メモリへの意図しない書き込みを防止できないという問題がある。
【課題を解決するための手段】
【０００８】
本発明に係るメモリ書き込み制御装置の一態様は、命令を実行する処理部と、前記処理部からメモリへの書き込み命令信号が入力されると、電源電圧に基づいて、メモリへの書き込みを許可するプロテクト部と、を備える。プロテクト部は、命令を実行する電源電圧を制御することによって、メモリへの書き込みを許可するか否かを判定する。これにより、プログラムの暴走により、メモリへの意図しない書き込みを防止することができる。
【０００９】
また、本発明に係るメモリ書き込み制御方法の一態様は、メモリへの書き込みを制御するメモリ書き込み制御方法であって、メモリへの書き込み命令を実行可能とする書き込み可能電圧を、他の命令を実行可能とする命令実行可能電圧とは異なる電圧範囲に設定し、メモリへの書き込み命令信号が発行されると、電源電圧に基づいてメモリの書き込みを許可する。メモリ書き込み制御方法は、メモリ書き込みプログラムの命令が実行可能な電圧と、その他の命令（ユーザプログラム）実行が可能な電圧とを異なる範囲に設定する。これにより、ユーザプログラムの命令実行が可能な電圧において、メモリへの書き込みが発生した場合に、意図しない書き込みの実行を阻止する。
【発明の効果】
【００１０】
本発明によれば、メモリの書き込み制御において、プログラムの暴走により、メモリへの意図しない書き込みを防止することが可能となる。
【図面の簡単な説明】
【００１１】
【図１】本発明の実施形態１に係るメモリ書き込み制御システムの構成例を示すブロック図である。
【図２】不揮発性メモリのメモリマップの一例を示す図である。
【図３】不揮発性メモリのメモリマップの他の例を示す図である。
【図４】実施形態１における命令実行可能電圧とプログラム書き込み可能電圧の一例を表した図である。
【図５】実施形態１の命令実行の動作例を示したいフローチャートである。
【図６】本発明の実施形態２に係るプロテクト回路の構成例を示すブロック図である。
【図７】実施形態２における命令実行可能電圧とプログラム書き込み可能電圧を表した図である。
【図８】本発明の実施形態３に係るプロテクト回路の構成例を示すブロック図である。
【図９】実施形態３における命令実行可能電圧とプログラム書き込み可能電圧を表した図である。
【図１０】本発明に係る他のプロテクト回路の構成例を示すブロック図である。
【図１１】特許文献１に開示された書き込み制御回路の構成を示すブロック図である。
【発明を実施するための形態】
【００１２】
以下、本発明の実施形態について、図面を参照しながら説明する。説明の明確化のため、以下の記載及び図面は、適宜、省略、及び簡略化がなされている。各図面において同一の構成または機能を有する構成要素および相当部分には、同一の符号を付し、その説明は省略する。
また、以下の実施形態では、不揮発性メモリを用いて説明するが、揮発性メモリを備えるマイクロコントローラに適用することも可能である。
【００１３】
（実施形態１）
図１に本発明の実施形態１に係るメモリ書き込み制御システム（メモリ書き込み制御装置）の構成例を表すブロック図を示す。メモリ書き込み制御システムは、暴走検出部１、命令実行可能電圧検出値設定部２、オアゲート３、アンドゲート４、ＣＰＵ（Central Processing Unit）５、プロテクト回路（プロテクト部）１０、不揮発性メモリ１１、及びモード判定部１６を備える。
【００１４】
暴走検出部１は、ＣＰＵ５が実行するプログラムが暴走したことを検出し、ＣＰＵ５に通知する。例えば、ウォッチドックタイマを用いてプログラムの暴走を検出し、暴走を検出した場合にＣＰＵ５へリセット信号を通知することによって実現する。
【００１５】
命令実行可能電圧検出値設定部２は、命令実行可能電圧検出値を保持し、電源電圧が命令実行可能電圧の範囲内であるか否かを判定する。命令実行可能電圧は、メモリ書き込み制御システムが通常動作の命令を実行する（後述するユーザモード）ために必要な電源電圧値であり、命令実行可能電圧検出値設定部２に保持されている。命令実行可能電圧検出値設定部２は、命令実行可能電圧検出値として、命令実行可能電圧の上限値と下限値との少なくとも一方を保持する。ここでは、命令実行可能電圧範囲内である場合ハイレベル、範囲外である場合ロウレベルの信号(検出信号)を出力する。命令実行可能電圧については、図４を用いて後述する。
【００１６】
オアゲート３は、命令実行可能電圧検出値設定部２の出力信号と、モード信号１２とを入力し、二つの信号の論理和を出力する。
アンドゲート４は、暴走検出部１の出力信号と、オアゲート３の出力信号とを入力し、論理積を出力する。論理積は、ＣＰＵ５に対してリセットを通知するリセット信号１５となる。
【００１７】
ＣＰＵ５は、メモリ書き込み制御システム全体を制御するとともに、プログラムを構成する命令（命令群）を実行させる。また、ＣＰＵ５は、リセット信号に応じてシステムを初期化する。また、ＣＰＵ５は、不揮発性メモリ１１へ書き込みを命令する書き込み命令信号（書き込み信号）１３をプロテクト回路１０へ出力する。
【００１８】
モード判定部１６は、モードを設定するモード端子を参照し、メモリ書き込み制御システムのモードを判定する。メモリ書き込み制御システムは、ユーザコードが実行される「ユーザモード」と、不揮発性メモリプログラミングコードが実行される「メモリ書き換えモード」とを有する。
【００１９】
モード端子は、モード判定部１６に内に有してもよいし、メモリ書き込み制御システム内の他の構成要素として配置されていてもよい。モード判定部１６は、リセット解除時（電源がＯＮにされたとき）にモード端子の値を参照し、例えば、ロウレベルであるとユーザモード、ハイレベルであるとメモリ書き換えモードであると判定し、モード信号１２のレベルを設定する。また、ＣＰＵ５は、モード端子の値を参照することが可能である。図１の構成では、モード信号１２を用いてＣＰＵ５へモードが通知されることになる。
【００２０】
暴走検出部１、命令実行可能電圧検出値設定部２、オアゲート３、アンドゲート４、ＣＰＵ５、及びモード判定部１６を、処理部１７ということもある。処理部１７は、ユーザモードあるいはメモリ書き換えモードに応じて、ユーザコードあるいは不揮発性メモリプログラミングコードの命令を実行する。
【００２１】
プロテクト回路１０は、ＣＰＵ５が不揮発性メモリ１１に書き込みを実行する場合に、電源電圧を利用して、メモリの書き込みを制御する。図１に示すプロテクト回路１０は、プロテクト上限電圧検出値設定部６とプロテクト下限電圧検出値設定部７とを含む。プロテクト回路１０については後述する。
【００２２】
不揮発性メモリ１１は、記憶領域であり、例えば、ユーザコード、不揮発性メモリプログラミングコードを記憶する。ここでは、不揮発性メモリ１１は、プログラムのコードを記憶する領域であることを前提として説明するが、その他の情報を記憶してもよい。
ユーザコードは、不揮発性メモリ１１からデータを読み出すことができるが、不揮発性メモリ１１へデータを書き込むことはできないプログラムである。ユーザコードは、ユーザ側で作成することが可能なプログラムのコードである。
不揮発性メモリプログラミングコードは、不揮発性メモリへ書き込みを行うプログラムのコードであり、予め不揮発性メモリに記憶されている。不揮発性メモリプログラミングコードは、ユーザによって書き換えが禁止されるプログラムのコードである。
【００２３】
ユーザコードは、電源電圧が命令実行可能電圧の範囲内であるときに実行が可能である。不揮発性メモリプログラミングコードは、電源電圧がプログラム書き込み可能電圧の範囲内であるときにメモリの書き換えを可能とする。これについては、電源電圧と実行するコード（命令）との関係は、図４を用いて後述する。
【００２４】
図２は不揮発性メモリ１１のメモリマップの一例を示す図であり、ユーザコード、不揮発性メモリプログラミングコードの領域を設けている。ユーザコードで命令実行されるモード（以下、ユーザモード）、不揮発性メモリプログラミングコードで命令実行されるモードを不揮発性メモリプログラミングモード（以下、メモリ書き換えモード）と定義する。
【００２５】
不揮発性メモリ１１は図３に示すメモリマップのように、不揮発性メモリプログラミングコード領域をユーザコード領域とは物理的に異なるメモリで構成としても良い。例えば、不揮発性メモリプログラミングコードは、ＲＯＭ（Read Only Memory）など、ユーザ側で書き込みができないメモリに記憶されている。
【００２６】
続いて、プロテクト回路１０について説明する。プロテクト回路１０は、プロテクト上限電圧検出値設定部６、プロテクト下限電圧検出値設定部７、アンドゲート８、９を備える。
プロテクト上限電圧検出値設定部６は、プロテクト上限電圧検出値（以下、適宜「上限値」ともいう）をレジスタに保持する。そして、電源電圧がプロテクト上限電圧検出値を超えるか否か（あるいは、上限値以上であるか否か）を判定し、判定結果に応じた判定信号（上限値判定信号）を出力する。
【００２７】
プロテクト下限電圧検出値設定部７は、プロテクト下限電圧検出値（以下、適宜「下限値」ともいう）をレジスタに保持する。そして、電源電圧がプロテクト下限電圧検出値より小さいか否か（あるいは、下限値以下であるか否か）を判定し、判定結果に応じた判定信号（下限値判定信号）を出力する。
ここでは、上限値判定信号は、電源電圧が上限値以下である場合をハイレベルとし、下限値判定信号は、電源電圧が下限値以上である場合をハイレベルとする。
【００２８】
アンドゲート８は、上限値判定信号と下限値判定信号とを入力し、論理和を出力する。上限値判定信号と下限値判定信号との論理和をとることにより、電源電圧が下限値以上、かつ、上限値以下であることが検出できる。すなわち、電源電圧が、不揮発性メモリ１１への書き込みが許可されている、電源電圧がプログラム書き込み可能電圧の範囲内であることを示す。
アンドゲート（制御部）９は、書き込み命令信号１３とアンドゲート８の出力とを入力し、論理和を書き込み制御信号１４として不揮発性メモリ１１へ出力する。アンドゲート９は、書き込み制御信号１４を出力して、不揮発性メモリ１１への書き込みを制御するため、制御部ともいう。
【００２９】
上述したように、ＣＰＵ５より出力される書き込み命令信号１３の出力先には、不揮発性メモリ１１との間に、プロテクト回路１０が配置されている。プロテクト回路１０は、ＣＰＵ５から不揮発性メモリ１１に対しての書き込み命令信号１３を電源電圧に応じてプロテクトする（書き込み命令信号１３を無効にする）。
【００３０】
なお、命令実行可能電圧検出値設定部２、プロテクト上限電圧検出値設定部６、及びプロテクト下限電圧検出値設定部７は、電源電圧の値を他の構成要素（例えば、メモリ書き込み制御システム内に内蔵されている電源電圧検出回路など）から取得してもよいし、当該構成要素内で電源電圧を検出してもよい。また、本明細書において、メモリ書き込み制御システムがデバイス（メモリ書き込み制御システム内の各回路）の動作可能電圧範囲であるか否かは、一般的に備えられている電源電圧検出回路等によって判定されることを前提とする。
【００３１】
図４は本発明の実施形態１における命令実行可能電圧とプログラム書き込み可能電圧（「書き込み可能電圧」、あるいは、「メモリ書き込み可能電圧」ともいう）を表した図である。図４を用いて実施形態１の動作を説明する。ここでは、デバイスの動作可能電圧範囲を、例えば１．８Ｖ以上５．５Ｖ以下と仮定して説明を行う。なお、命令実行可能電圧とプログラム書き込み可能電圧とは、相互に異なる電圧の範囲が設定されていればよく、以下に示す具体的な電圧値に限定されるものではない。
【００３２】
図４では、ユーザモード時は電源電圧が３．５Ｖ以上であると命令実行可能電圧範囲であり、ユーザコードが実行される。電源電圧が３．５Ｖ未満の場合は図１の命令実行可能電圧検出値設定部２が検出信号ロウレベルを出力し、従来技術の通りシステムが初期化される。図４では、命令実行可能電圧がプログラム書き込み可能電圧より高い電圧の範囲に設定されている。この場合、命令実行可能電圧検出値設定部２は、命令実行可能電圧検出値として、命令実行可能電圧の下限電圧検出値を保持し、電源電圧が当該下限電圧検出値より小さい場合、ＣＰＵ５へ通知（ロウレベルの信号を出力）する場合を一例として説明する。
【００３３】
メモリ書き換えモード時は電源にユーザモードでは動作が禁止されている電圧、すなわち、プログラム書き込み可能電圧（例えば、２．０Ｖ以上３．０Ｖ以下）をユーザが供給する。あるいは、ユーザのプログラムによってプログラム書き込み可能電圧に調整する。これにより、図１のプロテクト上限電圧検出値設定部６（上限値判定信号）と、プロテクト下限電圧検出値設定部７（上限値判定信号）がハイレベルとなる。従って、アンドゲート８の出力がハイレベルで書き込み命令信号１３を許可し、書き込み制御信号１４がハイレベルとなることで不揮発性メモリ１１のプログラム書き込みを可能とする。
【００３４】
それ以外の電圧（３．０超５．５Ｖ以下、１．８以上２．０Ｖ未満）では図１のプロテクト上限電圧検出値設定部６（上限値判定信号）と、プロテクト下限電圧検出値設定部７（下限値判定信号）がロウレベルとなる。従って、アンドゲート８の出力がロウレベルとなり、書き込み制御信号１４がロウレベルとなることで不揮発性メモリ１１のプログラム書き込みを禁止（書き込み命令信号１３の無効）とする。
【００３５】
なお、命令実行可能電圧検出値設定部２は、命令実行可能電圧検出値を予め固定値として保持していてもよい。また、ユーザコードによる命令実行により、命令実行可能電圧検出値が設定・変更されてもよい。
また、プロテクト上限電圧検出値設定部６が保持する上限値と、プロテクト下限電圧検出値設定部７が保持する下限値とは、予め固定値として保持していてもよい。また、ユーザコードあるいは不揮発性メモリプログラミングコードによる命令実行により、上限値あるいは下限値が設定・変更されてもよい。
ユーザコードあるいは不揮発性メモリプログラミングコードによる命令実行により、上述した電圧検出値が変更可能になることにより、ユーザは、命令実行可能電圧、プログラム書き込み可能電圧を任意の範囲に設定・変更することが可能になる。
【００３６】
図５に本発明の実施形態１の命令実行フローを示し、図１および図２を併用して説明する。ここでは、ユーザモード時は図２で示すユーザコードを実行し、電源電圧を５Ｖで使用する場合を想定する。
正常動作時は、メモリ書き込み制御システムの電源がオンにされた後、モード判定部１６は、ユーザモードであるか判定し（Ｓ１００）、モード信号１２のレベルを設定する。
【００３７】
ユーザモードである場合（Ｓ１００でＹｅｓ）、プロテクト上限電圧検出値設定部６とプロテクト下限電圧検出値設定部７とへ上限値または下限値を設定する（書き込み許可電圧設定）（Ｓ１０１）。その後、ＣＰＵ５は、ユーザコード（ユーザプログラム）を実行する（Ｓ１０２）。
【００３８】
書き込み許可電圧設定（Ｓ１０１）はプロテクト上限電圧検出値設定部６とプロテクト下限電圧検出値設定部７にユーザコードで命令実行することにより書き込み許可電圧を設定するものである。ここでは、電源電圧が３．０Ｖ超、２．０Ｖ未満となるとロウレベルを出力するように設定する。プロテクト上限電圧検出値設定部６とプロテクト下限電圧検出値設定部７とが予め検出値を保持している場合は、設定しなくてもよい。
【００３９】
メモリ書き換えモードである場合（Ｓ１００でＮｏ）、プロテクト上限電圧検出値設定部６とプロテクト下限電圧検出値設定部７とへ上限値または下限値を設定する（書き込み許可電圧設定）（Ｓ１１１）。その後、不揮発性メモリプログラム実行（Ｓ１１２）、不揮発性メモリプログラミングルーチン（Ｓ１１３）を実行する。Ｓ１１２の不揮発性メモリプログラムは、不揮発性メモリプログラミングコードの実行を意味し、Ｓ１１３の不揮発性メモリプログラミングルーチンは、不揮発性メモリプログラミングコードのうち、実際に不揮発性メモリ１１へ書き込みを行う命令を意味する。
【００４０】
不揮発性メモリプログラミングルーチンでは、書き換え命令である場合（Ｓ１２１でＹｅｓ），プログラムの書き換えを実行する（Ｓ１２２）。書き換え命令がさらに存在する場合（Ｓ１２３でＹｅｓ）、ステップＳ１２1からの処理を繰り返す。
【００４１】
書き込み許可電圧設定（Ｓ１１１）はプロテクト上限電圧検出値設定部６とプロテクト下限電圧検出値設定部７に不揮発性メモリプログラミングコードで命令実行することにより書き込み許可電圧を設定するものである。ここでは、電源電圧が３．０Ｖ超、２．０Ｖ未満となるとロウレベルを出力するように設定する。プロテクト上限電圧検出値設定部６とプロテクト下限電圧検出値設定部７とが予め検出値を保持している場合は、設定しなくてもよい。
【００４２】
続いて、動作開始後、プログラム暴走等の異常が発生した場合を説明する。
ユーザモードにおいて、ユーザプログラム実行（Ｓ１０２）中に、ノイズなどの影響によりプログラム暴走が生じ、不揮発性メモリ１１への書き込み命令（書き込み命令信号１３）が出された場合（Ｓ１０３）、メモリ書き換えモードの不揮発性メモリプログラミングルーチン（Ｓ１１３）の実行に遷移することになる。
【００４３】
しかし、本実施形態では、メモリ書き換えモードの不揮発性メモリプログラミングルーチン（Ｓ１１３）が実行に遷移しても、書き込み許可電圧設定（Ｓ１０１）により、図１のプロテクト上限電圧検出値設定部６とプロテクト下限電圧検出値設定部７とがプログラム書き込み可能電圧範囲（２．０Ｖ以上３．０Ｖ以下）外であると識別する。従って、書き込み命令信号１３がハイレベルであっても、アンドゲート８がロウレベルとなる。このため、書き込み制御信号１４がロウレベルとなり、プログラム書き込みが行われない。よって、暴走検出前にメモリ書き換えモードの不揮発性メモリプログラミングルーチン（Ｓ１１３）の実行に遷移した場合でも、メモリデータの誤書き換えを防止する。このとき、例えば、ウォッチドックタイマなどにより、暴走を検出し（Ｓ１１４）、リセット発生状態であることがＣＰＵ５へ通知され、リセット処理に遷移する。
【００４４】
これに対し、メモリ書き換えモードにおけるプログラム書き込み動作においては、電源オン後、書き込み許可電圧設定（Ｓ１１１）から不揮発性メモリプログラム実行（Ｓ１１２）と遷移する。ユーザ自身が、ユーザモードでは動作が禁止されているプログラム書き込み可能電圧（２．０Ｖ以上３．０Ｖ以下）の電源を予めデバイスに供給する。その結果、書き込み許可電圧設定（Ｓ１１１）により、プロテクト上限電圧検出値設定部６とプロテクト下限電圧検出値設定部７がプログラム書き込み可能電圧範囲（２．０Ｖ以上３．０Ｖ以下）内であると認識し、プログラムの書き込みが可能となる。
【００４５】
図５に示す通り、本実施形態では、メモリへの書き込みを制御する場合に、メモリへの書き込み命令を実行可能とする書き込み可能電圧を、他の命令を実行可能とする命令実行可能電圧とは異なる電圧範囲に設定し、メモリへの書き込み命令信号が発行されると、電源電圧に基づいてメモリの書き込みを許可する。
【００４６】
上述した通り、プロテクト回路１０で生成されるプログラム書き込み可能電圧範囲はプロテクト上限電圧検出値設定部６とプロテクト下限電圧検出値設定部７で構成可能である。ユーザモードにおいて命令実行可能電圧範囲（３．５Ｖ以上５．５Ｖ以下）外にプログラム書き込み可能電圧（２．０Ｖ以上３．０Ｖ以下）を設ける。これにより、不揮発性メモリ１１への書き込み命令信号１３をそれらがハード的にプロテクトするため、暴走時に発生する意図しないプログラム書き込みを禁止することができる。
すなわち、不揮発性メモリを備えるマイクロコントローラにおいて、不揮発性メモリの書き込み信号をプロテクトするプロテクト回路１０に設定する電圧を、命令実行可能電圧と別なプログラム書き込み可能電圧範囲とする。これにより、命令実行時におけるプログラム暴走時には、プログラム書き込み可能電圧とは異なる電圧であるため、プロテクト回路がハード的に書き込み制御信号を制御して、メモリデータの誤書き換えを防止する。
【００４７】
（実施形態２）
図１の実施形態１のメモリ書き込み制御システムの構成例では、プロテクト上限電圧検出値設定部６とプロテクト下限電圧検出値設定部７内の電源電圧範囲のみ書き込みが許可されているが、プロテクト回路１０で生成されるプログラム書き込み可能電圧範囲はユーザモードで命令実行可能な電圧と、プログラム書き込み可能な電圧の関係により自由に設定することが可能である。
【００４８】
図６は本発明の実施形態２に係るプロテクト回路の構成例を示すブロック図である。図１のプロテクト回路１０に替えて、図６ではプロテクト回路２０を備える。プロテクト回路２０では、プロテクト上限電圧検出値設定部２６とアンドゲート２９のみである。プロテクト回路２０で構成される回路以外構成要素は、図１のシステム構成図と同様の構成である。
【００４９】
プロテクト上限電圧検出値設定部２６は、電源電圧を上限値と比較し、検出信号を出力する。例えば、プログラム書き込み可能電圧が１．８Ｖ以上３．５Ｖ以下の場合、電源電圧が３．５Ｖ超の場合に検出信号として、ロウレベルを出力する。
アンドゲート２９は、書き込み命令信号１３と、プロテクト上限電圧検出値設定部２６の出力との論理積を書き込み制御信号１４として出力する。
【００５０】
図７は本発明の実施形態２における命令実行可能電圧とプログラム書き込み可能電圧を表した図である。図７を用いて実施形態２の動作を説明する。デバイスの動作可能電圧範囲を１．８Ｖ以上５．５Ｖ以下とする。ユーザモード時に電源電圧を３Ｖで使用する場合を想定する。ユーザモード時は実施形態１の動作と同じである。
【００５１】
本実施形態では、図５の書き込み許可電圧設定（Ｓ１０１、Ｓ１１１）において、図７で示すプログラム書き込み可能電圧（１．８Ｖ以上３．５Ｖ以下）の上限値（３．５Ｖ）を設定する。これにより、メモリ書き換えモードでのプログラム書き込み動作における、プログラム書き込み可能電圧範囲を変更する。
【００５２】
プログラムが暴走しメモリ書き換えモードの書き込みルーチンの実行に遷移しても、プロテクト上限電圧検出値設定部２６は、プログラム書き込み可能電圧範囲（１．８Ｖ以上３．５Ｖ以下）外であると識別し、プログラム書き込みが行われない。
【００５３】
上述した通り、プロテクト回路２０で生成されるプログラム書き込み可能電圧範囲はプロテクト上限電圧検出値設定部２６のみで構成可能であり、ユーザモードにおいて命令実行可能電圧範囲（３．５Ｖ超５．５Ｖ以下）外にプログラム書き込み可能電圧（１．８Ｖ以上３．５Ｖ以下）を設けることで、不揮発性メモリ１１への書き込み命令信号１３をそれらがハード的にプロテクトするため、暴走時に発生する意図しないプログラム書き込みを禁止する。
【００５４】
（実施形態３）
図８は本発明の実施形態３に係るプロテクト回路の構成例を示すブロック図である。図１のプロテクト回路１０に替えて、図８ではプロテクト回路４０を備える。プロテクト回路４０では、プロテクト下限電圧検出値設定部４７とアンドゲート４９のみである。プロテクト回路４０で構成される回路以外は、図１のシステム構成図と同様の構成である。
【００５５】
プロテクト下限電圧検出値設定部４７は、電源電圧を下限値と比較し、検出信号を出力する。例えば、プログラム書き込み可能電圧範囲が３．５Ｖ以上５．５Ｖ以下の場合、電源電圧が３．５Ｖ未満の場合に検出信号として、ロウレベルを出力する。
アンドゲート４９は、書き込み命令信号１３と、プロテクト下限電圧検出値設定部４７の出力との論理積を書き込み制御信号１４として出力する。
【００５６】
図９は本発明の実施形態３における命令実行可能電圧とプログラム書き込み可能電圧を表した図である。図９を用いて実施形態３の動作を説明する。デバイスの動作可能電圧範囲を１．８Ｖ以上５．５Ｖ以下とする。ユーザモード時に電源電圧を３Ｖで使用する場合を想定する。
【００５７】
本実施形態では、命令実行可能電圧がプログラム書き込み可能電圧より低い電圧の範囲に設定されている。この場合、命令実行可能電圧検出値設定部２は、命令実行可能電圧検出値として、命令実行可能電圧の上限電圧検出値を保持し、電源電圧が当該上限電圧検出値より大きい場合、ＣＰＵ５へ通知（ハイレベルの信号を出力）することになる。あるいは、命令実行可能電圧検出値として、命令実行可能電圧の上限電圧検出値と下限電圧検出値とを保持し、命令実行可能電圧の範囲内であるか否かを判定してもよい。
その他のユーザモード時は実施形態１の動作と同じである。
【００５８】
本実施形態では、図５の書き込み許可電圧設定（Ｓ１０１、Ｓ１１１）において、図９で示すプログラム書き込み可能電圧（３．５Ｖ以上５．５Ｖ以下）の下限値（３．５Ｖ）を設定する。これにより、メモリ書き換えモードでのプログラム書き込み動作における、プログラム書き込み可能電圧範囲を変更する。
【００５９】
プログラムが暴走しメモリ書き換えモードの書き込みルーチンの実行に遷移しても、プロテクト下限電圧検出値設定部４７は、プログラム書き込み可能電圧範囲（３．５Ｖ以上５．５Ｖ以下）外であると識別し、プログラム書き込みが行われない。
【００６０】
上述した通り、プロテクト回路４０で生成されるプログラム書き込み可能電圧範囲はプロテクト下限電圧検出値設定部４７のみで構成可能であり、ユーザモードにおいて命令実行可能電圧範囲（１．８Ｖ以上３．５Ｖ未満）外にプログラム書き込み可能電圧（３．５Ｖ以上５．５Ｖ以下）を設けることで、不揮発性メモリ１１への書き込み命令信号１３をハード的にプロテクトするため、暴走時に発生する意図しないプログラム書き込みを禁止する。
（その他の実施形態）
上記各実施形態では、プロテクト上限電圧検出値設定部６と、プロテクト下限電圧検出値設定部との両方、あるいはいずれか一方を備える構成例を説明した。これらの構成例に限られるものではない。図１０は、発明に係る他のプロテクト回路の構成例を示すブロック図である。
【００６１】
プロテクト回路５０は、メモリ書き込み電圧検出値設定部５１とアンドゲート９とを備える。
メモリ書き込み電圧検出値設定部５１は、プログラム書き込み可能電圧の上限値と下限値とを保持し、電源電圧が上限値以上下限値以下である場合（プログラム書き込み可能電圧の範囲内である場合）にハイレベルの信号を出力し、範囲外である場合、ロウレベルの検出信号を出力する。上限値と下限値とは、予め設定された値であってもよいし、ユーザコードあるいは不揮発性プログラミングコードにより設定されるあたいであってもよい。また、ユーザによって設定される値であってもよい。メモリ書き込み電圧検出値設定部５１は、上限値と下限値とを保持するレジスタを備える。
アンドゲート５９は、書き込み命令信号１３と、メモリ書き込み電圧検出値設定部５１の出力との論理積を書き込み制御信号１４として出力する。
【００６２】
さらに、メモリ書き込み電圧検出値設定部５１は、上限値と下限値とのいずれか一方を保持する場合であってもよい。上限値を保持する場合、電源電圧値が上限値を超えると、ロウレベルの検出信号を出力する。下限値を保持する場合、電源電圧値が下限値未満であると、ロウレベルの検出信号を出力する。なお、ここでは、上限値及び下限値をプログラム書き込み可能電圧の範囲内の場合を説明したが、上限値及び下限値がプログラム書き込み可能電圧より大きいまたは小さい値として設定し、プログラム書き込み可能電圧の範囲内であるか否かを判断する場合であってもよい。
従って、メモリ書き込み電圧検出値設定部５１は、上限値と下限値との少なくとも一方を保持するといえる。
【００６３】
その他の動作については、上記各実施形態と同様である。メモリ書き込み制御システムが図１０に示すプロテクト回路５０を備える場合であっても、上記各実施形態と同様の効果を奏することが可能である。なお、上記各実施形態で説明したプロテクト上限電圧検出値設定部、プロテクト下限電圧検出値設定部は、メモリ書き込み電圧検出値設定部５１の一態様であるといえる。
【００６４】
また、本発明の各実施形態に係るメモリ書き込み制御システムは、不揮発性メモリを有するマイクロコントローラにおいて、不揮発性メモリへの書き込み信号を制御するプロテクト回路を有するものであり、さらに次の特徴と備える。
プロテクト回路は定められた電圧を検出するメモリ書き込み電圧検出値設定部（例えば、プロテクト上限電圧検出値設定部、プロテクト下限電圧検出値設定部を含む）を有し、定められた電圧に基づき不揮発性メモリ１１への書き込み信号を制御する。
プロテクト回路が有するメモリ書き込み電圧検出値設定部に定められる検出電圧は、不揮発性メモリ１１を有するマイクロコントローラにおける命令実行可能電圧と異なる電圧である。
プロテクト回路が有するプロテクト上限電圧検出値設定部、プロテクト下限電圧検出値設定部は検出電圧、あるいは、電源検出値設定部に固定値もしくは、それぞれに対して、命令実行により検出電圧を設定することが可能である。
【００６５】
上記各実施形態によれば、命令実行可能電圧とプログラム書き込み可能電圧とを異なる電圧範囲（ユーザがセット可能な電圧範囲）とすることで、命令実行可能電圧範囲でプログラム書き込みを禁止することができ、命令実行時におけるプログラム暴走による意図しない書き込み信号をプロテクトして、メモリデータの誤書き換えを防止する。
【００６６】
なお、本発明は上記に示す実施形態に限定されるものではない。本発明の範囲において、上記実施形態の各要素を、当業者であれば容易に考えうる内容に変更、追加、変換することが可能である。
【符号の説明】
【００６７】
１  暴走検出部
２  命令実行可能電圧検出値設定部
３  オアゲート
４、８、９、２９、４９、５９  アンドゲート
５、６０  ＣＰＵ
６、２６  プロテクト上限電圧検出値設定部
７、４７  プロテクト下限電圧検出値設定部
１０、２０、４０、５０  プロテクト回路
１１  不揮発性メモリ
１２  モード信号
１３  書き込み命令信号
１４  書き込み制御信号
１７  処理部
５１  メモリ書き込み電圧検出値設定部
【図１】
2011095951.tif 000003
【図２】
2011095951.tif 000004
【図３】
2011095951.tif 000005
【図４】
2011095951.tif 000006
【図５】
2011095951.tif 000007
【図６】
2011095951.tif 000008
【図７】
2011095951.tif 000009
【図８】
2011095951.tif 000010
【図９】
2011095951.tif 000011
【図１０】
2011095951.tif 000012
【図１１】
2011095951.tif 000013