AN-1248:SPI インターフェイス

はじめに

SPI バス・インターフェイスは、用途の広い構成で比較的高い送信レートが可能であるため、同期データ伝送に広く採用されています。

SPI は事実上の業界標準になっていますが、公式に規定されたものではありません。1 つの部品を最大限活用することができるため、これを利点と見なすことがありますが、異なる部品間の相互接続は複雑になってしまいます。

SPI バスは単方向の4 本の線から構成されています。これらの線の名称は、部品間で、更に同じ製品範囲内でさえ、異なることがあります。

  • インターフェイス・イネーブル:インターフェイス・イネーブル:CSSYNCENABLEなど
  • データ入力:SDI、MISO(マスタ用)、MOSI(スレーブ用)など
  • データ出力:SDO、MISO(スレーブ用)、MOSI(マスタ用)など
  • クロック:SCLK、CLK、SCK など

図1 に示すように、各ピンの信号方向について混乱のないように規則に則った名前を定義することから始めることが重要です。

図1. SPI の基本的な接続

図1. SPI の基本的な接続

3 本の線しか使用しないこともあります。例えば、DAC ではデータのリードバックが不要な場合があり、ADC ではマスタからのデータの送信が不要の場合があります。これらの場合、接続は3 線式インターフェイスとして定義することができます。

マスタ–スレーブ間の互換性

最初のステップは、マスタ–スレーブ間接続の互換性を確保することです。SPI インターフェイスは公式な仕様でないため、マスタからスレーブへのデータ、または逆向きのデータがそれぞれの仕様を満たすことが重要です。

データはクロックに同期していますが、CSは同期または非同期のことがあるため、SPI は完全な同期インターフェイスではありません。

完全な同期インターフェイスでは、エッジはサンプリング・エッジと駆動エッジに分けられます。駆動エッジでは、データをバス上で更新できます。サンプリング・エッジでは、SDI/DATA IN ピンのデータが読みこまれます(サンプルされます)。

実用的な点から、バス上のデータはサンプリング・エッジ以外の任意のタイミングで更新することができます。

SPI インターフェイスでは、4 つの送信モードを定義しています。マスタ側は4 つのすべてのモードをサポートできる必要がありますが、マスタが特定のモードと互換性を持たないこともあるため、これを事前に確認しておく必要があります。SPI モードの相互接続のセクションで説明するように、これはインバータの使用により解決することができます。

大部分の部品では、スレーブ動作でのモード設定はできず、1つの動作モードでのみ動作します。ただし、最大2 つのモードで動作するものもあります。

スレーブ側で使用される伝送モードは?

図2 に示すように、タイミング図では、複数のラインと名称を使用しています。

図2. SPI タイミング図の例

図2. SPI タイミング図の例

モードは、データ伝送が開始される(CSをロー・レベルにする)ときのSCLK レベル(場合により極性(CPOL)と呼ばれる)と、サンプリング・エッジ(位相(CPHA)と呼ばれる)によって決定されます(図3 参照)。位相は極性に対する相対的なもので絶対値でないことに注意してください。SPI モードを表1 に示します。

図3. SPI のタイミング

図3. SPI のタイミング

表1. SPI のモード

表1. SPI のモード

これらのモードを定義することは比較的容易です。図4 に示すように、CSの立下がりエッジとSCLK を結ぶ線が存在します(図4 参照)。

図4. 極性モード

図4. 極性モード

この図のケースでは、SCLK はハイ・レベルまたはロー・レベルであることができ、制約はありません。

次にSDI の図には、セットアップとホールドの2 つのタイミングで囲まれる区間が必要です。2 つのタイミングは、バス上にデータが存在し有効でなければならない、サンプル・エッジの前後の時間を意味し、両タイミングはサンプリング・エッジを基準タイミングとして使用します(図5 参照)。

図5. 位相モード

図5. 位相モード

この例では、サンプル・エッジは立下がりエッジです。

以上と表1 から、スレーブ・デバイスはモード1 およびモード2に対応できます。

バス上のデータが更新されるタイミングは?

SDO を使って、データをスレーブからマスタへ転送、あるいはマスタからスレーブへ転送します。データは何時でも更新できますが、特に2 つの方法が採用されています。

