シリアルペリフェラルインターフェース

シリアルペリフェラルインターフェース(SPI)
タイプシリアル通信 バス
生産履歴
デザイナーモトローラ
設計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配線

一般的に、SPIには4つの論理信号があります。バリエーションによっては、異なる名前が使われたり、異なる信号が使われたりする場合があります。

略語名前説明
SS
スレーブ選択
特定のスレーブデバイスとの通信を可能にする ためのマスターからのアクティブローチップセレクト信号
SCLK
シリアルクロック
マスターからのクロック信号
モシ
マスターアウト、スレーブイン
マスターからのシリアルデータ出力
味噌
マスターイン、スレーブアウト
スレーブからのシリアルデータ出力

マスターの MOSI はスレーブの MOSI に出力します。スレーブの MISO はマスターの MISO に出力します。

各デバイスは内部的にシリアル通信用のシフト レジスタを使用しており、これらが一緒にチップ間循環バッファを形成します。

スレーブデバイスはトライステート出力を使用する必要があります。これにより、デバイスが選択されていないときにMISO信号がハイインピーダンス(電気的に切断された状態)になります。トライステート出力を持たないスレーブは、外部トライステートバッファを使用せずに他のスレーブとMISOラインを共有することはできません。

データ転送

2つのシフトレジスタを使用してチップ間循環バッファを形成する典型的なハードウェア構成
シリアル・ペリフェラル・インターフェースのアニメーション。このアニメーションは、マスターが8ビットのデータを送信し、同時にスレーブから16ビットのデータを読み取るシナリオを示しています。下のボックスはデバイスのメモリを表しています。

通信を開始するには、まず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タイミング図。CPHA=0の場合は青い線に、CPHA=1の場合は赤い線にデータビットが出力され、反対色の線でサンプリングされます。数字はデータビットを示します。Zは高インピーダンスを示します。

示されているSPIタイミング図については、以下でさらに詳しく説明します。

  • CPOLはクロックの極性を表します。極性は簡単なインバータで変換できます。
    • SCLK CPOL=0は、論理低電圧でアイドル状態になるクロックです
    • SCLK CPOL=1は論理高電圧でアイドル状態になるクロックです。
  • CPHA は、SCLK に対する各データ ビットの送信サイクルの位相を表します。
    • CPHA=0の場合:
      • SS がアクティブになると、最初のデータ ビットが直ちに出力されます。
      • 後続のビットは、SCLK がアイドル電圧レベルに遷移したときに出力されます。
      • サンプリングは、SCLK がアイドル電圧レベルから遷移するときに発生します。
    • CPHA=1の場合:
      • SS がアクティブになった後、 最初のデータ ビットは SCLK の最初のクロック エッジで出力されます
      • 後続のビットは、SCLK がアイドル電圧レベルから遷移するときに出力されます。
      • SCLK がアイドル電圧レベル遷移すると、サンプリングが行われます。
    • これら 2 つのフェーズ間の変換は簡単ではありません。
    • MOSI 信号と MISO 信号は通常、次のビットの送信サイクルが開始するまでの半サイクルの間 (受信ポイントで) 安定しているため、元の仕様に関わらず、柔軟性を確保するために、SPI マスター デバイスとスレーブ デバイスは半サイクル内の異なるポイントでデータをサンプリングする場合があります。

モード番号

極性と位相の組み合わせは、CPOL を上位ビット、CPHA を下位ビットとする次の「SPI モード」番号で表されます。

SPIモードクロック極性
(CPOL)
クロック位相
(CPHA)
データはシフトアウトされますデータは以下でサンプリングされます
000SCLKの立ち下がり、SSがアクティブになると上昇SCLK
101上昇SCLK下降SCLK
210SCLKの立ち上がり、 SSがアクティブになる下降SCLK
311下降SCLK上昇SCLK

注:

  • よく使用される別の表記法では、モードを (CPOL、CPHA) タプルとして表します。たとえば、値 '(0、1)' は CPOL=0 および CPHA=1 を示します。
  • 全二重動作では、マスターデバイスは異なるモードで送信と受信を行うことができます。例えば、モード0で送信しながら同時にモード1で受信することも可能です。
  • ベンダーによって、クロック エッジの場合は CKE、CPHA の反転の場合は NCPHA など、異なる命名スキームが使用される場合があります。

