(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2022112508
(43)【公開日】2022-08-02
(54)【発明の名称】高速かつセキュアでレジリエントなシステムブートのための不揮発性メモリデバイス、システムおよび方法
(51)【国際特許分類】
G06F 21/57 20130101AFI20220726BHJP
【FI】
G06F21/57 350
【審査請求】未請求
【請求項の数】21
【出願形態】OL
【外国語出願】
(21)【出願番号】P 2022007852
(22)【出願日】2022-01-21
(31)【優先権主張番号】63/139,944
(32)【優先日】2021-01-21
(33)【優先権主張国・地域又は機関】US
(31)【優先権主張番号】63/166,283
(32)【優先日】2021-03-26
(33)【優先権主張国・地域又は機関】US
(31)【優先権主張番号】17/356,390
(32)【優先日】2021-06-23
(33)【優先権主張国・地域又は機関】US
(71)【出願人】
【識別番号】522029730
【氏名又は名称】インフィニオン テクノロジーズ エルエルシー
【氏名又は名称原語表記】Infineon Technologies LLC
【住所又は居所原語表記】198 Champion Court, San Jose, CA 95134, United States of America
(74)【代理人】
【識別番号】100114890
【弁理士】
【氏名又は名称】アインゼル・フェリックス=ラインハルト
(74)【代理人】
【識別番号】100098501
【弁理士】
【氏名又は名称】森田 拓
(74)【代理人】
【識別番号】100116403
【弁理士】
【氏名又は名称】前川 純一
(74)【代理人】
【識別番号】100134315
【弁理士】
【氏名又は名称】永島 秀郎
(74)【代理人】
【識別番号】100162880
【弁理士】
【氏名又は名称】上島 類
(72)【発明者】
【氏名】セルゲイ オストリコフ
(72)【発明者】
【氏名】フローリアン シュライナー
(57)【要約】 (修正有)
【課題】障害状態からの回復機能を維持しながら迅速にブートする外部の不揮発性(NV)メモリデバイスに依拠するコントローラデバイスを備えたシステム、方法及びストレージデバイスを提供する。
【解決手段】システム300Aにおいて、NOR(フラッシュ)デバイス306Aは、第1の物理アドレス範囲を有する第1の部分及び第2の物理アドレス範囲を有する第2の部分を含むNVメモリアレイを含む。NVウォッチドッグ回路は、障害状態又は無障害状態にセットでき、所定のウォッチドッグ期間の満了に応答してNV状態表示332を障害状態にセットし、ウォッチドッグを、延期指示に応答してリセットさせる。アドレスマッピング回路328-1は、障害表示部が無障害状態であることに応答して、入力アドレスを第1の物理アドレス範囲にマッピングし、NV状態表示が障害状態であることに応答して、入力アドレスを第2の物理アドレス範囲にマッピングする。
【選択図】
図3A
【特許請求の範囲】
【請求項1】
ストレージデバイスであって、前記ストレージデバイスは、
少なくとも1つの不揮発性(NV)メモリアレイと、
少なくとも障害状態または無障害状態にセット可能な不揮発性障害表示部と、
メモリウォッチドッグ回路と、
アドレスマッピング回路と、
を含み、
前記少なくとも1つの不揮発性(NV)メモリアレイは、
第1の物理アドレス範囲を有する第1のセクションと、
第2の物理アドレス範囲を有する第2のセクションと、
を含み、
前記メモリウォッチドッグ回路は、所定のウォッチドッグ期間の満了に応答して前記障害表示部を障害状態にセットするように構成されており、前記ウォッチドッグ期間は、延期指示に応答してリセットされ、
前記アドレスマッピング回路は、
前記障害表示部が無障害状態を有することに応答して、入力アドレスを前記第1の物理アドレス範囲にマッピングし、
前記障害表示部が障害状態を有することに応答して、前記入力アドレスを前記第2の物理アドレス範囲にマッピングする、
ように構成されている、
ストレージデバイス。
【請求項2】
前記第1のセクションは、システムのプロセッサのブートコードを格納するように構成されており、
前記第2のセクションは、前記プロセッサのリカバリコードを格納するように構成されており、前記リカバリコードは、前記プロセッサのブートの失敗に対処するための手順を含む、
請求項1記載のストレージデバイス。
【請求項3】
前記ストレージデバイスは、前記ストレージデバイスによって受信されたメッセージを認証し、所定の認証されたメッセージから前記延期指示を生成するように構成された認証回路をさらに含む、
請求項1記載のストレージデバイス。
【請求項4】
前記メモリウォッチドッグ回路は、少なくとも第1のタイプの認証されたメッセージに応答して前記障害表示部を障害状態にセットし、少なくとも第2のタイプの認証されたメッセージに応答して前記障害表示部を無障害状態にセットするように構成されている、
請求項1記載のストレージデバイス。
【請求項5】
前記ストレージデバイスは、デコーダアドレス入力に応答して前記NVメモリアレイにアクセスするように構成されたデコーダ回路をさらに含み、
前記アドレスマッピング回路は、前記障害表示部の状態に基づいて、前記デコーダアドレス入力の少なくとも1つの上位ビットの値をセットするようにさらに構成されており、
前記入力アドレスは、前記デコーダアドレス入力の下位ビットに対応する、
請求項1記載のストレージデバイス。
【請求項6】
前記少なくとも1つのNVメモリアレイは、NORフラッシュアレイを含む、
請求項1記載のストレージデバイス。
【請求項7】
システムの、不揮発性(NV)メモリデバイスの外部にあるプロセッサのブートコードを、前記NVメモリデバイスの第1の物理アドレス範囲に格納するステップと、
前記プロセッサのリカバリコードを、前記NVメモリデバイスの第2の物理アドレス範囲に格納するステップと、
ウォッチドッグ期間の満了に応答して障害表示部を障害状態にセットするように構成された前記NVメモリデバイス内のウォッチドッグ回路を開始するステップであって、前記ウォッチドッグ期間は、延期指示に応答してリセットされるステップと、
前記NVメモリデバイスのアドレスマッピング回路の動作によって、
前記障害表示部が無障害状態を有することに応答して、入力アドレス値を前記第2の物理アドレス範囲ではなく前記第1の物理アドレス範囲にマッピングするステップと、
前記障害表示部が障害状態を有することに応答して、前記入力アドレス値を前記第1の物理アドレス範囲ではなく前記第2の物理アドレス範囲にマッピングするステップと、
を含み、
前記障害表示部は、不揮発性である、
方法。
【請求項8】
前記延期指示に応答して前記ウォッチドッグ期間をリセットするステップは、
前記NVメモリデバイスの外部のソースからメッセージを受信するステップと、
前記メッセージを認証するステップと、
前記認証されたメッセージが延期メッセージであることに応答して、前記延期指示を生成するステップと、
を含む、
請求項7記載の方法。
【請求項9】
前記方法は、リモートオーソリティから前記延期メッセージを生成するステップをさらに含み、前記リモートオーソリティは、ネットワークを介して前記NVメモリデバイスと通信するように構成されたリモートサーバおよび有線バスを介して前記NVメモリデバイスに接続されたセキュアデバイスからなる群から選択されている、
請求項7記載の方法。
【請求項10】
前記方法は、前記プロセッサの動作によって、前記入力アドレス値を生成して、前記NVメモリデバイスから前記システムの揮発性メモリへ前記ブートコードを読み出すことをさらに含む、
請求項7記載の方法。
【請求項11】
前記方法は、前記プロセッサの動作によって、前記入力アドレス値を生成して、前記NVメモリデバイスから直接に前記ブートコードまたは前記リカバリコードを実行するステップをさらに含む、
請求項7記載の方法。
【請求項12】
前記方法は、
前記NVメモリデバイスの第3の物理アドレス範囲にオペレーティングシステム(OS)コードを格納するステップと、
前記プロセッサの動作によって、第2の入力アドレス値を生成して、前記NVメモリデバイスから前記OSコードを読み出すステップと、
をさらに含む、
請求項7記載の方法。
【請求項13】
前記方法は、
前記プロセッサの動作によって、前記ブートコードを検証するステップと、
前記ブートコードが検証に合格しなかったことに応答して、第1のタイプのメッセージを前記NVメモリデバイスに送信するステップと、前記ブートコードが検証に合格したことに応答して、第2のタイプのメッセージを前記NVメモリデバイスに送信するステップと、
前記NVメモリデバイスの動作によって、
前記第1のタイプのメッセージに応答して、前記障害表示部を障害状態にセットするステップと、
前記第2のタイプのメッセージに応答して、前記障害表示部を無障害状態にセットするステップと、
をさらに含む、
請求項7記載の方法。
【請求項14】
前記システムの前記プロセッサは、複数のコアを含み、
前記NVメモリデバイスから前記ブートコードを読み出すための前記入力アドレス値を生成するステップは、前記プロセッサのM個のコアによって実行され、
前記ブートコードを検証するステップは、前記プロセッサのN個のコアによって実行され、N>Mであり、NおよびMは自然数である、
請求項13記載の方法。
【請求項15】
前記方法は、
前記プロセッサ内のプロセッサウォッチドッグ回路を開始するステップであって、前記プロセッサウォッチドッグ回路は、プロセッサウォッチドッグ期間の満了に応答してプロセッサ障害表示を生成するように構成されており、前記プロセッサウォッチドッグ期間はプロセッサ延期指示に応答してリセットされるステップと、
前記プロセッサ障害表示に応答して、前記プロセッサを所定の状態へ再起動するステップと、
をさらに含む、
請求項7記載の方法。
【請求項16】
不揮発性(NV)メモリデバイスを含むシステムであって、前記不揮発性(NV)メモリデバイスは、
NVメモリセルの少なくとも1つのアレイと、
少なくとも障害状態または無障害状態にセット可能な不揮発性障害表示部と、
メモリウォッチドッグ回路と、
アドレスマッピング回路と、
前記NVメモリデバイスの外部の通信パスから延期指示を受信するように構成された通信回路と、
を含み、
前記NVメモリセルの前記少なくとも1つのアレイは、
第1の物理アドレス範囲を有する第1のセクションと、
第2の物理アドレス範囲を有する第2のセクションと、
を含み、
前記メモリウォッチドッグ回路は、所定のウォッチドッグ期間の満了に応答して前記障害表示部を障害状態にセットするように構成されており、前記ウォッチドッグ期間は、延期指示に応答してリセットされ、
前記アドレスマッピング回路は、
前記障害表示部が無障害状態を有することに応答して、入力アドレスを前記第1の物理アドレス範囲にマッピングし、
前記障害表示部が障害状態を有することに応答して、前記入力アドレスを前記第2の物理アドレス範囲にマッピングする、
ように構成されている、
システム。
【請求項17】
前記NVメモリデバイスは、デコーダアドレス入力に応答して前記少なくとも1つのアレイにアクセスするように構成されたデコーダ回路をさらに含み、
前記アドレスマッピング回路は、少なくとも前記障害表示部に基づいて、前記デコーダアドレス入力の少なくとも1つの上位ビットの値をセットするように構成されており、
前記入力アドレスは、前記デコーダアドレス入力の下位ビットである、
請求項16記載のシステム。
【請求項18】
前記システムは、メモリバスを介して前記NVメモリデバイスに結合されたコントローラデバイスをさらに含み、
前記メモリバスは、前記メモリバスを介して前記入力アドレスを生成および送信し、前記NVメモリデバイスからデータを読み出すように構成された少なくとも1つのコントローラプロセッサを含み、
前記NVメモリデバイスは、
前記第1のセクションに前記コントローラデバイスのブートコードを格納し、
前記第2のセクションに前記コントローラデバイスのリカバリコードを格納する、
ように構成されており、
前記リカバリコードは、前記コントローラデバイスのブート障害に対処するプロセスを含む、
請求項16記載のシステム。
【請求項19】
前記システムは、前記ブートコードを検証し、これに応答して前記NVメモリデバイスによる認証のためにコード検証メッセージを生成するように構成された、前記コントローラデバイスをさらに含む、
請求項18記載のシステム。
【請求項20】
前記システムは、前記NVメモリデバイスおよびコントローラデバイスから物理的に分離されており、延期メッセージを生成するように構成されたリモートオーソリティデバイスをさらに含み、
前記NVメモリデバイスは、前記延期メッセージを認証し、認証された延期メッセージに応答して前記延期指示を生成するように構成された認証回路をさらに含む、
請求項18記載のシステム。
【請求項21】
前記リモートオーソリティデバイスは、ネットワークを介して前記NVメモリデバイスと通信するように構成されたリモートサーバおよび有線バスを介して前記NVメモリデバイスに接続されたセキュアデバイスからなる群から選択されている、
請求項20記載のシステム。
【発明の詳細な説明】
【技術分野】
【0001】
関連出願
本出願は、2021年1月21日付にて出願された米国仮特許出願第63/139944号および2021年3月26日付にて出願された米国仮特許出願第63/166283号の利益を主張するものであり、これらの内容はすべて参照により本明細書に組み込まれる。
【0002】
本開示は、概して、システムのブートコードを格納する不揮発性メモリデバイス、より具体的には、高速のレジリエントなシステムブートを可能にしうる不揮発性メモリデバイスに関する。
【背景技術】
【0003】
システムNORフラッシュメモリは、従来、広い温度範囲で高い信頼性を必要とするアプリケーションのコードストレージに使用されてきた。自動車内の組み込みシステムは、かかるアプリケーションの一例である。現行世代の自動車用マイクロコントローラユニット(MCU)は、組み込みNORフラッシュに依拠している。自動車のMCUメーカがより高度なプロセスノードに移行するにつれて、MCUプロセッサと同じシリコンダイにフラッシュメモリを搭載することは、技術的にかつ製造的に困難な課題となりうる。組み込みフラッシュメモリを既存のMCUロジック(CMOSなど)に追加する場合、より多くの製造マスクが必要になり、製造コストおよび複雑さが増大する。組み込みNORフラッシュメモリの代替品としてMRAMなどが提案されているが、かかる代替のメモリタイプはまだ確実な採用には至っていない。
【0004】
これらの課題に対処するために、2つの異なる対応方法が出現している。一方はシステムインパッケージ(SiP)型のインテグレーションであり、他方はスタンドアロン型のNORフラッシュを採用することである。どちらの場合も、NORフラッシュメモリデバイスは、対応するMCU(例えば、異なるダイまたは集積回路パッケージ)から分離することができる。SiPおよびスタンドアロンの両方のアプローチにより、非常に費用対効果の高いソリューションを提供できる。ただし、分離型デバイスの欠点の1つとして、セキュリティ上の懸念を挙げることができ、これにはNORデバイス内に格納されている重要なコード、特に起動動作でMCUによって実行されるブートコードを変更する機能などが含まれる。
【0005】
かかるセキュリティ上の懸念に対処するために、従来、ブートプロセスをセキュアにするためのアプローチがとられていた。従来のアプローチでは、MCUがコードを実行できるようになる前に、暗号化に依拠してコードが検証されていた。しかしながら、コードの検証により、ブート時間が長くなる可能性がある。ブート動作と並行してコード検証を実行したり、ブートプロセスの後の時点に検証を延期したりするなど、セキュアなブートプロセスを高速化するための複数の従来の手法が提案されている。しかしながら、これらの従来の手法は実用的なものとなってない。
【0006】
開示している実施形態の特徴および利点をよりよく理解するために、MCUおよび分離型NORフラッシュデバイスを使用する従来のシステムのブートオプションおよびコンフィギュラビリティを説明する。
【0007】
図16は、システム1601の従来のブートオプションを示している。動作可能になると、フラッシュレスMCU(つまり、フラッシュメモリが組み込まれていないMCU)は、ブートコードの実行を許可する前に、不変ハードウェア構成手順(A)を実行する。最新のMCUは、一般に種々のタイプの不揮発性メモリに対して利用可能なインタフェースに基づいた複数のブートオプション(B0~BN)に対応するように設計されている。MCUメーカにより、1回限りで構成可能なまたは動的に構成可能なブートオプションが提供されている。ブートオプションは、
図16に1603として示されている。
【0008】
動的なコンフィギュラビリティは、外部ピン1605に依拠することによって達成され、一方、シングルブートオプションの使用は、内部のリセット不可能なヒューズ1607を溶断させることによって保証されうる。構成が行われると、システム1601は事前定義されたようにブートされる。不変コード(A)は、最小限のシステム初期化を実行し、第1の可変コードに制御を渡す。第1の可変コード(B0~BN)は、複雑な周辺機器を初期化し、オペレーティングシステムに制御を移す。
【0009】
セキュリティ対応システムは、ブートオプションを提供し、当該ブートオプションでは、ハードコードされた分岐は条件付きである。このため、MCUは、検証済みコードを実行するか、またはブートに失敗する。この手法は、検証された場合にのみ実行される一連の層またはコードブロックを作成するように拡張できる。しかし、コード検証ルーチンの追加によるシステムパフォーマンスへの影響は、時間に対して直線的な間隔ではなく、これらのルーチンが実行される時間に反比例している。つまり、ブートプロセスでコード検証が早期に行われるほど、ブートパフォーマンス(ブート時間など)への悪影響が大きくなる。かかる影響の理由の1つは、MCUの起動時(パワーオンリセット(power-on reset)からの復帰時など)にMCU内のコンピューティングリソースの可用性を計算することでありうる。いくつかのマルチコアプロセッサはシングルコアからブートされるが、残りのコアはソフトウェアによるイネーブルを待機する。したがって、セカンダリコアを有効にするコードがオフチップメモリから流れてきて検証が必要な場合、検証が完了するまで、すべてのコンピューティングリソースが利用できるとは限らない。ハードウェア暗号化ブロックを含むMCUのように、検証に追加のコアが必要ない場合でも、かかるMCUは、システムクロック周波数の低下などのフェイルセーフパフォーマンス設定で初期ブート可能となるが、これは高速ブート時間の目標の妨げとなる。
【0010】
パフォーマンスへの影響に加えて、ブートコードへの検証の組み込みに関連する統合および保守の労力は、さらなる実用上の検討事項を生じさせている。組み込みシステムにおけるブートプロセスの開発には、MCUメーカ、メモリ(NORフラッシュなど)メーカ、ブートローダコード、オペレーティングシステムコード、アプリケーションコードを生成する開発者などの複数の関係者が関与している。これらはすべて個別のエンティティとなりうる。かかる分離により、パフォーマンスの高い個別のコンポーネントが得られるが、特殊化によって、システムのブートプロセスを最適化するために大規模な調整および統合への労力が必要になる場合がある。
【0011】
MCUの機能は、主に不揮発性メモリに格納されているコードによって定義されている。MCUには通常、オンチップの読み出し専用メモリ(ROM)が含まれている。オンチップROMのサイズは、MCUメーカがテープアウトする前にセキュアなファイナライズできるロジックの量によって決定される。ROMのサイズは、外部フラッシュデバイスに押し出される初期化およびブートロジックと比較して、最小になる傾向がある。不変性、場所および大規模な設計レビューにより本質的に信頼されているROMコードとは異なり、フラッシュコードは定期的な検証を受ける必要がある。従来のスタンドアロン型のNORフラッシュデバイスの多くは、オンチップROMに近いレベルの保証を提供するオンチップセキュリティインフラストラクチャが存在しないため、定期的な検証が確立されている。
【0012】
MCUおよび外部メモリ(NORフラッシュなど)を備えたシステムの場合、デバイス認証とコード検証との組み合わせにより、一定レベルのコード保証を実現できる。デバイス認証には、MCUと外部フラッシュデバイスとの間の暗号交換が含まれており、これによりフラッシュデバイスのIDを確認することができる。デバイス認証は、物理的なフラッシュダイの交換を防ぎ、フラッシュデバイスの状態が損なわれないようにするのに役立つ。現在、スタンドアロンフラッシュデバイスでも何らかのセキュリティインフラストラクチャが実装されつつあり、標準化団体であるJEDECがNORフラッシュ認証規格の策定に取り組んでいる。その結果、MCUメーカは、MCUのROMにフラッシュ認証サポートを含める可能性が高くなっている。
【0013】
コード検証は、種々の形態をとることができ、これには、外部メモリから受信したコードを、コードに対して生成されたハッシュまたはその他の値などの期待値と比較するMCUが含まれるが、これに限定されるものではない。いくつかの検証プロセスには、暗号交換を含めることもできる。いくつかのシステムにはデバイス認証が含まれうるものの、コード検証は、ブートプロセスを保護するための決定的なステップである。
【0014】
図17は、従来の組み込みシステム1701のブート動作を示すブロック図である。システム1701は、MCU1703、NANDフラッシュメモリ1705、NORフラッシュメモリ1707およびDRAM1709を含むことができ、これらはすべて、異なるチップ(例えば、ダイス)上に形成されている。MCU1703は、プロセッサ(例えば、CPU)1711、ROM1713、SRAM1715およびワンタイムプログラマブル(OTP)メモリ1717を含みうる。CPU1711によってアクセス可能なアドレス空間1719は、種々のメモリタイプを含むことができ、これには、オンチップ(すなわち、MCU1703上)およびオフチップのメモリが含まれる。
【0015】
図17は、コンポーネントおよび制御転送ポイントを時間的に示している。時点t=0で、CPUはROMコード(ブートローダ1)1721-0を実行できる。システムが外部NORフラッシュメモリ1707からさらにブートされると、ROMコード1721-0は、シリアルペリフェラルインタフェース(SPI)コントローラを初期化できるため、NORフラッシュメモリ1707からSRAM1715にさらに初期化ルーチン1721-1(ブートローダ2)を(時間t=1~t=2で)フェッチできる。これらのルーチンは、いくつかのペリフェラルを構成しており、そのうちの1つはDRAMコントローラである。DRAMが利用可能になると、時点t=3で、オペレーティングシステムカーネル1721-2がNORフラッシュメモリ1707からDRAM1709にコピーされ、制御がシステムカーネルに渡される。その後、NANDフラッシュメモリ1705に格納されているアプリケーションコード1721-3を実行することができる。
【0016】
ROMコード1721-0がSRAMコード1721-1に分岐すると、重要な制御転送が発生する。この時点より前にコード検証が実行されない場合、未検証のコードが実行フローを引き継ぐ機会が生じる。前述したように、この時点より前にコード検証を実行すると、ブートパフォーマンスの点でコストが高くなる可能性がある。したがって、従来のシステムには、コード検証の延期が含まれうる。コード検証の延期において、システムにつき(いくつかの安全策を講じて)ブートが許可され、その後、コードが検証される。検証が失敗した場合、システムはリカバリ動作に入ることができる。
【0017】
このように、外部NORフラッシュに依拠してブートを行う従来の組み込みシステムは、ブート動作に対して2つのアプローチをとることができる。一方は高速ブートであり、コード検証延期によって高速ブートが達成されるため、リカバリ機能はなく、他方は、リカバリ機能を有する低速(セキュア)ブートである。低速ブートはセキュリティを提供できるが、限られた時間内に終了するためにブート動作を必要とするアプリケーションなど、いくつかのアプリケーションには不適切な場合がある。
【0018】
図18のAは、低速でセキュアなブート動作を示すタイミング図である。アプリケーションプロセッサ(フラッシュレスMCUなど)は、内部ROM(ブートローダ1)からブートされる。ブートローダ1は、MCUを事前に構成し、外部の不揮発性メモリ(NORフラッシュなど)から後続のコード(ブートローダ2)をフェッチする。
【0019】
時間t=0で、ブートローダ1からのコードを操作して、MCUは外部NORデバイスを認証できる。NORデバイスが認証されると、時間t=1で、MCUは、「コンテンツ検証」として示されているNORデバイス(ブートローダ2など)によって格納されたコードを転送または検査できる。ブートローダ#2はオフチップ(例えば、MCUチップ)から供給されるため、制御が渡される前に検証する必要がある。既存のソリューションは、後続のコードを検証するために暗号化に依拠している。コード検証は遅い動作であり、いくつかのシステム期限が守られない可能性がある。これは時点t=2に示されているが、この時点はMCUの可用性期限である可能性があり、このときMCUはシステムの他のデバイスと通信するために利用可能であることが必要である。例えば、自動車内では、MCUは50ミリ秒以内にCANバスを介して通信する必要がありうるが、必ずしもアプリケーション固有のアクションを実行する準備ができているとは限らない場合がある。
【0020】
時点t=3では、コード検証結果に基づいて種々のアクションが発生する可能性がある。NORデバイス(例えば、ブートローダ2)からのコードが検証に合格(pass)した場合、コードは通常どおり実行できる。ただし、コードが失敗(fail)した場合、システムはリカバリ動作を実行でき、これにより、不良コードの修正を試行することができる。時点t=4で、アプリケーション期限が生じる可能性がある。この時点で、システムはアプリケーションコードを実行する準備ができていなければならない。
【0021】
図18のBは、速度のためにセキュリティを犠牲にするより高速なブート動作を示すタイミング図である。「可用性期限」の問題は、NORコードの検証を完了せずにROMコード(ブートローダ1)が制御をNORコード(ブートローダ2)に渡すことで対処できる。
【0022】
時点t=0で、NORデバイスを認証できる。時点t=1で、可用性期限の前に、MCUはNORコードを実行できる。NORコードの検証は可用性期限の前に開始することもできるが、コードの検証は完了しない。時点t=3で、システムはコード検証結果に応じて通常の操作を続行するか、またはリカバリ動作を実行できる。
【0023】
図18のBのようなアプローチは可用性期限を満たすことができるが、制御が潜在的に未検証のコードに渡されるため、システムはすべての場合における回復の能力を失う。
【0024】
組み込みシステムのアプリケーションプロセッサによるウォッチドッグタイマを使用することが知られている。しかしながら、外部フラッシュからブートされるシステムでは、未検証コードを実行しているにもかかわらず、悪意を持って、かかるウォッチドッグタイマを延期できるようにブートコードが変更される場合がある。この問題を回避するために、従来のシステムは通常、検出をリモートオーソリティにオフロードしている。組み込みシステムがリモートオーソリティに対してその完全性を証明できないと、ウォッチドッグが満了する。ウォッチドッグの延期を認証された手順とすることで、組み込みシステムとリモートオーソリティとの間とのセキュアでないチャネルを介した通信をサポートすることができる。
【0025】
図19のA~Cは、認証されたウォッチドッグタイマを含む従来のシステムを示す図である。
図19のAは、ウォッチドッグタイマ1923を有するMCU1903を備えた従来のシステム1901を示している。MCU1903は、最初に、内部ROM(ブートローダ1)からのブートコードでブートされ、次に、外部NORデバイス1907上のブートコード(ブートローダ2)でブート動作を継続することができる。MCU1903は、認証された手順を用いてリモートオーソリティ1925と通信することができる。
【0026】
図19のBは、「良好な」ブート動作を示すタイミング図である。時点t=0で、MCUは、内部ROM(ブートローダ1)からのコードを用いてブート可能となる。時点t=1で、MCUは、外部NORデバイス(ブートローダ2)からのコードを用いてブート可能となる。ほぼ同時に、MCUは、ウォッチドッグタイマ(WD)を開始できる。ウォッチドッグタイマ(WD)は、リモートオーソリティ(RA)からの延期メッセージにより延期できる。
図19のBは、RAに報告するMCUおよび時点t=2でWDを延期するRAを示している。時点t=3で、システムはブートローダ2のコードで正常にブート可能となる。
【0027】
図19のCは、ウォッチドッグ障害を生じるブート動作のタイミング図を示している。
図19のCは、
図19のBと同じ動作を示している。ただし、ブートローダ2のコードが無効であるため、RAはWDを延期しない。その結果、WDは時点t=3で満了し、障害状態(例えば、パワーオン/リセット)が発生する。
【0028】
認証されたウォッチドッグの追加により、MCUは制御を保持してシステムを既知の状態へと移行させ、構成可能なタイムアウト後にROMコード(例えばブートローダ1)を実行することができる。これは有用であるが、リカバリコードをROMに組み込むことができないため、応答が制限される。結果として、
図19のCに示されているように、ウォッチドッグ満了サイクルはそれ自体を繰り返すことになる。つまり、ウォッチドッグタイマを追加すると、高速でセキュアなブートが可能となるが、障害状態から容易に回復することができない非レジリエントなシステムとなる。
【0029】
ブートコードを外部の不揮発性メモリに格納するシステムでは、何らかの手法で高速でかつセキュアでレジリエントなブート動作に到達することまたはこうしたレジリエントなブート動作を提供することが望ましい。
【図面の簡単な説明】
【0030】
【
図1】一実施形態によるシステムとしてのブート動作を示すタイミング図である。
【
図2】一実施形態によるシステムのブロック図である。
【
図3A】実施形態による外部不揮発性メモリ(NVM)デバイスを備えたシステムのブロック図である。
【
図3B】実施形態による外部不揮発性メモリ(NVM)デバイスを備えたシステムのブロック図である。
【
図3C】実施形態による外部不揮発性メモリ(NVM)デバイスを備えたシステムのブロック図である。
【
図4】一実施形態によるNVMデバイスのメモリアドレス再マッピング動作のブロック図である。
【
図5】別の実施形態によるNVMデバイスのブロック図である。
【
図6】一実施形態による、組み込みシステムおよび対応するメモリアドレスマッピングを示すブロック図である。
【
図7A】実施形態によるシステムのブートおよび関連する動作を示す図である。
【
図7B】実施形態によるシステムのブートおよび関連する動作を示す図である。
【
図7C】実施形態によるシステムのブートおよび関連する動作を示す図である。
【
図7D】実施形態によるシステムのブートおよび関連する動作を示す図である。
【
図8A】実施形態によるシステムのブートおよびリカバリ動作を示す図である。
【
図8B】実施形態によるシステムのブートおよびリカバリ動作を示す図である。
【
図8C】実施形態によるシステムのブートおよびリカバリ動作を示す図である。
【
図9】Aは、実施形態によるシステムインパッケージデバイスのブロック図であり、Bは、実施形態による組み込みシステムのブロック図である。
【
図10】実施形態に含まれうるNVMアレイの概略図である。
【
図11】一実施形態によるスタンドアロンNVMデバイスの図である。
【
図12】一実施形態による自動車システムの図である。
【
図15】別の実施形態による方法のフロー図である。
【
図16】システムのブートオプションのブロック図である。
【
図17】従来のシステムおよび対応するメモリアドレス空間のブロック図である。
【
図18】A,Bともに、従来のブート動作を示すタイミング図である。
【
図19】A~Cともに、ウォッチドッグタイマおよび対応するブート動作を備えた従来のシステムを示す図である。
【発明を実施するための形態】
【0031】
実施形態によれば、ブートコードを格納するために外部の不揮発性メモリ(NVM)デバイス(例えば、NORフラッシュ)に依拠するコントローラデバイス(例えば、MCU)を備えたシステムは、障害状態からの回復機能(つまり、レジリエンシ)を維持しながら、迅速にブート可能となる。
【0032】
実施形態によれば、外部に格納されたブートコードの完全性チェック(すなわち、基本的なブート機能が完了した後の期間)をアプリケーション層にシフトし、すなわち早期のブートの統合を回避することによって、ブート時間を短縮することができる。いくつかの実施形態では、アプリケーション層の動作は、システムをブートレベルで既知の状態へ移行させるために、ブートコードを格納するスタンドアロンのNVMデバイスと通信することができる。
【0033】
以下の種々の実施形態では、同様のアイテムは同じ参照文字によって参照されるが、先頭の数字は図番号に対応する。
【0034】
図1は、一実施形態によるブート動作のタイミング図である。
図1では、システムは、回復可能性を維持しながら、可用性期限を満たすことができる。時点t=0で、システムプロセッサ(例えば、MCU)が、ROMなどの内部メモリ(例えば、オンチップメモリ、組み込みメモリ、集積メモリ)から初期ブートコード(例えば、ブートローダ1)を実行したものとする。システムプロセッサは、外部(すなわち、オフチップ、スタンドアロンの)NVMデバイス102-0を認証することができる。かかる動作は、NVMデバイスに固有の識別値を含む暗号交換を含む任意の適切な形態をとることができる。
【0035】
時点t=1で、システムは、認証されたNVMデバイスに格納されたコードを実行できる。ただし、従来のアプローチとは異なり、実行されるコードはNVMデバイスの不揮発性状態に依拠する。NVMデバイスに以前の障害状態が発生していない場合、NVMデバイスからアクセスされるコードはブートコードとなり、システムは通常のブート動作102-1を実行する。ただし、NVMデバイスが(以前に確立された)障害状態にある場合、NVMデバイスからアクセスされるコードはリカバリコードとなり、システムはリカバリ動作102-2を実行する。時点t=1でのシステムプロセッサによるコードの読み出しおよび実行は、NVMデバイスへの同じタイプのアクセスを含みうることに留意されたい。すなわち、システムプロセッサは障害状態を認識していないのである。通常動作とリカバリ動作とのどちらを実行するかを制御するのは、NVMデバイスの不揮発性状態である。
【0036】
リカバリ動作は、NVMデバイスの無効なブートコードに対処することを目的とした動作であり、システム構成に基づいて適切な形態をとることができる。リカバリ動作には、既知の正常なブートコードの復元、正常なブートコードを格納していることが判明している読み出し専用アドレスからのブートコードの読み出し、または以前のバージョンのブートコードへの復帰が含まれるが、これらに限定されない。
【0037】
さらに
図1を参照すると、時点t=2は、システムの可用性期限でありうる。図示されているように、ブート動作が通常の実行102-1のパスで進行する場合、システムは可用性期限までに操作可能となる。
【0038】
時点t=3において、システムは、コード検証動作(例えば、コンテンツ検証)102-3を実行することができる。かかる動作により、NVMデバイスによるブートコードストアを検証できる。このようにして、すべてのブートコードが実行されるまで、コード検証は延期される。いくつかの実施形態では、かかるコード検証は、ブートプロセスのアプリケーション層の時点で発生する可能性がある。いくつかの実施形態では、システムプロセッサは複数のコアを有しうる。アプリケーション層の時点(例えば、時点t=3以降)では、プロセッサは、初期ブートプロセス中(例えば、時点t=3より前)よりも多くのコアを有効にすることができる。その結果、延期されたコンテンツ検証動作102-3は、それがブートプロセスに組み込まれた場合よりも速く完了することができる。時点t=4は、アプリケーション期限を表している。図示されているように、高速ブートプロセスでは、アプリケーション期限のかなり前にアプリケーション層の時点にシステムが配置される。
【0039】
このようにして、外部NVMデバイスを使用してブートコードを格納するシステムは、回復可能性を維持しながら、高速な可用性期限を満たすことができる。
【0040】
図2は、一実施形態によるシステムのブロック図である。システム200は、マイクロコントローラユニット(MCU)204、NVMデバイス206およびリモートオーソリティ208を含みうる。システム200はMCU204を利用しているが、代替の実施形態は、ハードワイヤードおよび/またはプログラム可能なカスタム論理回路を含むもののこれらに限定されない任意の適切なプロセッサデバイスまたは回路を含みうる。MCU204は、中央処理装置(CPU)210、ROM212、SRAM214およびワンタイムプログラマブルメモリ(OTP)216を含みうる。CPU210は、ROM212およびNVM206に格納されたブートコードを含む、命令を実行するためのプロセッサ回路を含みうる。ROM212は、パワーオン/リセット(POR)などの所定の条件に応答してCPU210によって実行するための初期ブートコード(例えば、ブートローダ1)を格納することができる。SRAM214は、CPU210の高速アクセスストレージとして機能する。いくつかの実施形態では、SRAMは揮発性メモリであり、電力供給されない場合に格納されたデータを失う。いくつかの実施形態では、CPU210は、実行用にブートコード(例えば、ブートローダ2)をNVM206からSRAM214に転送することができる。OTP216は、データ値用の追加の不揮発性ストレージを提供できる。
【0041】
いくつかの実施形態では、ROM212、SRAM214、OTP216は、同じMCUデバイス204の一部でありうる。これには、同じ集積回路パッケージおよび/または同じダイ上に形成される回路が含まれうる。
【0042】
NVMデバイス206は、ブートコード(例えば、ブートローダ2)を含む、MCU204によって使用されるデータのための不揮発性ストレージを提供することができる。NVMデバイス206は、アドレスマッピング回路228を含むことができ、NVブート状態218を有することができる。かかるNV状態によれば、NVMデバイス206は、ブート動作において、ブートコード、あるいはMCU204のためのリカバリコードを提供することができる。NVMデバイス206は、メモリバス220によってMCU204に接続することができる。メモリバス220は、シリアルバスまたはパラレルバスを含む任意の適切な形態をとることができる。いくつかの実施形態では、メモリバス220は、SPI、CANおよびI2Cを含むがこれらに限定されない、規格と互換性のあるシリアルバスでありうる。
【0043】
リモートオーソリティ208は、システム200の制御メッセージの信頼できるソースとなりうる。リモートオーソリティ208は、MCU208および/またはNVMデバイス206内のウォッチドッグ回路を延期するための指示を発行することができる。リモートオーソリティ208は、MCU204およびNVMデバイス206を含むシステム全体に存在するデバイスでありうるか、または無線ネットワークを含む1つ以上のネットワークを介して通信しているサーバなど、MCU204/NVMデバイス206に近接していないデバイスでありうる。リモートオーソリティ208は、通信チャネル222を介してMCU204と通信することができる。通信チャネル222は、有線接続、無線接続、またはこれらの任意の組み合わせを含む、任意の適切な形態をとることができる。いくつかの実施形態では、リモートオーソリティ208は、認証プロトコルに従ってMCU204と通信することができる。いくつかの実施形態では、リモートオーソリティ208は、NVMデバイス206と通信することができる。リモートオーソリティ208とNVMデバイス206との間の通信は、メモリバス220を介してMCU204を介して行うことができる。しかしながら、他の実施形態では、リモートオーソリティ208は、NVMデバイス206との直接の通信チャネル(図示せず)を有することもできる。
【0044】
実施形態によれば、外部NVMデバイス内の不揮発性回路を使用して、障害サイクルから抜け出し、コード検証の結果を実施することができる。いくつかの実施形態では、これには、不揮発性値を使用して、(例えば、ROMコードの下で動作している間)MCUがコードをフェッチするNVMデバイス内の位置でどのイメージが公開されるかを制御することが含まれうる。検証が成功した場合、NVMデバイスは通常のブートコードを公開できるため、システムは可能な限り迅速に(例えば、追加の手順なしで設計が許す限り迅速に)ブートできる。検証に失敗した場合、NVMデバイスは同じ論理的位置にリカバリイメージを公開できるため、システムはリカバリを直接にブートできる。このように、通常のブートとリカバリブートとを区別するためには、事前のブートコード(ROMコードなど)は必要ない。
【0045】
いくつかの実施形態では、初期の信頼できるコード(例えば、ROMコード)を超えるブートプロセスの実行は、複数のウォッチドッグ回路によって制御することができる。一方のウォッチドッグ回路はコントローラデバイス(MCUなど)に常駐でき、もう一方は外部NVMデバイスに常駐する不揮発性ウォッチドッグ回路とすることができる。不揮発性ウォッチドッグ回路は、従来のウォッチドッグ回路と同じように動作することができるが、電源が入っていない場合(例えば、パワーオンリセット後)に、有効期限(障害など)の表示が持続する場合がある。不揮発性障害表示部は、ブート動作でコントローラに公開されるイメージ(つまり、ブートコードまたはリカバリコード)を制御できる。通常のブートでは、両方のウォッチドッグが構成可能なタイムアウト内にリモートオーソリティによって延期されることが想定される。この条件が満たされない場合、システムがリカバリをブートするための明示的な通信は必要ない。
【0046】
このように、ウォッチドッグ回路を使用して、システムパフォーマンスを損なうことなく、ブートレベルでヘルスチェックの結果を行うことができる。NVMデバイスを認証することにより、ブートコードが有効であることを部分的に即座に保証することができる。ブートコードが有効であることの完全な、ただし遅延した保証は、延期された完全性チェック(コード検証)を通じて提供することができる。未検証のコードを実行する機会があるにもかかわらず、2つのデバイスシステム(例えば、コントローラおよびNVMデバイス)は、システムを既知の状態へ移行させるための制御を保持することができる。そして、
図19のA~Cに示したような他の従来のソリューションとは異なり、既知の状態は、初期ブートコード(例えば、ROMコード)を超えて拡張でき、回復ロジックを含みうる。
【0047】
いくつかの実施形態では、検証は、ブートプロセスのアプリケーションレベルで行うことができる。これにより、ブートメディアの完全性チェックにとどまらず、ランタイムパラメータさえも含む徹底したシステム検査を実行することが可能となりうる。最後に、ブートコードの検証をアプリケーションレベルに移行することで、早期のブートおよびオペレーティングシステムの統合が回避され、実用的なシステムレベルのソリューションとなる。
【0048】
図3Aは、別の実施形態によるシステム300Aのブロック図である。システム300Aは、MCU304AおよびNOR(フラッシュ)デバイス306Aを含みうる。本明細書に開示する実施形態は、NORデバイスを備えたシステムを説明しているが、代替の実施形態は、任意の他の適切な不揮発性メモリデバイスを含みうる。MCU304Aは、
図2のようなアイテムを含みうる。さらに、MCU304Aは、コントローラウォッチドッグ回路324Aを含みうる。コントローラウォッチドッグ回路324Aは、所定の期間実行することができる。この期間が延期されずに満了した場合、コントローラウォッチドッグ回路324Aは、MCU304Aを所定の状態(例えば、POR)に置く。コントローラウォッチドッグ回路324Aは、MCU304Aの外部のソースからの指示によって延期することができる。
【0049】
NORデバイス306Aは、異なる物理的位置(またはセクション)に配置された1つ以上の不揮発性メモリセルアレイを含みうる。
図3Aは、通常のブートコード(例えば、ブートローダ2)を格納することができる第1の位置326-0と、リカバリコード326-1を格納することができる第2の位置326-1を示している。
【0050】
NORデバイス306Aは、NVウォッチドッグ回路328-0Aおよびアドレスマッピング回路328-1をさらに含みうる。NVウォッチドッグ回路328-0Aは、NV状態表示332を提供することができる。NV状態表示332は、NVウォッチドッグ回路328-0Aが障害状態を示すか正常状態を示すかに応じて変化しうる。いくつかの実施形態では、NVウォッチドッグ328-0Aは、最初に、一方の値(すなわち、無障害)のNV状態表示332を出力することができる。NVウォッチドッグ回路328-0Aのウォッチドッグ期間が満了すると、NVウォッチドッグ328-0Aは、NV状態表示332を別の値(障害状態)に切り替え、所定のアクション(例えば、認証されたメッセージ)が発生しない限り、この値をリセットしない。NV状態表示332は不揮発性であり、したがって、PORサイクルを通して持続することが理解される。
【0051】
アドレスマッピング回路328-1は、NV状態表示332に基づいて、NORデバイス306Aへのメモリアクセスを第1の位置326-0または第2の位置326-1に選択的にマッピングすることができる。したがって、無障害状態(NVウォッチドッグ328-0Aが満了していない状態)では、アドレスマッピング回路328-1は、326-0の通常のブートコードを返すことができる。ただし、障害状態(NVウォッチドッグ328-0Aが以前に満了している状態)では、アドレスマッピング回路328-1は326-1のリカバリコードを返すことができる。いくつかの実施形態では、アドレスマッピング回路328-1の動作は、MCU304Aにとって完全に未知である。つまり、MCU304Aからの同じアドレスに応答して、NORデバイス306Aは、障害状態に応じてブートコードまたはリカバリコードを返すことができる。アドレスマッピング回路328-1はマルチプレクサのシンボルで表されているが、これは限定として解釈されるべきではない。MUXは、アドレスマッピング回路328-1の単なる1つの機能的表現である。実施形態は、任意の適切なアドレスマッピング回路またはシステムを含みうる。
【0052】
図3Bは、別の実施形態によるシステム300Bを示している。
図3Bは、
図3Aと同様のアイテムを含みうるが、MCU304BおよびNORデバイス306Bが組み込みシステム334の一部を形成することができるという点で異なる。さらに、システム300Bは、通信チャネル322を介して組み込みシステム334と通信するリモートオーソリティ308を含みうる。MCU304Bは、認証されたコントローラウォッチドッグ回路324Bを含むことができ、NORデバイス306Bは、認証されたNVウォッチドッグ回路328-0Bを含みうる。いくつかの実施形態では、認証されたNVウォッチドッグ回路328-0Bおよび/または認証されたコントローラウォッチドッグ回路324Bは、認証プロセスに従ってリモートオーソリティ308と通信することができ、リモートオーソリティ308からの通信によってウォッチドッグ期間を延期することができる。
【0053】
図3Bはまた、アドレスマッピング回路328-1がアドレス復号回路でありうるという点で
図3Aとは異なり、認証されたNVウォッチドッグ回路は、不揮発性ビット値328-2を提供する。かかるビット値は、同じ入力アドレス値に応答して、第1の位置326-0と第2の位置326-1との間のアクセスをマッピングするための復号動作に含まれうる。いくつかの実施形態では、NVビット値328-2は、デコーダ回路に適用されるアドレス値の1つ以上の上位ビット(MSB)でありうる。
【0054】
動作中、システム300Bはレジリエントなブートを提供できる。MCU304B内で、コントローラウォッチドッグ回路324Bが満了した場合、MCU304Bは(例えば、PORを介して)再起動することができる。コントローラウォッチドッグ回路324Bは、MCU304Bを既知の状態へ移行させるように機能することができ、これには、(NOR306Bの)後続のコードが破損していることが判明した場合に、ROM312でブートコードを実行することが含まれうる。通常のブート動作の場合、コントローラウォッチドッグ回路324Bのウォッチドッグ期間は、リモートオーソリティ308からの信号またはメッセージによって定期的に延期することができる。
【0055】
NORデバイス306B内で、NVウォッチドッグ回路328-0Bが満了した場合、NVビット328-2の状態を変更することができる。NVビット328-2は、ROMブートコードの実行中のMCU304Bのフェッチのためにどのイメージが公開されるかを制御する。MCU304Bを正常にブートするには、NVウォッチドッグ回路328-0Bも定期的に延期する必要がある。そうでないと、NVビットが変化し、NORデバイス306Bが同じ論理アドレスで異なるイメージを公開してしまう原因となる可能性がある。
【0056】
本明細書に記載しているように、NORデバイス306Bは、同じ論理アドレスで「通常のブート」および「リカバリブート」を提示することができる。これにより、ROMコード(不変)を実行するMCU304Bが常にNORデバイス306Bの同じ論理アドレス位置からフェッチを行うことが保証される。換言すれば、MCU304Bは、リセットイベントが発生した理由を知ることができないため、通常のブートコードまたはリカバリブートコードが必要かどうかを知ることができない。
【0057】
実施形態は、障害状態から抜け出すためのウォッチドッグ回路を備えたMCUを含むことができるが、代替の実施形態は、ウォッチドッグ回路の代わりに異なるメカニズムを使用することができる。
図3Cは、かかる一実施形態を示している。
【0058】
図3Cは、別の実施形態によるシステム300Cを示している。
図3Cは、
図3Aに類似したアイテムを含みうる。
図3Cは、MCU304Cが、外部リセットイベントに応答して、MCU304Cをリセット(例えば、強制POR)しうるリセット回路324Cを含むという点で、
図3Aとは異なる。外部リセットイベントは、任意の適切な形態をとることができ、定期的(ただし必ずしも定期的ではない)でありうる。多くの例のうちの一例にすぎないが、システム300Cは、定期的にリセットされる(例えば、自動車のエンジンがオフからオンになる)より大きなシステム(例えば、自動車)に組み込むことができる。
【0059】
図4は、一実施形態によるNVMデバイス406のブロック図である。NVMデバイス406は、第1の領域426-0および第2の領域426-1、認証されたウォッチドッグ428-0、アドレスデコーダ436および内部アドレスパス440を含む複数の記憶領域を含むNORフラッシュデバイスでありうる。第1の領域426-0は、0...xで始まる物理アドレス範囲を介してアクセス可能であり、通常のブートイメージを格納できる。第2の領域426-1は、1...xで始まる物理アドレス範囲を介してアクセス可能であり、リカバリブートイメージを格納できる。認証されたウォッチドッグ回路424は、本明細書で説明しているようなNVウォッチドッグ回路またはその等価物でありうる。アドレスデコーダ436は、内部アドレスパス440で受信されたアドレス値を復号して、領域426-0/1を含む不揮発性ストレージ領域へのアクセスを可能にしうる。内部アドレスパス440は、上位ビット(この場合はMSBビット31)および下位ビット(この場合はビット30:0)を含みうるアドレスデコーダ436にアドレス値を提供することができる。MSBビット31の値は、認証されたウォッチドッグ回路428-0の状態によって確立することができる。特に、ビット31は、無障害状態では「0」であり、障害状態では「1」でありうる。下位ビット30:0は、メモリバスなどで受信された入力アドレス438に対応することができる。
【0060】
いくつかの実施形態では、NVビット31は2つの手法で変更することができる。NVウォッチドッグ期間が満了すると、ビットを「1」にセットできる。認証された入力を受信すると、ビットを「1」にセット(例えば、コード検証に失敗)するか、または「0」にリセット(例えば、コード検証に成功)して戻すことができる。
図3Bに示しているようないくつかの実施形態では、認証された入力は、パケット形式でリモートオーソリティから受信されうる。本明細書に記載しているように、リモートオーソリティ308からの指示は、MCU304Bを介して、または直接のパス(図示せず)を介して、NORデバイス306Bによって受信されうる。
【0061】
図5は、別の実施形態によるNVMデバイス506のブロック図である。NVMデバイス506は、NVMプロセッサ544、NVMアレイ542、アドレスマッピング回路536、シリアルインタフェース(I/F)546、認証回路548およびNVウォッチドッグ回路528-0を含みうる。NVMプロセッサ544は、NVMデバイス506の機能を実行するためのプロセッサ回路を含むことができ、これは、セクタ526-0~526-Nとして示されている。NVMアレイ542は、異なる物理的位置に配置されたNVMセルの1つ以上のアレイを含みうる。いくつかの実施形態では、1つ以上のセクタをブートコード専用とすることができ、一方、1つ以上の他のセクタをリカバリコード専用とすることができる。いくつかの実施形態では、ブートコードおよびリカバリコードの物理アドレスは、本明細書に記載しているように、対応するアドレスの1つ以上のMSB、またはその等価物によって変化しうる。
【0062】
アドレスマッピング回路536は、受信したアドレス(すなわち、論理アドレス)を、NV状態表示部532に基づいて、NVMアレイ542の種々の物理アドレスに選択的にマッピングすることができる。いくつかの実施形態では、アドレスマッピング回路536はデコーダを含みうるが、他の実施形態は、アレイの一部(例えば、セクタ)を種々のアドレス範囲に割り当てる回路、例えばブロックマッピング回路などを含む、他の任意の適切なアドレスマッピング回路536を含みうる。シリアルI/F546は、シリアルメモリバス520を介してデータを送受信することができる。いくつかの実施形態では、シリアルI/F546は、より大きなシステムのMCUなどのコントローラデバイスに接続することができる。シリアルI/F546は、アドレスマッピング回路536に値を提供することができ、認証回路548に値を提供することができる。
【0063】
認証回路548は、別のデバイスとの認証された通信を送受信するための認証手順を実行するための回路を含みうる。いくつかの実施形態では、認証回路548は延期通信を受信することができ、延期通信は、ウォッチドッグ期間を延期するために、NVウォッチドッグ回路528-0に転送されうる。さらに、認証回路548は、NV状態表示部532をセットまたはリセットしうる通信を認証することができる。いくつかの実施形態では、認証回路548は、認証コードを実行するNVMプロセッサ544を含みうる。
【0064】
NVウォッチドッグ528-0は、本明細書の他の実施形態またはその等価物について説明したように動作しうる。ウォッチドッグ期間が満了すると、NV状態表示部532を一方の値にセットできる。所定の入力(例えば、認証されたメッセージ)に応答して、NV状態表示部532を別の値にセットすることができる。NVウォッチドッグ528-0は、NVMアレイによって格納されたコードとは独立して動作する。いくつかの実施形態では、NVウォッチドッグ528-0は、NVMプロセッサ544とは独立して動作しうる。
【0065】
図6は、別の実施形態によるシステム600のブロック図である。システム600は、より大きなシステムに特化した目的を有する組み込みデバイスでありうる。組み込みデバイスには、MCU604、NORデバイス606、NANDデバイス650およびDRAM652が含まれうる。MCU604およびNORデバイス606は、本明細書に開示しているもののいずれかまたはその等価物の形態をとることができる。NANDデバイス650は、スタンドアロンデバイスまたはNANDストレージを含むシステムでありうる。DRAM652は、DRAMストレージを含むスタンドアロンデバイスまたはシステムでありうる。DRAM652は、SRAM614よりも大きなサイズおよび/または低消費電力のシステム600のための揮発性メモリを提供することができる。MCU604は、CPU610、ROM612、SRAM614およびOTP616を含むことができ、これらは、本明細書に記載したものまたはその等価物の形態をとることができる。
【0066】
システム600は、CPU610によってアクセス可能なアドレス空間654を有することができる。アドレス空間654はMCU604(すなわち、オフチップメモリ)の外部MCU604(すなわち、オンチップメモリ)のメモリに対応するアドレスならびにメモリを含みうる。ROM612に対応するアドレス空間には、初期ブートコード(ブートローダ1)656-B1を格納できる。NORデバイス606に対応するアドレス空間は、(無障害状態または障害状態を有しうる)NORデバイス内のNV状態表示の状態に依拠する値を格納することができる。したがって、状態に応答して、NORアドレス空間は、第2のブートコード(ブートローダ2)656-B2またはリカバリコード656-Rを提供できる。NORデバイス606のアドレス空間はまた、CPU610によって実行するためのオペレーティングシステム(OS)カーネル656-Oを格納することができる。NANDデバイス650は、アプリケーションコード656-Aを格納できる。いくつかの実施形態では、アプリケーションコードは、第2のブートコード(ブートローダ2)656-B2(および場合によっては他のコード)を検証するためのコード検証ルーチンを含みうる。
【0067】
図7A~
図7Dは、実施形態によるシステム700の動作を示す一連の図である。システム700は、MCU704、NORデバイス706およびDRAMデバイス752を含みうる。MCU704は、CPU710、ROM712、SRAM714、コントローラウォッチドッグ回路724およびDRAMコントローラ758を含みうる。NORデバイス706は、NVMアレイ742、アドレスマッピング回路736およびNVウォッチドッグ回路728-0を含みうる。DRAM752は、DRAMコントローラ758を介してMCU704によってアクセスすることができる。
【0068】
図7Aは、ブート動作の開始を示している。パワーオンまたはリセット時に、MCU704のCPU710はROM712から初期ブートコードを実行できる。CPU710は複数のコアを有しうるが、1つのアクティブコア760のみが命令を実行することができる。
【0069】
図7B-0および
図7B-1は、NORデバイス706の状態に応じてブート動作がどのように分岐しうるかを示している。
図7B-0は、NORデバイス706が「無障害」状態にある場合の動作を示している。ROM712からブートコードを実行する際に、CPU710は、アクセスNORデバイス706にアドレス値ADDxを生成することができる。アドレスマッピング回路736の動作により、アドレス範囲ADDxでのMCU704によるアクセスは、NORデバイス706のセクション726-0からSRAM714へのブートコード756-B2をフェッチすることができる。次に、CPU710は、SRAM714からのブートコードを実行することができる。別の実施形態では、CPU710は、NORデバイス706から直接にブートコードを実行することができる。
【0070】
図7B-1は、NORデバイス706が「障害」状態にある場合の動作を示している。CPU710は、NORデバイス706にアクセスするために同じアドレス値ADDxを生成することができる。しかし、アドレスマッピング回路736の動作は変更され、MCU704は、NORデバイス706のセクション726-1からSRAM714にリカバリコード756-Rをフェッチすることができる。次に、CPU710は、SRAM714からのリカバリコードを実行することができる。別の実施形態では、CPU710は、NORデバイス706から直接にリカバリコードを実行することができる。
【0071】
図7Cは、一実施形態によるさらなるブート動作を示している。SRAM714からブートコードを実行する際に、CPU710は、アドレス値ADDyを生成して、OSコード756-OをNORデバイス706からDRAM752にコピーすることができる。次に、CPU710は、DRAM752からOSコードを実行することができる。
【0072】
図7Dは、一実施形態による延期コード検証動作を示している。DRAM752からのアプリケーションコードを実行する際に、CPU710は、NORデバイス706によるブートコードストア上でコード検証動作762を実行することができる。いくつかの実施形態では、かかるブートコードは依然としてSRAM714に常駐することができ、その場合、SRAM714からのコードを検証することができる。しかしながら、他の実施形態では、コード検証動作762は、NORデバイス706に格納されたコードにアクセスすることもできる。図示の実施形態では、コード検証動作762は、CPU710のすべてのコア760を利用することができる。
【0073】
図8A~
図8Cは、実施形態によるレジリエントなブート動作を示す図である。アクションは、実行されているコードの場所によって識別される。また、MCU804、NORデバイス806、NANDデバイス850およびDRAMデバイス852を有する対応するシステム800も示されている。
【0074】
図8Aは、コードイメージの物理的変更が検出された際に発生しうるブート動作を示している。
【0075】
動作は、第1のPOR864-0から開始しうる。
【0076】
次いで、MCUはROMコード866-0を実行できる。これには、シリアルバスコントローラの初期化と、NORデバイスからオンボードSRAMへの追加のブートコードのフェッチとが含まれる。次に、SRAMにコピーされたブートコードに制御を渡すことができる。
【0077】
MCUはSRAMコード868-0を実行できる。これには、DRAMコントローラの初期化とNORデバイスからDRAMへのコードのフェッチとが含まれる。次に、DRAMにコピーされたコードに制御を渡すことができる。
【0078】
MCUは、ヘルスチェック失敗870を生成しうる。いくつかの実施形態では、これは、コードイメージの不正な変更を検出するコード検証動作を含みうる。その結果、NORデバイスで状態変化が生じる可能性がある。これは、ウォッチドッグの有効期限および/または障害状態を示す認証済みメッセージが原因である可能性がある。MCUはリセットすることができる。
【0079】
動作は、第2のPOR864-1により続行できる。
【0080】
MCUはROMコード866-1を実行できる。ただし、ROMコードは同じままであるが、NORデバイスの状態により、リカバリコードはブートコードではなくSRAMにコピーされる。その結果、制御がSRAMに渡されると、リカバリコードが872で実行される。かかる動作により、変更されたコードを既知の良好なバージョン(元のイメージなど)に復元できる。MCUはもう一度リセットできる。
【0081】
動作は、第3のPOR864-2で終了できる。MCUは、ROM866-2からブート可能となる。次に、NORからSRAM866-2にコピーされた(復元されたイメージ)コードを実行する。アプリケーションレベル874でのヘルスチェックは、システムが正常である(正常に動作している)ことを示している。
【0082】
図8Bは、ランタイム中にコードイメージの物理的変更が発生した際に発生する可能性のあるブート動作を示している。
【0083】
動作は、
図8Aのように進行し、第1のPOR864-0、ROMコード866-0の実行、NORデバイスからコピーされたコードの実行およびDRAM868-0にコピーされたコードに制御を渡すことが行われる。
【0084】
MCUは、最初は正常に動作しうる。最初に、コードイメージが有効であると判定されうる。ただし、その後、ランタイム中に、コードイメージの不正な変更が検出される。その結果、MCUは870-0’でリセットできる。ただし、検出された障害のタイミングにより、NORデバイスにはヘルスチェック失敗が通知されない(876)。その結果、NORデバイスの不揮発性状態は変更されない。
【0085】
動作は、第2のPOR864-1により続行できる。コードイメージが変更されているため、
図8Aと同様に検出することができる。次いで、MCUはROMコード866-1を実行し、次にSRAMコード868-1を実行できる(これは無効な場合がある)。MCUは、ヘルスチェック失敗870-1’を検出し、リセットすることができる。さらに、NORデバイスの不揮発性状態を変更することができる。
【0086】
動作は、第3のPOR864-2により続行できる。MCUはROMコード866-0を実行した後、NORデバイスの状態が変化したため、リカバリコードを実行して872をリセットすることができる。
【0087】
動作は、第4のPOR864-3および通常のブート動作(866-3,868-3,874)で終了しうる。
【0088】
図8Cは、ランタイム中にコードイメージの物理的変更が発生した際に発生する可能性のあるブート動作を示している。ただし、MCUはNORデバイスにエラーを通知できる。
【0089】
動作は、
図8Bのように進行し、第1のPOR864-0、ROMコード866-0の実行およびコードイメージ870-0’のランタイム変更の検出を伴う。ただし、エラーおよび動作条件(ウォッチドッグ状態など)により、MCUは失敗(認証されたメッセージなど)をNORデバイスに通知できる。その結果、NORデバイスは状態を変更し、次のPORでリカバリイメージを提供できる。
【0090】
動作は、
図8Aと同様に続行することができ、第2のPOR864-1に続くリカバリ動作872および第3のPOR864-2に続く良好なヘルスチェックを伴う。
【0091】
実施形態は、外部デバイスに格納されたブートコードする任意の適切なシステムを含むことができるが、組み込みシステムなどの高性能でコンパクトなシステムは、本発明の実施形態として特に利益を得ることができる。
【0092】
図9のAは、一実施形態によるシステム900Aを示している。システム900Aは、システムインパッケージ(SiP)パッケージ976を含むことができ、SiPパッケージ976は、SiPパッケージのメモリバス920Aを介して通信するMCUダイ904Aおよび別個のNVMダイ906Aを有する。MCUダイ904Aは、本明細書の実施形態またはその等価物によるMCUを含みうる。NVMダイ906Aは、本明細書の実施形態またはその等価物によるNVMデバイス(例えば、NORフラッシュ)を含みうる。
【0093】
組み込みシステムは、プロセッサ回路、関連するメモリおよびI/O回路を含むことができ、通常はコンパクトな構造で形成される。組み込みシステムは、より大きなシステムにおいて、特定の機能または機能のセット専用とすることができる。多くの組み込みシステムでは、高性能のフラッシュレスMCU(アプリケーションプロセッサなど)が好ましいプロセッサでありうる。本明細書に記載しているように、フラッシュレスの高性能MCUは、フラッシュを内蔵することが技術的に難しく、かつ高価な先端処理ノードで製造されることが一般的である。したがって、外部フラッシュは、依然としてブートコードを格納するための最良のソリューションである。
【0094】
多くのアプリケーションでは、組み込みシステムは、定期的にヘルスチェックを行うリモートオーソリティと通信することが期待されている。本明細書において記載しているように、リモートオーソリティは、組み込みデバイスの外部に配置することができる。考えられる2つの例として、リモートオーソリティは、ネットワークアクセスを必要とするリモートサーバとすることができ、また、組み込みデバイスが使用される大規模なシステム内の高度にセキュリティ保護されたチップとすることもできる。
【0095】
図9のBは、別の実施形態によるシステム900Bのブロック図である。システム900Bは、組み込みシステム934およびレジリエンスオーソリティ908を含みうる。組み込みシステム934は、NVMデバイス906B、MCU904Bおよびトラステッドプラットフォームモジュール(TPM)978を含みうる。MCU904BおよびNVMデバイス906Bは、本明細書の実施形態に示されているもののいずれかまたはその等価物の形態をとることができる。TPM978は、組み込みシステム934のセキュリティ関連機能を実行するためのセキュリティ回路を含むことができ、これには暗号鍵の格納および認証動作の実行が含まれるが、これらに限定されない。
【0096】
レジリエンスオーソリティ908は、ウォッチドッグ延期指示をNVMデバイス906Bおよび/またはMCU904Bに送信することを含む、本明細書で説明しているような耐障害機能を実行しうるリモートオーソリティでありうる。本明細書に記載しているように、延期指示は、認証された通信を介して送信することができる。
【0097】
実施形態は、任意の適切なNVMアレイ構造およびNVMセルのタイプを含みうるが、いくつかの実施形態では、1トランジスタ(1T)NOR型アレイを含みうる。
図10は、実施形態に含まれうる1T NORアレイ1080の概略図である。アレイ1080は、行および列に配置された多数のメモリセル(1080-0として図示)を含むことができ、同じ行のメモリセルは同じワード線(1080-2として図示)に接続されており、同じ列のメモリセルは同じビット線1080-3に接続されている。いくつかの実施形態では、メモリセル(1080-0)は、制御ゲートとチャネルとの間に電荷蓄積構造1080-1を有する単一のトランジスタ構造で形成することができる。電荷蓄積構造1080-1は、1つ以上のデータビットを電荷(またはその欠如)として記憶することができる。
【0098】
実施形態には、ホストデバイスと連携して動作するメモリデバイスおよびシステムが含まれうるが、実施形態はまた、アドレスマッピングのスイッチが不揮発性である場合、ウォッチドッグタイマなどに応答して異なる場所間でアドレスマッピングを選択的に切り替えることができるスタンドアロンの不揮発性メモリデバイスを含みうる。かかるスタンドアロンメモリデバイスは、同じパッケージに形成された複数の集積回路を含みうるが、いくつかの実施形態では、メモリデバイスは、有利には、コンパクトな単一の集積回路でありうる。
図11は、パッケージ化されたシングルチップNVMデバイス1182を示している。ただし、メモリデバイスは、回路基板の基板上に、実施形態に係るメモリデバイスチップの直接の結合を含む任意の他の適切なパッケージタイプを含みうることが理解される。
【0099】
実施形態は、ブートレジリエンシから利益を得るかまたは当該ブートレジリエンシを必要としうる外部NVMデバイス上にブートコードを格納するプロセッサを有する任意の適切なシステムを含みうる。ただし、実施形態は、自動車システムなどの高信頼性システムにおいて特に有利でありうる。
図12は、一実施形態による自動車システム1284を示している。自動車システム1284は、種々のシステムを含むことができ、2つのシステムが1200Aおよび1200Bとして示されており、これらは組み込みシステムでありうる。システム1200Aは、コントローラデバイス1204A、NVMデバイス1206AおよびDRAM1252を含みうる。コントローラデバイス1204Aは、システムオンチップ(SoC)であってよく、本明細書で説明しているようなプロセッサ回路(例えばMCU、CPU)またはその等価物を含みうる。いくつかの実施形態では、システム1200Aは、先進運転支援システム(ADAS)でありうる。システム1200Bは、MCU1204BおよびNVMデバイス1206Bを含むことができ、これらは、本明細書の実施形態に記載されているものまたはその等価物の形態をとることができる。
【0100】
このように、高性能処理デバイス(高度なノードMCU)を備えた自動車システムは、ブートコードの外部不揮発性ストレージを含むことができ、同時に高速なレジリエントなブート機能を有している。
【0101】
図13を参照すると、一実施形態による自動車1386が図に示されている。自動車1386は、分離型NVMデバイスに格納されたブートコードで動作する多数の組み込みシステム(2つのシステムが1334-0および1334-1として図示されている)を有することができ、かかるNVMデバイスは、本明細書に記載しているようなレジリエントなブート機能およびその等価物を提供する。組み込みシステム(1334-0,1334-1)は、電子制御ユニット(ECU)および/またはADASを含みうる。しかしながら、他の実施形態では、かかる組み込みシステムは、ダッシュボード表示/制御サブシステムおよび/またはインフォテインメントサブシステムを含むことができ、なおこれらは多数の可能な例のうちの2つにすぎない。各組み込みシステム(1334-0,1334-1)は、プロセッサデバイス(例えば、MCU)および1つ以上のNVMデバイスを含むことができ、本明細書に記載しているようなレジリエントなブート機能、またはその等価物を使用することができる。
【0102】
上記の実施形態では、種々のシステム、デバイスおよび対応する方法を示してきたが、フロー図を参照して、付加的な方法を説明する。
【0103】
図14は、一実施形態による方法1490のフロー図である。いくつかの実施形態では、方法1490は、NVMデバイスによって実行されうる。方法1490は、NV状態表示を「無障害」値にセットすることを含みうる。NV状態表示は、NVMデバイスの状態を不揮発性で維持できる。
【0104】
ブートコードはNVMデバイスの第1のセクションに格納でき、リカバリコードはNVMデバイスの第2のセクションに格納できる(1490-1)。いくつかの実施形態では、かかるブートコードは、ブート動作の後半部分のためのものであってよく、ブート動作の最初の部分のためのブートコードは、別のメモリデバイス(例えば、オンボードROM)によって提供される。リカバリコードには、無効なブート動作を修正するコードが含まれうる。いくつかの実施形態では、リカバリコードは、処理デバイス(例えば、MCU)に、良好であることが既知のブートコードを実行するように指示することができる。かかるリカバリ動作は、任意の適切な手法を含んでおり、これには、以前のバージョンを含む既知の良好なブートコードもしくは既知のセキュアなバージョンを有するNVMデバイスの第1のセクションを書き換えること、またはセキュアな(例えば、認証された)通信セッションを介してリモートソースからコードを取り出すことを含むが、これらに限定されない。本明細書に記載しているように、第1のセクションおよび第2のセクションは、NVMデバイスの異なる物理的位置でありうる。
【0105】
パワーオンまたはリセットイベント(1490-2)で、NV状態表示に従って、所定のアドレスマッピングを実施することができる(1490-3)。NV表示が無障害を示している場合(1490-3の!障害)、所定のアドレス範囲を第1のセクションにマッピングできる(1490-4)。NV表示が障害を示している場合(1490-3の障害)、所定のアドレス範囲を第2のセクションにマッピングできる(1490-5)。いくつかの実施形態では、所定のアドレス範囲は、コントローラデバイスの論理ブートコードアドレスに対応することができる。かかるアドレス再マッピングは、本明細書に開示する実施形態のいずれかまたはその等価物の形態をとることができる。
【0106】
方法1490は、NVMデバイスのウォッチドッグ期間を開始することができる(1490-6)。かかるウォッチドッグ期間は、本明細書に記載しているように、リモートオーソリティによって延期することができる。ウォッチドッグ期間が満了した場合(1490-7のY)、NV表示を障害値にセットできる(1490-9)。さらに、NVMデバイスが障害状態を示す認証済みメッセージを受信した場合、NV表示を障害値にセットできる(1490-9)。NVMデバイスが、コードが有効であることを示す認証済みメッセージを受信した場合(1490-10のY)、NV表示を無障害値にセットできる(1490-11)。いくつかの実施形態では、かかる認証されたメッセージは、コントローラデバイスなどから受信することができる。
【0107】
図15は、別の実施形態による方法1590のフロー図である。いくつかの実施形態では、方法1590は、ブートおよび関連する動作において外部NVMデバイスにアクセスするコントローラデバイスによって実行されうる。パワーオンまたはリセット動作(1590-0)に続いて、方法1590は、オンボードROMブートコードの実行(1590-1)を含むことができる。かかる初期ブートコードにより、コントローラデバイスの基本機能を有効にすることができる。認証動作は、外部NVMデバイスの認証を求めることができる(1590-2)。かかる動作には、コントローラデバイスとNVMデバイスとの間の暗号交換を含む任意の適切な手法が含まれうる。NVMデバイスを認証できない場合(1590-2のN)、NVMデバイスは無効であると判定されうる(1590-3)。いくつかの実施形態では、無効なNVMデバイスに応答して、コントローラデバイスは、エラー表示を発行するか、または内部不揮発性メモリにエラー値を記録することができる。
【0108】
NVMデバイスが認証された場合(1590-2のY)、方法1590はコントローラウォッチドッグ期間を開始できる(1590-4)。かかるウォッチドッグ期間は、本明細書およびその等価物に記載されているように、リモートオーソリティによって延期することができる。NVMデバイスのブートアドレス範囲に常駐するコードを実行することができる(1590-5)。このようなアクションには、コードを別のメモリ(例えば、オンボードSRAM)にコピーすること、またはNVMデバイスから直接にコードを実行する(つまり、その場で実行する(XIP))ことが含まれる。本明細書の実施形態から理解されるように、コントローラデバイスは、どのコードが実行されているかを認識しない場合がある。
【0109】
実行されたNVMコードがリカバリコードである場合(1590-6のリカバリコード)、方法1590はリカバリ動作を実行することができる(1590-7)。リカバリ動作には、本明細書に記載しているもののいずれかまたはその等価物が含まれうる。実行されたNVMコードがブートコードである場合(1590-6のブートコード)、方法1590は、ウォッチドッグ期間が満了したかどうかを判定できる(1590-7)。ウォッチドッグの満了判別ステップは
図15のフローチャートの特定の位置に示されているが、かかる動作は他の動作のバックグラウンドで発生する他のステップから独立させうることが理解される。したがって、ウォッチドッグのステップ1590-7の位置は、限定的であると解釈されるべきではない。
【0110】
ウォッチドッグ期間が満了しておらず(1590-7のN)、すべてのNVMブートコードが実行されている場合(1590-8のY)、方法1590はブートコード検証動作を実行できる(1590-9)。かかるアクションには、オペレーティングシステムのロード、オペレーティングシステムの制御の切り替えおよびコード検証アプリケーションの実行が含まれるが、これらに限定されない。検証されるコードには、NVMデバイスに格納されているブートコードが含まれうるが、これに限定されない。ブートコードが検証に失敗した場合(1590-9のN)、認証されたメッセージをNVMデバイスに送信してこの失敗を示すことができる(1590-10)。
【0111】
ブートコードが検証に合格した場合(1590-9のY)、認証されたメッセージをNVMデバイスに送信してこの合格を示すことができる(1590-11)。方法1590は、通常の動作を進めることができる(1590-12)。かかるアクションには、他のストレージデバイスに常駐するアプリケーションコードを実行するコントローラデバイスが含まれうる。かかる動作は、PORまたは同様のイベントがない場合でも続行できる(1590-13のN)。
【0112】
NVMデバイスが無効であると判定された場合(1590-3)、リカバリ動作が発生した場合(1590-7)、またはウォッチドッグ期間が満了した場合(1590-7のY)、またはコード検証の失敗を示す認証済みメッセージが生成された場合(1590-10)、方法1590は、POR動作1590-0を実行する。
【0113】
実施形態は、ブートコードを格納するために外部メモリを利用するシステムに、高速なレジリエントなブート動作を有利に提供することができる。
【0114】
実施形態は、L4および/またはL5の自動運転車など、かかるレジリエンシを必要とする用途に含めることができる。
【0115】
本明細書を通じて「1つの実施形態」または「一実施形態」への言及は、実施形態に関連して説明される特定の特徴、構造または特性が、本発明の少なくとも1つの実施形態に含まれることを意味することを理解されたい。したがって、本明細書の種々の部分における「1つの実施形態」または「一実施形態」または「代替の実施形態」への2回以上の言及は、必ずしもすべてが同じ実施形態を指すわけではないことが強調ないし理解されるべきである。さらに、特定の特徴、構造または特徴は、本発明の1つ以上の実施形態において適切となるように組み合わせることができる。
【0116】
同様に、本発明の例示的な実施形態の上述の説明において、本発明の種々の特徴は、種々の発明の態様の1つ以上の理解を助ける開示を合理化する目的で、単一の実施形態、図、またはその説明において一緒にグループ化可能であることを理解されたい。しかしながら、本開示の方法は、特許請求の範囲が各請求項に明示的に記載されているよりも多くの特徴を必要とするという意図を反映していると解釈されるべきではない。むしろ、本発明の態様は、前述の単一の開示した実施形態のすべての特徴よりも少ない特徴にある。したがって、詳細な説明に続く特許請求の範囲は、当該詳細な説明に明示的に組み込まれるものであり、各請求項は本発明の各別の実施形態としてそれ自体で成立している。
【外国語明細書】