SPI (Serial Peripheral Interface)

目次

SPIとは

SPI(Serial Peripheral Interface)は、Motorola, Inc.(現NXP Semiconductors)社の開発したシリアル通信規格です。
SPIはUARTとは違い、基板上のチップ間という極短距離の通信に用いられるのが一般的です。またI2Cと比較すると通信速度が速い反面、通常で4線、最小構成でも3線が必要です。その接続例は下図のようになります。

SPIバスの接続例
  • I2Cと違い、SPIの規格は厳格に定義されていません。このため通信相手の仕様をよく確認してから、採用を決定する必要があります。
master / slave論争

IT業界では古くから、「master / slave」や「whitelist / blacklist」などの用語を使用してきました。これらは差別的であるとして、中立的な用語を使用する活動が広まっています。
本ページではマスターを「コントローラー」、スレーブを「ペリフェラル」、また「SS(スレーブセレクト)」を「CS(チップセレクト)」と表記します。

用語

用語内容
COPIコントローラーアウト、ペリフェラルイン。コントローラーからペリフェラルへのデータ送信ラインです。
CIPOコントローラーイン、ペリフェラルアウト。スレーブからマスターへのデータ送信ラインです。
SCKシリアルクロック。
CSチップセレクト。SPIバスには複数の機器を接続することができます。そこでコントローラーは通信相手をCSを用いて指定します。

SPIバスの特徴

  1. 送信と受信を同時に行うことができる全二重通信です。
  2. コントローラーが生成するクロック信号にしたがって通信を行う同期式です。
  3. 1クロック毎に、コントローラーとペリフェラルは共に1ビットのデータ送信を行います。これは一方向の通信しか必要でない場合にも当てはまります。
  4. プッシュプル方式であるため通信速度は比較的高速です。I2Cが数Mbpsであるのに対し、SPIは数十Mbps以上となります。I2Cと違い、速度に上限規制はありません。
  5. バスに複数の機器を接続している場合、通信相手の選択はCS端子で行います。I2Cと比較してアドレス指定が不要な分、通信データ量は少なく済みます。しかしその反面、通信機器が1台増えるたびに必要なバスラインが1線増えるというデメリットはあります。

クロック位相と極性

SPI通信ではクロックの位相(CPHA:phase)と極性(CPOL:polarity)を用いて、4つのモードから1つを選択します。通信相手(ペリフェラル)に合わせたモードを選択してください。

スクロールできます
モードCPOLCPHAサンプリングタイミングデータシフトタイミング
000SCKの立ち上がりSCKの立ち下り
101SCKの立ち下りSCKの立ち上がり
210SCKの立ち下りSCKの立ち上がり
311SCKの立ち上がりSCKの立ち下り

タイミングチャート

タイミングチャート(モード0)
タイミングチャート(モード1)
タイミングチャート(モード2)
タイミングチャート(モード3)
目次