有効なコミュニケーション

一部のスレーブデバイスは、クロックパルス数が規定値を超えるSPI通信を無視するように設計されています。一方、それ以外のデバイスはこれを気にせず、余分な入力を無視し、同じ出力ビットをシフトし続けます。デバイスごとに異なる長さのSPI通信を使用することは一般的です。例えば、SPIを使用してICのスキャンチェーンにアクセスする場合、あるサイズ(例えば32ビット)のコマンドワードを発行し、異なるサイズ(例えば153ビット、スキャンチェーンの各ピンに1つずつ)のレスポンスを受け取ります。

割り込み

割り込みは SPI の範囲外です。割り込みの使用は禁止も指定もされていないため、オプションで実装できます。

主人から奴隷へ

スレーブデバイスとして構成されたマイクロコントローラは、データワードが受信されたときや受信FIFOバッファでオーバーフローが発生したときに、自身に割り込み信号を生成するためのハードウェアサポートを備えている場合があり[6]スレーブ選択入力ラインがローまたはハイにプルダウンされたときに割り込みルーチンを設定することもできます。

奴隷から主人へ

SPIスレーブは、帯域外信号(別の配線)を使用してマスターに割り込み信号を送信することがあります。例としては、タッチスクリーンセンサーからのペンダウン割り込み、温度センサーからの温度制限アラート、リアルタイムクロックチップからのアラームSDIO [注3]オーディオコーデックへのオーディオジャック挿入などが挙げられます。また、ポーリングを用いてマスターへの割り込みを偽装することも可能です( USB 1.1および2.0と同様)。

ソフトウェア設計

SPIは「バスドライバ」ソフトウェア設計に適しています。接続されたデバイスのソフトウェアは、実際の低レベルSPIハードウェアを処理する「バスドライバ」を呼び出すように記述されます。これにより、接続されたデバイスのドライバコードを他のハードウェアやビットバンギングソフトウェア実装に容易に移植できます。

プロトコルのビットバンギング

以下の擬似コードは、SPIプロトコルをマスターとして同時出力と同時入力を行うソフトウェア実装(「ビットバンギング」)の概要を示しています。この擬似コードはCPHA=0かつCPOL=0の場合であり、 SSがアクティブになる前にSCLKがローレベルにプルダウンされ、SCLKの立ち上がりエッジでビットが入力され、SCLKの立ち下がりエッジでビットが出力されます。

  • SCLKをLow、SSをHighに初期化する
  • スレーブを選択するにはSSを低く引きます
  • 転送するバイト数だけループする: [注 4]
    • byte_out次に送信する出力バイトで初期化する
    • 8回ループします:
      • 次の出力ビットをMOSIに左シフト[注5]するbyte_out
      • スレーブのセットアップ時間中はNOP
      • SCLKをハイにする
      • MISOからの次の入力ビットを左シフトしてbyte_in
      • スレーブのホールド時間に対するNOP
      • SCLKをローに引き下げる
    • byte_in最近受信したバイトが含まれており、必要に応じて使用できます。
  • SSをハイにするとスレーブの選択が解除されます

スレーブプロトコルのビットバンギングは上記と似ていますが、異なります。実装としては、SSが立ち下がるまでビジーウェイトするか、 SSが立ち下がる際割り込みルーチンをトリガーし、受信したSCLKが適切に変化したときに、転送サイズに応じてビットをシフトインおよびシフトアウトするといったことが考えられます。

バストポロジ

前の操作セクションでは、単一のスレーブとの基本インターフェースに焦点を当てましたが、SPI は、マルチドロップ、デイジー チェーン、またはエクスパンダー構成を使用して複数のスレーブと通信することもできます。

マルチドロップ構成

マルチドロップ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

