(57)【特許請求の範囲】
【請求項１】
プログラムが、当該プログラムの実行を禁止する保護機能を設定した状態で記憶されたメモリ（２６）と、
前記メモリに記憶された前記プログラムの妥当性を判断する妥当性チェックを実施し、該妥当性チェックにて前記プログラムに問題ないことを確認すると、前記保護機能を解除して前記プログラムを実行する演算処理部（２２）と、
を備え、
前記メモリには、機能安全レベルに応じて分類された複数のプログラム（ＱＭ、ＡＳＩＬ＿Ａ、ＡＳＩＬ＿Ｃ）が、前記保護機能を設定した状態で記憶されており、
前記演算処理部は、前記複数のプログラムの妥当性チェックを、前記機能安全レベルが低いプログラムから順に実施し（Ｓ１２０、Ｓ１５０、Ｓ１８０）、該妥当性チェックにて当該プログラムに問題がないことを確認する度に、当該プログラムに対する前記保護機能を解除して（Ｓ１３０、Ｓ１６０、Ｓ１９０）、当該プログラムの実行を開始する（Ｓ１４０、Ｓ１７０、Ｓ２００）と共に、当該プログラムの実行中に、他のプログラムに対する前記妥当性チェックを実施する、ことを特徴とするマイクロコンピュータ。
【請求項２】
前記演算処理部は、
前記各プログラムの妥当性チェックを、チェック対象となるプログラムが記憶された前記メモリの記憶領域内のデータと、チェック対象となるプログラムに比べて前記機能安全レベルが低いプログラムが記憶された前記メモリの記憶領域内のデータとを基に所定演算を行い、該演算結果と前記メモリに記憶されている期待値とを照合することにより、実施することを特徴とする請求項１に記載のマイクロコンピュータ。
【請求項３】
前記演算処理部は、
前記プログラムの妥当性チェックの結果、前記プログラムに問題があると判断すると、前記プログラムに対する前記保護機能を保持した状態で、所定のフェールセーフ処理（Ｓ２１０）を実行することを特徴とする請求項１又は請求項２に記載のマイクロコンピュータ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラムの妥当性を確認した後、プログラムを実行するよう構成されたマイクロコンピュータに関する。
【背景技術】
【０００２】
従来、複数のＣＰＵ（コア）を備えたマイクロコンピュータにおいて、各ＣＰＵに同一のプログラムを実行させ、その実行結果を比較することで、ＣＰＵの異常を検出することが提案されている（例えば、特許文献１参照）。
【０００３】
この提案のものは、２つのＣＰＵの一方に異常が生じた際に、その旨を検出することはできるが、例えば、ＣＰＵが一つで、メモリに不正なプログラムが記憶されているような場合には、その旨を検出することはできず、ＣＰＵが不正なプログラムを実行してしまうことになる。
【０００４】
一方、この問題を防止するには、例えば、メモリへのプログラムの書き込み時に、そのプログラムと同一の記憶エリアに、妥当性確認用のフラグを記憶しておき、プログラムの実行時には、そのフラグが正常であるか否かを判断することが考えられる。
【０００５】
つまり、フラグが正常であれば、同一の記憶エリアに記憶されたプログラムも正常であると判断して、プログラムの実行を許可し、そうでなければ、プログラムの実行を禁止するのである。
【０００６】
また、これと同様に、セキュアなプログラム起動を実現するために、メモリに記憶されたプログラム全体を使って妥当性確認用の値を計算し、その計算値が正常値であるか否かを判断することで、プログラムの妥当性を確認することも考えられる。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２０１３−８４２１９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかし、前者の方法では、メモリに正規のプログラムが書き込まれていないにもかかわらず、妥当性確認用のフラグが、ビット化け等によって、プログラムの正常を表すものとなっている場合には、妥当性判断を正常に実施することができず、不正なプログラムが実行されることがある。
【０００９】
また、後者の方法では、プログラム全体で妥当性を判断するので、不正なプログラムが実行されることはないが、妥当性判断に時間がかかることから、マイクロコンピュータの起動後（詳しくはパワーオンリセット解除後）、プログラムが実行されるまでの遅延時間が長くなるという問題がある。
【００１０】
本発明は、こうした問題に鑑みなされたものであり、マイクロコンピュータにおいて、プログラムの妥当性を正確に判断でき、しかも、その妥当性判断によりプログラムの実行が可能となるまでの遅延時間を短くできるようにすることを目的とする。
【課題を解決するための手段】
【００１１】
本発明のマイクロコンピュータにおいては、機能安全レベルに応じて分類された複数のプログラムが、そのプログラムの実行を禁止する保護機能を設定した状態で、メモリに記憶される。
【００１２】
そして、演算処理部がメモリに記憶されたプログラムを実行する際には、まず、機能安全レベルが低いプログラムから順に、プログラムの妥当性を判断する妥当性チェックを実施する。そして、その妥当性チェックにてプログラムに問題がないことを確認すると、そのプログラムに対する保護機能を解除して、そのプログラムの実行を開始する。
【００１３】
このため、本発明によれば、演算処理部にて実行すべき全プログラムをメモリに一括して記憶し、妥当性チェックを実施するようにした場合に比べて、マイクロコンピュータの起動後、プログラムが実行されるまでの遅延時間を短くすることができる。
【００１４】
また、本発明では、プログラムの妥当性チェックは、機能安全レベルが低いプログラムから順に実行される。従って、例えばプログラムの一部に異常があり、最初の妥当性チェックでは異常を確認できずに、対応するプログラムが実行されたとしても、それにより生じる不具合を最小限に抑えることができる。
【００１５】
つまり、本発明によれば、プログラムの妥当性チェックを順に実行することで、プログラムの異常を確認し、プログラムの実行を停止したり、フェールセーフ用のサブプログラムを実行したり、することができる。
【００１６】
よって、本発明によれば、不正なプログラムの実行により安全性が低下するのを抑制しつつ、マイクロコンピュータ起動後、プログラムが実行される迄の遅延時間を短縮することができる。
【００１７】
このため、本発明のマイクロコンピュータは、例えば、車両に搭載される電子制御装置等、各種制御対象を駆動制御するための制御装置に適用すれば、制御対象をより安全に制御することが可能となる。また、この場合、制御装置への電源投入後、マイクロコンピュータのパワーオンリセットが解除されて、制御対象の制御が開始されるまでの遅延時間を短くすることもできる。
【図面の簡単な説明】
【００１８】
【図１】実施形態の電子制御装置の構成を表すブロック図である。
【図２】マイクロコンピュータのプログラム実行手順を表すフローチャートである。
【図３】プログラム実行に伴うメモリ保護状態の変化を表すタイムチャートである。
【図４】プログラム毎に実施される妥当性チェックと各プログラムの起動タイミングとの関係を表すタイムチャートである。
【発明を実施するための形態】
【００１９】
以下に本発明の実施形態を図面と共に説明する。
なお、本発明は、下記の実施形態によって何ら限定して解釈されない。また、下記の実施形態の構成の一部を、課題を解決できる限りにおいて省略した態様も本発明の実施形態である。また、特許請求の範囲に記載した文言のみによって特定される発明の本質を逸脱しない限度において考え得るあらゆる態様も本発明の実施形態である。また、下記の実施形態の説明で用いる符号を特許請求の範囲にも適宜使用しているが、これは本発明の理解を容易にする目的で使用しており、本発明の技術的範囲を限定する意図ではない。
【００２０】
図１に示す本実施形態の電子制御装置（ＥＣＵ）１０は、例えば、車両に搭載され、エンジン、トランスミッション等の車載機器を制御対象２として制御するためのものであり、制御用の演算装置として、マイクロコンピュータ（マイコン）２０を備える。
【００２１】
また、ＥＣＵ１０には、制御対象に設けられた各種センサ４からの検出信号を取り込むための入力回路１４、及び、制御対象２に設けられたアクチュエータ６に駆動用の制御信号を出力するための出力回路１６が設けられている。
【００２２】
また、ＥＣＵ１０には、車内ＬＡＮ等のネットワーク８を介して、他の制御装置若しくは外部サーバとの間で通信を行う通信回路１８や、車載バッテリ（図示せず）から電力供給を受けて内部回路駆動用の電源電圧Ｖｃｃを生成する電源回路１２も設けられている。
【００２３】
また、マイコン２０は、ＣＰＵ２２、ＲＡＭ２４、フラッシュメモリ２６、入出力部２８、及び、これら各部を接続するバスライン２９を備える。
そして、入力回路１４、出力回路１６、通信回路１８は、マイコン２０の入出力部２８に接続され、マイコン２０は、入力回路１４や通信回路１８から制御対象２の動作状態等の各種情報を取り込み、制御対象２の制御量を演算する。
【００２４】
また、マイコン２０は、その算出した制御量に応じた制御信号を出力回路１６から出力させることで、制御対象２のアクチュエータ６を駆動し、制御対象を所定状態に制御する。
【００２５】
こうした制御対象２の制御のための制御プログラム等、ＣＰＵ２２が実行すべきプログラムは、データを書換え可能な不揮発性メモリであるフラッシュメモリ２６に、機能安全レベルに応じて複数に分類して、プログラム毎に記憶されている。
【００２６】
機能安全レベルは、機能性・安全性が求められる重要なプログラム程、高レベルとなるように設定されるものであり、本実施形態では、例えば、産業用の機能安全規格であるＩＥＣ６１５０８から派生した自動車向けの機能安全規格「ＩＳＯ２６２６２」に則って設定されている。
【００２７】
この機能安全規格「ＩＳＯ２６２６２」では、車両の各機能の潜在的なリスクを、ＡＳＩＬ（Automotive Safety Integrity Level） で分類し、ＱＭ（品質管理：安全性との関連なし）からＡＳＩＬ＿Ｄ（安全性との関連性が最大）に至る幅広い分類レベルが割り当てられる。なお、この機能安全レベルの高さ（大きさ）は、下記の通りである。
【００２８】
ＱＭ ＜ ＡＳＩＬ＿Ａ ＜ ＡＳＩＬ＿Ｂ ＜ ＡＳＩＬ＿Ｃ ＜ ＡＳＩＬ＿Ｄ
そして、本実施形態では、マイコン２０にて実行されるプログラムの内、制御の安全との関連性が最も低いプログラム（例えば、マイコン２０の汎用レジスタの初期設定用のプログラム）が、ＱＭとして、フラッシュメモリ２６に記憶される。
【００２９】
また、制御の安全との関連性があるプログラムは、要求される機能安全レベルに応じて、ＡＳＩＬ＿Ａ、ＡＳＩＬ＿Ｂ、…となるように分類されて、フラッシュメモリ２６に記憶される。
【００３０】
なお、図１において、各レベルに付与されている（＊）は、プログラムデータであることを表している。
そして、以下の説明において、本実施形態では、ＣＰＵ２２にて実行すべきプログラムが、低レベルのものから順に、ＱＭ、ＡＳＩＬ＿Ａ、ＡＳＩＬ＿Ｃの３つに分類されているものとする。
【００３１】
また、上記のように分類された各プログラムＱＭ、ＡＳＩＬ＿Ａ、ＡＳＩＬ＿Ｃには、フラッシュメモリ２６に記憶されたプログラムデータが正常か否かの妥当性を判断（妥当性チェック）するための期待値Ｍ（図に示すＭ１、Ｍ２、Ｍ３）が設定されている。
【００３２】
そして、その期待値Ｍは、各プログラムＱＭ、ＡＳＩＬ＿Ａ、ＡＳＩＬ＿Ｃのプログラムデータと共に、フラッシュメモリ２６の同一の記憶エリアに記憶されている。
また、本実施形態では、各プログラムＱＭ、ＡＳＩＬ＿Ａ、ＡＳＩＬ＿Ｃの妥当性をより正確に判断できるようにするために、対象となるプログラムと、それよりも下位レベルのプログラムとに基づき、妥当性チェックのための判定値を算出するようになっている。
【００３３】
このため、各プログラムに対し設定される期待値Ｍは、対応するプログラムが最下位レベル（本実施形態ではＱＭ）でなければ、そのプログラムよりも下位レベルのプログラムの内容を含むように設定されている。
【００３４】
なお、この期待値Ｍや、妥当性チェックの際の判定値は、対象となるプログラムデータから、公知のＡＥＳ、ＭＩＳＴＹ等の暗号アルゴリズムを用いて算出される。
また、上記各プログラムＱＭ、ＡＳＩＬ＿Ａ、ＡＳＩＬ＿Ｃは、それぞれ、フラッシュメモリ２６の各記憶領域に対し設定されたメモリ保護機能により、プログラムの実行が制限（保護）されている。
【００３５】
なお、このメモリ保護機能としては、メモリへの読み書きを保護する一般的なメモリ保護機能を利用してもよく、記憶領域へ実行不可マークの記載することによりプログラムの実行を禁止する保護機能（実行保護）を利用してもよい。また、例えば、オペレーティングシステムやセキュリティソフトウエアを利用したプログラムの実行保護を利用することもできる。
【００３６】
このため、マイコン２０の起動後、ＣＰＵ２２は、機能安全レベルが低いプログラム（本実施形態ではＱＭ）から順に、フラッシュメモリ２６に記憶された各プログラムが正常であるか否かを判断する妥当性チェックを行う。
【００３７】
そして、ＣＰＵ２２は、妥当性チェックによりプログラムが正常であることを確認すると、そのプログラムに対する保護機能を解除して、そのプログラムを実行し、妥当性チェックによりプログラムが異常であると判断すると、所定のフェールセーフ処理を実行する。
【００３８】
以下、このように、マイコン２０の起動後、ＣＰＵ２２がフラッシュメモリ２６に記憶された上記各プログラムを実行する手順を、図２に示すフローチャートに沿って説明する。
【００３９】
なお、ＥＣＵ１０には、車載バッテリからＥＣＵ１０へ電源が投入されてから、電源回路１２にて生成される電源電圧Ｖｃｃが安定して、マイコン２０が正常動作できるようになるまでの間、マイコン２０をリセット状態に保持するパワーオンリセット回路１９が設けられている。
【００４０】
このため、マイコン２０（詳しくはＣＰＵ２２）は、パワーオンリセット回路１９によるパワーオンリセットが解除されたときに、図２に示すプログラム開始判定処理を開始する（図３に示す時点ｔ０参照）。
【００４１】
図２に示すように、プログラム開始判定処理では、まずＳ１１０にて、各プログラムＱＭ、ＡＳＩＬ＿Ａ、ＡＳＩＬ＿Ｃの妥当性の判定値の演算を行う判定値演算処理を開始する。
【００４２】
なお、この判定値演算処理は、上述したように、プログラム毎に、下位のプログラムを含むプログラムデータから、ＡＥＳ、ＭＩＳＴＹ等の暗号アルゴリズムを用いて判定値を算出する処理である。
【００４３】
次に、Ｓ１２０では、Ｓ１１０にて開始した判定値演算処理にて、機能安全レベルが最も低いプログラムＱＭの判定値が算出されるのを待ち、その判定値に基づきプログラムＱＭが正常であるか否かを判定する、妥当性チェックを実施する。
【００４４】
つまり、Ｓ１２０では、判定値演算処理にて算出されたプログラムＱＭの判定値と、プログラムＱＭと同一の記憶領域に記憶された期待値Ｍ１とを照合し、これらが一致している場合に、プログラムＱＭは正常であると判断する。
【００４５】
そして、Ｓ１２０にて、プログラムＱＭは正常である（換言すれば妥当性に問題はない）と判断されると、Ｓ１３０に移行して、フラッシュメモリ２６におけるプログラムＱＭの記憶領域に対するメモリ保護機能を解除する（図３に示す時点ｔ１参照）。
【００４６】
また、続くＳ１４０では、メモリ保護機能を解除したフラッシュメモリ２６の記憶領域からプログラムＱＭを読み出し、プログラムＱＭの実行を開始する。
次に、Ｓ１４０にて、プログラムＱＭの実行を開始すると、Ｓ１５０に移行して、判定値演算処理にてプログラムＡＳＩＬ＿Ａの判定値が算出されるのを待ち、その判定値に基づきプログラムＡＳＩＬ＿Ａの妥当性チェックを実施する。
【００４７】
Ｓ１５０では、Ｓ１２０と同様に、プログラムＡＳＩＬ＿Ａの判定値と、プログラムＡＳＩＬ＿Ａと同一の記憶領域に記憶された期待値Ｍ２とを照合し、これらが一致している場合に、プログラムＡＳＩＬ＿Ａは正常であると判断する。
【００４８】
そして、Ｓ１５０にて、プログラムＡＳＩＬ＿Ａは正常であると判断されると、Ｓ１６０に移行して、フラッシュメモリ２６におけるプログラムＡＳＩＬ＿Ａの記憶領域に対するメモリ保護機能を解除する（図３に示す時点ｔ２参照）。
【００４９】
また、続くＳ１７０では、メモリ保護機能を解除したフラッシュメモリ２６の記憶領域からプログラムＡＳＩＬ＿Ａを読み出し、プログラムＡＳＩＬ＿Ａの実行を開始する。
次に、Ｓ１７０にて、プログラムＡＳＩＬ＿Ａの実行を開始すると、Ｓ１８０に移行して、判定値演算処理にてプログラムＡＳＩＬ＿Ｃの判定値が算出されるのを待ち、その判定値に基づきプログラムＡＳＩＬ＿Ｃの妥当性チェックを実施する。
【００５０】
Ｓ１８０では、Ｓ１２０、Ｓ１５０と同様に、プログラムＡＳＩＬ＿Ｃの判定値と、プログラムＡＳＩＬ＿Ｃと同一の記憶領域に記憶された期待値Ｍ３とを照合し、これらが一致している場合に、プログラムＡＳＩＬ＿Ｃは正常であると判断する。
【００５１】
そして、Ｓ１８０にて、プログラムＡＳＩＬ＿Ｃは正常であると判断されると、Ｓ１９０に移行して、フラッシュメモリ２６におけるプログラムＡＳＩＬ＿Ｃの記憶領域に対するメモリ保護機能を解除する（図３に示す時点ｔ３参照）。
【００５２】
また、続くＳ２００では、メモリ保護機能を解除したフラッシュメモリ２６の記憶領域からプログラムＡＳＩＬ＿Ｃを読み出し、プログラムＡＳＩＬ＿Ｃの実行を開始する。
そして、このようにプログラムＡＳＩＬ＿Ｃの実行を開始すると、フラッシュメモリ２６に記憶された全てのプログラムに対する保護機能を解除し、全プログラムの実行を開始したことになるので、当該プログラム開始判定処理を終了する。
【００５３】
一方、Ｓ１２０、Ｓ１５０、又はＳ１８０の妥当性チェックにて、プログラムＱＭ、ＡＳＩＬ＿Ａ、又はＡＳＩＬ＿Ｃは正常ではないと判断された場合には、Ｓ２１０に移行する。
【００５４】
そして、Ｓ２１０では、制御対象２を安全に制御できるように、所定のフェールセーフ処理の実行を開始し、当該プログラム開始判定処理を終了する。
以上説明したように、本実施形態のマイコン２０においては、フラッシュメモリ２６内に、機能安全レベルに応じて分類された複数のプログラムＱＭ、ＡＳＩＬ＿Ａ、ＡＳＩＬ＿Ｃが、保護機能を設定した状態で記憶されている。
【００５５】
そして、ＣＰＵ２２がフラッシュメモリ２６内のプログラムを実行する際には、図３に示すように、機能安全レベルが低いプログラムＱＭから、プログラムＡＳＩＬ＿Ａ、ＡＳＩＬ＿Ｃへと順に正常であるか否かを判定する。
【００５６】
また、ＣＰＵ２２は、各プログラムＱＭ、ＡＳＩＬ＿Ａ、ＡＳＩＬ＿Ｃが正常であると判定する度に（時点ｔ１，ｔ２，ｔ３）、対応するプログラムに対する保護機能を解除して、そのプログラムの実行を開始する。
【００５７】
このため、本実施形態のマイコン２０によれば、実行すべきプログラムをメモリに一括して記憶し、そのプログラム全体の妥当性チェックを実施するようにした場合に比べて、マイコン２０の起動後、プログラムが実行されるまでの遅延時間を短くすることができる。
【００５８】
また、ＣＰＵ２２は、各プログラムＱＭ、ＡＳＩＬ＿Ａ、ＡＳＩＬ＿Ｃの妥当性チェックのための判定値を算出する際には、チェック対象となるプログラムのデータだけでなく、そのプログラムよりも機能安全レベルが低いプログラムのデータを用いる。
【００５９】
このため、機能安全レベルが高いプログラムの妥当性チェックには、そのプログラムよりも機能安全レベルが低い全てのプログラムが利用されることになり、プログラムの妥当性チェックをより正確に実行することができる。
【００６０】
一方、機能安全レベルが高いプログラムの判定値の演算時間は、そのプログラムよりも機能安全レベルが低いプログラムの判定値の演算時間よりも長くなる。これは、判定値の演算に用いるデータ量が多くなるからである。
【００６１】
しかし、各プログラムＱＭ、ＡＳＩＬ＿Ａ、ＡＳＩＬ＿Ｃの判定値は、マイコン２０の起動直後に開始される判定値演算処理にて演算される。そして、図４に示すように、機能安全レベルが高いプログラムの判定値の演算は、そのプログラムよりも機能安全レベルが低いプログラムの実行中にも継続される。
【００６２】
このため、機能安全レベルが高いプログラムの判定値を算出するのに、そのプログラムよりも機能安全レベルが低いプログラムのデータを利用するようにしても、マイコン２０の起動後の判定値の演算時間が長くなって、プログラムの起動が遅れるのを防止できる。
【００６３】
以上、本発明の一実施形態について説明したが、本発明は、上記実施形態に限定されるものではなく、本発明の要旨を逸脱しない範囲内にて、種々の態様をとることができる。
例えば、上記実施形態では、フラッシュメモリ２６に記憶されたプログラムの妥当性チェック用の判定値を算出する際には、対象となるプログラムのデータと、そのプログラムよりも機能安全レベルが低いプログラムのデータを用いるものとして説明した。
【００６４】
これに対し、フラッシュメモリ２６に記憶された各プログラムの判定値は、対象となるプログラムのデータだけを用いて算出するようにしてもよい。なお、この場合、各プログラムの記憶領域に格納する期待値についても、対象となるプログラムのデータだけを用いて設定するようにすればよい。
【００６５】
また、上記実施形態では、フラッシュメモリ２６に記憶されたプログラムの妥当性チェック用の判定値は、マイコン２０の起動直後に開始される判定値演算処理にて、プログラム毎に並列に算出されるものとして説明した。
【００６６】
これに対し、フラッシュメモリ２６に記憶された各プログラムの判定値は、妥当性チェックと同様、機能安全レベルが低いプログラムから順に実行するようにしてもよい。
なおこの場合、機能安全レベルが低いプログラムのデータを含めて判定値を算出するようにすると、マイコン２０の起動後、機能安全レベルが高いプログラムの妥当性チェックを実施するのに要する時間が長くなる。従って、この場合、各プログラムの判定値は、対象となるプログラムのデータだけを用いて算出するようにするとよい。
【００６７】
また、上記実施形態では、マイコン２０は、車両に搭載されるＥＣＵ１０に組み込まれ、車載機器を制御するのに用いられるものとして説明したが、本発明は、車両以外の制御対象を制御するのに用いられるものであってもよい。また、例えば、事務処理用の所定の演算処理を実行するのに用いられるものであってもよい。
【００６８】
つまり、本発明は、実行プログラムを機能安全レベルに応じて複数に分類し得るマイクロコンピュータであれば、上記実施形態と同様に適用して、同様の効果を得ることができる。
【符号の説明】
【００６９】
２…制御対象、４…センサ、６…アクチュエータ、８…ネットワーク、１０…ＥＣＵ、１２…電源回路、１４…入力回路、１６…出力回路、１８…通信回路、１９…パワーオンリセット回路、２０…マイコン、２２…ＣＰＵ、２４…ＲＡＭ、２６…フラッシュメモリ、２８…入出力部、２９…バスライン。
【図１】
0006471510.tif 000002
【図２】
0006471510.tif 000003
【図３】
0006471510.tif 000004
【図４】
0006471510.tif 000005