| タイプ | シリアル通信バス | ||
|---|---|---|---|
| 生産履歴 | |||
| デザイナー | モトローラ | ||
| 設計 | 1980年代初頭頃[注1 ] | ||
| メーカー | 様々な | ||
| デイジーチェーン | デバイスによって異なります | ||
| コネクタ | 未指定 | ||
| 電気 | |||
| 最大電圧 | 未指定 | ||
| 最大電流 | 未指定 | ||
| データ | |||
| 幅 | 1ビット(双方向) | ||
| 最大デバイス数 | マルチドロップはスレーブ選択によって制限されます。デイジーチェーン接続は無制限です。 | ||
| プロトコル | 全二重シリアル | ||
| ピン配置 | |||
| モシ | マスターアウト、スレーブイン | ||
| 味噌 | マスターイン、スレーブアウト | ||
| SCLK | シリアルクロック | ||
| SS | スレーブ選択(1つ以上) | ||
| (ピンには別名がある場合があります) | |||
シリアル ペリフェラル インターフェイス( SPI ) は、同期シリアル通信の事実上の標準(多くのバリエーションがあります)であり、主に組み込みシステムで集積回路間の短距離有線通信に使用されます。
SPIはマスター・スレーブアーキテクチャを採用しており、[ 1 ]マスターデバイスがクロックとチップセレクト信号を駆動することで、1つまたは複数のスレーブデバイスとの通信を調整します。一部のデバイスでは、マスターとスレーブの役割をリアルタイムで切り替えることができます。
モトローラのオリジナル仕様(1980年代初頭)では、4本の論理信号(ラインまたはワイヤとも呼ばれる)を使用して全二重通信をサポートします。半二重通信を実現する3線式シリアルバスや、2線式シリアルバスのI²Cおよび1-Wireと対比するため、 4線式シリアルバスと呼ばれることもあります。
代表的なアプリケーションとしては、セキュア デジタルカード、液晶ディスプレイ、アナログ/デジタルコンバータ、デジタル/アナログ コンバータ、フラッシュメモリ、EEPROMメモリ、さまざまな通信チップなど の周辺チップとマイクロコントローラとのインターフェイスが挙げられます。
SPIは同期シリアルインターフェースですが、[ 2 ]同期シリアルインターフェース(SSI)とは異なります。SSIは差動信号方式を採用しており、単一の単方向通信チャネルのみを提供します。

一般的に、SPIには4つの論理信号があります。バリエーションによっては、異なる名前が使われたり、異なる信号が使われたりする場合があります。
| 略語 | 名前 | 説明 |
|---|---|---|
SS | スレーブ選択 | 特定のスレーブデバイスとの通信を可能にする ためのマスターからのアクティブローチップセレクト信号 |
SCLK | シリアルクロック | マスターからの クロック信号 |
モシ | マスターアウト、スレーブイン | マスターからのシリアルデータ出力 |
味噌 | マスターイン、スレーブアウト | スレーブからのシリアルデータ出力 |
マスターの MOSI はスレーブの MOSI に出力します。スレーブの MISO はマスターの MISO に出力します。
各デバイスは内部的にシリアル通信用のシフト レジスタを使用しており、これらが一緒にチップ間循環バッファを形成します。
スレーブデバイスはトライステート出力を使用する必要があります。これにより、デバイスが選択されていないときにMISO信号がハイインピーダンス(電気的に切断された状態)になります。トライステート出力を持たないスレーブは、外部トライステートバッファを使用せずに他のスレーブとMISOラインを共有することはできません。