SPIを実装した製品の中には、デイジーチェーン構成で接続されるものがあります。これは、最初のスレーブの出力が2番目のスレーブの入力に接続され、これを順次スレーブに接続していき、最後のスレーブの出力がマスターの入力に接続されるというものです。これにより、各スレーブの個々の通信シフトレジスタが実質的に統合され、チェーンを通じてデータをシフトする単一の大きな統合シフトレジスタが形成されます。この構成では、スレーブごとに個別のSSラインを用意するのではなく、マスターから1本のSSラインのみが必要です[7]

SPI固有のスレーブを使用することに加えて、デイジーチェーン接続されたSPIには、より多くの入力ピン(例えば、パラレル入力シリアル出力 74xx165を使用)[8]または出力ピン(例えば、シリアル入力パラレル出力 74xx595を使用)[9]のための個別のシフトレジスタを含めることができ、それらを無限にチェーン接続することができます。デイジーチェーン接続されたSPIと相互運用できる可能性のある他のアプリケーションとしては、SGPIO JTAG [ 10]I2Cなどがあります。

エクスパンダー構成

エクスパンダー構成では、SPI 制御のアドレス指定ユニット (バイナリ デコーダーデマルチプレクサー、シフト レジスタなど) を使用してチップ選択を追加します。

例えば、1つのSSはSPI制御のデマルチプレクサに選択信号を制御するインデックス番号を送信するために使用でき、別のSSはそのインデックスに従ってデマルチプレクサを介してルーティングされ、目的のスレーブを選択します。[11]

長所と短所

利点

  • このプロトコルのデフォルトバージョンでは全二重通信
  • プッシュプルドライバオープンドレインとは対照的に)は比較的良好な信号整合性と高速性を提供する。
  • I²CSMBusよりも高いスループット
    • ただし、SPI のプロトコルには最大クロック速度はありません。
      • 個々のデバイスは許容クロック周波数を指定します
      • 配線と電子機器が周波数を制限する
  • 転送ビットの完全なプロトコル柔軟性
    • 8ビットシンボルに限定されない
    • メッセージのサイズ、内容、目的を任意に選択
  • シンプルなハードウェアとインターフェース
    • スレーブのハードウェア実装には選択可能なシフトレジスタのみが必要です
      • スレーブはマスターのクロックを使用するため、高精度の発振器を必要としません。
      • スレーブはI²CGPIBSCSI とは異なり、固有のアドレスを必要としません。
      • マスターは、クロック信号とSS信号の生成のみを追加で必要とする。
      • シンプルなビットバンギングソフトウェア実装を実現
    • ICパッケージ上の4つのピンと、ボードレイアウトやコネクタの配線のみを使用するため、パラレルインターフェースよりもはるかに少ない。
      • デバイスごとに最大1つの固有信号(SS);その他はすべて共有
        • デイジーチェーン構成では、共有SSを複数必要としない
    • 通常、回路が少ない(プルアップ抵抗を含む)ため、I²Cや SMBusよりも電力要件が低くなります。
    • シングルマスターとは、 CANバスとは異なり、バス仲裁(および関連する障害モード)がないことを意味します。
    • CANバスとは異なり、トランシーバーは不要です
    • 信号は単方向なので、ガルバニック絶縁が容易です。

