IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ グーグル インコーポレイテッドの特許一覧

特表2024-515238セキュアなシリアルペリフェラルインターフェイス通信
<>
  • 特表-セキュアなシリアルペリフェラルインターフェイス通信 図1
  • 特表-セキュアなシリアルペリフェラルインターフェイス通信 図2
  • 特表-セキュアなシリアルペリフェラルインターフェイス通信 図3
  • 特表-セキュアなシリアルペリフェラルインターフェイス通信 図4
  • 特表-セキュアなシリアルペリフェラルインターフェイス通信 図5
  • 特表-セキュアなシリアルペリフェラルインターフェイス通信 図6
  • 特表-セキュアなシリアルペリフェラルインターフェイス通信 図7
  • 特表-セキュアなシリアルペリフェラルインターフェイス通信 図8
  • 特表-セキュアなシリアルペリフェラルインターフェイス通信 図9
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2024-04-08
(54)【発明の名称】セキュアなシリアルペリフェラルインターフェイス通信
(51)【国際特許分類】
   G06F 21/62 20130101AFI20240401BHJP
   G06F 21/82 20130101ALI20240401BHJP
   G06F 13/36 20060101ALI20240401BHJP
   G06F 13/38 20060101ALI20240401BHJP
   G06F 13/42 20060101ALI20240401BHJP
