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


IT業界では古くから、「master / slave」や「whitelist / blacklist」などの用語を使用してきました。これらは差別的であるとして、中立的な用語を使用する活動が広まっています。
本ページではマスターを「コントローラー」、スレーブを「ペリフェラル」、また「SS(スレーブセレクト)」を「CS(チップセレクト)」と表記します。
用語
| 用語 | 内容 |
|---|---|
| COPI | コントローラーアウト、ペリフェラルイン。コントローラーからペリフェラルへのデータ送信ラインです。 |
| CIPO | コントローラーイン、ペリフェラルアウト。スレーブからマスターへのデータ送信ラインです。 |
| SCK | シリアルクロック。 |
| CS | チップセレクト。SPIバスには複数の機器を接続することができます。そこでコントローラーは通信相手をCSを用いて指定します。 |
SPIバスの特徴
- 送信と受信を同時に行うことができる全二重通信です。
- コントローラーが生成するクロック信号にしたがって通信を行う同期式です。
- 1クロック毎に、コントローラーとペリフェラルは共に1ビットのデータ送信を行います。これは一方向の通信しか必要でない場合にも当てはまります。
- プッシュプル方式であるため通信速度は比較的高速です。I2Cが数Mbpsであるのに対し、SPIは数十Mbps以上となります。I2Cと違い、速度に上限規制はありません。
- バスに複数の機器を接続している場合、通信相手の選択はCS端子で行います。I2Cと比較してアドレス指定が不要な分、通信データ量は少なく済みます。しかしその反面、通信機器が1台増えるたびに必要なバスラインが1線増えるというデメリットはあります。
クロック位相と極性
SPI通信ではクロックの位相(CPHA:phase)と極性(CPOL:polarity)を用いて、4つのモードから1つを選択します。通信相手(ペリフェラル)に合わせたモードを選択してください。
| モード | CPOL | CPHA | サンプリングタイミング | データシフトタイミング |
|---|---|---|---|---|
| 0 | 0 | 0 | SCKの立ち上がり | SCKの立ち下り |
| 1 | 0 | 1 | SCKの立ち下り | SCKの立ち上がり |
| 2 | 1 | 0 | SCKの立ち下り | SCKの立ち上がり |
| 3 | 1 | 1 | SCKの立ち上がり | SCKの立ち下り |
タイミングチャート




拡張SPI
メモリー容量の増大に伴い、通常のSPIでは読み出し速度がボトルネックになりました。このため更なる高速化を目指すべく、拡張仕様が生まれています。
マルチI/O
1本のデータ線では、1クロックで1ビットしかデータ転送できません。ならデータ線数を増やせば高速転送できるよねというのがマルチI/Oです。ただしこのマルチI/Oは半二重通信です。このため送受信を同時に行うことはできません。しかしマルチI/Oはフラッシュメモリー向けの規格で、一方向送信で支障はありません。マルチI/Oで気を付けるべきはクロストーク(隣接する信号線にノイズを混入させる)です。配線の引き回しには気をつけてください。
| 規格名 | データ線数 | 1クロックあたりの転送ビット数 | 伝送方法 |
|---|---|---|---|
| SPI | 1本 | 1ビット | 全二重 |
| Dual SPI | 2本 | 2ビット | 半二重 |
| Quad SPI | 4本 | 4ビット | 半二重 |
| Octal SPI | 8本 | 8ビット | 半二重 |
DDR
SPI通信はクロックの立ち上がり、または立ち下り時に1ビットのデータを送信します。これを立ち上がりと立ち下がりの両方でデータを送信するのがDDR(Double Data Rate)です。これにより1クロックあたりの伝送量が2倍になります。これによるメリットは、下記2つです。
- 同じクロック周波数で転送量が2倍になる。
- 半分のクロック周波数で、同じ量を転送できる。
この2つは同じようで同じではありません。特に重要なのは後者の方です。単純にクロック周波数を増大させると、次のような問題が発生します。
- 消費電力が増大する。
- 信号の反射やノイズが大きくなり、通信エラーが起きやすくなる。
- 高周波成分がEMI(ElectroMagnetic Interference:電磁妨害)の発生を増長する。
これらの問題を抑止する目的にもDDRは有効です。

コメント