デメリット

  • 3線式バリアントでも、 ICパッケージではI²Cよりも多くのピンが必要
  • RS-232RS-485CANバスに比べて短い距離しか扱えない(ただし、 RS-422などのトランシーバーを使用すれば距離を延長できる
  • 異なるSPIモードを使用する複数のスレーブが必要な場合、拡張性が大幅に低下します。
    • マスターが異なるモードで頻繁に再初期化する必要がある場合、アクセスが遅くなります
  • 正式な基準はない
    • そのため適合性を検証することは不可能である
    • 既存のバリエーションが多すぎてサポートが複雑化
  • いくつかの利便性のために、組み込みプロトコルのサポートがありません:

アプリケーション

SPIは、次のようなさまざまな周辺機器と通信するために使用されます。

パラレルバスと比較して基板面積と配線面積を大幅に節約できるため、SPIは組み込みシステムにおいて確固たる地位を築いています。これは、ARMMIPSPowerPCなどのハイエンド32ビットプロセッサから、AVRPICMSP430などのローエンドマイクロコントローラまで、ほとんどのシステムオンチッププロセッサに当てはまります。これらのチップには通常、マスターモードまたはスレーブモードで動作可能なSPIコントローラが搭載されています。システム内でプログラム可能なAVRコントローラ(ブランクのものも含む)は、SPIを使用してプログラムできます。[12]

チップまたはFPGAベースの設計では、内部コンポーネント間の通信にSPIが使用されることがあります。チップ上の実装面積は、オンボードの実装面積と同じくらい高価になる場合があります。また、高性能システムでは、FPGAがホストへのスレーブ、センサーへのマスター、あるいはSRAMベースの場合はブートストラップ用のフラッシュメモリとしてSPIを使用する場合があります。

全二重機能により、SPIは単一マスター/単一スレーブのアプリケーションにおいて非常にシンプルかつ効率的です。一部のデバイスは、デジタルオーディオデジタル信号処理通信チャネルなどのアプリケーションにおいて、効率的で迅速なデータストリームを実現するために全二重モードを使用していますが、市販のチップのほとんどは半二重のリクエスト/レスポンスプロトコルを採用しています。

バリエーション

SPI実装には、多種多様なプロトコルバリエーションがあります。送信専用のデバイスもあれば、受信専用のデバイスもあります。スレーブセレクトは、アクティブローではなくアクティブハイになる場合があります。デバイスによっては、最下位ビットを先頭に送信します。信号レベルは、使用するチップによって完全に異なります。基本的なSPIプロトコルにはコマンドコードはありませんが、デバイスごとに独自のコマンドコードプロトコルを定義する場合があります。バリエーションの中には、軽微なものや非公式なものもあれば、公式の定義文書が存在するものもあり、これらは別個のプロトコルでありながら関連のあるプロトコルと見なすことができます。

元の定義

モトローラは1983年に「シリアル周辺機器インタフェース」を統合した3つの6805 8ビットマイクロコンピュータをリストアップしました[13]。 その機能は1984年のマニュアルに記載されています。[14]

AN991

モトローラの1987年アプリケーションノードAN991「シリアルペリフェラルインタフェースを使用した複数のマイクロコンピュータ間の通信」[15](現在はNXPの傘下、最終改訂2002年[5])は非公式にSPIの「公式」定義文書として機能しています。

タイミングの変動

一部のデバイスは、モトローラのCPOL/CPHAモードとは異なるタイミングを持っています。スレーブからマスターへのデータ送信では、マスターからスレーブへのデータ送信とは逆のクロックエッジが使用される場合があります。デバイスは、最初のクロックの前、最後のクロックの後、またはコマンドとその応答の間に、追加のクロックアイドル時間を必要とすることがよくあります。

一部のデバイスには、データの読み取り用とデバイスへのデータ送信用の2つのクロックが搭載されています。多くの読み取りクロックは、スレーブセレクトラインから供給されます。

送信サイズ

送信ワードサイズは様々ですが、多くのSPIチップは8ビットの倍数であるメッセージのみをサポートしています。このようなチップは、JTAGSGPIOプロトコル、あるいは8ビットの倍数ではないメッセージを必要とするその他のプロトコルとは相互運用できません。

スレーブ選択なし

一部のデバイスはスレーブ選択を使用せず、代わりに他の方法を使用してプロトコル ステート マシンのエントリ/終了を管理します。

コネクタ

SPI 用の外部コネクタが必要な人は、独自のコネクタを定義するか、UEXTPmod、さまざまなJTAG コネクタセキュア デジタルカード ソケットなど の別の標準接続を使用します。

フロー制御

一部のデバイスでは、スレーブからマスターへのフロー制御信号を追加して、データの準備が完了したことを示す必要があります。そのため、通常の4線式プロトコルではなく、5線式プロトコルが使用されます。このような準備完了信号または有効信号は、多くの場合アクティブローであり、コマンド後やワード間などの重要なポイントで有効にする必要があります。このような信号がない場合、スレーブの応答時間の最悪ケースに対応するために、データ転送速度を大幅に低下させたり、プロトコルにダミーバイトを挿入したりする必要がある可能性があります。例としては、ADC変換の開始、フラッシュメモリの適切なページのアドレス指定、デバイスファームウェアが応答の最初のワードをロードできるだけのコマンド処理などが挙げられます。(多くのSPIマスターはこの信号を直接サポートしておらず、代わりに固定遅延に依存しています。)

セーフSPI

SafeSPI [16]は、車載アプリケーションにおけるSPIの業界標準です。主な用途は、異なるデバイス間でのセンサーデータの伝送です。

高い信頼性の改造

電気的ノイズの多い環境では、SPIは信号が少ないため、SPIを低電圧差動信号方式に適応させることでコモンモードノイズの影響を減らすことが経済的になります。[17]もう1つの利点は、制御対象デバイスをループバックして信号の整合性をテストするように設計できることです。[18]

インテリジェントSPIコントローラ

キュー型シリアル周辺機器インタフェースQSPI ; § Quad SPIで説明されているQuad SPIとは異なりますが、略称は同じです)は、データキューを使用してSPIバスを介してデータを転送するSPIコントローラの一種です。[19] CPUからの断続的な処理のみでキューとの間の連続的な転送を可能にするラップアラウンドモードを備えています。その結果、周辺機器はCPUに対してメモリマップされた並列デバイスのように見えます。この機能は、A/Dコンバータの制御などのアプリケーションで役立ちます。キュー型SPIの他のプログラム可能な機能には、チップセレクトと転送長/遅延があります。