1 つ目の方法は、駆動エッジでSDO/DATA OUT ピンを更新する方法です(図7 参照)。

図6. イネーブル時間

図6. イネーブル時間

図7. SDO 駆動エッジでの更新

図7. SDO 駆動エッジでの更新

もう1 つの方法は、サンプリング・エッジの数ナノ秒後にSDO/DATA OUT ピンを更新する方法です(図8 参照)。

図8. 遅延SDO 更新

図8. 遅延SDO 更新

2 つの方法にはそれぞれに技術的な理由がありますが、トレードオフを理解することが重要です。

マスタでは最初の方法が使われます。これはSDO ドライバが高速の切り替えをサポートするように設計されているためです。

スレーブではマスタに比べて駆動能力の低いSDO ドライバを内蔵しているため、使用する方法はデータ転送レートに依存します。

SDO 信号を駆動エッジで更新する場合、信号はサンプリング・エッジの数ナノ秒前に安定している必要があるため、ピンは信号の更新にクロック周期の1/2 以下の時間しか使うことができません。

正しいリードバックをサポートするためには、サンプリング・エッジの前に信号が確実に安定するようにするためSCLK を減らす必要があります。この例では、最大変化時間を36ns としています。

SCLK 立上がりエッジからSDOデータ有効 までの時間 t9 36 ns

これは、最大サイクル時間が36ns + マスタ・セットアップ時間(10ns と仮定)= 46 ns となるため、リードバックの最大SCLK周波数は約10MHz となることを意味します。

サンプリング・エッジの数ナノ秒後にピンを更新する場合、SCLK 周波数を低下させずにリードバックを可能にするようにバス上で信号の安定な値を確保するには、スレーブはSCLK のほぼ全周期を必要とします。

主なトレードオフは、マスタ側が低速の場合にあります。これは、サンプリング・エッジの後の数ナノ秒しかピン上にデータが安定していないため、マスタのホールド時間の制限に反する危険性があるからです。この問題は、ホールド時間が15ns 以上に大きくなると発生します。この場合、DATA IN ピンの新しいデータを必要なだけ遅延させるロジック・ゲートを使うことが推奨されます(図6 参照)。

幾つかのゲート技術とNOR ゲートの伝搬遅延(代表値)を表2に示します。

表2. ゲート技術と伝搬遅延
技術 伝搬遅延
AHC 4.4ns
HC 9ns
HCT 11ns

その他の考慮すべき事項は?

イネーブル時間


イネーブル時間は、SPI インターフェイスをイネーブルしてデータの受信または送信を可能にする速さを決定します。これは一般にSCLKサンプリング・エッジと呼ばれます(図9参照)。

図9. イネーブル時間とディスエーブル時間

図9. イネーブル時間とディスエーブル時間

ディスエーブル時間


ディスエーブル時間は、SPI をディスエーブルして新しく発生するサンプリング・エッジの変化を無視する速さを決定します(図9 参照)。

変換開始信号としてCS


いくつかのADC では、ピン数を減らすためや、小型パッケージへの組み込み、あるいは単に配線の複雑さを減らすために、1本のピンを複数の機能で共用しています。

CS を使って内部で変換開始信号を発生させる場合、2 つの方法があります。

1 つ目の方法

SCLK 信号を内部クロックとして使用するため、連続的なSCLKが必要です。この場合、SCLK の周波数は最大値と最小値の間に制限されます(表3 参照)。

表3. SCLK 周波数制限の例
パラメータ 最小値 最大値 単位 説明
fSCLK 0.01 20 MHz SCLK 周波数

下に説明するイネーブル時間に似たタイミングの制約が、図10のようにあります。さもないと、マスタがサンプリング・エッジを正しく発生できず、あるいは変換が失敗します。

図10. 変換時の連続SCLK

図10. 変換時の連続SCLK

2 つ目の方法

この例ではデバイスは変換クロックを内蔵しています。この場合、LSB ビット変換へのデジタル・フィードスルーの影響を小さくするため、SCLK パルスを発生しないことが推奨されます(図11 参照)。

図11. 変換時に静かなSCLK

図11. 変換時に静かなSCLK

