(58)【調査した分野】(Int.Cl.,DB名)
前記計算された第1のシグネチャ値が、前記所定の第1のシグネチャ値とビットに関して同一である場合に、前記マイクロコントローラシステムが、前記信頼できる安全状態にある、請求項1に記載のマイクロコントローラシステム。
前記誤ったレジスタが必須のレジスタである場合、前記システムが、安全でない状態にあると見なされるとともに、前記誤ったレジスタが識別された後、前記システムが前記安全でない状態で動作することを許可せずに、前記誤ったレジスタがリセットされる、請求項9に記載の方法。
前記誤ったレジスタが必須のレジスタではない場合、通知がアプリケーションに送られ、及び前記アプリケーションが、前記低下した安全状態で前記システムを動作させるか、又は前記システムが前記低下した安全状態で動作を継続することを許可せずに前記誤ったレジスタをリセットするかを選択する、請求項9に記載の方法。
前記プロセッシングユニットが、前記マイクロコントローラシステムが前記信頼できる安全状態にあるか否かを決定するために、前記計算された第2のシグネチャ値と、所定の第2のシグネチャ値との第2の比較を行うように構成され、前記第2の比較が、前記第2のリセット信号に応答して行われ、及び前記所定の第2のシグネチャ値が、前記複数の周辺機器の前記第2の組み合わせの前記レジスタの期待リセット値に基づく、請求項12に記載のマイクロコントローラシステム。
前記アシュアランスモジュールが、読み出し専用メモリ(ROM)又はワンタイムプログラマブル(OTP)メモリに固定値として保存された実行可能命令のセットを含む、請求項12に記載のマイクロコントローラシステム。
【発明を実施するための形態】
【0005】
以下の詳細な説明は、本開示の一部を構成し、且つ例示を目的として、それによって本開示を実際的に実現することができる特別な実施形態例が示される添付の図面を参照する。本開示の保護の範囲を越えることなく、他の実施形態例が用いられてもよく、並びに構造上の及び他の変更が実施されてもよいことが理解される。従って、以下の詳細な説明は、制限的なものと見なされるものではない。正確には、本開示の保護の範囲は、添付の特許請求の範囲によってのみ定義される。
【0006】
図1は、幾つかの実施形態によるマイクロコントローラシステム100を示す。マイクロコントローラシステム100は、プロセッシングユニット102、第1の周辺機器104、第2の周辺機器106、及びアシュアランスモジュール108を含む。プロセッシングユニット102、第1の周辺機器104、第2の周辺機器106、及びアシュアランスモジュール108は、それぞれバスインタフェース110に結合され、一般的な実施態様において、バスインタフェースによって互いに通信することができる。プロセッシングユニット102、第1の周辺機器104、第2の周辺機器106、及びアシュアランスモジュール108は、1つ又は複数の集積回路(IC)として実装されてもよく、それぞれが、例えば、単結晶シリコン基板又はシリコン・オン・インシュレータ基板などの半導体基板上に配置される。幾つかの実施形態では、アシュアランスモジュール108は、所望の機能性を実行するためにプロセッシングユニット102によって実行される一連のコンピュータ可読命令として実装されてもよい。
【0007】
第1の周辺機器104は、第1のレジスタセット104Rを有し、第1のレジスタセット104Rを第1の実際のリセット値にリセットする第1のリセット信号R1を受信するように構成される。第1の実際のリセット値は、第1のリセット信号に応答した第1の期待リセット値であると予想されるが、何らかのエラーが生じた場合に、第1の期待リセット値とは異なり得る。
【0008】
第2の周辺機器106は、第1のレジスタセット104Rとは異なる第2のレジスタセット106Rを有する。第2の周辺機器106は、第1のリセット信号R1とは異なり、且つ第1のレジスタセット104Rを設定又はリセットすることなく、第2のレジスタセット106Rを第2の実際のリセット値にリセットする第2のリセット信号R2を受信するように構成される。第1の実際のリセット値と同様に、第2の実際のリセット値は、第2のリセット信号R2に応答した第2の期待リセット値であると予想されるが、何らかのエラーが生じた場合に、第2の期待リセット値とは異なり得る。
【0009】
第1及び第2のリセット信号R1、R2(幾つかの文脈では、アプリケーションリセット又はシステムリセットとも呼ばれる場合がある)はそれぞれ、第1の周辺機器104又は第2の周辺機器106の一方をリセットするが(ただし、第1及び第2の周辺機器の両方ではない)、第3の種類のリセット信号R3(システムリセット又はパワーオンリセットとも呼ばれる場合がある)は、第1の周辺機器104及び第2の周辺機器106の両方を同時にリセットすることができる。本出願で使用される「リセット」という用語は、幾つかの文脈では、レジスタのデジタルビットがゼロの論理値に「リセット」される「リセット」動作と呼ばれるものを含み得るが、幾つかの文脈では、レジスタのデジタルビットが1の論理値に「設定」される「設定」動作と呼ばれるものも含み得ることが認識されるだろう。従って、「リセット」という用語は、レジスタをある所定の状態にプログラムすると解釈されるものであり、レジスタを論理ゼロ状態にプログラムすることにのみ限定されない。
【0010】
受信されたリセット信号がどのような特定の種類であろうと、第1の周辺機器104及び/又は第2の周辺機器106のリセット中に、システム障害、アルファ粒子の衝突、又は他の予期せぬ事象が生じた場合に、第1のレジスタセット104Rの第1の実際のリセット値及び/又は第2のレジスタセット106Rの第2の実際のリセット値は、第1の期待リセット値及び/又は第2の期待リセット値とそれぞれ異なる可能性がある。例えば、第1の期待リセット値が0x0000であるが、予期せぬ事象が、リセット直後の第1の実際のリセット値が0x0100の状態にあることを生じさせる場合、第1の期待リセット値と第1の実際のリセット値との差は、第1の周辺機器104のリセット中に不具合が生じたことを示す可能性があり、これは、潜在的に、マイクロコントローラシステム100における問題の原因となり得る。
【0011】
従って、アシュアランスモジュール108は、例えば
図2〜3のフロー図に関して、より詳細にこれから説明されるように、第1及び第2の周辺機器104、106が信頼できる状態にリセットされたことを保証する助けとして、それぞれのリセット直後に第1及び第2の周辺機器104、106のシグネチャ値を計算するように構成される。
図2〜3は、一連の行為として記載されるが、これらの行為は、行為の順序が他の実施形態では変更できる点において限定的ではなく、
図2〜3の方法も
図1の構造に限定されるのではなく、他の構造に適用可能であることが認識されるだろう。他の実施形態では、図示及び/又は記載された幾つかの行為が、全体的に又は部分的に省略されてもよい。同じことが、
図5に示されるフローチャートなどの、本明細書に開示される他の方法にも当てはまる。
【0012】
これより
図2を参照して、ブロック202では、リセット信号が、例えば
図1の第1の周辺機器104又は第2の周辺機器106などの周辺機器によって受信される。
【0013】
ブロック204では、プロセッシングユニット102が、リセット信号を認識し、読み出し専用メモリ(ROM)及び/又はフラッシュメモリからファームウェア及び/又はブートコードを実行する。このファームウェア及び/又はブートコードは、周辺機器のレジスタをリセットし、これは、ファームウェア及び/又はブートコードが初期状態にインストールすることを意味する。例えば、
図1の例では、第1のリセット信号R1がアサートされたことを認識すると、プロセッシングユニット102は、第1のレジスタセット104Rをリセットするファームウェア及び/又はブートコードを実行することができる。例えば、第1の周辺機器104が、32ビットバスインタフェースに接続するタイマモジュールである場合、タイマモジュールは、32ビット制御レジスタ、32ビット入力データレジスタ、及び32ビット出力データレジスタを含むことができる。理想的には、周辺機器のレジスタは、それらの期待リセット値に設定又はリセットされるが、予期せぬ事象が、レジスタの実際のリセット値を、それらの期待リセット値とは異ならせる可能性がある。例えば、ある場合には、リセット信号が、タイマモジュールの制御レジスタを所定値(例えば、16進数で、0x0000_0011)に設定すると同時に、入力データレジスタ及び出力データレジスタを所定値(例えば、0x0000_0000)にリセットすることが期待できる、あるいは、入力データレジスタ及び/又は出力データレジスタを変化させずに、タイマモジュールの制御レジスタを所定値(例えば、0x0000_0011)に設定することが期待できる。
【0014】
ブロック206では、リセット信号に応答して、アシュアランスモジュール108が、リセットされた周辺機器のレジスタに関してシグネチャを計算する。例えば、前段落に記載した例を継続し、且つ
図1を参照して、アサートされた第1のリセット信号R1に応答して、アシュアランスモジュール108は、第1の周辺機器104のリセット直後に、計算されたシグネチャ値を取得するために、第1のレジスタセット104Rに関して、チェックサム、ハッシュ、又は他のアシュアランス値を計算することができる。第1のシグネチャ値は、リセット直後の第1のレジスタセット104Rに含まれる第1の実際のリセット値に基づく。例えば、第1の周辺機器104が、それの制御レジスタが0x000_0011にリセットされると期待されたタイマモジュールである場合、幾つかの実施形態では、アシュアランスモジュール108は、タイマモジュールの制御レジスタの実際のリセット値のみに基づいて、チェックサム(例えば、1バイト又は8ビットチェックサム)を計算することができる。他の実施形態では、アシュアランスモジュール108は、制御レジスタ、入力データレジスタ、及び出力データレジスタの実際の値に関してチェックサム(例えば、1バイト又は8ビットチェックサム)を計算することができる。従って、計算されたシグネチャは、周辺機器のレジスタから実際のリセット値を読み出すことによって、周辺機器がリセットされた実際の態様を考慮に入れる。第1のシグネチャ値は、単一ビット(例えば、パリティビット)、マルチビットチェックサム、ハッシュ値、巡回冗長検査、又は消費されるメモリを制限するため、及び幾つかの点で処理速度を向上させるためにチェックされるレジスタのフルセットよりも一般的にビットサイズが小さい別のアシュアランス値でもよい。
【0015】
ブロック208では、プロセッシングユニット102及び/又はアシュアランスモジュール108が、計算されたシグネチャ値が、期待シグネチャ値とビットに関して同一であるか否かを決定する。従って、
図1に関して記載された例を継続して、第1のシグネチャ値が計算された後、プロセッシングユニット102及び/又はアシュアランスモジュール108は、計算された第1のシグネチャ値と、所定の第1のシグネチャ値との第1の比較を行うことによって、マイクロコントローラシステム100が信頼できる安全状態にあるか否かを決定する。所定の第1のシグネチャ値は、リセットが生じる前に決定されることが可能で、例えば、マイクロコントローラシステム100で実行中の、及び/又はその他の方法でメモリに保存されたアプリケーションプログラム(例えば、ソフトウェア)によって提供されてもよい。第1の比較は、第1のリセット信号R1に応答して行われ、所定の第1のシグネチャ値は、第1の期待リセット値に基づき、及び第1のレジスタセット104Rから読み出された第1の実際のリセット値に依存しない。多くの場合、マイクロコントローラシステム100は、計算された第1のシグネチャ値が、期待された第1のシグネチャ値とビットに関して同一である場合に、信頼できる安全状態にあると見なされる。
【0016】
計算されたシグネチャ値が、期待シグネチャ値と等しければ(208においてYES)、ブロック210において、マイクロコントローラシステム100は、信頼できる安全状態にあると見なされ、212において、周辺機器及び/又はマイクロコントローラシステム100の通常動作が、続いて生じる。
【0017】
しかしながら、計算されたシグネチャ値が期待シグネチャ値と異なる場合(208においてNO)、214において、マイクロコントローラシステムは、潜在的に安全でない状態にあると見なされる。従って、プロセッシングユニット102及び/又はアシュアランスモジュール108は、一般的にマイクロコントローラシステム100上で実行しているオペレーティングシステムソフトウェアによって、216において、アプリケーションソフトウェアに潜在的に安全でない状態を通知する。
【0018】
218において、アプリケーションソフトウェアは、一般的にオペレーティングシステムによって、それが潜在的に安全でない状態で周辺機器及び/又はマイクロコントローラシステム100の動作を継続しようとするか否かをマイクロコントローラシステム100に通知することができる。アプリケーションが、潜在的に安全でない状態で継続しようとする場合(218においてYES)、220において、マイクロコントローラシステムは、低下した安全状態にあると見なされ得るが、212において、通常の周辺機器動作は、なお続行される。
【0019】
一方、アプリケーションが、潜在的に安全でない状態で継続しようとしないことを決定した場合(218においてNO)、アプリケーションは、周辺機器の別のリセットをトリガする命令を提供することができ、周辺機器が通常動作に入ることを阻止することができる。このようにして、アプリケーションは、安全でない状態が実際にどれほど危険なのかを決定する決定権を持ち、適切な対応策を取ることができる。例えば、マイクロコントローラシステム100が、自動車システムに実装される場合、アプリケーションは、安全でない状態が、車両の運転を許可するには危険すぎることを決定することができるとともに、例えば車両がエンジンを始動させることを阻止する予防策を講じることができる。
【0020】
図3は、幾つかの実施形態による、及び
図2の実施形態と様々な様式で組み合わせられてもよい安全なリセットの別の方法を示す。1つのリセット信号のみが示された
図2と比較して、
図3の実施形態は、3つの異なるリセット信号、すなわち、異なる周辺機器及び/又は異なる周辺機器の組み合わせをリセットする、第1のリセット信号R1(ブロック302を参照)、第2のリセット信号R2(ブロック312を参照)、及び第3のリセット信号R3(ブロック322を参照)を利用する。例示及び明瞭さを目的として、
図3の方法の実施態様例は、
図1のマイクロコントローラシステムに関して以下に説明される。
【0021】
302では、第1のリセット信号が、第2の周辺機器の第2のレジスタセットをリセットすることなく、第1の周辺機器の第1のレジスタセットをリセットする。例えば、前の
図1に関して、第1のリセット信号R1は、第2のレジスタセット106Rを設定する又はリセットすることなく、第1のレジスタセット104Rが第1の所定の値にリセットされるように、第1の周辺機器104をリセットすることができる。
【0022】
304では、第1の実際のシグネチャ値が、第1のレジスタセット104Rに関して計算される。幾つかの実施形態では、アシュアランスモジュール108が、第1のレジスタセット104Rの第1の実際のリセット値を読み出した後、第1のレジスタセット104Rから読み出された実際のリセット値に基づいて第1の実際のシグネチャ値を決定する際に、この第1の実際のシグネチャ値を計算することができる。例えば、第1のレジスタセット104Rが実際に0x0010_0000にリセットされ、且つ第1の実際のシグネチャ値が、第1の実際のリセット値のビットの合計か否かを示す単一パリティビットを提供する単純なチェックサムである場合、シグネチャ値は、この例では、「1」となる。
【0023】
306では、本方法は、第1の計算されたシグネチャ値が第1の期待シグネチャ値と等しいか否かを決定する。第1の期待シグネチャ値は、メモリに保存することができ、及び第1のリセット信号がアサートされるより前に、予め決定することができる。例えば、第1のレジスタセットが0x0000_0000にリセットされると期待された場合に、対応するパリティビットチェックサムは、第1の期待シグネチャ値に関して「0」となる。
【0024】
計算されたシグネチャ値が期待シグネチャ値と等しい場合(306においてYES)、ブロック308において、マイクロコントローラシステム100は、信頼できる安全状態にあると見なされる。
図2の310を参照のこと。本方法は次に、別のリセット信号が受信されるまで、信頼できる安全状態で動作の継続を進める。第1のリセット信号R1、第2のリセット信号R2、又は第3のリセット信号R3が受信されたかに応じて、本方法は、それぞれ302、312、又は322に進む。
【0025】
しかしながら、計算されたシグネチャ値が期待シグネチャ値と異なる場合(306においてNO)、311において、第1の周辺機器104は(従ってマイクロコントローラシステム100も)、潜在的に安全でない状態にあると見なされる。
図2の310を参照のこと。例えば、前の幾つかの段落における我々の例では、第1の計算されたシグネチャは、「1」であり、及び第1の期待シグネチャは「0」であるので、第1の周辺機器104は、潜在的に安全でない状態にあり、これは、どんな理由であれ、第1のレジスタセット104Rのビットが、期待通りにリセットされた状態にならなかったことを意味する。
図2のブロック310に示されるように、アプリケーションが潜在的に安全でない状態で進行することを望む場合には、それは、そのようにすることができ、第1の周辺機器104の通常動作が実行され、あるいは、アプリケーションが潜在的に安全でない状態で進行しようとしない場合には、アプリケーションは、例えば、第1のリセット信号R1を再アサートすることによって、第1の周辺機器104のリセットをトリガすることができる。どちらにせよ、
図3では、ある時点で、別のリセット信号を受信することができる。第1のリセット信号R1、第2のリセット信号R2、又は第3のリセット信号R3が受信されたかに応じて、本方法は、それぞれブロック302、ブロック312、又はブロック322に進むことができる。
【0026】
312では、第2のリセット信号R2が、第1の周辺機器104の第1のレジスタセット104Rをリセットすることなく、第2の周辺機器106の第2のレジスタセット106Rをリセットする。例えば、前の
図1に関して、第2のリセット信号R2は、第1のレジスタセット104Rを設定又はリセットすることなく、第2のレジスタセット106Rが第2の所定の値にリセットされるように、第2の周辺機器106をリセットすることができる。
【0027】
314では、アシュアランスモジュールが、第2のレジスタセット106Rの第2の実際のシグネチャ値を計算する。この第2の実際のシグネチャ値は、第2のレジスタセット106Rの値を読み出した後、第2のレジスタセット106Rから読み出された値に基づいて第2の実際のシグネチャ値を決定するアシュアランスモジュールによって計算される。
【0028】
316では、本方法は、第2の計算されたシグネチャ値が第2の期待シグネチャ値と等しいか否かを決定する。第2の期待シグネチャ値は、メモリに保存することができ、及び第2のリセット信号R2がアサートされるより前に、予め決定することができる。
【0029】
第2の計算されたシグネチャ値が第2の期待シグネチャ値に等しい場合(316においてYES)、ブロック318において、マイクロコントローラシステム100は、信頼できる安全状態にあると見なされる。
図2の310を参照のこと。本方法は次に、別のリセット動作が受信されるまで、信頼できる安全状態で動作の継続を進める。第1のリセット信号R1、第2のリセット信号R2、又は第3のリセット信号R3が受信されるかに応じて、本方法は、それぞれ302、312、又は322に進むことができる。
【0030】
しかしながら、計算されたシグネチャ値が第2の期待シグネチャ値と異なる場合(306においてNO)、321において、第2の周辺機器は(従ってマイクロコントローラシステム100も)、潜在的に安全でない状態にあると見なされる。
図2の310を参照のこと。アプリケーションが潜在的に安全でない状態で進行することを望む場合には、それは、そのようにすることができ、第2の周辺機器106の通常動作が実行され、あるいは、アプリケーションが潜在的に安全でない状態で進行しようとしない場合には、アプリケーションは、例えば、第2のリセット信号R2を再アサートすることによって、第2の周辺機器106のリセットをトリガすることができる。どちらにせよ、ある時点で、別のリセット信号を受信することができる。第1のリセット信号R1、第2のリセット信号R2、又は第3のリセット信号R3が受信されるかに応じて、本方法は、それぞれブロック302、ブロック312、又はブロック322に進むことができる。
【0031】
322では、第3のリセット信号が、第1の周辺機器104の第1のレジスタセット104R及び第2の周辺機器106の第2のレジスタセット106Rの両方をリセットする。
【0032】
324では、アシュアランスモジュールが、第1のレジスタセット104R及び第2のレジスタセット106Rに関して第3の実際のシグネチャ値を計算する。この第3の実際のシグネチャ値は、第1のレジスタセット104R及び第2のレジスタセット106Rの値を読み出した後、第1及び第2のレジスタセットから読み出された値に基づいて第3の実際のシグネチャ値を決定するアシュアランスモジュールによって計算される。
【0033】
326では、本方法は、第3の計算されたシグネチャ値が第3の期待シグネチャ値と等しいか否かを決定する。第3の期待シグネチャ値は、メモリに保存することができ、及び第3のリセット信号がアサートされるより前に、予め決定することができる。
【0034】
第3の計算されたシグネチャ値が、第3の期待シグネチャ値と等しい場合(326においてYES)、ブロック328において、マイクロコントローラシステム100は、信頼できる安全状態にあると見なされる。
図2の310を参照のこと。本方法は次に、別のリセット動作が受信されるまで、信頼できる安全状態で動作の継続を進める。第1のリセット信号R1、第2のリセット信号R2、又は第3のリセット信号R3が受信されたかに応じて、本方法は、それぞれ302、312、又は322に進むことができる。
【0035】
しかしながら、計算されたシグネチャ値が、第3の期待シグネチャ値と異なる場合(326においてNO)、331において、第1の周辺機器104及び/又は第2の周辺機器106の少なくとも一方は(従ってマイクロコントローラシステム100も)、潜在的に安全でない状態にあると見なされる。
図2の310を参照のこと。アプリケーションが潜在的に安全でない状態で進行することを望む場合には、それは、そのようにすることができ、第1の周辺機器104及び第2の周辺機器106の通常動作が実行され、あるいは、アプリケーションが潜在的に安全でない状態で進行しようとしない場合には、アプリケーションは、例えば、第3のリセット信号R3を再アサートすることによって、第1の周辺機器104及び第2の周辺機器106両方のリセットをトリガすることができる。どちらにせよ、ある時点で、別のリセット信号を受信することができる。第1のリセット信号、第2のリセット信号、又は第3のリセット信号が受信されたかに応じて、本方法は、それぞれブロック302、ブロック312、又はブロック322に進むことができる。
【0036】
図4は、幾つかの実施形態による別のマイクロコントローラシステム400を示す。マイクロコントローラシステム400は、リセットモジュール402、プロセッシングユニット404、及びタイマ406と、電源408と、シリアルポート410と、クロックモジュール412と、入力/出力(I/O)ポート414と、メモリ416とを含む幾つかの周辺機器/モジュールを含む。プロセッシングユニット404及び周辺機器は、Nビットバスインタフェース(Nは、一般的に、8、16、32、64、128等である)などのバスインタフェース419によって互いに動作可能に結合される。従って、様々な実施形態において、周辺機器406〜416の何れも、
図1〜3に関して前述の通り、第1の周辺機器又は第2の周辺機器に対応することができ、そのため、対応する機能性を示すことができる。幾つかの実施形態に従った、より詳細な実施例を以下に記載する。
【0037】
リセットモジュール402は、第1のリセット信号R1(例えば、パワーオンリセット信号)、第2のリセット信号R2(例えば、システムリセット)、及び第3のリセット信号R3(例えば、アプリケーションリセット信号)を含む複数のリセット信号を提供する。リセット信号は、バスインタフェース419上で、又は別々のリセットラインによって、様々なモジュールに提供することができ、モジュールの異なる組み合わせをリセットすることができる。例えば、第1のリセット信号R1は、プロセッシングユニット404、タイマ406、電源408、シリアルポート410、クロックモジュール412、I/Oポート414、及びメモリ416を含むマイクロコントローラシステム400の全てのモジュールをリセットすることができる。第2のリセット信号R2は、プロセッシングユニット404、タイマ406、シリアルポート410、クロックモジュール412、I/Oポート414、及びメモリ416を含む(但し、電源408は含まない)第1のモジュールサブセットをリセットすることができる。第3のリセット信号R3は、プロセッシングユニット404及びタイマ406を含む(但し、シリアルポート410、電源408、クロックモジュール412、I/Oポート414、又はメモリ416は含まない)第2のモジュールサブセットをリセットすることができる。
【0038】
モジュールが、リセット信号を受信し、それに応じてリセット動作を経た直後に、リセット動作後に期待される状態に実際にあることを検証するために、アシュアランスモジュール420が含まれる。
図4のマイクロコントローラシステム400のより詳細な機能性を、
図5に関して以下に記載する。
【0039】
ブロック502では、マイクロコントローラシステム400が、例えば、ユーザイベント(例えば、ユーザがキーを車両のイグニッションに入れる、又はワイヤレスキーチェーンを自動車の帯域に至らせるなど)によってトリガされた後に、起動及び電源オンする。
【0040】
504では、起動に応答して、マイクロコントローラが、全てのモジュールを初期化するために、一般的にフラッシュメモリ418及び/又は読み出し専用メモリ(ROM)に保存されたブートコードを実行する。このブロック中に、プロセッシングユニット404は、構成パラメータ(例えば、404C、406C、408C、…)を対応するモジュール(例えば、それぞれ404、406、408、…)にロードする。例えば、これらの構成パラメータは、電源408の初期電力構成の設定、クロックモジュール412の初期クロックレートの設定などを行うことができる。ブートコードは、異なるマイクロコントローラシステム及び/又は異なる顧客ごとに異なることが可能で、これは、良好な製品多様化を可能にする。
【0041】
506では、アシュアランスモジュール420が、マイクロコントローラシステムが正しく電源オンしたことを保証するために、リセットされた周辺機器の第1の実際のシグネチャ値を計算する。例えば、モジュール404、406、408、410、412、414、及び418が、電源オン中にリセットされているので、アシュアランスモジュールは、レジスタ404R、406R、408R、410R、412R、414Rに関して、及びフラッシュメモリ418に関して単一のチェックサムを計算することができ、メモリ中の場所422に、R1の第1の計算されたシグネチャ値を保存することができる。あるいは、R1の第1の計算されたシグネチャ値は、メモリ416の他の部分に保存されてもよく、又はアシュアランスモジュールが、専用ハードウェアモジュールとして実装される場合には、第1の計算されたシグネチャ値は、アシュアランスモジュール内に保存することができる。幾つかの実施形態では、第1の計算されたシグネチャ値422は、ストレージの消費を制限するために、1バイト又はワードでもよいが、複数のバイト又はワードでもよい。
【0042】
508では、プロセッシングユニット404及び/又はアシュアランスモジュール420は、第1の計算されたシグネチャ422が第1の期待シグネチャ428と同一であるか否かを決定する。第1の期待シグネチャ428は、メモリに保存された期待レジスタリセット値434に基づくとともに、フラッシュメモリ418に保存された構成パラメータにも基づくことができる。例えば、システム上で実行しているアプリケーションは、それのプログラミングコードの一部として、特に、タイマ406、電源408及び/又はクロックモジュール412に関するこれらの期待レジスタリセット値434を含むことができ、これは、ユーザ/顧客に、システムがどのように動作するかに関して、ある程度の柔軟性を提供することができる。この場合、第1のシグネチャ値は、これらの期待レジスタリセット値に基づくことができ、それによって、リセット中のエラーの検出が可能となる。
【0043】
第1の計算されたシグネチャ422が、第1の期待シグネチャ428と同一である場合(508においてYES)、システムは、510において、信頼できる安全状態に入る。システムは次に、アプリケーションソフトウェアが実行し、リセット信号が受信されるまでマイクロコントローラシステムの進行中の動作が継続する512へと進む。
【0044】
一方、第1の計算されたシグネチャ422が、第1の期待シグネチャ428と異なる場合(508においてNO)、リセットされた少なくとも1つのレジスタが、それの期待リセット値にリセットされておらず、514において、システムは、潜在的に安全でない状態にある。システムは次に、ブロック516において、どのレジスタが正しく初期化されなかったのかを決定するための分析を行うことができる。例えば、システムは、リセットされるべきであった各レジスタから実際のリセット値を読み取った後、実際のリセット値を、例えばメモリ416内のSRAMに保存することができる、当該レジスタの期待レジスタリセット値(434)と比較することができる。
【0045】
518では、どのレジスタグループが正しくリセットされた状態とならなかったかを識別した後、システムは、誤って初期化されたレジスタのグループが、必須のレジスタを含むか否かを決定する。グループ内に必須のレジスタが含まれる場合(518においてYES)、520において、システムは、安全でない状態にあると見なされ、第2のリセット信号(例えば、システムリセット)が、アプリケーションからの入力を求めることなく、再度印加される。このようにして、車両などのシステムの動作が、必須のレジスタが正しく初期化されなかった場合に、阻止される。一方、必須のレジスタが含まれない場合(518においてNO)、522において、システムは、低下した安全状態にあると見なされる。このような低下した安全状態では、524において、アプリケーションに通知が送られ、ブロック526において、アプリケーションは、低下した安全モードでシステム動作を継続しようとするか否かに関する選択肢を与えられる。アプリケーションが継続しようとしない場合(526においてNO)、システムは、再度安全でない状態にあることとなり、第1のリセット信号が再印加される。アプリケーションが、低下した安全状態で継続しようとする場合(526においてYES)、システムは次に、アプリケーションソフトウェアが実行し、リセット信号が受信されるまでマイクロコントローラシステムの進行中の動作が継続する512へと進む。
【0046】
512における進行中の動作中に、システムは、この例では第1のリセット信号、第2のリセット信号、又は第3のリセット信号によって、いつでも中断されることが可能で、従って、システムは、リセットが受信されるまで(この時、通常動作に戻る際にループに再び入る前に、システムは、リセットに対処するためにループから外れる)、進行形でブロック512、528、530、及び538をループしていると考えることができる。他の例では、他の数のリセット信号が存在してもよい。例えば、一部のケースでは、1つのリセットのみが存在してもよいが、他のケースでは、多数の異なる種類のリセットが存在してもよく、各リセットは、潜在的に、周辺機器及び/又はモジュールの異なる組み合わせをリセットすることができる。
【0047】
528では、システムは、第1のリセット信号R1(例えば、パワーオンリセット)が受信されたかどうかを決定する。そうであれば、システムは、前述の通り、502及び/又は504に戻り、そうでなければ、システムは、530に進む。
【0048】
530において、システムは、第2のリセット信号R2(例えば、システムリセット)が受信されたかどうかを決定する。そうであれば(530においてYES)、リセットリクエストハンドラが、SRAMに期待リセット値434を保存し(532)、534において、ハードウェアが、第2のリセット信号に対応したリセットシーケンスを実行する。536では、第1のモジュールサブセットを初期化するために、ROMブートコードが実行される。例えば、
図4に関して、第2のリセット信号は、プロセッシングユニット404、タイマ406、シリアルポート410、クロックモジュール412、I/Oポート414、及びメモリ416を含む第1のモジュールサブセットをリセットすることができる。従って、第2のリセット信号は、第1のモジュールサブセットに含まれない電源408をリセットしない。このブートコード実行に応答して、第1のモジュールサブセットの各モジュール/周辺機器のレジスタが、実際のリセット値にリセットされた状態となる。リセットモジュールが正しくリセットされると、モジュールのレジスタの実際のリセット値は、モジュールのレジスタの期待リセット値と同じになる。しかしながら、予期せぬ事象が生じた場合(例えば、アルファ粒子の衝突、デバイスの故障)、モジュールのレジスタの実際のリセット値は、モジュールの当該レジスタの期待リセット値とは異なり得る。
【0049】
第1のサブセットのモジュールが正しくリセットされた状態であることを保証するために、ブロック538において、アシュアランスモジュール420は、第1のモジュールサブセットのレジスタに関する第2のシグネチャ値を計算する。例えば、
図4に関して、第2のシグネチャ値は、PUレジスタ404R、タイマレジスタ406R、シリアルポートレジスタ410R、クロックモジュールレジスタ412R、I/Oポートレジスタ414R、及びフラッシュメモリ418内の構成ビットに関して計算することができる。従って、第2のシグネチャ値は、電源408が第1のモジュールサブセットに含まれていないので、電源レジスタ408Rに関して計算されない。幾つかの実施形態では、第2のシグネチャ値は、それが異なる長さのレジスタに関して計算されるとしても、第1のシグネチャ値と同じ長さとなり得る。
【0050】
ブロック539では、第1のモジュールサブセットのレジスタ値が検証される。従って、540において、第2の計算されたシグネチャが、第2の期待シグネチャと同一でない場合(540においてNO)、システムは、前述の通り、514に戻る。第2の計算されたシグネチャが第2の期待シグネチャと同一である場合(540においてYES)、システムは、510(信頼できる安全状態)に戻ることができ、又はオプションとして示されるように、期待リセット値がレジスタから読み出されたことを検証するために536に進んでもよい。536では、システムは、実際のレジスタ値がメモリに保存された期待リセット値と同じであることを確認するために、各レジスタから実際の値を読み出すことができる。再度、実際のリセット値が、期待リセット値と同じであれば、システムは、510(信頼できる安全状態)に戻るが、差異が検出されれば、システムは、514に戻る。一般的な実施形態において、ごく少数のレジスタのみ(例えば、非常に重要であると見なされるものだけ)が、このように(532、536)扱われる/チェックされることを注記しておく。例えば、上記の例は、プロセッシングユニット404、タイマ406、シリアルポート410、クロックモジュール412、I/Oポート414、及びメモリ416をリセットするが、より一般的な実施形態では、クロックモジュール412の主要制御レジスタなどの非常に重要なレジスタのみが、読み出され、532において、リセットリクエストハンドラによって期待値がSRAMに保存された後、536においてチェックされる。これは、より多くのレジスタをリセット(及びチェック)することが、リセット及びブート時間を増加させる傾向にあるからであり、可能な限りレジスタの数を少なく保つことによって、幾つかの点で動作性能を向上させる。
【0051】
538では、システムは、第3のリセット信号R3(例えば、アプリケーションリセット)が受信されたかどうかを決定する。そうであれば(538においてYES)、リセットリクエストハンドラは、期待リセット値434をSRAMに保存し(540)、542において、ハードウェアは、第3のリセット信号に対応するリセットシーケンスを実行する。544において、第1のモジュールサブセットとは異なる第2のモジュールサブセットを初期化するために、ROMブートコードが実行される。例えば、
図4に関して、第3のリセット信号は、プロセッシングユニット404及びタイマ406を含む第2のモジュールサブセットをリセットすることができる。従って、第3のリセット信号は、第2のモジュールサブセットに含まれない電源408、シリアルポート410、クロックモジュール412、I/Oポート414、及び/又はメモリ416のリセットを行わない。このブートコード実行に応答して、第2のモジュールサブセットの各モジュール/周辺機器のレジスタが、実際のリセット値にリセットされた状態となる。リセットモジュールが正しくリセットされると、モジュールのレジスタの実際のリセット値は、モジュールのレジスタの期待リセット値と同じとなる。しかしながら、予期せぬ事象が生じた場合(例えば、アルファ粒子の衝突、デバイスの故障)、モジュールのレジスタの実際のリセット値は、モジュールの当該レジスタの期待リセット値とは異なり得る。
【0052】
第2のサブセットのモジュールが正しくリセットされた状態であることを保証するために、ブロック546において、アシュアランスモジュール420が、第2のモジュールサブセットのレジスタに関する第3のシグネチャ値を計算する。例えば、
図4に関して、第3のシグネチャ値は、PUレジスタ404R及びタイマレジスタ406Rに関して計算することができる。従って、第2のシグネチャ値は、電源レジスタ408R、シリアルポートレジスタ410R、クロックモジュールレジスタ412R、I/Oポートレジスタ414R、及びフラッシュメモリ418の構成ビットが、第2のモジュールサブセットに含まれていないので、これらのモジュール/周辺機器に関して計算されない。幾つかの実施形態では、第3のシグネチャ値は、それが異なる長さのレジスタに関して計算されるとしても、第1のシグネチャ値と同じ長さとなり得る。
【0053】
ブロック547では、第2のモジュールサブセットのレジスタ値が検証される。従って、548において、第3の計算されたシグネチャが、第3の期待シグネチャと同一でない場合(548においてNO)、システムは、前述の通り、514に戻る。第3の計算されたシグネチャが第3の期待シグネチャと同一である場合(548においてYES)、システムは、510(信頼できる安全状態)に戻ることができ、又はオプションとして示されるように、期待リセット値がレジスタから読み出されたことを検証するために550に進んでもよい。550では、システムは、実際のレジスタ値がメモリに保存された期待リセット値と同じであることを確認するために、各レジスタから実際の値を読み出すことができる。再度、実際のリセット値が、期待リセット値と同じであれば、システムは、510(信頼できる安全状態)に戻るが、差異が検出されれば、システムは、514に戻る。
【0054】
幾つかの実施形態では、アシュアランスモジュールがシステムリソースを幅広く利用できる初期の安全起動モード中に、リセットが生じる。さらに、アシュアランスモジュール420は、アプリケーションソフトウェアの初期化に先立ち得る安全起動モード中に、計算されたシグネチャ値と期待シグネチャ値との比較を行う。従って、場合によっては、初期の安全起動モードが終わった後に、システムは、アプリケーションソフトウェアが実行を開始する際に、通常動作モードに入る。通常動作モード中は、アプリケーションソフトウェアが全てのシステムリソースにアクセスすることを阻止するために、セキュリティ対策が実施される場合がある。アプリケーションソフトウェアに対するこの制限に対処するために、アシュアランスモジュールは、ある値を所定の記憶場所に書き込むことによって、又はそれ自体のレジスタの1つにその値を保存することによって、初期化の際にアプリケーションが、もしあればどのモジュールが誤って初期化したのかを認識するために、所定の記憶場所又はアシュアランスモジュールのレジスタから読み出すことができるように、アプリケーションに通知する(例えば、ブロック524と同じである)。このようにして、アプリケーションは、通常動作中に(例えば、初期の安全起動モードが完了した後に)、誤って初期化されたモジュールを認識することができ、ブロック522〜526において、動作を続けるのか、あるいは別のリセットを生じさせるのかを決めることができる。それに対し、幾つかの実施形態では、ブロック518は、誤って初期化されたレジスタが必須のレジスタである場合(518においてYES)、初期の安全起動モード中であって、アプリケーションソフトウェアの実行が開始される前に、リセットが再度出される(これは、システムの安全な動作を保証する助けとなる)ように、初期の安全起動モード中に実行される。
【0055】
従って、本開示の幾つかの実施形態は、マイクロコントローラシステムに関する。マイクロコントローラシステムは、プロセッシングユニット、第1の周辺機器、及びアシュアランスモジュールを含む。第1の周辺機器は、バスインタフェースによってプロセッシングユニットに接続され、第1のレジスタセットを有する。第1の周辺機器は、第1のレジスタセットを第1の実際のリセット値にリセットする第1のリセット信号を受信するように構成される。第1の実際のリセット値は、第1のリセット信号に応答した第1の期待値であると予想される。アシュアランスモジュールは、第1のリセット信号に応答して、第1のシグネチャ値を計算するように構成される。第1のシグネチャ値は、第1の実際のリセット値に基づく。プロセッシングユニットは、マイクロコントローラシステムが信頼できる安全状態にあるか否かを決定するために、計算された第1のシグネチャ値と所定の第1のシグネチャ値との第1の比較を行うように構成される。第1の比較は、第1のリセット信号に応答して行われ、所定の第1のシグネチャ値は、第1の期待値に基づく。
【0056】
他の実施形態は、マイクロコントローラ及び複数のレジスタを含むシステムにおける安全なリセットの方法に関する。この方法では、リセット信号が受信され、複数のレジスタの少なくとも幾つかが、リセット信号に基づいてリセットされ、このリセットは、上記複数のレジスタの上記少なくとも幾つかを、それぞれ所定の初期化値に設定すると期待される。この方法は、所定の初期化値に基づいて、シグネチャ値を計算し、計算されたシグネチャ値を所定のシグネチャ値と比較することによって、上記複数のレジスタの上記少なくとも幾つかが、正しく初期化したか否かを決定する。計算されたシグネチャ値が、所定のシグネチャ値とビットに関して同一である場合にのみ、システムは、信頼できる状態で動作する。計算されたシグネチャ値が、所定のシグネチャ値と異なる場合、システムは、低下した安全状態又は安全でない状態に入る。
【0057】
さらに他の実施形態が、プロセッシングユニットと、バスインタフェースによってプロセッシングユニットに結合された複数の周辺機器と、プロセッシングユニット及び複数の周辺機器に結合されたリセットモジュールとを含むマイクロコントローラシステムに関する。リセットモジュールは、複数の周辺機器の異なる組み合わせをリセットする複数のリセット信号を提供するように構成される。第1のリセット信号は、複数の周辺機器の第1の組み合わせをリセットし、第2のリセット信号は、複数の周辺機器の第2の組み合わせをリセットする。アシュアランスモジュールは、第1のリセット信号に応答して第1のシグネチャ値を計算し、及び第2のリセット信号に応答して第2のシグネチャ値を計算するように構成される。第1のシグネチャ値は、複数の周辺機器の第1の組み合わせのレジスタの実際のリセット値に基づき、第2のシグネチャ値は、複数の周辺機器の第2の組み合わせのレジスタの実際のリセット値に基づく。
【0058】
上記は、当業者が本開示の局面をよりよく理解することができるように、幾つかの実施形態の特徴の概要を説明するものである。当業者は、本明細書で紹介された実施形態と同じ目的を実行する、及び/又はそれらと同じ利点を達成するために、他のプロセス及び構造を設計又は変更するための基礎として、本開示を容易に使用できることを認識するだろう。当業者は、そのような同等の構造が、本開示の精神及び範囲から逸脱せず、且つ本開示の精神及び範囲から逸脱することなく、本明細書に様々な変更、置換、及び修正を行うことができることも理解するだろう。