異なるベンダーの SPI コントローラはそれぞれ異なる機能セットをサポートしています。このようなダイレクト メモリ アクセス(DMA) キューは珍しくありませんが、マルチチャネル バッファ シリアル ポート( MCBSP ) で使用されるものなど、SPI コントローラ自体ではなく別の DMA エンジンに関連付けられている場合があります。[注 6]ほとんどの SPI マスター コントローラは最大 4 つのスレーブ選択のサポートを統合していますが、[注 7]一部のコントローラでは、スレーブ選択を GPIO ラインを介して個別に管理する必要があります。

キューSPIはクアッドSPIとは異なり、一部のプロセッサでは単一の「QSPI」インターフェースをクアッドモードまたはキューモードのどちらでも動作させることが可能なため、混乱を招く可能性があることに注意してください。[20]

3線式

SPIの3線式バリアントは、半二重モードに制限されており、SPIの2つの単方向データライン(MOSIとMISO)の代わりに、SISO(スレーブ出力/スレーブ入力)またはMOMI(マスター出力/マスター入力)と呼ばれる単一の双方向データラインを使用します。3線式は、システム起動時にのみ使用される小型EEPROM、特定のセンサー、Microwireなど、低性能のデバイスに使用される傾向があります。このモードをサポートするSPIコントローラは少ないですが、ソフトウェアで 簡単にビットバンギングできます。

ビット幅拡張

デュアル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]

  • デュアル リードは、マスターからのコマンドとアドレスをシングル モードで送信し、データをデュアル モードで返します。
  • デュアル I/O は、コマンドをシングル モードで送信し、次にアドレスと戻りデータをデュアル モードで送信します。

クワッドSPI

クアッドSPIQSPI ; §インテリジェントSPIコントローラで説明されているQueued-SPIとは異なるが略語は同じ)はデュアルSPIを超えており、2つのI/Oライン(SIO2とSIO3)を追加し、クロックサイクルごとに4ビットのデータを送信します。これもまた、特別なコマンドによって要求され、コマンド自体はシングルモードで送信された後にクアッドモードが有効になります。[21] [22]

SQIタイプ1
コマンドは1行で送信されますが、アドレスとデータは4行で送信されます
SQIタイプ2
コマンドとアドレスは1行で送信されますが、データは4行で送受信されます

QPI/SQI

クアッドSPIをさらに拡張したデバイスの中には、コマンドを含むすべての通信が4本のデータラインで行われる「クアッドエブリシング」モードをサポートするものもあります。[23] これは「QPI」[22] ( Intel QuickPath Interconnectと混同しないでください)または「シリアルクアッドI/O」(SQI)[24]とも呼ばれます。