SPI インターフェイスをFPGAではなくハードウェアで構成する場合、SCLK ピンとCS ピンを正確に制御することは不可能です。この場合は、GPIO をCS として使用して、CS とSCLK の関係を正確に制御することが推奨されます。

変換レディ・ピンとしてのSDO

ADC によっては、SDO が2 つの機能を持っています。これは一般にSDO/RDY と表されています。SDO ピンがCS によりディスエーブルされ、変換が完了するまで高インピーダンスを維持します。変換が完了したとき、このピンはロー・レベルになって、変換の終了を表示します。

SPI モードの相互接続

コントローラをスレーブが使用する特定のSPI モードに設定できないため、または同じSPI モードですべてのデバイスを動作させる必要があるため(すなわちデイジーチェーン・モード)、モードを外部から変更しなくてはならないことがあります。

次の2 つのケースを考えます。

  • モードが相補的(MODE1 = MODE3 またはMODE0 = MODE2 )の場合 SCLK ラインにインバータ・ゲートを使用すると、問題は解決されます。
  • モードが相補的でない場合 この場合の解決策は少し複雑になります。インバータとフリップフロップを使用するため、タイミング問題が生ずるのでこれを回避することが推奨されます。.

接続

SPI インターフェイスでは、1 個または複数のスレーブをマスタから制御する様々な接続が可能です。


スタンドアロン接続


この構成では、1 個のスレーブと1 個のマスタのみが存在します(図12 参照)。

図12. スタンドアロン構成

図12. スタンドアロン構成

デイジーチェーン接続


この構成では、1 個のマスタと直列に接続された複数のスレーブが存在します(図13 参照)。

図13. デイジーチェーン構成

図13. デイジーチェーン構成

この構成の主な利点は、必要な接続ライン数が少なくなることです。

このモードで動作させる場合、後続デバイス間のライン伝搬遅延のため、クロック周期を大きくする必要が生じる可能性があります。更に、所要クロックはU1 とU2 の和であるため、クロック数を増やす必要があります。

デイジーチェーン構成での代表的な送信を図14 に示します。先頭のデータ・ワードは接続されたマスタから最も遠いスレーブに、最終のデータ・ワードは最も間近のスレーブに、それぞれ割り当てられます。

図14. デイジーチェーンのタイミング図

図14. デイジーチェーンのタイミング図

デイジーチェーン・モードに設定できるデバイスがありますが、デフォルトでは、デバイスはスタンドアロン・モードでパワーアップします。すなわち、そのままではSDO ピンはデータを出力しません。

この場合、このデバイスをチェーンの先頭に置いて、デバイスに直接書込みを行ってデイジーチェーン・モードをイネーブルすることが推奨されます。モードをイネーブルする前にはSDOは高インピーダンスであるため、SDO ピンにプルアップ(またはプルダウン)抵抗を接続して、チェーン内の2 番目のデバイスへ転送されるデータを制御することを推奨します。

SDO ピンを複数の機能SDO/RDY に使用する場合、同じ問題が生じます。プルアップ抵抗を接続して、電気的問題を回避し、RDY 機能の使用を続けることが推奨されます。


並列構成


この構成では、1 個のマスタと並列に接続された複数のスレーブが存在します(図15 参照)。

図15. 並列構成

図15. 並列構成

この構成では、SCLK とSDI がすべてのデバイス内で共用されます。回路(またはパターン)の寄生容量があるため、クロック周期を単体の場合より少し大きくすることが推奨されます。

この構成での注意として、例えばデバイスをデイジーチェーン・モードに構成した場合のように、幾つかのデバイスではSYNC と同期してSDO をディスエーブルすることはできません。

この場合は、電気的問題を回避するため、SDO ピンをバスに接続しないことが推奨されます。あるいは、SDO ピンをディスエーブルできる場合、直列抵抗をSDO ピンに接続して、最初の送信の電気的問題を最小限に抑え、開始時にSDO ピンをディスエーブルします。

著者

Miguel-Usach

Miguel Usach Merino

Miguel Usach Merinoは、2008年にアナログ・デバイセズに入社しました。スペインのバレンシアでリニア/高精度技術グループに所属するアプリケーション・エンジニアとして業務に携わっています。バレンシア大学で電子工学の学位を取得しています。