1. SPIとは?
SPI(Serial Peripheral Interface)は、主にマイコン(MCU)と周辺機器(センサー、メモリ、ディスプレイなど)を接続するためのシリアル通信プロトコルの一つです。モトローラ(現NXP)によって開発され、高速でフルデュプレックス通信が可能な点が特徴です。
2. SPIの基本構成
SPIは、マスター(Master)とスレーブ(Slave)の関係で動作し、以下の4本の信号線を使用します。
- MOSI(Master Out Slave In)
- マスターからスレーブへデータを送信する線
- MISO(Master In Slave Out)
- スレーブからマスターへデータを送信する線
- SCLK(Serial Clock)
- マスターが生成するクロック信号
- SS(Slave Select)
- スレーブを選択する信号(低電位で選択)
SPIの動作イメージ
3. SPIの動作モード
SPIには4つの動作モードがあり、クロック極性(CPOL)とクロック位相(CPHA)の組み合わせで決まります。
| モード | CPOL | CPHA | クロックの立ち上がり/下がり |
|---|---|---|---|
| 0 | 0 | 0 | 立ち上がりでサンプリング |
| 1 | 0 | 1 | 下がりでサンプリング |
| 2 | 1 | 0 | 下がりでサンプリング |
| 3 | 1 | 1 | 立ち上がりでサンプリング |
4. SPIのメリット・デメリット
メリット
✅ 高速通信(I²Cよりも速い)
✅ フルデュプレックス通信(送受信を同時に行える)
✅ ハードウェア制御がシンプル
デメリット
❌ スレーブごとにSSピンが必要(複数スレーブを接続するとピン数が増える)
❌ マルチマスターには不向き
5. SPIの活用例
6. ArduinoでSPIを使う
Arduinoでは、SPI.hライブラリを使うことで簡単にSPI通信を実装できます。
7. まとめ
SPIは、高速・フルデュプレックス通信が可能な強力なインターフェースです。用途によってI²CやUARTと使い分けることで、より効率的なマイコン制御が可能になります。ぜひ、実際にSPI通信を試してみてください!