これには、デバイス内の構成ビットをプログラムする必要があり、リセット後に通信を確立するための注意が必要です。

ダブルデータレート

I/Oに複数の回線を使用することに加えて、一部のデバイスでは、2倍のデータレート伝送を使用して転送速度を上げています。[25] [26]

SGPIO

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のサポートを特徴としています。シリアルクロック速度の改善は特にありませんでした。

JTAG

SPIとJTAG (IEEE 1149.1-2013)プロトコルにはいくつかの類似点がありますが、互換性はありません。JTAGは、信号遅延やスキューパラメータの精度が低いオフボードコントローラからI/Oピンへの信頼性の高いテストアクセスを提供することを特に目的としていますが、SPIは多様な用途に使用されています。厳密にはレベルセンシティブなインターフェースではありませんが、JTAGプロトコルはクロックレートを下げるかクロックのデューティサイクルを変更することで、JTAGデバイス間のセットアップ違反とホールド違反の両方を回復できます。したがって、JTAGインターフェースは非常に高いデータレートをサポートするようには設計されていません。[32]

開発ツール

シングルボードコンピュータ

シングルボードコンピュータは、 SPIハードウェアユニットへのピンアクセスを提供する場合があります。例えば、Raspberry PiのJ8ヘッダーには、Linux ドライバまたはPython経由で使用できる少なくとも2つのSPIユニットが搭載されています

USB-SPIアダプタ