【FI】
G06F21/62
G06F21/82
G06F13/36 310E
G06F13/36 510
G06F13/38 320Z
G06F13/42 310
【審査請求】有
【予備審査請求】未請求
(21)【出願番号】P 2023557156
(86)(22)【出願日】2022-04-21
(85)【翻訳文提出日】2023-11-08
(86)【国際出願番号】 US2022071842
(87)【国際公開番号】W WO2022226520
(87)【国際公開日】2022-10-27
(31)【優先権主張番号】63/179,043
(32)【優先日】2021-04-23
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
(71)【出願人】
【識別番号】502208397
【氏名又は名称】グーグル エルエルシー
【氏名又は名称原語表記】Google LLC
【住所又は居所原語表記】1600 Amphitheatre Parkway 94043 Mountain View, CA U.S.A.
(74)【代理人】
【識別番号】110001195
【氏名又は名称】弁理士法人深見特許事務所
(72)【発明者】
【氏名】キム,ウンチャン
(72)【発明者】
【氏名】チェン,ティモシー・ジェイ
(57)【要約】
本文書は、セキュアなシリアルペリフェラルインターフェイス(SPI)通信の態様を開示する。いくつかの態様において、セキュアなSPI通信モジュールは、ホストによって、SPIインターコネクトを介してこのホストに結合されたペリフェラルブロックに送信される通信を監視する。モジュールは、ホストによって送信される通信のそれぞれのコマンドを、ペリフェラルブロックが実行する権限がないコマンドを示す情報と比較する。モジュールは、比較に基づいて、それぞれのコマンドのうちの1つが、ペリフェラルブロックが実行する権限がないコマンドのうちの1つであると判断する。次に、モジュールは、ペリフェラルブロックが通信のそれぞれのコマンドの少なくとも一部分を受信することを阻止する。これを行うことにより、モジュールは、ペリフェラルブロックが権限のないコマンドを実行することを阻止することができる。権限のないコマンドの実行は、ペリフェラルブロックのセキュリティを損なう可能性がある。
【特許請求の範囲】
【請求項1】
セキュアなシリアルペリフェラルインターフェイス通信のためにシステムのホストに関連付けられたセキュリティ回路部によって実施される方法であって、前記方法は、
前記ホストによって、シリアルペリフェラルインターフェイス(SPI)インターコネクトを介して前記ホストに結合された前記システムのペリフェラルブロックに送信される通信を監視することと、
前記ホストによって送信される前記通信のそれぞれのコマンドを、前記ペリフェラルブロックがいずれのコマンドを実行する権限がないかを示す情報と比較することと、
前記比較に基づいて、前記それぞれのコマンドのうちの1つが、前記ペリフェラルブロックが実行する権限がないコマンドであると判断することと、
前記ペリフェラルブロックが実行する権限がない前記それぞれのコマンドの少なくとも一部分を前記ペリフェラルブロックが受信することを阻止することと、
を含む、方法。
【請求項2】
前記阻止することは、前記ペリフェラルブロックが、前記ホストによって送信された前記通信の前記それぞれのコマンドの前記少なくとも一部分を受信することを阻止するために、前記SPIインターコネクトのチップ選択ラインまたはクロックラインの状態を変更することを含む、請求項1に記載の方法。
【請求項3】
前記阻止することは、前記ペリフェラルブロックが、前記ホストによって送信された前記通信の前記それぞれのコマンドの前記少なくとも一部分を受信することを阻止するために、前記SPIインターコネクトのチップ選択ラインおよびクロックラインの状態を変更することを含む、請求項1に記載の方法。
【請求項4】
前記通信の前記それぞれのコマンドは8ビットを含み、
前記変更することは、それぞれのコマンドの少なくとも第8のビットが前記ペリフェラルブロックによって処理されることを防ぐために、前記それぞれのコマンドの前記第8のビットが前記SPIインターコネクトを介して通信される第8のクロックサイクルの前に、または第8のクロックサイクルにおいて、前記チップ選択ラインをデアサートすることを含む、請求項2または3に記載の方法。
【請求項5】
前記通信の前記それぞれのコマンドは8ビットを含み、
前記変更することは、それぞれのコマンドの少なくとも第8のビットが前記ペリフェラルブロックによって処理されることを防ぐために、前記それぞれのコマンドの前記第8のビットが前記SPIインターコネクトを介して通信される第8のクロックサイクルの前に、または第8のクロックサイクルにおいて前記クロックラインをゲーティングすることを含む、請求項2または3に記載の方法。
【請求項6】
前記それぞれのコマンドは第1の通信の第1のコマンドであり、前記方法は、
前記ホストによって前記ペリフェラルブロックに送信される第2の通信の第2のコマンドが、ステータスレジスタ書き込みコマンドを含むと判断することと、
前記第2の通信が前記ペリフェラルブロックのステータスレジスタを変更することを阻止するために、前記ステータスレジスタ書き込みコマンドを変更することと、
をさらに含む、請求項1~5のいずれか1項に記載の方法。
【請求項7】
前記ステータスレジスタ書き込みコマンドを前記変更することは、
前記ステータスレジスタ書き込みコマンドのビット位置を予め定められたビット値にセットして、変更されたステータスレジスタ書き込みコマンドを提供することと、
前記ペリフェラルブロックに、前記ステータスレジスタ書き込みコマンドの前記予め定められたビット値および他のビットを含む前記変更されたステータスレジスタ書き込みコマンドを渡すことと、
を含む、請求項6に記載の方法。
【請求項8】
前記ペリフェラルブロックが実行する権限がない前記コマンドを示す前記情報は、
前記ペリフェラルブロックが実行する権限がない前記コマンド、および
前記ペリフェラルブロックが実行する権限があるコマンド、
のテーブルを含む、請求項1~7のいずれか1項に記載の方法。
【請求項9】
前記通信の前記監視の前に、前記ペリフェラルブロックが実行する権限がない前記コマンド、および前記ペリフェラルブロックが実行する権限がある前記コマンドの前記テーブルを構成することをさらに含む、請求項8に記載の方法。
【請求項10】
前記ホストによって送信される前記通信の前記それぞれのコマンドを前記テーブルの前記情報と前記比較することは、
前記それぞれのコマンドに基づいて、前記テーブル内へのインデックス付けを行い、前記それぞれのコマンドが前記ペリフェラルブロックによる実行の権限があるか否かを判断することを含む、請求項8または9に記載の方法。
【請求項11】
前記システムの前記ペリフェラルブロックは、前記SPIインターコネクトを介して前記ホストに結合されたメモリモジュールを備え、前記メモリモジュールは、不揮発性メモリもしくはフラッシュメモリのうちの一方を含むか、または
前記システムの前記ペリフェラルブロックは、書き込み保護入力ノードを含まないか、もしくは前記ペリフェラルブロックの書き込み保護入力ノードが無効にされる、請求項1~10のいずれか1項に記載の方法。
【請求項12】
前記システムの前記メモリモジュールに記憶されたバイナリ画像を、前記バイナリ画像を前記メモリモジュールから前記SPIインターコネクトを介して前記ホストにロードすることを試行する前に検証することをさらに含む、請求項11に記載の方法。
【請求項13】
前記バイナリ画像の検証の成功に応答して、前記メモリモジュールが前記SPIインターフェイスを介して前記ホストに前記バイナリ画像を送信することを許可すること、または
前記バイナリ画像の検証の不成功に応答して、前記メモリモジュールが前記SPIインターフェイスを介して前記ホストに前記バイナリ画像を送信することを阻止すること、
をさらに含む、請求項12に記載の方法。
【請求項14】
前記バイナリ画像は、前記メモリモジュールの第1の区画に記憶された第1のバイナリ画像であり、前記方法は、
前記第1のバイナリ画像のための読み出しコマンドのアドレスを操作して、前記メモリモジュールに、第2のバイナリ画像を前記メモリモジュールの第2の区画から前記ホストに送信させること、
をさらに含む、請求項13に記載の方法。
【請求項15】
セキュアなシリアルペリフェラルインターフェイス通信のための回路部を含む集積回路であって、前記回路部は、
機能コアを有するホストと、
少なくとも1つのペリフェラルブロックと、
前記ホストおよび前記少なくとも1つのペリフェラルブロックを結合するシリアルペリフェラルインターフェイス(SPI)インターコネクトと、
前記SPIインターコネクトと作動的に結合され、請求項1~14のいずれか1項に記載の動作を実行するように構成されたセキュアなSPI通信モジュールと、
を備える、集積回路。
【発明の詳細な説明】
【背景技術】
【0001】
背景
社会のコンピュータ化が増大し続け、機密ユーザ情報を記憶し、車両の運転、ユーザ認証の実行、デジタル貨幣取引の完了を含む多岐にわたる動作をユーザのために実行するためにパーソナルコンピューティングデバイスに頼ることが増えた結果として、世界は、コンピューティングデバイスの機密情報に対する多岐にわたる損害の大きい攻撃をますます受けやすくなっている。
【0002】
最近のフォールトベースの暗号解読方法は、フォールト注入攻撃を伴う潜在的にセキュリティを脅かす方法を特定した。フォールト注入攻撃は、ソフトウェア注入と対照的に、攻撃者がフォールトをコンピューティングシステムに物理的に注入し、それによって電子部品の挙動を意図的に変更することを伴う。結果として、フォールト注入攻撃は、多くの低レベルシステムセキュリティ機能を回避し、コンピューティングシステムの挙動を変更して、悪意のある意図を達成しおよび/または機密情報を抽出し得る。フォールト注入攻撃は、電圧グリッチ、クロックグリッチ、レーザ注入、電磁注入等を含む場合がある。いくつかの場合、これらの攻撃は、様々な場所において、電子システムセキュリティを破壊または脆弱化するためのフォールト注入を導入し得る。このため、フォールト注入攻撃は、コンピューティングシステム内で転送されるコマンドまたはデータを変更する場合があり、潜在的に、システムの実行フローを変更して、鍵の漏洩、特権の拡大またはコードの意図しない実行等の下流の問題を引き起こし得る。
【発明の概要】
【0003】
概要
本文書は、セキュアなシリアルペリフェラルインターフェイス(SPI)通信のための装置および技法を記載する。いくつかの態様において、セキュアなSPI通信モジュールは、ホストまたは他のバスコントローラによって、SPIインターコネクトを介してこのホストに結合されたペリフェラルブロックに送信される通信を監視する。セキュアなSPI通信モジュールは、ホストによって送信される通信のそれぞれのコマンドを、ペリフェラルブロックが実行する権限がないコマンドを示す情報と比較する。セキュアなSPI通信モジュールは、比較に基づいて、それぞれのコマンドのうちの1つが、ペリフェラルブロックが実行する権限がないコマンドのうちの1つであると判断する。次に、セキュアなSPI通信モジュールは、ペリフェラルブロックが通信のそれぞれのコマンドの少なくとも一部分を受信することを阻止する。これを行うことにより、モジュールは、ペリフェラルブロックが権限のないコマンドを実行することを阻止することができる。権限のないコマンドの実行は、ステータスレジスタを変更し、保護スキームを無効にし、機密情報にアクセスすること等により、ペリフェラルブロックのセキュリティを損なう場合がある。
【0004】
本発明の概要は、セキュアなSPI通信を実施するための簡略化された概念を紹介するために提供される。これについては以下で詳細な説明においてさらに記載され、図面に示される。本発明の概要は、特許請求される主題の本質的特徴を特定することは意図されておらず、また、特許請求される主題の範囲の決定における使用のために意図されたものでもない。
【0005】
セキュアなSPI通信の1つまたは複数の態様の詳細が図面を参照して本開示全体を通じて説明される。明細書および図面における異なる実例における同じ参照符号の使用は、同じまたは類似の要素を示す。
【図面の簡単な説明】
【0006】
図1】セキュアなSPI通信の態様を実施することができる装置を含む例示的な動作環境を示す図である。
図2】セキュアなSPI通信の態様を実施することができるプロセッサおよび複数の回路部品を含む例示的なシステムを示す図である。
図3】1つまたは複数の態様による、SPIコマンドフィルタリングを実施するシステム構成要素の例示的な構成を示す図である。
図4】セキュアなSPI通信の態様を実施するためのクロックゲーティングおよびコマンドフィルタリング機能を含む例示的なシステムを示す図である。
図5】セキュアなSPI通信の態様を実施することができるSPI通信シグナリングの例示的なタイミング図である。
図6】1つまたは複数の態様による、セキュアなSPI通信のための例示的な方法を示す図である。
図7】1つまたは複数の態様による、SPI通信のコマンドをフィルタリングするための例示的な方法を示す図である。
図8】1つまたは複数の態様による、交互のバイナリ画像アクセスを可能にするためにコマンドアドレスを操作するための例示的な方法を示す図である。
図9】セキュアなSPI通信の態様を実施することができる例示的なシステムオンチップを示す図である。
【発明を実施するための形態】
【0007】
詳細な説明
コンピューティングシステムは、欠陥、攻撃、および他の潜在的にセキュリティを脅かすイベントに対する保護の手段を提供するために、セキュリティ回路部およびソフトウェアを有する集積回路を含む。今日のコンピューティング環境において、バッドアクターが、多数の攻撃ベクトルを用いて無数のレベルでコンピューティングデバイスを攻撃し得る。例えば、フォールト注入攻撃は、これらのセキュリティパラダイムのうちの多くが提供する保護を縮小させる。フォールト注入攻撃は、システムセキュリティ機能を迂回し、システムの挙動を変更して、悪意のある意図を達成しおよび/または機密情報を暴く可能性がある。フォールト注入攻撃を用いて、攻撃者は、グリッチ(例えば、システムにおける突然の、一時的な注入されたフォールト)を用いて電子部品(例えば、中央処理ユニット)のプログラムされた動作を間接的にまたは直接変更することができる。そのような攻撃は、場合によってはコンピューティングデバイスを「使用不能にする(brick)」可能性があるが、他の例では、厳密なターゲットを絞った攻撃により、セキュリティを損なう脅威が生じ得る。例えば、フォールト注入攻撃は、敵対者がプログラムの制御フローを弱体化させることを可能にし得る。その結果、「return to libc」タイプの攻撃等の、誤った機能が呼び出される場合がある。いくつかの場合、これらの攻撃は、コンピューティングデバイスに、機密データを暴かせるか、または未検証コードを実行させる場合がある。このため、フォールト注入攻撃は、コンピューティングシステム内で転送されるコマンドまたはデータを変更する場合があり、潜在的に、システムの実行フローを変更して、鍵の漏洩、特権の拡大またはコードの意図しない実行等の下流の問題を引き起こし得る。
【0008】
従来の技法は、そのような攻撃に対処することを目的としていたが、通常、攻撃者がコマンドを変更し、システムセキュリティを損なうことを阻止するには弱く、非効果的である。例えば、いくつかの従来のスキームにおいて、デバイスは、コマンドをキャンセルすることを試行して、オペコードにおける最後のビットを変更することができる。しかしながら、このタイプのスキームは、コマンドがペリフェラルによって依然として消費される場合、非効果的である場合があり、または2つのコマンドが隣接している(例えば、1ビット離れている)場合、適用可能でない場合がある。他の以前のスキームは、複数のコマンドを単一のコマンドオペコードにマッピングするコマンドテーブルを維持した。テーブルエージェントは、コマンドの各ビットを受信しながらコマンドテーブルをトラバースし、下流のペリフェラルに異なるオペコードを送出する。そのようなマッピングは、システム設計者の選好に依拠してフィルタリングにより除去するかまたは含めることができない、テーブルへの或る特定のコマンドの非効率的マッピングに関係する問題を被っていた。このため、従来の技法は、制約またはフィルタリングなしでシステムを伝播し得る様々なコマンドに対し脆弱性があり、結果として、権限のないまたは許可されていないコマンドの実行に関するシステムの危険性が生じていた。
【0009】
従来のセキュリティ技法と対照的に、本開示は、セキュアなSPI通信の態様を記載する。態様において、セキュアなSPI通信モジュールは、ホストまたは他のバスコントローラによって、SPIインターコネクトを介してこのホストに結合されたペリフェラルブロックに送信される通信を監視する。セキュアなSPI通信モジュールは、ホストによって送信される通信のそれぞれのコマンドを、ペリフェラルブロックがいずれのコマンドを実行する権限がないかまたは実行を許可されていないかを示す情報(例えば、除外コマンドリスト)と比較する。セキュアなSPI通信モジュールは、比較に基づいて、それぞれのコマンドのうちの1つが、ペリフェラルブロックが実行する権限がないコマンドのうちの1つであると判断する。判断に応じて、セキュアなSPI通信モジュールは、次に、ペリフェラルブロックが、通信のそれぞれのコマンドの少なくとも一部分を受信することを阻止するために、SPIインターコネクトのチップ選択ラインおよび/またはクロックラインの状態を変更する。これを行うことにより、モジュールは、ペリフェラルブロックが権限のないコマンドを実行することを阻止することができる。権限のないコマンドの実行は、ステータスレジスタを変更し、保護スキームを無効にし、機密情報にアクセスすること等により、ペリフェラルブロックのセキュリティを損なう可能性がある。
【0010】
このため、従来の技法と対照的に、本明細書に記載のセキュアなSPI通信の態様は、フラッシュメモリデバイスまたはチップ等のSPIペリフェラル部品の本来の動作、予期される挙動、または保護メカニズムを利用することによってSPIペリフェラル部品を保護することができる。検討により、フラッシュメモリデバイスは、通常、書き込み保護ピンまたは入力(例えば、Write_Protectピン)の使用を通じて、フラッシュメモリデバイスのステータスレジスタを保護することができる。しかしながら、これらのフラッシュメモリデバイスの大部分は、クアッド読み出しコマンドについて有効にされるとき、またはクアッド読み出しコマンドと共に用いられるとき、この専用書き込み保護ピンを無効にする。したがって、本明細書に記載のセキュアなSPI通信の態様は、選択的なコマンドフィルタリングおよび/または選択的なデータフィルタリングを実施することによって、書き込み保護の複製を通じてフラッシュメモリデバイス保護を提供する。
【0011】
一般的に、SPIフラッシュデバイスのステータスレジスタまたは他のペリフェラルは、ブロック保護、セクタ保護、上/下範囲保護等のためにメモリの様々なセクションを保護またはロックするように構成可能な特定の保護ビットを含む。換言すれば、ステータスレジスタのこれらの保護ビットのうちの1つまたは複数をセットすることは、フラッシュメモリデバイスの様々な保護スキームに従ってメモリの予め定められた領域の操作を保護または阻止することと言える。このため、フラッシュメモリデバイスの保護スキームまたは保護定義は、特定のコマンドを用いることによってのみ変更することができ、このコマンドを通じてステータスレジスタへのアクセスが可能にされる。以前の技法による全てのコマンドのフィルタリングの代わりに、セキュアなSPI通信の態様は、ステータスレジスタにアクセスし、フラッシュメモリデバイスの保護状態(例えば、ステータスレジスタ書き込み等)を変更するのに有用なコマンドの選抜されたセットを保護することができる。したがって、セキュアなSPI通信の記載の態様が、ホストまたは別のバスマスターがこれらの保護されたコマンドを発行して保護状態を変更することを阻止する場合、コマンド発行者は保護状態を変更することができない。これを行うことにより、ホストまたは他のバスマスターは、フラッシュメモリデバイスのコンテンツをプログラムまたは消去することができない。態様において、読み出しコマンドは、依然として通常通り転送され、所望の場合、特定の領域を、内部のメールボックスを維持するように区分けすることができる。
【0012】
ステータスレジスタ書き込みに関して、セキュアなSPI通信の態様は、ステータスレジスタ書き込みコマンドを副次的影響のない値にフィルタリングする代わりに(例えば、読み出しコマンド等)、下流のSPIフラッシュデバイスへのステータスレジスタ書き込みコマンドのデータをフィルタリングすることができる。このため、セキュアなSPI通信モジュールは、全てのコマンドバイトが操作なしでホストからSPIフラッシュデバイスに通されることを可能にすることができる。セキュアなSPI通信モジュールが、コマンドバイトをステータスレジスタ書き込みコマンドとして決定または特定する場合(SPIフラッシュデバイスまたはベンダーが、書き込みステータスアクセスを特定するのに有用なプログラマブルリストを提供することができる)、コマンドのプログラムされた値をセキュアなSPI通信モジュールによって制御することができる。
【0013】
いくつかの態様において、SPIデバイスプログラム値は、選択レジスタおよび値レジスタを通じて維持することができる。一般的に、選択レジスタは、特定のデータビットが、ホストから通過を許可されるか、セキュアなSPI通信モジュールまたはSPIデバイスコントローラから強制されるかを制御する。値レジスタは、強制値が、選択ビットが何にセットされることを仮定しているかを制御することができる。例えば、選択レジスタおよび値レジスタが、「0011_0000(0x30)」にセットされた選択レジスタ、および「xx01_xxxx」にセットされた値レジスタとしてプログラムされていると仮定する。これは、ステータス書き込みコマンドが検出されるとき、ビット4および5(第4および第5のビット位置)が「1」および「0」に強制されるのに対し、コマンドの残りのビットは通過を許可されることを意味する。ステータス書き込みコマンドは、チップベンダー間で変動する場合があるため、何が書き込みステータスを表すかは、プログラム可能または構成可能であるが、必要とされるのは2~4つのわずかなエントリであり得る。
【0014】
ステータス書き込みコマンドに加えて、セキュアなSPI通信は、ペリフェラルデバイスの保護ビットの状態に影響を及ぼし得る、ホストまたはバスマスターによって発行される他のコマンドを変更または保護することができる。これは、リセットコマンドまたは他のベンダー固有のコマンドを含むことができる。これを行うために、セキュアなSPI通信の態様は、コマンドがシステムの接続先ペリフェラルによって受信、キャプチャまたは処理され得る前に、コマンドをサイレントにするかまたは変更する選択性フィルタリングを実施することができる。本開示全体を通じて説明されるように、セキュアなSPI通信モジュールまたはSPIコマンドフィルタは、コマンドの最後のビットが完全にキャプチャされる前に、SPIフラッシュデバイス等のペリフェラルデバイスのチップ選択ラインまたは信号(CSb)をデアサートすることができる。態様において、セキュアなSPI通信モジュールは、第8のクロックサイクルにおいて(例えば、キャプチャの前に)コマンドがフィルタリングされるべきであることを検出することができる。次に、セキュアなSPI通信モジュールは、チップ選択ラインを早期にデアサートし、最後のビット(例えば、第8のビット)のコマンドビットがペリフェラルデバイスによってキャプチャされないことを確実にする。代替的にまたはさらに、セキュアなSPI通信モジュールは、第7のビートまたはクロックサイクル後にペリフェラルへのSPIクロックラインをゲーティングまたはホールドして、ペリフェラルデバイスがフィルタリングされるコマンドの第8のビットをキャプチャすることを阻止することができる。いくつかの場合、これらの動作はタイミング依存であり、セキュアなSPI通信モジュールは、例えば、SPIクロック期間の半分以内で制御信号を生成する(例えば、そのゲーティングおよびフィルタリングを行う)ように作用することができる。例えば、25MHz~100MHzのSPIクロックを用いて、セキュアなSPI通信モジュールは、制御信号を生成するか、チップ選択ラインをトグルするか、またはSPIクロックを10~50ナノ秒以内でゲーティングして、記載したコマンドフィルタリングを完了させることができる。
【0015】
セキュアなSPI通信の態様において、コマンドフィルタは、柔軟性を提供するために1つまたは複数の方式で選択的なコマンドフィルタリングを実施するように構成可能またはプログラム可能であり得る。いくつかの場合、256個の可能なコマンドのコマンド空間における各コマンドは、例えばコマンド空間のための8個のレジスタを通じて、1ビットイネーブルを有することになる。セキュアなSPI通信モジュールは、受信したコマンドまたは受信したコマンドの一部分を用いて、テーブルへのインデックス付けを行い、コマンドが通過を許可されるかまたは許可されない(例えばフィルタリングされる)かを判断することができる。例えば、イネーブルビット制御は、コマンドが下流にペリフェラルデバイスまで通ることを許可されるかまたはフィルタリングされるかを示すかまたは制御する。いくつかの実施において、「1」のイネーブルビット値は、コマンドが通ることを許可されることを示し、「0」のイネーブルビット値は、コマンドがセキュアなSPI通信モジュールまたはコマンドフィルタによってフィルタリングされることを示す。動作をフィルタリングする前に、ホストのソフトウェアまたはファームウェアがフィルタリングテーブルを構成またはプログラムすることができる。
【0016】
コマンドフィルタリングを実施するセキュアなSPI通信モジュールでは、セキュアなSPI通信モジュールが、SPIフラッシュデバイスのステータスレジスタの操作を有効にするコマンドを単純にフィルタリング除去またはブロックすることができるため、SPIフラッシュデバイスのステータス保護は必要でない場合がある。このため、選択的なもしくは複雑度が低減されたコマンドフィルタリングおよび/またはステータスレジスタコマンドデータフィルタリングを有する利点は、より少ないコマンドまたは命令がフィルタリングされることである。換言すれば、フィルタリングされなくてはならない命令のセットは低減され(例えば、ステータスレジスタ書き込みに関係するコマンド)、残り時間にわたって、セキュアなSPI通信モジュールは、システムのホストがSPIフラッシュデバイスと直接通信することを可能にする。この結果、ファームウェアが、全てのコマンドペイロードをキャプチャし、これらのペイロードがSPIフラッシュデバイスまで下流に通されるべきか否かを判断する必要がないという点で、ファームウェアまたはセキュアなSPI通信モジュールの介入が少なくなる。代替的にまたはさらに、ホストまたはシステムソフトウェアは、コマンドまたはデータフィルタリングの説明された態様の任意の組み合わせを実施するようにセキュアなSPI通信モジュールを構成することができる。例えば、セキュアなSPI通信モジュールは、コマンドフィルタリングのみを実施する、デフォルトでコマンドフィルタリングを許可および/または拒否する、ステータス保護を用いたフィルタリングを拒否する、ステータス保護を用いたフィルタリングを許可する等を行うように構成することができる。本明細書に記載のこれらのおよび他の態様は、ホストまたはシステムソフトウェアが、コマンドフィルタリングおよび/またはA/B分割アクセスを実施するようにセキュアなSPI通信モジュールを設定または構成した後に、SPIフラッシュデバイス(例えば、SPIフラッシュチップ)の保護設定を任意に変更することができないことを確実にすることができる。したがって、下流のSPIフラッシュデバイスがその内部保護メカニズムに従って作用している限り、これらの態様は、セキュアなSPI通信が、従来技術より低い複雑度で、より効率的に実施されることを可能にする。
【0017】
様々な態様において、セキュアなSPI通信モジュールは、ホストおよびSPIフラッシュデバイス、ならびに任意の数の他のシステムペリフェラルブロックまたは部品を含むシステムのSPIインターコネクトに結合される。セキュアなSPI通信モジュールは、ホストプラットフォームからSPIフラッシュデバイスへのSPIトランザクションのスヌーピングまたは監視を含み、権限のないトラフィックが検出されたときに介入するための、コマンド制御スキームを実施することができる。コマンド制御スキームは、任意の有害な読み出し/書き込み要求または自己完結コマンド(例えば、チップ消去)をブロックするように意図される。これらの自己完結コマンドは、アドレスまたはペイロード等の他のデータが後続しないコマンドを含む場合がある。態様において、スキームは、本明細書に記載のSPIコマンドフィルタおよびSPIクロックコントローラ(例えば、クロックゲーティングセル)を用いることができる。一般的に、コマンドフィルタは、コマンドブロックリストもしくはテーブルに基づいて、到来するコマンドをブロックするか、またはフィルタは、許可されたコマンドリストに基づいて、権限のあるコマンドのみが通過することを可能にすることができる。コマンドブロックリストまたは許可されたコマンドリストは、いずれが用いられるかに依拠して、ソフトウェアとして、またはハードウェア回路部において実施することができる。態様において、コマンドをブロックするために、コマンドフィルタは、コマンド伝播中、第8のSPIクロックエッジの前に、または第8のSPIクロックエッジにおいてチップ選択ラインまたは信号ラインを変更する。
【0018】
同時に、コマンドフィルタは、ホストシステムがチップ選択信号を解放するまで、SPIフラッシュデバイスへのSPIクロックラインをゲーティングまたはホールドすることができる。SPIチップ選択ラインおよびSPIクロックが、近接して(例えば、同じクロックビートまたはサイクル内で)、または部分的に重複した形式で同時にトグルされ得ることに留意されたい。態様において、セキュアなSPI通信モジュールは、SPIクロックの伝播を制御するためのクロックゲーティングセルを含む。このため、クロックゲーティングセルは、ホストにおいて発生するSPIクロック信号を、SPIフラッシュデバイスに伝播しない場合があり、これはチップ選択ラインまたは信号におけるグリッチを阻止するのに効果的である。いくつかの場合、SPIクロックがゲーティングされていないとき、チップ選択ラインは、グリッチを除去するためにもう1つのクロックパルスを必要とする場合がある。換言すれば、クロック信号ゲーティングがない場合、コマンドフィルタは、権限のないコマンドをキャンセルするために、チップ選択信号を立ち上げるタイミングを逃す場合がある。このため、SPIクロックゲーティングを用いて、セキュアなSPI通信モジュールは、グリッチングなしで、権限のないコマンドがSPIフラッシュデバイスに完全に送信される前に、チップ選択ラインまたは信号をデアサートすることができ、SPIデバイスは、不完全なコマンドを、実行することなくキャンセルすることができる。
【0019】
本明細書に記載のセキュアなSPI通信のこれらのおよび他の態様は、セキュリティモジュールまたはコマンドフィルタの下流でメモリが攻撃され得ないこと、およびメモリへの任意の読み出しまたは書き込みが、攻撃者が変更することができない特定のアドレスに制限または制約されていることを確実にすることができる。以下の論考は、動作環境、例示的なシステムおよび構成要素、セキュアなSPI通信の例示的な実施、例示的な方法、および動作環境の構成要素を具現化することができるシステムオンチップ(SoC)について記載する。本開示の文脈において、単なる例として、動作環境が参照される。
【0020】
例示的な環境
図1は、セキュアなSPI通信および関連する通信インテグリティスキームの態様を実施することができる装置102を含む例示的な環境100を示す。装置102は任意の適切なデバイスとして実施することができ、そのうちのいくつかは、スマートフォン102-1、タブレットコンピュータ102-2、ラップトップコンピュータ102-3、ゲーミングコンソール102-4、デスクトップコンピュータ102-5、サーバコンピュータ102-6、ウェアラブルコンピューティングデバイス102-7(例えば、スマートウォッチ)、およびブロードバンドルータ102-8(例えば、モバイルホットスポット)として示される。示されていないが、装置102は、移動局(例えば、固定または移動STA)、モバイル通信デバイス、クライアントデバイス、ユーザ機器、携帯電話、エンターテイメントデバイス、モバイルゲームコンソール、パーソナルメディアデバイス、メディア再生デバイス、健康監視デバイス、ドローン、カメラ、無線インターネットアクセスおよびブラウジングが可能なインターネット家電、IoTデバイス、および/または、他のタイプの電子デバイスのうちの任意のものとして実施することもできる。装置102は、他の機能を提供するか、または構成要素もしくはインターフェイスを含んでもよいが、これらは明瞭さまたは視覚的簡潔さのために図1から省略されている。
【0021】
装置102は、1つまたは複数のプロセッサ106と、メモリ媒体またはストレージ媒体を含み得るコンピュータ可読媒体(CRM108)とを利用する集積回路104を備える。プロセッサ106は、(例えば、マルチコア中央処理ユニット(CPU)またはアプリケーションプロセッサ(AP)の)汎用プロセッサ、特定用途向け集積回路(ASIC)、グラフィック処理ユニット(GPU)、または装置102の他の構成要素が中に統合されたシステムオンチップ(SoC)として実施することができる。セキュアなSPI通信の態様において、プロセッサ106のうちの1つまたは複数は、本開示全体を通じて説明されるインテグリティ機能も含むことができる。
【0022】
CRM108は、リードオンリーメモリ(ROM)、プログラマブルROM(PROM)、ランダムアクセスメモリ(RAM)、ダイナミックRAM(DRAM)、スタティックRAM(SRAM)、またはフラッシュメモリ(例えば、SPIフラッシュデバイスまたはチップ)等の任意の適切なタイプのメモリ媒体またはストレージ媒体を含むことができる。この論考の文脈において、装置102のコンピュータ可読媒体108は、一時的信号または搬送波を含まない少なくとも1つのハードウェアベースのまたは物理ストレージデバイスとして実施される。装置102のアプリケーション、ファームウェアおよび/またはオペレーティングシステム(図示せず)は、プロセッサ106によって、本明細書に記載の様々な機能を提供するために実行することができるプロセッサ実行可能命令としてコンピュータ可読媒体108上で具現化することができる。コンピュータ可読媒体108は、装置102のアプリケーション、ファームウェアまたはオペレーティングシステムを通じてアクセス可能なユーザデータまたはユーザ媒体等のデバイスデータ110も記憶することができる。
【0023】
この例において、集積回路104はセキュリティ回路部112を含む。装置102、集積回路104またはセキュリティ回路部112は、セキュアな暗号プロセッサを実施することができる。セキュリティ回路部112は、1つまたは複数の回路部品114、例えば回路部品114-1~回路部品114-nを用いて実施することができる。回路部品114は、装置102の機能を可能にする任意の数の動作を実行するように編成することができる。図2において説明されるように、回路部品の例は、プロセッサおよび複数の機能部品、ペリフェラルおよび/またはIPブロックを含む。セキュリティ回路部112は、例えば、保護されたエンクレーブ、信頼されたチッププラットフォーム、ハードウェアベースのルートオブトラスト(RoT)チップ(例えば、シリコンRoT)等として実現することができる。セキュリティ回路部112が電子デバイスにどのようにまたはどこで組み込まれるかと無関係に、セキュリティ回路部112は、セキュアなSPI通信に関して説明したSPIバスまたはインターコネクトにわたって発行された攻撃または悪意のあるコマンド等の多くの異なるタイプの攻撃に対抗するかまたはこれを防止することができる。
【0024】
態様において、セキュリティ回路部112は、セキュリティ回路部112、RoT回路部、集積回路104および/または装置102のそれぞれの機能を提供または実施する回路部品114-1~114-nを含む。セキュアなSPI通信の態様を実施するために、回路部部品114は、セキュアなSPI通信モジュールの一部として実施することができる、SPIコマンドフィルタ116およびSPIクロックコントローラ118を含む。態様において、SPIコマンドフィルタ116は、装置102のホストと、装置102のフラッシュメモリモジュール(例えば、CRM108)とによって交換される通信を監視する。通常、SPIコマンドフィルタ116は、ホストによって送信される通信のそれぞれのコマンドを、フラッシュメモリモジュールが、いずれのコマンドを実行する権限がないかを示す情報と比較する。SPIコマンドフィルタ116は、比較に基づいて、それぞれのコマンドのうちの1つが、フラッシュメモリモジュールが実行する権限がないコマンド(例えば、ステータスレジスタ書き込みコマンド)のうちの1つであると判断する。判断に応答して、SPIコマンドフィルタ116は、フラッシュメモリモジュールのチップ選択ラインをデアサートするか、またはSPIクロックコントローラ118を用いてフラッシュメモリモジュールのSPIクロックラインをゲーティングもしくは一時停止することができる。これを行うことにより、SPIコマンドフィルタ116は、フラッシュメモリモジュールが、権限のないコマンドの少なくとも一部分を受信または処理することを阻止することができ、これにより、権限のないコマンドがフラッシュメモリモジュールのセキュリティを損なうことを阻止することができる。代替的にまたはさらに、SPIコマンドフィルタ116またはセキュアなSPI通信モジュールは、フラッシュメモリモジュールの第1の区画に記憶されたバイナリ画像のインテグリティを検証することができる。インテグリティの検証に失敗する場合、SPIコマンドフィルタ116は、SPIインターコネクトトランザクションのアドレスを変更して、ホストが、検証されていない、場合によってはセキュリティが脅かされたバイナリ画像を第1の区画からロードすることを阻止するために、別のバイナリ画像を、フラッシュメモリモジュールの第2の区画からロードさせることができる。これらはセキュアなSPI通信を可能にするのに有用なエンティティのいくつかの例にすぎず、その実施および使用は変動し、本開示全体にわたって記載される。
【0025】
示されるように、セキュリティ回路部112はインターコネクト120に結合され、インターコネクト120は、セキュリティ回路部の部品、ペリフェラル、および/または接続先をホストまたはホストインターフェイスに結合することができる。インターコネクト120は、例えば、様々な回路部品が通信することを可能にするバス、スイッチングファブリック、リンク、通信チャネルまたはバスネットワークを用いて実現することができる。いくつかの態様において、インターコネクトは、シリアルペリフェラルインターフェイス通信規格に従って実施されるSPIインターコネクトまたはバスを含む。いくつかの実施において、SPIインターコネクトは、チップ選択ライン、クロックライン、および4つのI/Oライン(例えば、S[3:0]またはD[3:0])を含む。回路要素の各々は、インターコネクト120に直接または間接的に結合することができる。インターコネクト120は、装置102のデータポートまたはインターフェイスと通信し、回路部品が他のデータベースまたはデータネットワークと通信することを可能にすることができる。
【0026】
装置102は、ディスプレイ122、送受信機124、入力/出力ポート(I/Oポート126)および/またはセンサ128も含むことができる。ディスプレイ122は、プロセッサ106(例えば、グラフィック処理ユニット(GPU))のうちの1つに作動的に結合され、装置102のオペレーティングシステムまたはアプリケーションのそれぞれのインターフェイスをグラフィックで提示するように構成することができる。送受信機124は、任意の適切な通信プロトコルに従って、有線または無線ネットワークを介してデータ(例えば、デバイスデータ110)の有線または無線通信を可能にするように構成することができる。装置102のI/Oポート126は、電子デバイスを様々な部品、ペリフェラル、またはキーボード、マイクロフォンもしくはカメラ等のアクセサリに結合するのに有用な、ユニバーサルシリアルバス(USB)ポート、同軸ケーブルポートおよび他のシリアルまたはパラレルコネクタ(内部コネクタを含む)を含むことができる。
【0027】
装置102は、装置102が動作する環境の様々な属性、変動、刺激または特性を装置102が感知することを可能にするセンサ128も備える。例えば、センサ128は様々な運動センサ、周囲光センサ、音響センサ、容量センサ、赤外線センサ、温度センサ、レーダセンサまたは磁気センサを含むことができる。代替的にまたはさらに、センサ128は、タッチ感知、ジェスチャ感知または近接性感知等を通じて装置102のユーザとインタラクトするかまたはユーザから入力を受信することを可能にすることができる。
【0028】
例示的な回路部品
図2は、200において、セキュアなSPI通信の態様をサポートするように実施することができるプロセッサおよび複数の回路部品を含む例示的なセキュリティ回路部112を示す。示されるように、セキュリティ回路部112は、インターコネクト120に結合されたプロセッサ106を備える。プロセッサ106、複数のメモリ、および複数の他の回路部品114の各々は、インターコネクト120に直接または間接的に結合することができる。態様において、図2の構成要素は、ルートオブトラストおよび/または他のセキュアな暗号機能を実施するセキュアなコンピューティングプラットフォームまたはセキュアなシステムオンチップとして実現することができる。代替的にまたはさらに、図2の構成要素は、システムの構成要素またはIPブロックを作動的に結合するファブリックとして実施することができるインターコネクト120によって結合されたシステムの1つまたは複数のIC、ペリフェラルブロックまたはIPブロックとして実施することができる。
【0029】
態様において、インターコネクト120は、セキュアなSPI通信モジュールの一部として実施することができる、SPIコマンドフィルタ116およびSPIクロックコントローラ118を含むかまたは結合することができる。態様において、SPIコマンドフィルタ116は、システムのホストと、システムのSPIメモリデバイスとによって交換される通信を監視する。通常、SPIコマンドフィルタ116は、ホストによって送信される通信のそれぞれのコマンドを、フラッシュメモリモジュールがいずれのコマンドを実行する権限がないかを示す情報と比較する。SPIコマンドフィルタ116は、比較に基づいて、それぞれのコマンドのうちの1つが、フラッシュメモリモジュールが実行する権限がないコマンド(例えば、ステータスレジスタ書き込みコマンド)のうちの1つであると判断する。判断に応答して、SPIコマンドフィルタ116は、フラッシュメモリモジュールのチップ選択ラインをデアサートするか、またはSPIクロックコントローラ118を用いてフラッシュメモリモジュールのSPIクロックラインをゲーティングもしくは一時停止することができる。これらは、SPIコマンドフィルタ116およびSPIクロックコントローラ118のいくつかの例にすぎず、その実施および使用は変動し、図3図5を参照して、および本開示全体を通じて説明される。
【0030】
プロセッサ106は、インターコネクト120を通じて回路部品114と結合されてもよく、および/または他の部品もしくはインターフェイスと直接結合されてもよい。図2に示すように、システムは、システムのホストとして機能することができるプロセッサ106とのインタラクションを可能にするインターコネクト120に結合された複数の回路部品114を含むことができる。この例において、回路部品114は、レジスタファイル202および様々なメモリ204~210を含む。回路部品114は、任意の適切な構成の1つまたは複数のメモリ(例えば、CRM108)を含むことができ、ROM204、SRAM206およびSPIフラッシュメモリ208を含むことができる。この例において、SPIコマンドフィルタ116および/またはSPIクロックコントローラ118は、インターコネクト120とSPIフラッシュメモリ208との間で実施することができる。
【0031】
態様において、SPIフラッシュメモリ208は、制御ステータスレジスタ(CSR)と、システムまたはホストの情報を記憶するように構成されたフラッシュ媒体とを含む。SPIフラッシュデバイスのステータスレジスタまたは他のメモリペリフェラルは、ブロック保護、セクタ保護、上/下範囲保護等のためにメモリの様々なセクションを保護またはロックするように構成可能な特定の保護ビットを含むことができる。態様において、SPIコマンドフィルタ116およびSPIクロックコントローラ118は、権限のないコマンドがSPIフラッシュメモリ208によって消費され、SPIフラッシュメモリ208のCRSの設定を変更することを阻止することができる。いくつかの場合、SPIフラッシュメモリ208は、例えばクアッドモードアクセスが有効にされているとき、書き込み保護入力ノードを含まないか、またはペリフェラルブロックの書き込み保護入力ノードが無効にされている。示されていないが、回路部品114は、他のメモリ(例えば、ワンタイムプログラマブルまたはDRAMメモリ)、および/または追加のシリアルペリフェラルインターフェイス(SPI)またはUSBに結合されたメモリ等の他の部品を介して結合されたメモリを含むことができる。
【0032】
図2に示すように、回路部品114は、アラートハンドラ210、高度暗号化標準(AES)ユニット(AESユニット212)、ハッシュベースのメッセージ認証コード(HMAC)エンジン(HMACエンジン214)、およびシリアルペリフェラルインターフェイス(SPI)デバイス(SPIデバイス216)も含むことができる。ここで、SPIコマンドフィルタ116および/またはSPIクロックコントローラ118は、インターコネクト120とSPIデバイス216との間で実施することができ、これにより、本明細書に記載のようにSPIデバイス216が権限のないコマンドを消費することを阻止することができることに留意されたい。回路部品114は、汎用非同期受信機/送信機(UART)ユニット(UARTユニット218)、汎用入力/出力(GPIO)インターフェイス(GPIOインターフェイス220)、ピンマルチプレクサ(ピンmux222)およびパッドコントローラ224も含むことができる。複数の回路部品114は、乱数発生器(RNG226)をさらに含むことができ、このRNG226から、他の部品が、認証トークンとして用いるための高いエントロピー値およびタイマ228(例えば、ウォッチドッグタイマ)を得ることができる。メモリおよび他の部品114の或る特定の例が図2に示されるかまたは本明細書に記載されているが、セキュリティ回路部112の所与の実施は、プロセッサ、コントローラ、メモリ、モジュールまたはペリフェラルデバイスのより多くの、より少ないおよび/または異なるインスタンスを、その複製を含めて含むことができる。
【0033】
示される回路部品は、1つまたは複数のクロック信号に基づいて同期して動作することができる。図2には示されていないが、セキュリティ回路部112は、クロック信号を発生させるための少なくとも1つのクロック発生器を含むことができるか、または1つもしくは複数の部品を互いに独立して、複数の部品を共同で、またはICチップ全体をリセットするためのリセット回路部を含むことができる。代替的に、セキュリティ回路部112は、セキュリティ回路部112の外部のソースから少なくとも1つのクロック信号またはリセット信号を受信してもよく、このソースは別個のチップ上にあってもなくてもよい。1つまたは複数の別個の部品114は、それぞれの個々のクロックドメインにおいて動作することができる。例えば、回路部品は、それぞれの部品にローカルなクロックに対し同期させることができる。異なるクロックドメインにおける部品は、互いに非同期で動作または通信することができる。
【0034】
例示的な構成要素の例示的な実施が以下に説明される。プロセッサ106は、セキュリティ回路部112の「主要」、「中央」または「コア」プロセッサとして実現することができ、このプロセッサを通じてホストまたはバスコントローラの機能が実施される。プロセッサ106は、単なる例として、マルチステージパイプラインを有する32ビットのインオーダー縮小命令セットコンピューティング(RISC)コアを用いて実施することができる。例えば、RISC-V機能を用いて、プロセッサは、M(マシン)およびU(ユーザ)モードを実施することができる。リセットピン(図示せず)を(例えば、アクティブローリセットピンのデアサーションを通じて)活性化することにより、プロセッサ106がリセットを終了し、リセットベクトルにおいてコードの実行を開始する。リセットベクトルは、ROM204において開始することができる。ROM204は、埋め込まれたフラッシュまたはシステムの任意のフラッシュメモリ内のコードを、そこにジャンプする前に妥当性確認する。換言すれば、コードは、リセットが解放される前にフラッシュ内にインスタンス化されていることが予期される。いくつかの場合、セキュリティ回路部112全体にわたるリセットは、様々な回路部品間で相互運用性をサポートするために、移植性の仕様に関して非同期アクティブローにすることができる。リセットは、アラートハンドラ210によってセキュリティ対策として、ウォッチドッグタイマによって、等により生成することができる。リセット信号は、メモリのうちの1つまたは他の部品114のうちの1つ等の他の回路部品に送信することもできる。
【0035】
プロセッサ106には、デバッグモジュール230(DM)および割り込みコントローラ232(ItC)が結合され、そのうちのいずれも移植可能にすることができる。デバッグモジュール230はプロセッサ106にデバッグアクセスを提供する。ICの或る特定のピンとインターフェイスすることによって、デバッグモジュール230におけるロジックが、プロセッサ106がデバッグモードに入ることを可能にし、コードを(例えば、命令のエミュレートによって)デバイスにまたはメモリに注入する機能を提供する。割り込みコントローラ232は、プロセッサ106に近接して配設することができる。割り込みコントローラ232は、セキュリティ回路部112内からの割り込みソースのベクトルを受理することができる。割り込みコントローラ232は、割り込みを処理のためにプロセッサ106に転送する前に、割り込みにレベルおよび優先度を割り当てることもできる。
【0036】
プロセッサ106は、任意の所望のレベルの性能を提供するかまたは任意の内部回路部品を含むことができる。例えば、プロセッサ106は、少なくとも1つの算術論理ユニット(ALU)(例えば、取得された条件分岐においてレイテンシのサイクルを除去するための分岐ターゲットを計算するための「追加の」ALUを含む)、レジスタファイル、制御ユニットおよび入力/出力(I/O)ユニット、ならびにマルチパイプラインステージを含むことができる。マルチパイプラインステージを用いて、パイプラインは、レジスタ書き戻しを実行し、ロードおよびストアからのレイテンシのサイクルを低減し、パイプラインのストールを阻止することができる。この場合、ロードまたはストアに対する応答はリクエスト後のサイクルで入手可能である。プロセッサ106は、単一サイクル乗算器を実施するか、またはストアに対する誤った応答に対するインプリサイス例外(imprecise exeption)を生成することができ、これにより、プロセッサは、応答を待機することなくストアを越えて実行を継続することができる。示されていないが、プロセッサ106は特に、またはセキュリティ回路部112は一般的に、命令のための単一サイクルアクセス時間を提供するための命令キャッシュを含むことができる。
【0037】
ALUは、受信データに対し算術的演算および論理演算を行うように構成することができる。図3Aおよび図3Bを参照してさらに説明されるレジスタファイル(例えば、レジスタファイル202)は、プログラムまたは関数処理中の迅速なデータアクセスのために構成された高速の半一時的メモリとしての役割を果たすプロセッサレジスタ(例えば、制御レジスタ)のアレイとすることができる。レジスタファイルは、プロセッサ106のALUに密に結合することができる。データへのアクセスをさらに容易にするために、レジスタファイルは、ALUおよび/または実行ユニットが単一のサイクルで複数のオペランドを同時に索出することを可能にするための複数の読み出しポートまたは複数の書き込みポートを含むことができる。レジスタファイルは、データのビットの読み出しおよび書き込みを加速するために、フリップフロップから形成することができる。制御ユニットは、システム全体を通じてデータのフローを制御するように構成することができる。I/Oユニットは、デバイスまたはセキュリティ回路部112の他の構成要素と作動的にインターフェイスされたポートを含むことができる。プロセッサ106、回路部品114、SPIコマンドフィルタ116、SPIクロックコントローラ118またはセキュアなSPI通信モジュールの更なる態様が、図3図9を参照して、および本開示全体を通じて説明される。
【0038】
図3は、300において、1つまたは複数の態様による、SPIコマンドフィルタリングを実施するシステム構成要素の例示的な構成を示す。図3の例示的なインタポーザおよび/または他の構成要素は、本開示全体を通じて説明される任意の他の構成要素、アーキテクチャ、エンティティまたはシステムに関連付けて実施することができる。一般的に、セキュアなSPI通信モジュール302(例えば、RoT回路のSPIフィルタ)は、インタポーザ304において実施されるか、またはホストシステム306と、SPIフラッシュデバイス308等の下流のペリフェラルとの間のSPIベースのインターコネクトに作動的に関連付けられる。この例において、セキュアなSPI通信モジュール302は、実施され得るかまたはクロックゲーティングセル(図示せず)を含むことができる、SPIコマンドフィルタ116(またはSPIコマンド検出器)およびSPIクロックコントローラ118のインスタンスを含む。
【0039】
態様において、ホストシステム306とSPIフラッシュデバイス308との間のSPIインターフェイスは、SPIクロックライン310(SCK310)、SPIチップ選択ライン312(/CS312)およびシリアルデータライン314(S[3:0]314)を含むが、他のインターコネクトまたはファブリック構成がセキュアなSPI通信の態様に関連して実施されてもよい。いくつかの場合、インタポーザ304は、ホストシステム306とSPIフラッシュデバイス308との間で交換される通信のコマンドを監視するように構成された、シリコンRoT回路または他のセキュリティ回路部の一部として実施することができる。図3に示すように、セキュアなSPI通信モジュール302またはインタポーザ304は、SPIコマンドフィルタ116およびSPIクロックコントローラ118を含むことができる。態様において、SPIコマンドフィルタは、SPIインターフェイスをSPIフラッシュデバイス308までトラバースしてコマンドおよびオペコードを監視するために、シリアルデータライン314へのアクセスを有する。SPIコマンドフィルタ116は、コマンドフィルタリングされた信号316(フィルタリング済み316)を、チップ選択ライン312に結合された論理ゲート318または論理回路部に提供するための出力を含むことができる。いくつかの場合、論理ゲート318は、排他ORゲート、ORゲート、ANDゲート、マルチプレクサ、論理ゲートの組み合わせ、または任意の他の適切な論理を含む。一般的に、コマンドフィルタリングされた信号ラインの状態を変更することによって、SPIコマンドフィルタは、チップ選択ライン312の状態を変更(例えば、デアサート)して、SPIフラッシュデバイス308が、SPIインターフェイスのデータライン312を介して通信されたコマンドまたはオペコードを受信、消費または処理することを阻止することができる。代替的にまたはさらに、SPIコマンドフィルタ116は、SPIクロックコントローラ118にクロックイネーブル信号320を提供するための出力を含むことができる。権限のないコマンドが検出されると、SPIコマンドフィルタ116は、クロックイネーブルライン320の状態を変更して、SPIクロックコントローラ118に、SPIフラッシュデバイス308まで伝播するSPIクロック310をゲーティングさせることができる。
【0040】
図3の文脈において、SPIコマンドフィルタ116は、ホストシステム306とSPIフラッシュデバイス308との間で交換される通信を監視またはスヌーピングすることができる。SPIコマンドフィルタ116は、ホストシステムによって送信される通信のそれぞれのコマンドまたはオペコードを、SPIフラッシュデバイスがいずれのコマンドを実行する権限があるかまたは権限がないかを示す情報(例えば、コマンドの包含テーブルまたは除外テーブル)と比較することができる。通信のコマンドに権限がある場合、SPIコマンドフィルタ116は、コマンドまたはオペコードを下流へSPIフラッシュデバイス306まで通す。代替的に、SPIコマンドフィルタ116は、オペコードまたはコマンドの第8のビット等において、コマンドまたはオペコードがSPIフラッシュデバイス308による実行の権限がないと判断してもよい。判断に応答して、SPIコマンドフィルタ116は、論理ゲート318を用いてチップ選択ライン312をデアサートし、SPIクロックコントローラ118を用いてSPIフラッシュデバイスへのSPIクロック信号310をゲーティングする。一般的に、下流のSPIフラッシュデバイスへのクロック選択ライン312が、コマンドまたはオペコードの第8のビットまたはビートの前にデアサートされる場合、SPIフラッシュデバイス308は、コマンドまたはその一部分を破棄する。いくつかの場合、SPIコマンドフィルタ116がチップ選択ライン312のみをトグルする場合、チップ選択ラインは、オペコードの第8のビットからの組み合わせ論理等に起因してグリッチが生じやすい。一般的に、第8のコードがSPIフラッシュデバイス308によって既に受信されているときでは、遅すぎる場合があるため、チップ選択ライン312の制御は、登録される出力にグリッチがないようにするべきである。このグリッチの課題に対処するために、SPIコマンドフィルタ116は、グリッチを生じずにチップ選択ライン312を制御またはトグルするようにSPIクロック310をゲーティングすることができ、これにより、SPIフラッシュデバイス308が、オペコードまたはコマンドの第8のビットを受信または消費することを阻止されることを確実にすることができる。
【0041】
図4は、400において、セキュアなSPI通信の態様を実施するためのクロックゲーティングおよびコマンドフィルタリング機能を含む例示的なシステムを示す。図3の例示的なルートオブトラスト回路および/または他の構成要素は、本開示全体を通じて説明される任意の他の構成要素、アーキテクチャ、エンティティまたはシステムに関連付けて実施することができる。例示的なシステム400は、ホストシステム306およびSPIフラッシュデバイス308間にまたはそれらと結合されたルートオブトラスト回路402を含む。一般的に、SPIコマンドフィルタ116および/またはセキュアなSPI通信モジュール302は、本明細書に記載のようにセキュアなSPIインターフェイスの態様を実施することができる。SPIコマンドフィルタ116は、セキュアなシリアルペリフェラルインターフェイス(SPI)デバイスパススルーモジュール(例えば、セキュアなSPI通信モジュール302)として実施することができる。例として、このセキュアなSPIデバイスパススルーモジュールは、ホストシステムからSPIフラッシュデバイスへのSPIトランザクションをスヌーピングし、権限のないトラフィックに介入するための機能を含むことができる。このモジュールは、任意の有害な読み出し/書き込み要求をブロックし、および/または真正のバイナリ画像がホストシステムに返されることを保証するために実施することができる。
【0042】
この例示的なシステムにおいて、ルートオブトラスト回路402は、図3を参照して説明したものと類似してまたは異なって実施され得るSPIクロック310、SPIチップ選択ライン312およびシリアルデータライン314を含むSPIバス404と作動的に結合される。クロックゲートセル406(クロックゲート406)は、システムホストまたはクロック回路からSPIクロック310を受信し、このSPIクロック310をSPIフラッシュデバイス308に提供する。態様において、SPIコマンドフィルタ116はSPIバス404を監視する。SPIバス404は、SPIフラッシュデバイス308のためのチップ選択ビット408を含む。図4に示すように、SPIコマンドフィルタ116は、SPIフラッシュデバイス308へのチップ選択ビット408の適用または伝播をゲーティングするゲーティング論理へのチップ選択ビットディセーブル信号410(CSb_disable410)を選択的に生成することができる。
【0043】
セキュアなSPI通信の態様において、SPIコマンドまたはオペコードの少なくともいくつかのビット(例えば、8つのビットのうちの7つ)を、SPIクロック310に基づいてSPIフラッシュデバイス308にクロッキングすることができる。いくつかの場合、SPIコマンドフィルタ116は、SPIコマンドフィルタ116がコマンドの8つ全てのビットを受信するまで、コマンドに権限があるかまたは権限がないかを判断することができない場合がある。SPIコマンドフィルタ116は、コマンドの第8のビットに対応するSPIクロック310クロックパルスの初期部分においてこの第8のビットを決定し、次に、コマンドに権限があるかまたは権限がないかを判断することができる。例えば、SPIコマンドフィルタは、完全なコマンドまたはオペコードを、いずれのコマンドに、SPIフラッシュデバイス308による実行のための権限があるかを示す情報のテーブルと比較することができる。コマンドに権限がないという判断に応答して、SPIコマンドフィルタ116は、コマンドの第8のビットがSPIフラッシュデバイス308によって登録または消費されることを阻止するために、SPIフラッシュデバイス308へのSPIクロック信号310を中断または遅延するようにクロックゲート406のクロックイネーブル信号をデアサートする。代替的にまたはさらに、コマンドに権限がないという判断に応答して、SPIコマンドフィルタ116は、ゲーティング論理へのチップ選択ビットディセーブル信号410をアサートし、それによって、ゲーティング論理に、SPIフラッシュデバイス308へのSPIチップ選択信号312をデアサートさせ、デバイスが権限のないコマンドの1つまたは複数のビットを消費することを阻止することができる。これを行うことにより、SPIコマンドフィルタ116は、権限のないコマンドがSPIフラッシュデバイス内に達するかまたはそこで登録されることを阻止し、これにより権限がないSPIオペコードの実行を阻止することができる。
【0044】
一般的に、SPIコマンドフィルタ116またはセキュアなSPI通信モジュール302は、任意の下流コマンドを、それらが許可されていない場合にブロックし、および/または読み出しコマンドのアドレスフィールドを、A/B区画もしくはバイナリ画像スキームをサポートするように交換することができる。本明細書に記載されるように、SPIコマンドフィルタ116が、到来するコマンドが、システムのソフトウェアまたはハードウェアが構成した(例えばCSRコマンドのための)ブロックリスト内にある場合、これらのコマンドをブロックするように構成することができる。SPIコマンドフィルタ116がコマンドをブロックするとき、フィルタは、SPIクロック310の第8のビートまたはサイクルのエッジにおいてチップ選択ラインまたはチップ選択ビットを変更またはトグルし、ホストシステムがそのチップ選択ラインを解放するまで、SPIクロック310を低にゲーティングまたはホールドすることができる(例えば、SPIコマンドフィルタ116から上流)。態様において、SPIコマンドフィルタ116は、SPIクロック310を、取り付けられたSPIフラッシュデバイス308に伝播させないようにクロックゲートセル406を用い、これにより、チップ選択ラインにおけるグリッチを低減または阻止し、SPIフラッシュデバイスの秩序正しい動作を確実にすることができる。SPIコマンドフィルタ116がSPIクロックライン310をゲーティングしないとき、チップ選択ライン312は、任意のグリッチを解消するために1つまたは複数のクロックサイクルを必要とする場合がある。いくつかの場合、このタイミング遅延により、SPIコマンドフィルタ116は、チップ消去コマンド等の自己完結コマンドをキャンセルするために、チップ選択ラインを立ち上げるかまたは変更する正しいタイミングを逃す場合がある。このため、SPIコマンドフィルタ116は、SPIチップ選択ラインをデアサートし、SPIクロックラインをゲーティングして、SPIチップ選択ラインのグリッチを阻止し、チップ選択ライントグルのタイミングが、SPIフラッシュデバイスによって自己完結コマンドが消費されるのを阻止するのに効果的であることを確実にすることができる。さらに、SPIチップ選択ラインのデアサートが機能することを可能にするために、チップ選択ラインを制御するSPIコマンドフィルタの文脈において、SPI通信に関するいくつかの仮定を行うことができる。これらの仮定は、送信動作の最中のSPIチップ選択ラインのデアサートが、フラッシュデバイスのI/Oの品質を劣化させないこと、および、チップ選択ラインが第8のSPIクロックサイクルまたはビートの前にデアサートされる場合、SPIフラッシュデバイス308が、コマンドの意図される挙動に関して何ら仮定を行うことなくコマンドまたはプロセスをキャンセルすることを含むことができる。例えば、SPIフラッシュデバイス308は、SPIフラッシュデバイスチップの消去の準備をするために、第7のSPIクロックサイクルまたはビートにおいてチャージポンプにチャージしない場合がある。ホスト対SPIデバイスのアクセスの文脈において説明したが、本明細書に記載の態様は、SPIフラッシュによって発行される権限のないペイロードまたはデータがホストデバイスに達することを阻止するために、SPIデバイス対ホストのアクセスにも適用することができる。
【0045】
セキュアなSPI通信モジュール302は、ソフトウェアが、SPIコマンドの後にデータの最初の32ビートについて、下流デバイスへのSPIデータライン0を交換するようにこのモジュールを構成することができるアドレス操作を実施することもできる。これは、例として、デュアルIQおよびクアッドIQコマンドを除いて、読み出しコマンドであるコマンドについてサポートすることができる。一般的に、SPIデバイスは、このアドレス操作特徴をサポートするための2つのプログラム可能CSRを提供することができる。態様において、これらのレジスタは、マスクレジスタと、下流デバイスに送信するためのデータを保持または記憶するデータレジスタとを含む。マスクレジスタは、交換されるアドレスビットのうちの1つまたは複数を示すようにホストまたはセキュアなSPI通信モジュール302によってセットすることができる。アドレスビット位置に対応するマスクビットが1である場合、下流デバイスに転送される値は、ホストシステムからの値ではなく、データレジスタからの値とすることができる。態様において、一方または双方のレジスタが32ビットレジスタとして実施される。SPIフラッシュデバイスの4Bアドレスモードが有効にされていない場合、レジスタからの下位24ビットをアドレス操作のために用いることができる。これらのアドレス操作特徴の使用は変動する場合がある。1つの目的は、A/Bバイナリ画像にホストアクセスを提供することである。態様において、システムのルートオブトラスト回路402または他のRoTは、SPIフラッシュデバイス308によって記憶されたバイナリ画像を検証することができる。このバイナリ画像が悪意のある攻撃または信頼性の問題によって操作された場合、RoT回路部における論理が、ホストシステムの要求をSPIフラッシュデバイスの他の区画(例えば、フラッシュの他方の半分または分割区画)にリダイレクトするようにレジスタをセットすることができる。
【0046】
図5は、500において、セキュアなSPI通信の態様を実施することができるSPI通信シグナリングの例示的なタイミング図を示す。タイミング図500は、セキュアなSPI通信の1つまたは複数の態様による信号のそれぞれのタイミングおよび遷移を示す。本明細書に記載のように、様々なSPIインターコネクト信号を、SPIコマンドフィルタ116および/またはセキュアなSPI通信モジュールが受信することができ、次にこれらの信号を、SPIフラッシュデバイス等の下流のSPIペリフェラルまで通すか、ゲーティングするかまたは伝播することができる。この例において、SPIチップ選択信号(CSb_in502)は、ホストシステム306からセキュアなSPI通信モジュール302までSPIチップ選択ライン上を進むことができ、SPIクロック信号504(SCK_in504)は、ホストシステム306からSPIクロックライン上を進むことができ、SPI I/Oライン506(Io[0]_i506)は、ホストシステム306からセキュアなSPI通信モジュール302まで、SPIインターコネクトのシリアルデータライン上を進むことができる。態様において、フィルタ信号508(Filter508)は、SPIコマンドフィルタ116によって権限があるコマンドが検出または決定されるときを示す信号または割り込みを表すことができる。権限のないコマンドの検出または決定に応答して、SPIコマンドフィルタ116は、本明細書に記載の態様に従って、1つまたは複数の他の信号を生成、変更またはトグルすることができる。この例において、SPIコマンドフィルタはコマンドフィルタリングされた信号510(Filtered510)を立ち上げ、これはSPIクロックに結合されたSPIチップ選択ライン論理および/またはクロックゲーティングセルまで伝播することができる。ここで、SPIクロック出力信号512(SCK_out512)は、SPIフラッシュデバイスのクロック入力へのクロックゲーティングセルの出力を表すことができ、チップ選択出力信号514(CSb_out514)は、SPIフラッシュデバイスのチップ選択入力へのチップ選択ライン論理の出力を表すことができる。
【0047】
例として、コマンドがホストシステム306からSPIデバイス308へのIO[0]_i506信号として送信されるとき、CSb_in信号502は、ホストシステム306のSPIインターフェイスによってアサートされ、送信の持続時間にわたってアサートされたままである。CSb_in信号502は、フィルタリングされた信号510によってアサートされてラッチされ、SPIフラッシュデバイス308まで通される。このようにしてチップ選択信号(例えば、CSb_in信号502およびCSb_out信号514)をラッチすることにより、必要な場合、グリッチなしでのクリーンなチップ選択アサーションおよび後続の操作を保証することができる。この機能がなく、チップ選択ラインにおいてグリッチが生じる場合、SPIフラッシュデバイスは、SPIフラッシュデバイス308のコンテンツに損傷を与えるかまたはこれを破壊するリセットを含む場合がある未知の挙動を示す場合がある。態様において、コマンドまたはオペコードのビット(例えば、8ビット)の各々が、SCK_out512信号がSCK_in504信号であることに基づいてSPIデバイス308にクロックされる。この例において、コマンドフィルタ116は、コマンドフィルタ116がコマンドの8つ全てのビットを受信するまで、コマンドに権限があるかまたは権限がないかを判断しない場合がある。コマンドフィルタ116が、516において、コマンドの第8のビットに対応するSCK_in502クロックパルスの初期部分においてこの第8のビットを決定し、コマンドが権限がないコマンドであると判断する(例えば、コマンドをコマンドブロックリストと比較する)とき、コマンドフィルタ116はコマンドフィルタリングを実施する。この例において、SPIコマンドフィルタ116は、518において、フィルタリングされたコマンド信号510をアサートし、これによりひいては、CSb_out514信号をアサートまたはデアサート(SPIフラッシュピンの極性構成に依拠する)することができる。SPIコマンドフィルタ116はまた、クロックゲーティングセルのクロックイネーブルをデアサートして、SPIフラッシュデバイスへのSCK_out512信号を中断または遅延させる。これを行うことにより、SPIコマンドフィルタ116は、コマンドまたはオペコードの第8のビットがSPIフラッシュデバイス308によって登録または消費されることを阻止することができる。さらに、クロックをゲーティングし、チップ選択信号をデアサートすることによって、SPIコマンドフィルタ116は、チップ選択ラインのグリッチを回避することができ、これにより、SPIフラッシュデバイス308が任意の不正確なまたは権限のないコマンドを受信または解釈実行することを阻止することができる。この例は、ホストシステム306によってSPIデバイス308にコマンドが送信された事例により実施されたが、同じ論理を用いて逆の用途を実施することができ、すなわち、SPIデバイス308が、権限のないペイロードまたはデータをホストシステム306に送信した場合、この実施により、ホストがこの例におけるように権限のない通信を消費することを阻止することになる。
【0048】
例示的な方法
方法600~800は、実行することができるが、必ずしも、それぞれのブロックによる動作を実行するために示される順序または組み合わせに限定されない行動または動作を示すブロックのそれぞれのセットとして示される。さらに、動作のうちの1つまたは複数のうちの任意のものを繰り返すか、組み合わせるか、再編成するか、またはリンク付けして、広範にわたる追加のおよび/または代替の方法を提供することができる。記載の技法は、1つのシステムまたはデバイスに対し動作する1つのエンティティまたは複数のエンティティによる実行に限定されない。態様において、方法600~800の動作または行動は、プロセッサ、セキュリティ回路部部品、メモリ、セキュアなSPI通信モジュール、SPIコマンドフィルタ、SPIクロック制御部、またはセキュアなSPI通信を実施するように構成された他のエンティティによって実行または管理される。明確にするために、方法は、図1の要素、および/または、図2図5および図9を参照して説明したエンティティ、構成要素または構成を参照して説明される。
【0049】
図6は、1つまたは複数の態様によればホストまたはSPIインターコネクトに作動的に関連付けられたSPIコマンドフィルタ116またはセキュアなSPI通信モジュールによって実施することができるセキュアなSPI通信のための例示的な方法600を示す。様々な態様において、SPIコマンドフィルタ116またはセキュアなSPI通信モジュールは、下流コマンドに権限がないかまたは許可されていない場合に、これらの下流コマンドが1つまたは複数のペリフェラルブロック(例えば、フラッシュメモリデバイス)に達することをブロックするための方法600の動作を実施することができる。
【0050】
602において、SPIコマンドフィルタは、システムのホストと、システムのペリフェラルブロックとの間でSPIインターコネクトを介して交換される通信を監視する。例えば、SPIコマンドフィルタは、シリアルペリフェラルインターフェイスインターコネクトまたはバスのデータラインをスヌーピングまたは監視して、SPIインターコネクトを介して通信されているSPI通信のコマンドまたはオペコードのビットを得ることができる。いくつかの場合、コマンドはシステムホストからSPIフラッシュデバイスまで送信される。
【0051】
604において、SPIコマンドフィルタは、通信のそれぞれのコマンドを、ペリフェラルブロックが、いずれのコマンドを実行する権限がないかを示す情報と比較する。いくつかの場合、SPIコマンドフィルタは、受信したコマンドまたは受信したコマンドの一部分を用いて、テーブルにインデックス付けし、コマンドが通過を許可されるかまたは許可されない(例えばフィルタリングされる)かを判断する。例えば、イネーブルビット制御は、コマンドが下流にペリフェラルデバイスまで通ることを許可されるかまたはフィルタリングされるかを示すかまたは制御する。いくつかの実施において、「1」のイネーブルビット値は、コマンドが通ることを許可されることを示し、「0」のイネーブルビット値は、コマンドがセキュアなSPI通信モジュールまたはコマンドフィルタによってフィルタリングされることを示す。
【0052】
606において、SPIコマンドフィルタは、比較に基づいて、それぞれのコマンドのうちの1つが、ペリフェラルブロックが実行する権限がないコマンドのうちの1つであると判断する。換言すれば、SPIコマンドフィルタは、SPIインターコネクト上でペリフェラルブロックに伝播する許可されていないまたは権限のないコマンドを検出する。SPIコマンドフィルタは、コマンドまたは対応するオペコードの第8のビット等における部分的または完全なコマンドに基づいてコマンドに権限がないと判断することができる。
【0053】
608において、SPIコマンドフィルタは、ペリフェラルブロックが実行する権限がないそれぞれのコマンドの少なくとも一部分をペリフェラルブロックが受信することを阻止する。態様において、SPIコマンドフィルタは、SPIインターコネクトからペリフェラルブロックへのチップ選択ラインまたはクロックラインの状態を変更する。いくつかの場合、SPIコマンドフィルタは、SPIペリフェラルへのクロックをゲーティングし、次にチップ選択ラインをトグルする。これにより、SPIコマンドフィルタが権限のないコマンドを消費することを阻止するように機能しているとき、チップ選択ラインのグリッチを防ぐことができる。これにより、ペリフェラルブロックが通信の権限のないコマンドの少なくとも一部分を受信、消費または処理することを阻止することができる。動作608から、方法600は、動作602に戻り、システムの上記ペリフェラルブロックまたは他のペリフェラルブロックへのSPIインターコネクトにわたって発行される、権限のないコマンドについてのSPIインターコネクトの監視またはスヌーピングを継続することができる。
【0054】
図7は、1つまたは複数の態様による、SPI通信のコマンドをフィルタリングするための例示的な方法700を示す。様々な態様において、SPIコマンドフィルタ116またはセキュアなSPI通信モジュールは、下流コマンドが、権限がないかまたは許可されていない場合に、これらの下流コマンドが1つまたは複数のペリフェラルブロック(例えば、フラッシュメモリデバイス)に達することをブロックするための方法700の動作を実施することができる。
【0055】
702において、SPIコマンドフィルタは、ホストとペリフェラルデバイスとの間でSPIインターコネクトを介して交換される通信のそれぞれのコマンドを監視する。例えば、SPIコマンドフィルタは、シリアルペリフェラルインターフェイスインターコネクトまたはバスのデータラインをスヌーピングまたは監視して、SPIインターコネクトを介して通信されているSPI通信のコマンドまたはオペコードのビットを得ることができる。いくつかの場合、コマンドはシステムホストからSPIフラッシュデバイスまで送信される。
【0056】
704において、SPIコマンドフィルタは、それぞれのコマンドを、ペリフェラルデバイスが実行または受信する権限がないコマンドのテーブルと比較する。いくつかの場合、SPIコマンドフィルタは、受信したコマンドまたは受信したコマンドの一部分を用いて、テーブルにインデックス付けし、コマンドが通過を許可されるかまたは許可されない(例えばフィルタリングされる)かを判断する。例えば、イネーブルビットは、コマンドが下流にペリフェラルデバイスまで通ることを許可されるかまたはフィルタリングされるかを示すかまたは制御する。いくつかの実施において、「1」のイネーブルビット値は、コマンドが通ることを許可されることを示し、「0」のイネーブルビット値は、コマンドがセキュアなSPI通信モジュールまたはコマンドフィルタによってフィルタリングされることを示す。
【0057】
706において、SPIコマンドフィルタは、それぞれのコマンドに、ペリフェラルデバイスによる実行の権限があるか否かを判断する。706から、それぞれのコマンドに実行の権限があることを確認するのに応じて、方法は708に進み、708において、SPIコマンドフィルタは、それぞれのコマンドを含む通信をSPIインターコネクトを介してペリフェラルデバイスまで通す。
【0058】
代替的に、それぞれのコマンドに実行の権限がないことを判断するのに応答して、方法は710に進み、710において、SPIコマンドフィルタは、ペリフェラルデバイスが権限のないコマンドの少なくとも一部分を受信または処理することを阻止するための対策動作を遂行することができる。これを行うために、SPIコマンドフィルタは、710において、ペリフェラルデバイスへのSPIクロックラインをゲーティングする。これにより、ペリフェラルチップへのクロッキングビート、遷移または信号の伝播を阻止することができ、これによりペリフェラルデバイスがコマンドの少なくとも一部分を消費または処理することを阻止することができる。いくつかの場合、SPIコマンドフィルタは、第8のビートまたはクロックサイクル上のまたはそれに近接したSPIクロックラインをゲーティングし、それによって、第8のビットコマンドがペリフェラルデバイスに通信され、これにより、ペリフェラルデバイスに、権限のないコマンドを破棄させることができる。
【0059】
712において、SPIコマンドフィルタは、ペリフェラルデバイスへのSPIチップ選択ラインをデアサートする。いくつかの場合、SPIコマンドフィルタは、第8のビートまたはクロックサイクル上のまたはそれに近接したSPIチップ選択ラインをデアサートし、それによって、第8のビットコマンドがペリフェラルデバイスに通信される。態様において、SPIクロックがゲーティングまたは中断されている間、SPIチップ選択ラインをデアサート(または論理極性に応じてアサート)することにより、SPIコマンドフィルタは、SPIチップ選択ラインまたはSPIペリフェラルにグリッチを引き起こすことなくSPIチップ選択ラインをトグルすることが可能になる。これを行うことにより、SPIコマンドフィルタは、ペリフェラルデバイスがコマンドの第8のビットを消費または処理することを阻止することができ、これにより、ペリフェラルデバイスに、権限のないコマンドまたはその受信部分を破棄させるかまたはそのように強制することができる。いくつかの実施において、SPIコマンドフィルタは、チップ選択ラインをデアサートし、クロック信号を同時にまたは短い時間範囲、例えばSCK期間の半分未満(例えば、25MHz~100Mhzで10~50ナノ秒)でゲーティングすることができる。これは、チップ選択ラインのデアサーションがペリフェラルデバイスのグリッチを引き起こすことを阻止するのに有効であり得る。714において、SPIコマンドフィルタは、ホストが上流のチップ選択ラインを解放するときにSPIクロックラインを再開し、これにより、SPIインターコネクトの連続した動作を可能にすることができる。
【0060】
図8は、1つまたは複数の態様による、交互のバイナリ画像アクセスを可能にするためにコマンドアドレスを操作するための例示的な方法800を示す。様々な態様において、SPIコマンドフィルタ116またはセキュアなSPI通信モジュールは、方法800の動作を実施し、フラッシュメモリデバイスのA/Bモードバイナリ画像または分割アクセスを可能にすることができる。
【0061】
802において、システムのセキュアなSPI通信モジュールまたはRoTデバイスは、システムのホストをフラッシュメモリデバイスに結合するSPIインターコネクトを介してSPIフラッシュメモリデバイスにアクセスする。フラッシュメモリデバイスは、ホストシステムの異なるバイナリ画像または他の情報が記憶される複数の分割を含むことができる。804において、セキュアなSPI通信モジュールまたはRoTデバイスは、SPIフラッシュメモリデバイスの第1の区画に記憶されたバイナリ画像を検証する。
【0062】
任意選択で、806において、バイナリ画像が真正であることを検証するのに応答して、セキュアなSPI通信モジュールまたはRoTデバイスは、システムのホストが、SPIフラッシュメモリデバイスからバイナリ画像をロードすることを可能にする。任意選択で、808において、セキュアなSPI通信モジュールは、SPIフラッシュメモリデバイスの第2の区画にアクセスするためのSPIインターコネクトをトラバースして、コマンドの1つまたは複数のアドレスビットを操作する。810において、セキュアなSPI通信モジュールは、システムのホストが、SPIフラッシュメモリデバイスの第2の区画から別のバイナリ画像をロードすることを可能にする。
【0063】
例示的なシステムオンチップ
図9は、1つまたは複数の態様による、セキュアなSPI通信を実施することができる例示的なシステムオンチップ900(SoC900)の様々な構成要素を示す。SoC900は、消費者、コンピュータ、ポータブル、ユーザ、サーバ、通信、電話、ナビゲーション、ゲーミング、オーディオ、カメラ、メッセージング、メディア再生、および/または図1に示すかもしくは図1を参照して説明した装置102等の他のタイプのSoC対応デバイスのうちの任意の形態で、単一のまたは複数の固定式、移動式、スタンドアローンまたは埋込式デバイスとして実施することができる。示された構成要素のうちの1つまたは複数は、別個の構成要素、モジュール、IPブロックとして、またはSoC900の少なくとも1つの集積回路における集積部品として実現することができる。一般的に、SoC900の様々な構成要素は、セキュアなSPI通信の1つまたは複数の態様に従って構成要素間の通信をサポートするインターコネクト120および/または1つもしくは複数のファブリックを介して結合される。
【0064】
SoC900は、受信データ、送信データまたは上記で特定した他の情報等の、デバイスデータ110の有線および/または無線通信を可能にする1つまたは複数の通信送受信機124を含むことができる。通信送受信機124の例は、近距離通信(NFC)送受信機、様々なIEEE802.15(Bluetooth(商標))規格に準拠する無線パーソナルエリアネットワーク(PAN)(WPAN)無線、様々なIEEE802.11(WiFi(商標))規格のうちの任意のものに準拠する無線ローカルエリアネットワーク(LAN)(WLAN)無線、セルラ接続性のための無線広域ネットワーク(WAN)(WWAN)無線(例えば、第3世代パートナーシッププロジェクトに準拠(3GPP(登録商標)準拠)するもの)、様々なIEEE802.16(WiMAXTM)規格に準拠する無線メトロポリタンエリアネットワークネットワーク(MAN)(WMAN)無線、赤外線データアソシエーション(IrDA)プロトコルに準拠する赤外線(IR)送受信機、および有線ローカルエリアネットワークLANイーサネット送受信機を含む。
【0065】
SoC900は、ユーザ選択可能な入力、メッセージ、アプリケーション、音楽、テレビコンテンツ、記録されたビデオコンテンツ、ならびに、マイクロフォンまたはカメラのようなセンサを含む任意のコンテンツおよび/またはデータソースから受信された任意の他のタイプのオーディオ、ビデオおよび/または画像データ等の、任意のタイプのデータ、メディアコンテンツおよび/または他の入力が通信され得る1つまたは複数のデータ入力/出力ポート126(I/Oポート126)も含むことができる。データI/Oポート126は、光ファイバーインターコネクトまたはケーブルのためのUSBポート、同軸ケーブルポート、光ファイバーポート、ならびに、フラッシュメモリ、光媒体ライタ/リーダ(例えば、DVD、CD)等を作動的に結合するための他のシリアルまたはパラレルコネクタ(内部コネクタを含む)を含むことができる。これらのデータI/Oポート126を用いて、SoCを、キーボード、マイクロフォン、カメラまたは他のセンサ等の構成要素、ペリフェラルまたはアクセサリに結合することができる。
【0066】
この例のSoC900は、コンピュータ実行可能命令を処理(例えば、実行)してデバイスの動作を制御する、組み合わされたプロセッサおよびメモリシステム(例えば、SoCの一部として実施される)を含むことができる、少なくとも1つのプロセッサ106(例えば、アプリケーションプロセッサ、マイクロプロセッサ、デジタル信号プロセッサ(DSP)、コントローラ等のうちの任意の1つまたは複数)を含む。態様において、プロセッサ106は、SoCの他の構成要素および/またはペリフェラルブロックとインタラクトするSoC900のホスト機能を実施するようにコンピュータ可読命令(例えば、オペレーティングシステムまたはファームウェア)を実行することができる。プロセッサ106は、アプリケーションプロセッサ、埋込式コントローラ、マイクロコントローラ、セキュリティプロセッサ、人工知能(AI)アクセラレータ等として実施することができる。一般的に、プロセッサまたは処理システムは、少なくとも部分的にハードウェアにおいて実施することができ、これは、集積回路またはオンチップシステム、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、複合プログラマブル論理デバイス(CPLD)、ならびにシリコンおよび/または他の材料における他の実施の構成要素を含むことができる。
【0067】
代替的にまたはさらに、SoC900は、902において(電子回路部902として)包括的に示される処理および制御回路と接続して実施されるソフトウェア、ハードウェア、ファームウェアまたは固定論理回路部を含むことができる電子回路部のうちの任意の1つまたはそれらの組み合わせを用いて実施することができる。この電子回路部902は、コンピュータ可読媒体上に記憶された処理/コンピュータ実行可能命令を通じて、論理回路部および/またはハードウェア(FPGA等)を通じて等により、実行可能なまたはハードウェアベースのモジュール(図9には示されていない)を実施することができる。
【0068】
態様において、SoC900はインターコネクト120を含み、インターコネクト120は、デバイス内の様々な構成要素を結合して、セキュアなPSIシグナリングおよび/または通信の様々な態様を可能にする、システムバス、リンク、チャネル、インターコネクト、クロスバー、データ転送システムまたは他のスイッチファブリックのうちの任意の1つまたは複数を含むことができる。システムバスまたはインターネットは、メモリバスまたはメモリコントローラ、SPIバス、SPIインターコネクト、ペリフェラルバス、パリティブロック、CRCブロック、ECCブロック、TU-LUファブリック、ユニバーサルシリアルバスおよび/または多岐にわたるバスアーキテクチャのうちの任意のものを利用するプロセッサもしくはローカルバス等の異なるバス構造のうちの任意の1つまたはこれらの組み合わせを含むことができる。
【0069】
SoC900は、データ記憶を可能にする1つまたは複数のメモリデバイス904も含む。その例は、ランダムアクセスメモリ(RAM)、不揮発性メモリ(例えば、リードオンリーメモリ(ROM)、フラッシュメモリ、消去可能プログラマブルリードオンリーメモリ(EPROM)および電気的に消去可能なプログラマブルリードオンリーメモリ(EEPROM))およびディスクストレージデバイスを含む。メモリデバイス904のうちの1つまたは複数は、本明細書に記載のセキュアなSPI通信の態様を実施するSPIコマンドフィルタ116および/またはSPIクロックコントローラ118に結合されたSPIインターコネクトを介して通信することができる。メモリデバイス904は、システムおよび異なる物理的構成要素の異なる論理記憶レベルにわたって分散させることができる。メモリデバイス904は、デバイスデータ110、他のタイプのコードおよび/またはデータ、ならびに様々なデバイスアプリケーション906(例えば、ソフトウェアアプリケーションまたはプログラム)を記憶するためのデータ記憶メカニズムを提供する。例えば、オペレーティングシステム908は、メモリデバイス904内の、プロセッサ106によって実行されるソフトウェア命令として維持することができる。
【0070】
いくつかの実施において、SoC900は、オーディオデータを処理し、かつ/またはオーディオおよびビデオデータをオーディオシステム912および/または表示システム914(例えば、ビデオバッファまたはスマートフォンもしくはカメラのスクリーン)まで通すオーディオおよび/またはビデオ処理システム910も含む。オーディオシステム912および/または表示システム914は、オーディオ、ビデオ、表示および/または画像データを処理、表示および/または他の形でレンダリングする任意のデバイスを含むことができる。表示データおよびオーディオ信号は、RF(無線周波数)リンク、Sビデオリンク、HDMI(登録商標)(高精細度マルチメディアインターフェイス)、複合ビデオリンク、コンポーネントビデオリンク、DVI(デジタルビデオインターフェイス)、アナログオーディオ接続、ビデオバス、またはメディアデータポート916等の他の類似の通信リンクを介してオーディオ構成要素および/または表示構成要素に通信することができる。いくつかの実施において、オーディオシステム912および/または表示システム914は、SoC900の外部のまたは別個の構成要素である。代替的に、表示システム914は、例えば、統合されたタッチインターフェイスの一部等の例示的なSoC900の統合された構成要素とすることができる。
【0071】
図9のSoC900は、図1の装置102の例示的な実施、図1図8を参照して説明したセキュアなSPI通信の態様を実行することができるデバイスまたはシステムの例示的な実施とすることができる。このため、SoC900は、セキュリティ回路部112(例えば、RoTデバイス)、SPIコマンドフィルタ116および/またはSPIクロックコントローラ118を含むことができる。これらは別個の回路部もしくはIPブロックとすることができるか、またはプロセッサ106、電子回路部902もしくはメモリデバイス904のような別のICチップもしくはデバイスの一部として含めることができる。したがって、示される構成要素のうちの1つまたは複数は、同じ半導体基板、半導体パッケージ、ICチップ、SoCまたは単一のプリント回路基板(PCB)上に統合することができる。
【0072】
示されるように、SoC900のセキュリティ回路部112は、SPIコマンドフィルタ116およびSPIクロックコントローラ118のインスタンスを用いて実施され、これらは、図1図5に記載のように(例えば、セキュアなSPI通信モジュールとして)構成することができるかまたは構成要素を含むことができる。したがって、セキュリティ回路部112、SPIコマンドフィルタ116およびSPIクロックコントローラ118は、SoC900が本明細書に記載のセキュアなSPI通信の態様を実施することを可能にすることができる。例えば、SPIコマンドフィルタ116は、SoC102のホストと、SoC102のフラッシュメモリモジュール(例えば、メモリデバイス904)とによって交換される通信を監視することができる。態様において、SPIコマンドフィルタ116は、ホストによって送信される通信のそれぞれのコマンドを、フラッシュメモリモジュールが、いずれのコマンドを実行する権限がないかを示す情報と比較する。SPIコマンドフィルタ116は、比較に基づいて、それぞれのコマンドのうちの1つが、フラッシュメモリモジュールが実行する権限がないコマンド(例えば、ステータスレジスタ書き込みコマンド)のうちの1つであると判断する。判断に応答して、SPIコマンドフィルタ116は、フラッシュメモリモジュールのチップ選択ラインをデアサートするか、またはSPIクロックコントローラ118を用いてフラッシュメモリモジュールのSPIクロックラインをゲーティングもしくは一時停止することができる。これを行うことにより、SPIコマンドフィルタ116は、フラッシュメモリモジュールが、権限のないコマンドの少なくとも一部分を受信または処理することを阻止することができ、これにより、権限のないコマンドがフラッシュメモリモジュールのセキュリティを損なうことを阻止することができる。代替的にまたはさらに、SPIコマンドフィルタ116またはセキュアなSPI通信モジュールは、フラッシュメモリモジュールの第1の区画に記憶されたバイナリ画像のインテグリティを検証することができる。インテグリティの検証に失敗する場合、SPIコマンドフィルタ116は、SPIインターコネクトトランザクションのアドレスを変更して、ホストが、検証されていない、場合によってはセキュリティが脅かされたバイナリ画像を第1の区画からロードすることを阻止するために、別のバイナリ画像を、フラッシュメモリモジュールの第2の区画からロードさせることができる。したがって、本明細書に記載のセキュアなSPI通信の概念は、図9のSoC900によって、またはこれと併せて実施することができる。
【0073】
文脈上別段の指示がない限り、「または」という用語の本明細書における使用は、「包含的論理和」または「または」という用語によって繋がれる1つ以上の項目の包含または適用を可能にする用語の使用と見なされる場合がある(例えば、「AまたはB」という句は、「A」だけを許可するものとして、「B」だけを許可するものとして、または「A」および「B」の両方を許可するものとして、解釈されてもよい)。また、本明細書において用いられるとき、項目のリストの「のうちの少なくとも1つ」を指す語句は、単一のメンバーを含む、それらの項目の任意の組み合わせを指す。例えば、「a、b、またはcのうちの少なくとも1つ」は、a、b、c、a-b、a-c、b-c、およびa-b-c、ならびに複数個の同じ要素との任意の組み合わせ(例えば、a-a、a-a-a、a-a-b、a-a-c、a-b-b、a-c-c、b-b、b-b-b、b-b-c、c-c、ならびにc-c-c、またはa、bおよびcの任意の他の順序)を包含することができる。さらに、添付の図に表される項目および本明細書で論じられる用語は、1つ以上の項目または用語を示す場合があり、したがって、本書面による説明における項目および用語の単一または複数の形態に互換的に言及される場合がある。セキュアなSPI通信の態様は、或る特定の特徴/方法に固有の言語で記載されたが、添付の特許請求の範囲の主題は、記載される特定の特徴または方法に必ずしも限定されない。むしろ、特定の特徴および方法は、セキュアなSPI通信の例示的実施として開示される。
【0074】
以下の例において、セキュアなSPIパススルーモジュールの例示的な実施が定義および説明される。
modulespi_passthrough
importspi_device_pkg::*;