通信を開始するには、まずSPIマスターがSSをローにすることでスレーブデバイスを選択します。( SSの上のバーはアクティブロー信号であることを示します。つまり、低電圧は「選択」を意味し、高電圧は「非選択」を意味します。)
アナログからデジタルへの変換など、待機期間が必要な場合、マスターはクロックサイクルを発行する前に少なくともその期間待つ必要があります。[注 2 ]
各SPIクロックサイクルでは、1ビットの全二重伝送が行われます。マスターはMOSIラインに1ビットを送信し、スレーブはMISOラインに1ビットを送信します。その後、各スレーブは対応する受信ビットを読み取ります。このシーケンスは、単方向のデータ転送のみを意図している場合でも維持されます。
単一のスレーブを用いた伝送では、マスターとスレーブの両方にそれぞれ1つのシフトレジスタが使用され、どちらも所定のワードサイズ(例えば8ビット)を持ちます。伝送は通常8ビットワードで構成されますが、他のワードサイズも一般的です。例えば、タッチスクリーンコントローラやTexas InstrumentsのTSC2101などのオーディオコーデックでは16ビットワード、多くのデジタル-アナログコンバータやアナログ-デジタルコンバータでは12ビットワードが用いられます。
データは通常、最上位ビット(MSB) を先頭にシフトアウトされますが、元の仕様では LSBFE (LSB-First Enable) によって、データを最下位ビット (LSB) から転送するか最上位ビット (MSB) から転送するかを制御できます。クロックエッジでは、マスターとスレーブの両方が相手にビットをシフトアウトします。次のクロックエッジでは、各レシーバーは送信されたビットをサンプリングし、シフトレジスタに新しい最下位ビットとして格納します。すべてのビットのシフトアウトとシフトインが完了すると、マスターとスレーブはレジスタ値を交換します。さらにデータを交換する必要がある場合は、シフトレジスタが再ロードされ、このプロセスが繰り返されます。送信は任意のクロックサイクル数継続できます。送信が完了すると、マスターはクロック信号のトグルを停止し、通常はスレーブの選択を解除します。
スレーブデバイスを1台だけ使用する場合は、スレーブ側が許可すればSSピンを論理Lowに固定できます。スレーブデバイスが複数ある場合、マルチドロップ構成ではマスターから各スレーブデバイスに対して独立したSS信号が必要ですが、デイジーチェーン構成では1つのSS信号 のみが必要です。
バス上の選択されていないスレーブはすべて、入力クロックとMOSI信号を無視する必要があります。また、 MISOにおける競合を防ぐため、選択されていないスレーブはトライステート出力を使用する必要があります。トライステートでないスレーブは、これを確実にするために外付けのトライステートバッファが必要になります。[ 3 ]
クロック周波数の設定に加えて、マスターはデータに対するクロックの極性と位相も設定する必要があります。モトローラ[ 4 ] [ 5 ]は、これらの2つのオプションをそれぞれCPOL(クロック極性)とCPHA(クロック位相)と名付けており、多くのベンダーもこの名称を採用しています 。

示されているSPIタイミング図については、以下でさらに詳しく説明します。
極性と位相の組み合わせは、CPOL を上位ビット、CPHA を下位ビットとする次の「SPI モード」番号で表されます。
| SPIモード | クロック極性(CPOL) | クロック位相(CPHA) | データはシフトアウトされます | データは |
|---|---|---|---|---|
| 0 | 0 | 0 | SCLKの立ち下がり、SSがアクティブになると | 上昇SCLK |
| 1 | 0 | 1 | 上昇SCLK | 下降SCLK |
| 2 | 1 | 0 | SCLKの立ち上がり、 SSがアクティブになると | 下降SCLK |
| 3 | 1 | 1 | 下降SCLK | 上昇SCLK |
注:
一部のスレーブデバイスは、クロックパルス数が規定値を超えるSPI通信を無視するように設計されています。一方、それ以外のデバイスはこれを気にせず、余分な入力を無視し、同じ出力ビットをシフトし続けます。デバイスごとに異なる長さのSPI通信を使用することは一般的です。例えば、SPIを使用してICのスキャンチェーンにアクセスする場合、あるサイズ(例えば32ビット)のコマンドワードを発行し、異なるサイズ(例えば153ビット、スキャンチェーンの各ピンに1つずつ)のレスポンスを受け取ります。
割り込みは SPI の範囲外です。割り込みの使用は禁止も指定もされていないため、オプションで実装できます。
スレーブデバイスとして構成されたマイクロコントローラは、データワードが受信されたときや受信FIFOバッファでオーバーフローが発生したときに、自身に割り込み信号を生成するためのハードウェアサポートを持つ場合があり、 [ 6 ]また、スレーブ選択入力ラインがローまたはハイにプルダウンされたときに割り込みルーチンを設定する場合もあります。
SPIスレーブは、帯域外信号(別の配線)を使用してマスターに割り込み信号を送信することがあります。例としては、タッチスクリーンセンサーからのペンダウン割り込み、温度センサーからの温度制限アラート、リアルタイムクロックチップからのアラーム、SDIO [注 3 ]、オーディオコーデックへのオーディオジャック挿入などが挙げられます。また、ポーリングを用いてマスターへの割り込みを偽装することも可能です( USB 1.1および2.0と同様)。
前の操作セクションでは、単一のスレーブとの基本インターフェースに焦点を当てましたが、SPI は、マルチドロップ、デイジー チェーン、またはエクスパンダー構成を使用して複数のスレーブと通信することもできます。