USBポートを搭載したデスクトップPCスマートフォンSPIチップ(例:CH341A/B [33]ベース、FT 221xs [34] )との通信を可能にするUSB​​アダプタは数多く存在します。これらのアダプタは、組み込みシステム、チップ(FPGAASICSoC)、周辺機器のテスト、プログラミング、デバッグに使用されます。また、多くのアダプタはスクリプトやプログラミング機能(例:Visual BasicC / 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 信号には、さまざまな略語が使用されます。(このセクションでは、アクティブ ローを示すオーバーバーは省略します。)

  • シリアルクロック
    • SCK、SCLK、CLK、SCL
  • マスター出力スレーブ入力(MOSI)
    • SIMO、MTSR、SPID - マスターデバイスとスレーブデバイスの両方でMOSIに対応し、相互に接続します。
    • SDI、DI、DIN、SI、SDA - スレーブデバイス上;シリアルデータ入力のさまざまな略語; マスター上のMOSIに接続
    • SDO、DO、DOUT、SO - マスターデバイス上;シリアルデータ出力のさまざまな略語; スレーブ上のMOSIに接続
    • COPI、PICO(周辺機器コントローラ) [ 37] [38]、またはCOTI(コントローラターゲット)[39]
  • マスターインスレーブアウト(MISO)
    • SOMI、MRST、SPIQ - マスターデバイスとスレーブデバイスの両方でMISOに対応し、相互に接続します。
    • SDO、DO、DOUT、SO - スレーブデバイス上; マスター上のMISOに接続
    • SDI、DI、DIN、SI - マスターデバイス上; スレーブ上のMISOに接続
    • CIPO、POCI、[37] [38]または CITO [39]
  • スレーブセレクト(SS)
    • チップセレクト(CS)
    • CE(チップイネーブル)
    • 履歴: SSEL、NSS、/SS、SS#

マイクロチップ社はMOSIとMISOという略語を維持しながら、ホストクライアントを使用しています。 [40]

参照

注記

  1. ^ モトローラのマニュアルのBitsaversアーカイブにおいて、「シリアル・ペリフェラル・インターフェース」に関する最も古い明確な言及は1983年のものです(§ 元の定義を参照)。ウェブ上の情報源の中には、モトローラが68000が発表された1979年にSPIを導入したと主張するものもありますが、その多くは人為的推測や憶測であり、モトローラの1983年版68000マニュアルには「シリアル・ペリフェラル・インターフェース」に関する記述がないため、1979年という日付は信頼できる情報ではないようです。モトローラから当時に関する明確な情報源がある場合のみ、具体的な設計日付を追加してください。
  2. ^ 一部のスレーブでは、動作を開始するためにスレーブ選択信号の立ち下がりエッジが必要です。例えば、Maxim MAX1242 ADCは、ハイからローへの遷移で変換を開始します。
  3. ^ ab SPIの半二重実装(「3線式」SPIとも呼ばれる)のSDIO(シリアルデータI/O)ラインと混同しないでください。ここでは、例えばマスターのMOSI(抵抗経由)とMISO(抵抗なし)がスレーブのSDIOラインに接続されます。
  4. ^ 周辺機器は、データシートに指定されているように、選択時に特定の数(または任意の数)の転送バイトを許可または要求する場合があります。
  5. ^ SPIは通常、最上位ビットを先頭に送信するため、左シフトが使用されます。最下位ビットを先頭に送信する場合は、右シフトを使用することもできます。
  6. ^ Texas Instruments OMAP チップで使用されているマルチチャネル シリアル ポート インターフェイス (McSPI) など。(https://www.ti.com/product/OMAP3530)
  7. ^ at91sam9G20 などの Atmel AT91 チップ上の SPI コントローラは、TI の McSPI よりもはるかにシンプルです。

参考文献

  1. ^ Stoicescu, Alin (2018). 「SPI入門」(PDF) . Microchip .
  2. ^ 「シリアル同期インターフェース(SSI)とは?」2015年1月28日閲覧
  3. ^ abc 3ステップでSPIバス設計を改善
  4. ^ SPIブロックガイドv3.06; Motorola/Freescale/NXP; 2003年。
  5. ^ ab 「AN991/D: シリアルペリフェラルインターフェースを使用した複数のマイクロコンピュータ間の通信」(PDF) . NXP . 2004 [1994]. 2023年4月4日時点のオリジナルよりアーカイブ(PDF) . 2021年10月14日閲覧
  6. ^ 「TMS320x281x シリアルペリフェラルインターフェースリファレンスガイド」Texas Instruments . 2002年. 16~ 17ページ .
  7. ^ Maxim-IC アプリケーションノート 3947:「SPI デバイスのデイジーチェーン接続」
  8. ^ ab Gammon, Nick (2013年3月23日). 「Gammonフォーラム:エレクトロニクス:マイクロプロセッサ:74HC165入力シフトレジスタの使用」. Gammonフォーラム. 2023年7月29日時点のオリジナルよりアーカイブ。 2023年8月3日閲覧
  9. ^ ab Gammon, Nick (2012年1月31日). 「Gammonフォーラム:エレクトロニクス:マイクロプロセッサ:74HC595出力シフトレジスタをポート拡張器として使用する」Gammonフォーラム. オリジナルから2023年7月14日アーカイブ。 2023年8月3日閲覧
  10. ^ インターフェース、1977年、80、84ページ
  11. ^ 「シリアル制御マルチプレクサがSPIチップセレクトを拡張」(PDF) . Premier Farnell . 2001年7月1日. オリジナル(PDF)から2019年8月19日時点のアーカイブ。
  12. ^ 「AVR910 - インシステムプログラミング」(PDF)。2011年3月2日時点のオリジナル(PDF)からアーカイブ。
  13. ^ コンポーネント :: モトローラ :: データブック :: 1983 モトローラ 8 ビット マイクロプロセッサおよび周辺機器データ。
  14. ^ motorola :: dataBooks :: 1984 Motorola シングルチップ マイクロコンピュータ データ。
  15. ^ 「シリアル周辺機器インターフェース 使用した複数のマイクロコンピュータ間の通信」(PDF)。Bitsavers
  16. ^ SafeSPI.org
  17. ^ 「LVDSインターフェースを介したSPIの送信」(PDF) . Texas Instruments . 2021年2月14日閲覧
  18. ^ 「SPIマスターループバックの例」Nordic Semiconductor . 2021年2月14日閲覧
  19. ^ 「Freescale Semiconductor, Inc. - QSM - キューシリアルモジュール - リファレンスマニュアル」(PDF) . NXP . 1996 [1991]. 2019年8月24日時点のオリジナル(PDF)からのアーカイブ。
  20. ^ 「Quad-SPIが高速パラレルデータ伝送を実現」Cadence Design Systems . 2023年1月11日. 2023年6月1日時点のオリジナルよりアーカイブ。 2023年6月30日閲覧
  21. ^ ab 「W25Q16JV 3V 16Mビットシリアルフラッシュメモリ(デュアル/クアッドSPI搭載)」(PDF) (データシート). 改訂D. Winbond . 2016年8月12日. 2017年2月10日閲覧.
  22. ^ abc 「D25LQ64 1.8V Uniform Sector Dual and Quad SPI Flash」(PDF) (データシート)。バージョン0.1。GigaDevice。2011年2月11日。 2017年2月12日時点のオリジナル(PDF)からアーカイブ。 2017年2月10日閲覧
  23. ^ 「QuadSPIフラッシュ:Quad SPIモードとQPIモード」NXPコミュニティフォーラム. 2014年12月. 2016年2月10日閲覧
  24. ^ 「SST26VF032B / SST26VF032BA 2.5V/3.0V 32MビットシリアルクアッドI/O(SQI)フラッシュメモリ」(PDF)(データシート)。バージョンE。Microchip , Inc. 2017年。 2017年2月10日閲覧
  25. ^ Patterson, David (2012年5月). 「Quad Serial Peripheral Interface (QuadSPI) モジュールのアップデート」(PDF) (アプリケーションノート). Freescale Semiconductor . 2016年9月21日閲覧
  26. ^ Pell, Rich (2011年10月13日). 「SPI-DDR NORフラッシュメモリを使用したパフォーマンスの向上」EDN .
  27. ^ abcdefgh 拡張シリアルペリフェラルインターフェース(eSPI)インターフェース基本仕様(クライアントおよびサーバープラットフォーム向け)(PDF)(レポート)。リビジョン1.0。Intel。2016年1月。文書番号327432-004 2017年2月5日閲覧。
  28. ^ 拡張シリアルペリフェラルインターフェース(eSPI)インターフェース仕様(クライアントプラットフォーム向け)(PDF)(レポート)。リビジョン0.6。Intel。2012年5月。文書番号327432-001EN 2017年2月5日閲覧。
  29. ^ 「Intel® 100シリーズ・チップセット・ファミリー PCHデータシート、Vol. 1」(PDF) . 2015年4月15日閲覧
  30. ^ MICROWIRE シリアルインターフェース ナショナルセミコンダクター アプリケーションノート AN-452
  31. ^ COP800ファミリー向けMICROWIRE/PLUSシリアルインターフェース National Semiconductor アプリケーションノート AN-579
  32. ^ IEEE 1149.1-2013
  33. ^ 「UART、SPI、I2C搭載USBブリッジコントローラCH341」WCH . 2025年2月27日閲覧
  34. ^ 「USB to SPI converter」. FTDI . 2020年8月2日. 2021年2月14日閲覧
  35. ^ SPI Storm – カスタム シリアル プロトコルをサポートするシリアル プロトコル ホスト アダプター、Byte Paradigm。
  36. ^ 「Infiniium オシロスコープ用 N5391B I²C および SPI プロトコル トリガおよびデコード」。
  37. ^ ab SPI; OSHWA。
  38. ^ ab 「製品概要 - SPI用電圧変換」(PDF)。2022年3月17日時点のオリジナル(PDF)からアーカイブ。
  39. ^ ab 「シリアル・ペリフェラル・インターフェース(SPI)デバイス」NXP . 2023年6月1日時点のオリジナルよりアーカイブ2023年7月22日閲覧。
  40. ^ Stoicescu, Alin. 「シリアル・ペリフェラル・インターフェース(SPI)入門」Microchip Technology . 2023年12月21日時点のオリジナルよりアーカイブ。 2023年12月21日閲覧
  • Intel eSPI(拡張シリアル・ペリフェラル・インターフェース)
  • SPIチュートリアル
「https://en.wikipedia.org/w/index.php?title=Serial_Peripheral_Interface&oldid=1321485521」から取得