inputclk_i,//SPIがclkを入力する
inputrst_ni,//SPIがリセットする
inputclk_out_i,//SPIがclkを出力する
構成コマンドフィルタ情報は、256ビットレジスタとして与えることができる。コマンドcongifがDPSRAMに記憶される場合、これは変更を受ける。これがサポートされる場合、コマンドconfigは、第6のコマンドサイクルにおいて有効であり、8ビットのみを与えられる。
input[255:0]cfg_cmd_filter_i,
//アドレス操作
input[31:0]cfg_addr_mask_i,
input[31:0]cfg_addr_value_i,
アドレスモード:
input cfg_addr_4b_en_i,
input spi_mode_espi_mode_i,
SPI inについて、パススルーモジュールは、既存のspi_s2pおよびcmdparseを再利用することができる。しかし、パススルーは、自身のs2pおよびcmdparseを用いてA/Bバイナリスキームをサポートする。
input host_sck_i,
input host_csb_i,
input [3:0]host_s_i,
output logic[3:0]host_s_o、//clk_out_iドメイン
ouyput logic[3:0]host_s_en_o、//clk_out_iドメイン
いくつかの実施において、SPIからSPI_HOSTおよび端末から下流のデバイスに、passthrough_req_t passthrough_oを出力し、passthrough_rsp_t passthrough_iを入力する。
【0075】
メールボックスインジケータ、態様において、読み出しコマンドがメールボックスアドレス内に入り、メールボックス機能が有効にされている場合、「読み出しコマンド」プロセスモジュールが信号をパススルーに送信し、SPIラインの制御を取る。この信号がアドレスフェーズ中にアサートする場合、パススルーはCSbをSPIフラッシュデバイスにドロップし、ホストのCSbデアサーションを待機する。
input mailbox_hit_i,
//イベント
//「cmd_filtered」:フィルタリング除去された到来するコマンドフィルタのインジケータ
outputevent_cmd_filtered_o
);
セキュアなSPIパススルーに関連付けて、いくつかの定義が以下のように定義される。
State
typedef enum logic[2:0]{
アイドル状態において、到来するSPIをSPI_HOSTに転送し、最終的にSPIフラッシュデバイスに転送する。
StIdle,
ビートが第8のビート(厳密には、7つ半)に達すると、状態マシンは、到来するデータをチェックし、所与のconfig、cmd_filterに基づいて、コマンドをブロックするか、または下流のデバイスに進み続けるかを判断することができる。
StFilter,
コマンドがフィルタリングされた場合、このSCKからSPI_HOSTへのIpをオフにし、StWaitにおいてCSbをデアサートすることができる。SCKは、StFilterにおいてオフにされることになる。この待機状態において、状態マシンは、ホストシステムからのCSbデアサーションを待機する。
StWait,
出力コマンドハンドリング-これは、大部分がSPIフラッシュモードからの複製コードであるが、ここでは出力イネーブルを制御するために存在する。パススルーモードにおいて、コマンドが許可される場合、データは下流デバイスから生じるが、出力状態(高Zまたは駆動)のヒントを与えない。このため、パススルーモジュールは、SPIプロトコルに従って、上流のパッドの「oe」を制御する。これは、読み出しコマンドモジュール、ステータスモジュール、SFDP/JEDECモジュールに記載されているのと同じプロトコルに従う。StIdleまたはStAddressからのStがStHighZに移るとき、これにより待機タイマがセットされる。待機タイマが満了し、StHighZはStDrivingに移り、これは、CSbがアサートされるまで進展しない。
StDriving,
StHighZ,
態様において、アドレス操作は以下に記載のように実施することができる。例えば、SPIパススルーの1つの特殊な特徴は、A/Bバイナリ画像サポートである。論理は、データの或る特定のビートを事前構成値に交換することができる。この状態において、論理は、addr_maskおよびデータを調べ、必要であればラインを交換する。この後、STはStDrivingまたはStHighZに移る。アドレスがMailbox領域にヒットし、SWがメールボックスを有効にした場合、STは現在のトランザクションをキャンセルし、StWait状態に移る。
StAddress
}passthrough_st_e;
passthrough_st_est、st_d;
例示的なコマンドタイプおよび様々なコマンド
パススルーモジュールは、SPIライン上の全てのビットを厳密に辿るのではなく、コマンドのフェーズを緩く追跡する場合がある。SPIフラッシュにおけるコマンドは以下のように分類することができる。
//-{Address,PayloadOut}:例はReadDataである。
//-{Address,Dummy,PayloadOut}:FastRead/Dual/Quadコマンドはダミーを有する
//-{Dummy,PayloadOut}:パワーダウン/製造者IDを解放する
//-{PayloadOut}:オペコードの直後にデバイスがデータをホストに送信する
//-{Address,PayloadIn}:ホストがアドレスおよびペイロードを折返し送信する
//-{PayloadIn}:ホストは、アドレスヒントなしでペイロードを送信する
//-None:コマンドはアドレスペイロード(in/out)なしで完了する
受信したコマンドが2つ以上の状態を有する場合、カウンタ値は、厳密なタイミングにおいて次の状態に移るように状態マシンを支援するようにセットされる。「cmd_type_t」構造体はコマンドのための情報を有する。コマンドの実際の値は、コンパイル時間パラメータである。論理は、8ビットのオペコードを受信するとき、パラメータをこの構造体にラッチし、これをトランザクションを通じて参照する。
【0076】
オペコードカウンタ後にホストが駆動する例示的なアドレス等
localparam int unsigned MaxAddrBit=32;
localparam int unsigned AddrCntW=$clog2(MaxAddrBit);
例示的なダミー
localparam int unsigned MaxDummyBit=8;
localparam int unsigned DummyCntW=$clog2(MaxDummyBit);
typedefenumlogic{
PayloadIn=1’b0、
PayloadOut=1’b1
}payload_dir_e;
typedef struct packed{
アドレスが存在する
logic addr_en;
swap_enが1である場合、論理はincomindaddrを或る特定のビットについて事前構成された値に置き換える。
logic addr_swap_en;
1である場合、addr_sizeは、「cfg_addr_4b_en_i」論理addr_4b_affectedによる影響を受ける。
【0077】
ダミーが存在する例
logic dummy_en;
ペイロード方向:payload_enがセットされる場合、コマンドは両方向にペイロードを有する。「payload_dir」は入力(0)または出力(1)を決定する。
logic[3:0]payload_en;
payload_dir_epayload_dir;
態様において、addr_sizeは、「addr_4b_affected」に基づいて決定される。1であり、「cfg_addr_4b_en_i」が1である場合、「addr_size」は31である。他の場合、これは23にセットされる。
logic[AddrCntW-1:0]addr_size;
logic[DummyCntW-1:0]dummy_size;
}cmd_type_t;
localparam cmd_type_t CmdInfoNone=’{
addr_en: 1’b0,
addr_swap_en: 1’b0,
addr_4b_affected: 1’b0,
dummy_en: 1’b0,
payload_en: 4’h 0,
payload_dir: PayloadIn,
addr_size: ’0,
dummy_size: ’0
};
localparam cmd_type_t CmdInfoPayloadIn=’{
addr_en: 1’b0,
addr_swap_en: 1’b0,
addr_4b_affected: 1’b0,
dummy_en: 1’b0,
payload_en: 4’h 1,
payload_dir: PayloadIn,
addr_size: ’0,
dummy_size: ’0
};
localparam cmd_type_t CmdInfoPayloadOut=’{
addr_en: 1’b0,
addr_swap_en: 1’b0,
addr_4b_affected: 1’b0,
dummy_en: 1’b0,
payload_en: 4’h 2,//S[1]
payload_dir: PayloadOut,
addr_size: ’0,
dummy_size: ’0
};
localparam cmd_type_t CmdInfoAddrPayloadIn=’{
addr_en: 1’b1,
addr_swap_en: 1’b0,
addr_4b_affected: 1’b1,
dummy_en: 1’b0,
payload_en: 4’h 1,//S[0]のみ
payload_dir: PayloadIn,//ホストがデータを送信する
addr_size: ’0,//論理が決定する
dummy_size: ’0
};
localparam cmd_type_t CmdInfoAddrPayloadInQuad=’{
addr_en: 1’b1,
addr_swap_en: 1’b0,
addr_4b_affected: 1’b1,
dummy_en: 1’b0,
payload_en: 4’hF,//S[3:0]
payload_dir: PayloadIn,//ホストがデータを送信する
addr_size: ‘0,//論理が決定する
dummy_size: ’0
};
localparam cmd_type_t CmdInfoAddrPayloadOut=’{
addr_en: 1’b1,
addr_swap_en: 1’b1,
addr_4b_affected: 1’b1,
dummy_en: 1’b0,
payload_en: 4’h 2,//S[1]のみ
payload_dir: PayloadOut,//フラッシュデバイスがデータを送信する
addr_size: ‘0,//論理が決定する
dummy_size: ’0
};
//アドレス+ダミー+アドレスを除くペイロードは常に3Bである
localparam cmd_type_t CmdInfoAddr3BDummyPayloadOut=’{
addr_en: 1’b1,
addr_swap_en: 1’b0,
addr_4b_affected: 1’b0,
dummy_en: 1’b1,
payload_en: 4’h 2,//S[1]のみ
payload_dir: PayloadOut,//フラッシュデバイスがデータを送信する
addr_size: ‘0,//論理が決定する
dummy_size: ’h 7
};
localparam cmd_type_t CmdInfoAddrDummyPayloadOut=’{
addr_en: 1’b1,
addr_swap_en: 1’b1,
addr_4b_affected: 1’b1,
dummy_en: 1’b1,
payload_en: 4’h 2,//S[1]のみ
payload_dir: PayloadOut,//フラッシュデバイスがデータを送信する
addr_size: ‘0,//論理が決定する
dummy_size: ’h 7
};
localparam cmd_type_t CmdInfoAddrDummyPayloadOutDual=’{
addr_en: 1’b1,
addr_swap_en: 1’b1,
addr_4b_affected: 1’b1,
dummy_en: 1’b1,
payload_en: 4’h 3,//S[1:0]のみ
payload_dir: PayloadOut,//フラッシュデバイスがデータを送信する
addr_size: ‘0,//論理が決定する
dummy_size: ’h 7
};
localparam cmd_type_t CmdInfoAddrDummyPayloadOutQuad=’{
addr_en: 1’b1,
addr_swap_en: 1’b1,
addr_4b_affected: 1’b1,
dummy_en: 1’b1,
payload_en: 4’hF,//S[3:0]
payload_dir: PayloadOut,//フラッシュデバイスがデータを送信する
addr_size: ‘0,//論理が決定する
dummy_size: ’h 7
};
localparam cmd_type_t CmdInfoAddr=’{
addr_en: 1’b1,
addr_swap_en: 1’b0,
addr_4b_affected: 1’b0,//TODO: ??
dummy_en: 1’b0,
payload_en: 4’h 0,
payload_dir: PayloadOut,//フラッシュデバイスがデータを送信する
addr_size: ‘0,//論理が決定する
dummy_size: ’h 0
};
localparam cmd_type_tPassThroughCmdInfo[256]=’{
CmdInfoNone,//8’h 00
CmdInfoPayloadIn,//8’h 01ステータス1書き込み
CmdInfoAddrPayloadIn,//8’h 02ページプログラム
CmdInfoAddrPayloadOut,//8’h 03データ読み出し
CmdInfoNone,//8’h 04書き込みディセーブル
CmdInfoPayloadOut,//8’h 05ステータス1読み出し
CmdInfoNone,//8’h 06書き込みイネーブル
CmdInfoNone,//8’h 07
CmdInfoNone,//8’h 08
CmdInfoNone,//8’h 09
CmdInfoNone,//8’h 0A
CmdInfoAddrDummyPayloadOut,//8’h 0B高速読み出し
CmdInfoNone,//8’h 0C
CmdInfoNone,//8’h 0D
CmdInfoNone,//8’h 0E
CmdInfoNone,//8’h 0F
CmdInfoNone,//8’h 10
CmdInfoPayloadIn,//8’h 11ステータス3書き込み
CmdInfoNone,//8’h 12
CmdInfoNone,//8’h 13
CmdInfoNone,//8’h 14
CmdInfoPayloadOut,//8’h 15ステータス3読み出し
CmdInfoNone,//8’h 16
...
CmdInfoNone,//8’h 1F
CmdInfoAddr,//8’h 20セクタ消去(4kB)
CmdInfoNone,//8’h 21
...
CmdInfoNone,//8’h 30
CmdInfoPayloadIn,//8’h 31ステータス2書き込み
CmdInfoAddrPayloadInQuad,//8’h 32クアッド入力ページプログラム
CmdInfoNone,//8’h 33
CmdInfoNone,//8’h 34
CmdInfoPayloadOut,//8’h 35ステータス2読み出し
CmdInfoAddr,//8’h 36個々のブロックロック
CmdInfoNone,//8’h 37
CmdInfoNone,//8’h 38QPI(フィルタリング済み)入力
CmdInfoAddr,//8’h 39個々のブロックアンロック
CmdInfoNone,//8’h 3A
CmdInfoAddrDummyPayloadOutDual,//8’h 3B高速読み出しデュアルアウト
CmdInfoNone,//8’h 3C
CmdInfoAddrPayloadOut,//8’h 3D読み出しブロックロック
CmdInfoNone,//8’h 3E
CmdInfoNone,//8’h 3F
CmdInfoNone,//8’h 40
CmdInfoNone,//8’h 41
CmdInfoNone,//8’h 42 TODO
CmdInfoNone,//8’h 43
CmdInfoNone,//8’h 44 TODO
CmdInfoNone,//8’h 45
CmdInfoNone,//8’h 46
CmdInfoNone,//8’h 47
CmdInfoNone,//8’h 48 TODO
CmdInfoNone,//8’h 49
CmdInfoNone,//8’h 4A
CmdInfoNone,//8’h 4B一意のID(TODO)読み出し
CmdInfoNone,//8’h 4C
CmdInfoNone,//8’h 4D
CmdInfoNone,//8’h 4E
CmdInfoNone,//8’h 4F
CmdInfoNone,//8’h 50
CmdInfoNone,//8’h 51
CmdInfoAddr,//8’h 52ブロック消去(32kB)
CmdInfoNone,//8’h 53
CmdInfoNone,//8’h 54
CmdInfoNone,//8’h 55
CmdInfoNone,//8’h 56
CmdInfoNone,//8’h 57
CmdInfoNone,//8’h 58
CmdInfoNone,//8’h 59
CmdInfoAddr3BDummyPayloadOut,//8’h 5A SFDP読み出し
CmdInfoNone,//8’h 5B
...
CmdInfoNone,//8’h 6A
CmdInfoAddrDummyPayloadOutQuad,//8’h 6B高速読み出しクアッドアウト
CmdInfoNone,//8’h 6C
...
CmdInfoNone,//8’h9E
CmdInfoPayloadOut,//8’h9FJEDECID
CmdInfoNone,//8’hA0
...
CmdInfoNone,//8’hD7
CmdInfoAddr,//8’hD8ブロック消去(64kB)
CmdInfoNone,//8’hD9
...
CmdInfoNone//8’hFF
};
DCにおいて合成可能でない例
localparam cmd_type_tPassThroughCmdInfoOld[256]=’{
//8’h 00
’h 00: CmdInfoNone,
//8’h 01ステータス1書き込み
’h 01: CmdInfoPayloadIn,
//8’h 15ステータス2書き込み
’h 31: CmdInfoPayloadIn,
//8’h 11ステータス3書き込み
’h 11: CmdInfoPayloadIn,
//8’h 02ページプログラム
’h 02: CmdInfoAddrPayloadIn,
//8’h 32クアッド入力ページプログラム: フィルタリングが予期される
’h 32: CmdInfoAddrPayloadInQuad,
//8’h 03データ読み出し
’h 03: CmdInfoAddrPayloadOut,
//8’h 04書き込みディセーブル
’h 04: CmdInfoNone,
//8’h 05ステータス1読み出し
’h 05: CmdInfoPayloadOut,
//8’h 35ステータス2読み出し
’h 35: CmdInfoPayloadOut,
//8’h 15ステータス3読み出し
’h 15: CmdInfoPayloadOut,
//8’h 06書き込みイネーブル
’h 06: CmdInfoNone,
//8’h 0B高速読み出し
’h 0B: CmdInfoAddrDummyPayloadOut,
//8’h 3B高速読み出しデュアル出力
’h 3B: CmdInfoAddrDummyPayloadOutDual,
//8’h 6B高速読み出しクアッド出力
’h 6B: CmdInfoAddrDummyPayloadOutQuad,
//8’h 20セクタ消去(4kB)
’h 20: CmdInfoAddr,
//8’h 52ブロック消去(32kB)
’h 52: CmdInfoAddr,
//8’hD8ブロック消去(64kB)
’hD8: CmdInfoAddr,
//8’h 36個々のブロックロック
’h 36: CmdInfoAddr,
//8’h 39個々のブロックアンロック
’h 39: CmdInfoAddr,
//8’h 3D読み出しブロックロック
’h 3D: CmdInfoAddrPayloadOut,
//8’h 38EnterQPI: フィルタリングが予期される
’h 38: CmdInfoNone,
//8’h 42 セキュリティレジスタをプログラム
//8’h 44 セキュリティレジスタを消去
//8’h 48 セキュリティレジスタを読み出し
//8’h 4B 一意のIDを読み出し
//8’h 5A SFDPを読み出し
’h 5A: CmdInfoAddr3BDummyPayloadOut,
//8’h 90製造/デバイスID
//8’h 9F JEDEC ID
’h 9F: CmdInfoPayloadOut,
デフォルト: CmdInfoNone
};
*/
例示的な信号
内部クロック
logic[3:0]host_s_en_inclk;
logic[3:0]device_s_en_inclk;
パススルーモードが有効にされているか否かを指示
logicis_active;
assignis_active=(spi_mode_i==PassThrough);
logic[7:0]opcode,opcode_d;
第8のビートにおいてフィルタが1になる場合、SCKイネーブル信号をCGセルまで下げ、SCKの第8のposedgeにおいて、csb_deassertが1になる。
logicfilter;
1である場合、SCKは下流のSPIフラッシュデバイスまで伝播する。
【0078】
logicsck_gate_en;
CSbから下流のデバイスへの制御が1である場合、CSbはデアサートされる。この信号はグリッチに敏感である。この値はSCKposedgeにおいて変更される。これはCSb出力を直接駆動しない。下流へのCSbは、これとおよびホストシステムからのCSbと論理和演算される。
logiccsb_deassert;
カウンタを開始-ダミーまでカウントアップするためのbitcn
localparam int unsigned MaxBeat=8+32+8;//Cmd+Addr+Dummy
localparam int unsigned BitCntW=$clog2(MaxBeat);
logic[BitCntW-1:0]bitcnt;
オペコードカウンタ後にホストが駆動するアドレス等
logic[AddrCntW-1:0]addrcnt,addrcnt_outclk;
ダミーカウンタ
logic[DummyCntW-1:0]dummycnt,dummycnt_d;
END: カウンタ
例示的なイベント
assign event_cmd_filtered_o=filter;
例示的なメールボックスがヒットする。
logic mailbox_hit;
always_ff@(posedge clk_i or negedge rst_ni)begin
if(!rst_ni)mailbox_hit<=1’b 0;//CSbによってリセット
else if(mailbox_hit_i)mailbox_hit<=1’b 1;//イベントにてセットされる
end
例示的なデータパス
オペコードLatch
assign opcode_d={opcode[6:0],host_s_i[0]};
always_ff@(posedge clk_i or negedge rst_ni)begin
if(!rst_ni)begin
opcode<=8’h 00;
end else if(bitcnt<BitCntW’(8))begin
opcode<=opcode_d;
end
end
コマンドフィルタ:CSb制御
always_ff@(posedge clk_i or negedge rst_ni)begin
if(!rst_ni)csb_deassert<=1’b0;
else if(filter)csb_deassert<=1’b1;
end
上記の波形を見て、sck_gate_enがなぜフィルタOR csb_deassertの逆であるのかを調べる
assignsck_gate_en=~(filter|csb_deassert);
例示的なBitcntカウンタ、Bitcntは最大値に達するまで増大し、その後リセットを待機する。
always_ff@(posedge clk_i or negedge rst_ni)begin
if(!rst_ni)begin
bitcnt<=’0;
end else if(bitcnt!=’1)begin
bitcnt<=bitcnt+BitCntW’(1);
end
end
例示的なLatch 第7のcmbオペコードにおける2ビットのみ
logic cmd_7th;//トランザクションの第7のビート
logic cmd_8th;//トランザクションの第8のビート
logic[1:0]cmd_filter;
assign cmd_7th=(bitcnt==BitCntW’(6));
assign cmd_8th=(bitcnt==BitCntW’(7));
always_ff@(posedge clk_i or negedge rst_ni)begin
if(!rst_ni)begin
cmd_filter<=2’b00;
end else if(cmd_7th)begin
この例において、第7のビートcmd_filterがcfg_cmd_filter_iから2ビットをラッチする。
【0079】
これにより、最後のフィルタデータパスを多重化256から単にmux2に低減する。
【0080】
以下の構文が機能しない場合、置き換えることができる
for(int unsigned i=0;i<128;i++)begin
it(i==opcode[6:0])cmd_filter<=cfg_cmd_filter_i[2*i+:2];
end
cmd_filter<=cfg_cmd_filter_i[{opcode_d[6:0],1’b0}+:2];
end
end
コマンドInfoLatchの例
cmd_type_t cmd_info,cmd_info_d;
cmd_type_t[1:0]cmd_info_7th;
logic cmd_info_latch;
always_ff@(posedge clk_i or negedge rst_ni)begin
if(!rst_ni)begin
cmd_info_7th<=’0;
end else if(cmd_7th)begin
cmd_info_7th<={PassThroughCmdInfo[{opcode_d[6:0],1’b1}],
PassThroughCmdInfo[{opcode_d[6:0],1’b0}]};
end
end
always_ff@(posedge clk_i or negedge rst_ni)begin
if(!rst_ni)begin
cmd_info<=’0;
end else if(cmd_info_latch)begin
ラッチの例 第7のビットが到達するとき2つのみのcmd_info。次に、cmd_info_dのための第8のビートにおいて2つの間で選択し、タイミングを低減する。
【0081】
cmd_info<=cmd_info_d;
end
end
always_combbegin
cmd_info_d=’0;
if(cmd_8th)begin
ラッチの例 第7のビットが到達するとき2つのみのcmd_info。次に、cmd_info_dのための第8のビートにおいて2つの間で選択し、タイミングを低減する。
【0082】
cmd_info_d=cmd_info_7th[host_s_i[0]];
TODOの例:Addrサイズ
if(cmd_info_7th[host_s_i[0]].addr_4b_affected)begin
cmd_info_d.addr_size=(cfg_addr_4b_en_i)
?AddrCntW’(31): AddrCntW’(23);
end
dummy_sizeが状態マシン内でセットされるときの例
end
end
例示的なアドレス交換
logic addr_set;
logic addr_phase,addr_phase_outclk;
assign addr_phase=(st==StAddress);
always_ff@(posedge clk_i or negedge rst_ni)begin
if(!rst_ni)begin
addrcnt<=’0;
end else if(addr_set)begin
//addr_setが1であるとき、cmd_infoはまだラッチされていない。
【0083】
addrcnt<=cmd_info_d.addr_size;
end else if(addrcnt!=’0)begin
addrcnt<=addrcnt-AddrCntW’(1);
end
end
always_ff@(posedgeclk_out_i or negedge rst_ni)begin
if(!rst_ni)addrcnt_outclk<=’0;
else addrcnt_outclk<=addrcnt;
end
AddrCntに基づいて、論理が交換される。
【0084】
TODO: DualIO、QuadIOの事例を扱う
logic addr_swap;
assign addr_swap=cfg_addr_mask_i[addrcnt_outclk]
?cfg_addr_value_i[addrcnt_outclk]
:host_s_i[0];
態様において、アドレス交換はoutclkドメインにおいて生じる。状態マシンはinclkドメインにおいて動作する。状態はmux選択信号を生成する。outclkドメインにおいてラッチされた信号はmuxを活性化する。
always_ff@(posedge clk_out_i or negedge rst_ni)begin
if(!rst_ni)addr_phase_outclk<=1’b0;
else addr_phase_outclk<=addr_phase;
end
例示的なダミーカウンタ
logic dummy_set;
always_ff@(posedge clk_i or negedge rst_ni)begin
if(!rst_ni)dummycnt<=’0;
else if(dummy_set)begin
dummycnt<=dummycnt_d;
end
end
パススルーMUXの例、addr_phase_outclkはoutclkドメインにあるため、addr_swapを直接用いることができる。addr_swap値は、addrcnt_outclkによっても決定される。
assign passthrough_o.s=(addr_phase_outclk)
?{host_s_i[3:1],addr_swap}: host_s_i;
logic[3:0]passthrough_s_en;
always_ff@(posedge clk_out_i or negedge rst_ni)begin
if(!rst_ni)passthrough_s_en<=4’h 1;//S[0]はデフォルトでアクティブ
else passthrough_s_en<=device_s_en_inclk;
end
assign passthrough_o.s_en=passthrough_s_en;
assign host_s_o=passthrough_i.s;
always_ff@(posedge clk_out_i or negedge rst_ni)begin
if(!rst_ni)host_s_en_o<=‘0;//入力モード
else host_s_en_o<=host_s_en_inclk;
end
assign passthrough_o.sck_gate_en=sck_gate_en;
assign passthrough_o.sck=host_sck_i;
assign passthrough_o.sck_en=1’b1;
CSb伝播の例:csb_deassert信号は、CSbをグリッチなしにするために、FFまたはラッチの出力であるべきである。
assign passthrough_o.csb_en=1’b1;
assign passthrough_o.csb=host_csb_i|csb_deassert;
passthrough_en
assign passthrough_o.passthrough_en=is_active;
END: Passthrough Mux
例示的な状態マシン
always_ff@(posedge clk_i or negedge rst_ni)begin
if(!rst_ni)begin
st<=StIdle;
end else begin
st<=st_d;
end
end
always_comb begin
st_d=st;
例示的なフィルタ
filter=1’b 0;
例示的なコマンドCfgラッチ
cmd_info_latch=1’b0;
例示的なaddr_set
addr_set=1’b0;
例示的なダミー
dummy_set=1’b0;
dummycnt_d=’0;
例示的な出力イネーブル
host_s_en_inclk=4’h 0;
device_s_en_inclk=4’h 1;//S[0]MOSIはアクティブ
unique case(st)
StIdle: begin
if(!is_active)begin
st_d=StIdle;
end else if(cmd_8th && cmd_filter[host_s_i[0]])begin
st_d=StFilter;
filter=1’b1;
SWへの例示的な送信通知イベント
end else if(cmd_8th)begin
cmd_info_latch=1’b1;
複数の状態に迂回する例。以下の状態は、主に出力イネーブル信号を制御するためのものである。しかしながら、StAddress状態は、読み出しコマンドの場合、アドレス交換のためのSPIラインを制御する。
【0085】
//Order: addr_en,dummy_en,|payload_en
if(cmd_info_d.addr_en)begin
st_d=StAddress;
addr_set=1’b1;
end else if(cmd_info_d.dummy_en)begin
st_d=StHighZ;
dummy_set=1’b1;
dummycnt_d=cmd_info_d.dummy_size;
end else if(cmd_info_d.payload_en!=0)begin
任意の入力/出力ペイロードの例
if(cmd_info_d.payload_dir==PayloadOut)begin
st_d=StWait;
end else begin
st_d=StDriving;
end
end
end
end
StFilter: begin
コマンドがフィルタリングされる。reset(CSb)が到来するまで待機する。
【0086】
st_d=StFilter;
host_s_en_inclk=4’h 0;//明示的
device_s_en_inclk=4’h 0;
end
StWait: begin
デバイスがデータをホストに返す。
st_d=StWait;
ホストについて出力イネーブル
host_s_en_inclk=cmd_info.payload_en;
device_s_en_inclk=4’h 0;
end
StDriving: begin
ホストがデータをデバイスに送信する
st_d=StDriving;
デバイスについて出力イネーブル
host_s_en_inclk=4’h 0;//明示的
device_s_en_inclk=cmd_info.payload_en;
end
StHighZ: begin
host_s_en_inclk=4’h 0;//明示的
device_s_en_inclk=4’h 0;//浮動
if(dummycnt==’0)begin
//payload_enが0でないと仮定する
st_d=(cmd_info.payload_dir==PayloadOut)?StWait: StDriving;
end
end
StAddress: begin
//状態に基づいて、addr_phaseがセットされる。カウンタが0に達するか否かのみをチェックする
if(addrcnt==’0)begin
if(mailbox_hit_i)begin
//アドレスフェーズにおいて、メールボックス領域にヒットする。次に、パススルーがコマンドをフィルタリングし、ReadCmdサブモジュールに制御を委譲する。
【0087】
st_d=StFilter;
filter=1’b1;
end else if(cmd_info.dummy_en)begin
st_d=StHighZ;
dummy_set=1’b 1;
dummycnt_d=cmd_info.dummy_size;
end else if(cmd_info.payload_en!=0)begin
st_d=(cmd_info.payload_dir==PayloadOut)? StWait: StDriving;
end else begin
//Addrがコマンドを完了。待機状態に進む
st_d=StWait;
end
end
end
default: begin
st_d=StIdle;
end
endcase
end
メールボックスヒットがアドレスフェーズの最後ではなく最中に発生する場合等のアサーションの例。
’ASSERT(MailboxHitConflictAddrCnt_A,mailbox_hit_i|->(addrcnt!=0))
endmodule: spi_passthrough
追加の例
セキュアなSPI通信の例が以下に提供される。
【0088】
例1:セキュアなシリアルペリフェラルインターフェイス通信のためにシステムのホストに関連付けられたセキュリティ回路部によって実施される方法であって、方法は、ホストによって、シリアルペリフェラルインターフェイス(SPI)インターコネクトを介してホストに結合されたシステムのペリフェラルブロックに送信される通信を監視することと、ホストによって送信される通信のそれぞれのコマンドを、ペリフェラルブロックがいずれのコマンドを実行する権限がないかを示す情報と比較することと、比較に基づいて、それぞれのコマンドのうちの1つが、ペリフェラルブロックが実行する権限がないコマンドであると判断することと、ペリフェラルブロックが実行する権限がないそれぞれのコマンドの少なくとも一部分をペリフェラルブロックが受信することを阻止することと、を含む、方法。
【0089】
例2.1:阻止することは、ペリフェラルブロックが、ホストによって送信された通信のそれぞれのコマンドの少なくとも一部分を受信することを阻止するために、SPIインターコネクトのチップ選択ラインまたはクロックラインの状態を変更することを含む、例のうちのいずれかに記載の方法。
【0090】
例2.2:阻止することは、ペリフェラルブロックが、ホストによって送信された通信のそれぞれのコマンドの少なくとも一部分を受信することを阻止するために、SPIインターコネクトのチップ選択ラインまたはクロックラインの状態を変更することを含む、例のうちのいずれかに記載の方法。
【0091】
例3:通信のそれぞれのコマンドは8ビットを含み変更することは、それぞれのコマンドの少なくとも第8のビットがペリフェラルブロックによって処理されることを防ぐために、それぞれのコマンドの第8のビットがSPIインターコネクトを介して通信される第8のクロックサイクルの前に、またはこの第8のクロックサイクルにおいてチップ選択ラインをデアサートすることを含む、例のうちのいずれかに記載の方法。
【0092】
例4:通信のそれぞれのコマンドは8ビットを含み、変更することは、それぞれのコマンドの少なくとも第8のビットがペリフェラルブロックによって処理されることを防ぐために、それぞれのコマンドの第8のビットがSPIインターコネクトを介して通信される第8のクロックサイクルの前に、またはこのサイクルにおいてクロックラインをゲーティングすることを含む、例のうちのいずれかに記載の方法。
【0093】
例5:システムのペリフェラルブロックは、書き込み保護入力ノードを含まないか、またはペリフェラルブロックの書き込み保護入力ノードが無効にされる、例のうちのいずれかに記載の方法。
【0094】
例6:それぞれのコマンドは第1の通信の第1のコマンドであり、方法は、ホストによってペリフェラルブロックに送信される第2の通信の第2のコマンドが、ステータスレジスタ書き込みコマンドを含むと判断することと、第2の通信がペリフェラルブロックのステータスレジスタを変更することを阻止するために、ステータスレジスタ書き込みコマンドを変更することと、をさらに含む、例のうちのいずれかに記載の方法。
【0095】
例7:ステータスレジスタ書き込みコマンドを変更することは、ステータスレジスタ書き込みコマンドのビット位置を予め定められたビット値にセットして、変更されたステータスレジスタ書き込みコマンドを提供することと、ペリフェラルブロックに、ステータスレジスタ書き込みコマンドの予め定められたビット値および他のビットを含む変更されたステータスレジスタ書き込みコマンドを渡すことと、を含む、例のうちのいずれかに記載の方法。
【0096】
例8:ペリフェラルブロックが実行する権限がないコマンドを示す情報は、ペリフェラルブロックが実行する権限がないコマンド、およびペリフェラルブロックが実行する権限があるコマンドのテーブルを含む、例のうちのいずれかに記載の方法。
【0097】
例9:通信の監視の前に、ペリフェラルブロックが実行する権限がないコマンド、およびペリフェラルブロックが実行する権限があるコマンドのテーブルを構成することをさらに含む、例のうちのいずれかに記載の方法。
【0098】
例10:ホストによって送信される通信のそれぞれのコマンドをテーブルの情報と比較することは、それぞれのコマンドに基づいて、テーブル内へのインデックス付けを行い、それぞれのコマンドがペリフェラルブロックによる実行の権限があるか否かを判断することを含む、例のうちのいずれかに記載の方法。
【0099】
例11:システムのペリフェラルブロックは、SPIインターコネクトを介してホストに結合されたメモリモジュールを備え、メモリモジュールは、不揮発性メモリもしくはフラッシュメモリのうちの一方を含む、例のうちのいずれかに記載の方法。
【0100】
例12:システムのメモリモジュールに記憶されたバイナリ画像を、このバイナリ画像をメモリモジュールからSPIインターコネクトを介してホストにロードすることを試行する前に検証することをさらに含む、例のうちのいずれかに記載の方法。
【0101】
例13:バイナリ画像の検証の成功に応答して、メモリモジュールがSPIインターフェイスを介してホストにバイナリ画像を送信することを許可すること、またはバイナリ画像の検証の不成功に応答して、メモリモジュールがSPIインターフェイスを介してホストにバイナリ画像を送信することを阻止することを含む、例のうちのいずれかに記載の方法。
【0102】
例14:バイナリ画像は、メモリモジュールの第1の区画に記憶された第1のバイナリ画像であり、方法は、第1のバイナリ画像のための読み出しコマンドのアドレスを操作して、メモリモジュールに、第2のバイナリ画像をメモリモジュールの第2の区画からホストに送信させることをさらに含む、例のうちのいずれかに記載の方法。
【0103】
例15:セキュアなシリアルペリフェラルインターフェイス通信のための回路部を含む集積回路であって、回路部は、機能コアを有するホストと、少なくとも1つのペリフェラルブロックと、ホストおよび少なくとも1つのペリフェラルブロックを結合するシリアルペリフェラルインターフェイス(SPI)インターコネクトと、SPIインターコネクトと作動的に結合され、上記の例のうちのいずれか1つの動作を実行するように構成されたセキュアなSPI通信モジュールと、を備える、集積回路。
【0104】
結論
セキュアなSPI通信を実施するための記載されたシステムおよび方法の態様は、特徴/方法に固有の言語で記載されたが、添付の特許請求の範囲の主題は、上記の例のうちのいずれかに記載のように、記載される特定の特徴または方法に必ずしも限定されない。むしろ、特定の特徴および方法は、セキュアなSPI通信の例示的な実施として開示されたものであり、他の同等の特徴および方法が添付の特許請求の範囲内に含まれることが意図される。さらに、セキュアなSPI通信の様々な態様が記載され、各記載の態様は、独立して、または1つもしくは複数の他の記載の態様に関連して実施することができることを理解されたい。
図1
図2
図3
図4
図5
図6
図7
図8
図9
【手続補正書】
【提出日】2023-11-08
【手続補正1】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項1】
セキュアなシリアルペリフェラルインターフェイス通信のためにシステムのホストに関連付けられたセキュリティ回路部によって実施される方法であって、前記方法は、
前記ホストによって、シリアルペリフェラルインターフェイス(SPI)インターコネクトを介して前記ホストに結合された前記システムのペリフェラルブロックに送信される通信を監視することと、
前記ホストによって送信される前記通信のそれぞれのコマンドを、前記ペリフェラルブロックがいずれのコマンドを実行する権限がないかを示す情報と比較することと、
前記比較に基づいて、前記それぞれのコマンドのうちの1つが、前記ペリフェラルブロックが実行する権限がないコマンドであると判断することと、
前記ペリフェラルブロックが実行する権限がない前記それぞれのコマンドの少なくとも一部分を前記ペリフェラルブロックが受信することを阻止することと、
を含む、方法。
【請求項2】
前記阻止することは、前記ペリフェラルブロックが、前記ホストによって送信された前記通信の前記それぞれのコマンドの前記少なくとも一部分を受信することを阻止するために、前記SPIインターコネクトのチップ選択ラインまたはクロックラインの状態を変更することを含む、請求項1に記載の方法。
【請求項3】
前記阻止することは、前記ペリフェラルブロックが、前記ホストによって送信された前記通信の前記それぞれのコマンドの前記少なくとも一部分を受信することを阻止するために、前記SPIインターコネクトのチップ選択ラインおよびクロックラインの状態を変更することを含む、請求項1に記載の方法。
【請求項4】
前記通信の前記それぞれのコマンドは8ビットを含み、
前記変更することは、それぞれのコマンドの少なくとも第8のビットが前記ペリフェラルブロックによって処理されることを防ぐために、前記それぞれのコマンドの前記第8のビットが前記SPIインターコネクトを介して通信される第8のクロックサイクルの前に、または第8のクロックサイクルにおいて、前記チップ選択ラインをデアサートすることを含む、請求項2または3に記載の方法。
【請求項5】
前記通信の前記それぞれのコマンドは8ビットを含み、
前記変更することは、それぞれのコマンドの少なくとも第8のビットが前記ペリフェラルブロックによって処理されることを防ぐために、前記それぞれのコマンドの前記第8のビットが前記SPIインターコネクトを介して通信される第8のクロックサイクルの前に、または第8のクロックサイクルにおいて前記クロックラインをゲーティングすることを含む、請求項2または3に記載の方法。
【請求項6】
前記それぞれのコマンドは第1の通信の第1のコマンドであり、前記方法は、
前記ホストによって前記ペリフェラルブロックに送信される第2の通信の第2のコマンドが、ステータスレジスタ書き込みコマンドを含むと判断することと、
前記第2の通信が前記ペリフェラルブロックのステータスレジスタを変更することを阻止するために、前記ステータスレジスタ書き込みコマンドを変更することと、
をさらに含む、請求項1~3のいずれか1項に記載の方法。
【請求項7】
前記ステータスレジスタ書き込みコマンドを前記変更することは、
前記ステータスレジスタ書き込みコマンドのビット位置を予め定められたビット値にセットして、変更されたステータスレジスタ書き込みコマンドを提供することと、
前記ペリフェラルブロックに、前記ステータスレジスタ書き込みコマンドの前記予め定められたビット値および他のビットを含む前記変更されたステータスレジスタ書き込みコマンドを渡すことと、
を含む、請求項6に記載の方法。
【請求項8】
前記ペリフェラルブロックが実行する権限がない前記コマンドを示す前記情報は、
前記ペリフェラルブロックが実行する権限がない前記コマンド、および
前記ペリフェラルブロックが実行する権限があるコマンド、
のテーブルを含む、請求項1~3のいずれか1項に記載の方法。
【請求項9】
前記通信の前記監視の前に、前記ペリフェラルブロックが実行する権限がない前記コマンド、および前記ペリフェラルブロックが実行する権限がある前記コマンドの前記テーブルを構成することをさらに含む、請求項8に記載の方法。
【請求項10】
前記ホストによって送信される前記通信の前記それぞれのコマンドを前記テーブルの前記情報と前記比較することは、
前記それぞれのコマンドに基づいて、前記テーブル内へのインデックス付けを行い、前記それぞれのコマンドが前記ペリフェラルブロックによる実行の権限があるか否かを判断することを含む、請求項8に記載の方法。
【請求項11】
前記システムの前記ペリフェラルブロックは、前記SPIインターコネクトを介して前記ホストに結合されたメモリモジュールを備え、前記メモリモジュールは、不揮発性メモリもしくはフラッシュメモリのうちの一方を含むか、または
前記システムの前記ペリフェラルブロックは、書き込み保護入力ノードを含まないか、もしくは前記ペリフェラルブロックの書き込み保護入力ノードが無効にされる、請求項1~3のいずれか1項に記載の方法。
【請求項12】
前記システムの前記メモリモジュールに記憶されたバイナリ画像を、前記バイナリ画像を前記メモリモジュールから前記SPIインターコネクトを介して前記ホストにロードすることを試行する前に検証することをさらに含む、請求項11に記載の方法。
【請求項13】
前記バイナリ画像の検証の成功に応答して、前記メモリモジュールが前記SPIインターフェイスを介して前記ホストに前記バイナリ画像を送信することを許可すること、または
前記バイナリ画像の検証の不成功に応答して、前記メモリモジュールが前記SPIインターフェイスを介して前記ホストに前記バイナリ画像を送信することを阻止すること、
をさらに含む、請求項12に記載の方法。
【請求項14】
前記バイナリ画像は、前記メモリモジュールの第1の区画に記憶された第1のバイナリ画像であり、前記方法は、
前記第1のバイナリ画像のための読み出しコマンドのアドレスを操作して、前記メモリモジュールに、第2のバイナリ画像を前記メモリモジュールの第2の区画から前記ホストに送信させること、
をさらに含む、請求項13に記載の方法。
【請求項15】
セキュアなシリアルペリフェラルインターフェイス通信のための回路部を含む集積回路であって、前記回路部は、
機能コアを有するホストと、
少なくとも1つのペリフェラルブロックと、
前記ホストおよび前記少なくとも1つのペリフェラルブロックを結合するシリアルペリフェラルインターフェイス(SPI)インターコネクトと、
前記SPIインターコネクトと作動的に結合され、請求項1~3のいずれか1項に記載の動作を実行するように構成されたセキュアなSPI通信モジュールと、
を備える、集積回路。
【国際調査報告】