マルチドロップバス構成では、各スレーブは独自のSSを持ち、マスターは一度に1つだけ選択します。MISO、SCLK、MOSIはそれぞれすべてのデバイスで共有されます。これがSPIの一般的な使用方法です。
スレーブのMISOピンは互いに接続されているため、トライステートピン(ハイ、ロー、またはハイインピーダンス)である必要があります。スレーブが選択されていない場合は、ハイインピーダンス出力を適用する必要があります。トライステートをサポートしていないスレーブデバイスは、SS信号で制御されるトライステートバッファチップを追加することで、マルチドロップ構成で使用できます。[ 3 ](スレーブごとに1本の信号線をトライステートにする必要があるだけなので、独立したゲート入力を持つ4つのトライステートバッファを備えた標準的なロジックチップ1つで、最大4つのスレーブデバイスをSPIバスに接続できます。)
注意:すべてのSS信号は、初期化メッセージをスレーブに送信する前に、ハイレベル(スレーブが選択されていないことを示す)で開始する必要があります。これにより、初期化されていない他のスレーブは、自分宛てではないメッセージを無視します。マスターがSSに汎用入出力(GPIO)ピン(デフォルトで未定義の状態になる可能性がある)を使用し、マスターが各デバイスの初期化に別々のソフトウェアライブラリを使用する場合、これは懸念事項となります。1つの解決策は、SSに使用されるすべてのGPIOを、これらのソフトウェアライブラリのいずれかから初期化コードを実行する前に、すべてのスレーブに対して高電圧を出力するように構成することです。もう1つの解決策は、すべてのSS信号が最初にハイレベルになるように、各SSにプルアップ抵抗を追加することです。[ 3 ]

SPIを実装した製品の中には、デイジーチェーン構成で接続されるものがあります。これは、最初のスレーブの出力が2番目のスレーブの入力に接続され、これをさらに次のスレーブへと接続し、最後のスレーブの出力がマスターの入力に戻るというものです。これは、各スレーブの個々の通信シフトレジスタを実質的に統合し、チェーンを通じてデータをシフトする単一の大きな統合シフトレジスタを形成します。この構成では、各スレーブに個別のSSラインではなく、マスターからの単一のSSラインのみが必要です。[ 7 ]
SPI固有のスレーブを使用することに加えて、デイジーチェーン接続されたSPIには、より多くの入力ピン(例えば、パラレル入力シリアル出力74xx165を使用)[ 8 ]または出力ピン(例えば、シリアル入力パラレル出力74xx595を使用)[ 9 ]のための個別のシフトレジスタを含めることができ、無限にチェーン接続することができます。デイジーチェーン接続されたSPIと相互運用できる可能性のある他のアプリケーションとしては、 SGPIO、JTAG、[ 10 ]、I2Cなどがあります。
エクスパンダー構成では、SPI 制御のアドレス指定ユニット (バイナリ デコーダー、デマルチプレクサー、シフト レジスタなど) を使用してチップ選択を追加します。
例えば、1つのSSはSPI制御のデマルチプレクサに選択信号を制御するインデックス番号を送信するために使用でき、別のSSはそのインデックスに従ってデマルチプレクサを介してルーティングされ、目的のスレーブを選択します。[ 11 ]
SPIは、次のようなさまざまな周辺機器と通信するために使用されます。
パラレルバスと比較して基板面積と配線面積を大幅に節約できるため、SPIは組み込みシステムにおいて確固たる地位を築いています。これは、ARM、MIPS、PowerPCなどのハイエンド32ビットプロセッサから、AVR、PIC、MSP430などのローエンドマイクロコントローラまで、ほとんどのシステムオンチッププロセッサに当てはまります。これらのチップには通常、マスターモードまたはスレーブモードで動作可能なSPIコントローラが搭載されています。システム内でプログラム可能なAVRコントローラ(ブランクのものも含む)は、SPIを使用してプログラムできます。[ 12 ]
チップまたはFPGAベースの設計では、内部コンポーネント間の通信にSPIが使用されることがあります。チップ上の実装面積は、オンボードの実装面積と同じくらい高価になる場合があります。また、高性能システムでは、FPGAがホストへのスレーブ、センサーへのマスター、あるいはSRAMベースの場合はブートストラップ用のフラッシュメモリとしてSPIを使用する場合があります。
全二重機能により、SPIは単一マスター/単一スレーブのアプリケーションにおいて非常にシンプルかつ効率的です。一部のデバイスは、デジタルオーディオ、デジタル信号処理、通信チャネルなどのアプリケーションにおいて、効率的で迅速なデータストリームを実現するために全二重モードを使用していますが、市販のチップのほとんどは半二重のリクエスト/レスポンスプロトコルを採用しています。
SPI実装には、多種多様なプロトコルバリエーションがあります。送信専用のデバイスもあれば、受信専用のデバイスもあります。スレーブセレクトは、アクティブローではなくアクティブハイになる場合があります。デバイスによっては、最下位ビットを先頭に送信します。信号レベルは、使用するチップによって完全に異なります。基本的なSPIプロトコルにはコマンドコードはありませんが、デバイスごとに独自のコマンドコードプロトコルを定義する場合があります。バリエーションの中には、軽微なものや非公式なものもあれば、公式の定義文書が存在するものもあり、これらは別個のプロトコルでありながら関連のあるプロトコルと見なすことができます。
モトローラは1983年に「シリアル周辺機器インタフェース」を統合した3つの6805 8ビットマイクロコンピュータをリストアップしました[ 13 ] 。その機能は1984年のマニュアルに記載されています[ 14 ] 。
モトローラの1987年アプリケーションノードAN991「シリアルペリフェラルインタフェースを使用した複数のマイクロコンピュータ間の通信」[ 15 ](現在はNXPの傘下、最終改訂2002年[ 5 ])は、非公式にSPIの「公式」定義文書として機能しています。
一部のデバイスは、モトローラのCPOL/CPHAモードとは異なるタイミングを持っています。スレーブからマスターへのデータ送信では、マスターからスレーブへのデータ送信とは逆のクロックエッジが使用される場合があります。デバイスは、最初のクロックの前、最後のクロックの後、またはコマンドとその応答の間に、追加のクロックアイドル時間を必要とすることがよくあります。
一部のデバイスには2つのクロックがあり、1つはデータ読み取り用、もう1つはデータをデバイスに送信するためのものです。多くの読み取りクロックはスレーブセレクトラインから供給されます。
送信ワードサイズは様々ですが、多くのSPIチップは8ビットの倍数であるメッセージのみをサポートしています。このようなチップは、JTAGやSGPIOプロトコル、あるいは8ビットの倍数ではないメッセージを必要とするその他のプロトコルとは相互運用できません。
一部のデバイスはスレーブ選択を使用せず、代わりに他の方法を使用してプロトコル ステート マシンのエントリ/終了を管理します。
SPI 用の外部コネクタが必要な人は、独自のコネクタを定義するか、UEXT、Pmod、さまざまなJTAG コネクタ、セキュア デジタルカード ソケットなど の別の標準接続を使用します。
一部のデバイスでは、スレーブからマスターへのフロー制御信号を追加して、データの準備が完了したことを示す必要があります。そのため、通常の4線式プロトコルではなく、5線式プロトコルが使用されます。このような準備完了信号または有効信号は、多くの場合アクティブローであり、コマンド後やワード間などの重要なポイントで有効にする必要があります。このような信号がない場合、スレーブの応答時間の最悪ケースに対応するために、データ転送速度を大幅に低下させたり、プロトコルにダミーバイトを挿入したりする必要がある可能性があります。例としては、ADC変換の開始、フラッシュメモリの適切なページのアドレス指定、デバイスファームウェアが応答の最初のワードをロードできるだけのコマンド処理などが挙げられます。(多くのSPIマスターはこの信号を直接サポートしておらず、代わりに固定遅延に依存しています。)
SafeSPI [ 16 ]は、車載アプリケーションにおけるSPIの業界標準です。主な用途は、異なるデバイス間でのセンサーデータの伝送です。
電気的ノイズの多い環境では、SPIは信号が少ないため、SPIを低電圧差動信号方式に適応させることでコモンモードノイズの影響を減らすことが経済的になります。[ 17 ]もう1つの利点は、制御対象デバイスをループバックして信号の整合性をテストするように設計できることです。[ 18 ]
キュー型シリアル周辺機器インタフェース(QSPI ; § Quad SPIで説明されているQuad SPIとは異なりますが、略称は同じです)は、データキューを使用してSPIバスを介してデータを転送するSPIコントローラの一種です。 [ 19 ]ラップアラウンドモードがあり、CPUから断続的に処理するだけでキューとの間で連続的に転送できます。その結果、周辺機器はCPUに対してメモリマップされた並列デバイスのように見えます。この機能は、A/Dコンバータの制御などのアプリケーションで役立ちます。キュー型SPIの他のプログラム可能な機能には、チップセレクトと転送長/遅延があります。
異なるベンダーの SPI コントローラはそれぞれ異なる機能セットをサポートしています。このようなダイレクト メモリ アクセス(DMA) キューは珍しくありませんが、マルチチャネル バッファ シリアル ポート( MCBSP ) で使用されるものなど、SPI コントローラ自体ではなく別の DMA エンジンに関連付けられている場合があります。[注 4 ]ほとんどの SPI マスター コントローラは最大 4 つのスレーブ選択のサポートを統合していますが、[注 5 ] GPIO ラインを介してスレーブ選択を個別に管理する必要があるものもあります。
キューSPIはクアッドSPIとは異なることに注意してください。一部のプロセッサでは、単一の「QSPI」インターフェースをクアッドモードまたはキューモードのいずれかで動作させることさえあります。[ 20 ]
SPIの3線式バリアントは、半二重モードに制限されており、SPIの2つの単方向データライン(MOSIとMISO)の代わりに、SISO(スレーブ出力/スレーブ入力)またはMOMI(マスター出力/マスター入力)と呼ばれる単一の双方向データラインを使用します。3線式は、システム起動時にのみ使用される小型EEPROM、特定のセンサー、Microwireなど、低性能の部品に使用される傾向があります。このモードをサポートするSPIコントローラは少ないですが、ソフトウェアで 簡単にビットバンギングできます。
SPIの全二重特性を利用しない場合、拡張機能は両方のデータピンを半二重構成で使用し、クロックサイクルごとに2ビットを送信します。通常、デュアルモードで応答を要求するコマンドバイトが送信され、その後MOSIラインはSIO0(シリアルI/O 0)になり、偶数ビットを伝送します。一方、MISOラインはSIO1になり、奇数ビットを伝送します。データは最上位ビットから送信されますが、SIO1は各バイトのビット7、5、3、1を伝送し、SIO0はビット6、4、2、0を伝送します。
これは大量のデータを送信する必要があるSPI ROMで特に人気があり、2つのバリエーションがあります。[ 21 ] [ 22 ]
クアッドSPI(QSPI ; § インテリジェントSPIコントローラで説明されているQueued-SPIとは異なるが略称は同じ)はデュアルSPIを超えており、2つのI/Oライン(SIO2とSIO3)を追加し、クロックサイクルごとに4ビットのデータを送信します。これもまた、特別なコマンドによって要求され、コマンド自体はシングルモードで送信された後にクアッドモードが有効になります。[ 21 ] [ 22 ]
クアッドSPIをさらに拡張したデバイスの中には、コマンドを含むすべての通信が4本のデータラインで行われる「クアッドエブリシング」モードをサポートするものもあります。[ 23 ] これは「QPI」[ 22 ] ( Intel QuickPath Interconnectと混同しないでください)または「シリアルクアッドI/O」(SQI)[ 24 ]とも呼ばれます。
これには、デバイス内の構成ビットをプログラムする必要があり、リセット後に通信を確立するための注意が必要です。
I/Oに複数の回線を使用することに加えて、一部のデバイスでは、ダブルデータレート伝送を使用して転送速度を上げています。[ 25 ] [ 26 ]
SGPIOは、特定のバックプレーン管理アクティビティ向けに設計された、SPI用の別の(互換性のない)アプリケーションスタックです。SGPIOは3ビットのメッセージを使用します。
インテルは、Low Pin Count(LPC)バスの後継として、 Enhanced Serial Peripheral Interface(eSPI)バスを開発しました。インテルは、マザーボードに必要なピン数を削減し、LPCと比較してスループットを向上させること、動作電圧を1.8ボルトに下げてチップ製造プロセスの小型化を促進すること、eSPI周辺機器がホストとSPIフラッシュデバイスを共有できるようにすること(LPCバスではLPC周辺機器によるファームウェアハブの使用は許可されていませんでした)、従来の帯域外ピンをeSPI経由でトンネル化すること、そしてシステム設計者がコストと性能のバランスを取れるようにすることを目指しています。[ 27 ] [ 28 ]
eSPIバスは、SPIデバイスと共有してピン数を節約することも、SPIバスから分離してパフォーマンスを向上させることもできます。特にeSPIデバイスがSPIフラッシュデバイスを使用する必要がある場合に有効です。[ 27 ]
この規格は、eSPIスレーブがマスターにサービスを要求するために使用するAlert#信号を定義します。パフォーマンス重視の設計、またはeSPIスレーブが1つだけの設計では、各eSPIスレーブのAlert#ピンは、各スレーブ専用のeSPIマスターのAlert#ピンに接続されます。これにより、eSPIマスターはどのeSPIスレーブがサービスを必要としているかを認識し、どのデバイスがサービスを必要としているかを判断するためにすべてのスレーブをポーリングする必要がないため、低レイテンシのサービスを許可できます。複数のeSPIスレーブを備えた低予算設計では、すべてのスレーブのAlert#ピンがeSPIマスターの1つのAlert#ピンにワイヤードOR接続で接続されます。そのため、サービスを必要とする1つ以上の周辺機器によってAlert#信号がローレベルにプルダウンされた場合、マスターはすべてのスレーブをポーリングしてサービスを必要とするスレーブを特定する必要があります。すべてのデバイスがサービスを受けた後、どのeSPIスレーブもサービスを必要としないためAlert#信号がローレベルにプルダウンされ、Alert#信号がハイレベルになります。[ 27 ]
この規格により、設計者は20~66MHzの速度で1ビット、2ビット、または4ビットの通信を使用できるため、性能とコストのトレードオフが可能になります。[ 27 ]
汎用入出力(GPIO)やシステム管理バス(SMBus)のようなLPCの帯域外通信は、eSPIを使用するマザーボード設計からこれらのピンを削除するために、それぞれ仮想ワイヤサイクルと帯域外メッセージサイクルを介してeSPIを介してトンネリングする必要があります。[ 27 ]
この規格は、データ長が 1 バイトから 4 キロバイトの標準メモリ サイクル、標準メモリ サイクルに比べてオーバーヘッドがはるかに少ないデータ長が 1、2、4 バイトの短いメモリ サイクル、オーバーヘッドも低いデータ長が 1、2、4 バイトの I/O サイクルをサポートしています。これにより、128 バイトのファームウェア ハブ読み取りサイクルを除くすべてのサイクルでバスのスループットと時間の半分以上がオーバーヘッドに費やされる LPC バスに比べて、オーバーヘッドが大幅に削減されます。標準メモリ サイクルでは、1 バイトから 4 キロバイトまでの長さが許可されているため、その大きなオーバーヘッドを大規模なトランザクションで償却できます。eSPI スレーブは、すべてのメモリ サイクルのバス マスター バージョンを開始できます。LPC バス仕様で導入されたバス マスター I/O サイクル、および LPC バス仕様で導入された 32 ビット バリアントを含む ISA スタイルの DMA は、eSPI には存在しません。したがって、この規格ではバスマスターメモリサイクルのみがDMAとして許可されています。[ 27 ]
eSPIスレーブは、eSPIマスターをプロキシとして使用して、要求元のeSPIスレーブに代わって標準SPIフラッシュメモリスレーブ上でフラッシュ操作を実行することができます。[ 27 ]
64ビットのメモリアドレス指定も追加されましたが、同等の32ビットアドレスがない場合にのみ許可されます。[ 27 ]
インテルZ170チップセットは、このバスか、ISAスタイルのDMA機能がなく、標準の33MHzではなく24MHzにアンダークロックされたLPCバスの変種のいずれかを実装するように構成できます。[ 29 ]
eSPI バスはAMD Ryzenチップセットでも採用されています。
Microwire [ 30 ](しばしばμWireと綴られる)は、本質的にSPIの前身であり、ナショナル セミコンダクターの商標です。SPIの厳密なサブセットであり、半二重通信でSPIモード0を使用します。Microwireチップは、新しいSPIバージョンよりも低いクロックレートを必要とする傾向があり、例えば2MHz対20MHzです。一部のMicrowireチップは3線式モードもサポートしています。
Microwire/Plus [ 31 ]はMicrowireの拡張版であり、全二重通信とSPIモード0および1のサポートを特徴としています。シリアルクロック速度の改善は特にありませんでした。
SPIとJTAG (IEEE 1149.1-2013)プロトコルにはいくつかの類似点がありますが、互換性はありません。JTAGは、信号遅延やスキューパラメータの精度が低いオフボードコントローラからI/Oピンへの信頼性の高いテストアクセスを提供することを特に目的としていますが、SPIは多様な用途に使用されています。JTAGプロトコルは厳密にはレベルセンシティブなインターフェースではありませんが、クロックレートを下げるかクロックのデューティサイクルを変更することで、JTAGデバイス間のセットアップ違反とホールド違反の両方を回復できます。したがって、JTAGインターフェースは非常に高いデータレートをサポートするようには設計されていません。[ 32 ]
シングルボードコンピュータは、 SPIハードウェアユニットへのピンアクセスを提供する場合があります。例えば、Raspberry PiのJ8ヘッダーには、LinuxドライバまたはPython経由で使用できる少なくとも2つのSPIユニットが搭載されています。
USB搭載のデスクトップPCやスマートフォンとSPIチップ(例:CH341A/B [ 33 ]ベース、FT 221xs [ 34 ] )との通信を可能にするUSBアダプタは数多く存在します。これらのアダプタは、組み込みシステム、チップ( FPGA、ASIC、SoC )、周辺機器のテスト、プログラミング、デバッグに使用されます。また、多くのアダプタはスクリプトやプログラミング機能(例:Visual Basic、C / C++、VHDL )も提供しており、 flashrom、IMSProg、SNANDer、avrdudeなどのオープンソースプログラムと組み合わせて、フラッシュ、EEPROM、ブートローダ、BIOSのプログラミングに使用できます。
SPIの主要なパラメータは、シリアルインターフェースの最大サポート周波数、コマンド間の遅延、およびSPIコマンドの最大長です。現在、市場には、事実上無制限のアクセス長で最大100MHzのシリアルインターフェースをサポートするSPIアダプタが存在します。
SPIプロトコルは事実上の標準であるため、一部のSPIホストアダプタは、従来の4線式SPI以外のプロトコルをサポートする機能も備えています(たとえば、Quad-SPIプロトコルやSPIから派生した他のカスタムシリアルプロトコルのサポート[ 35 ])。
ロジックアナライザは、高速波形を収集、タイムスタンプ付け、解析、デコード、保存、表示し、デバッグと開発を支援するツールです。ほとんどのロジックアナライザは、SPIバス信号を人間が判読できるラベル付きの高レベルプロトコルデータにデコードする機能を備えています。
SPI波形はアナログチャンネル(および/またはミックスドシグナルオシロスコープのデジタルチャンネル経由)で観測することができます。 [ 36 ]ほとんどのオシロスコープベンダーは、トリガー機能付きのSPIプロトコル解析(2線式、 3線式、4線式SPIの 両方)のオプションサポートを提供しています。
4 つの一般的な SPI 信号には、さまざまな略語が使用されます。(このセクションでは、アクティブ ローを示すオーバーバーは省略します。)
マイクロチップ社ではMOSIとMISOという略語を使いながらも、ホストとクライアントという用語を使用している。 [ 40 ]