こんにちは、レポトンです
SPIインターフェースを使ってみたいけれど、信号線の役割や通信モードがよくわからない、I2CやUARTとの違いを説明できないとお悩みではないでしょうか?
そこで今回は、SPIの仕組みから配線、複数デバイス接続、通信できないときの確認方法までを、わかりやすく解説します!

この記事は次のような人におすすめ!
- SPIの基本的な仕組みを知りたい人
- マイコンとセンサー、メモリを接続したい人
- 通信モードや配線のミスを整理したい人
この記事を読むと、SPIの信号線を正しく接続し、用途に合った通信設定やトラブル対策を考えられるようになりますよ。
電子工作や組み込み開発で安定した通信を実現したい方は、ぜひ参考にしてみてくださいね!
それではどうぞ!
1. SPIインターフェースとは?仕組みと特徴
SPI(Serial Peripheral Interface)は、マイコンとセンサー、液晶、フラッシュメモリなどの周辺デバイスを接続するための同期式シリアル通信です。通信を始める側をマスター、応答する側をスレーブと呼び、マスターが出すクロックに合わせてデータを1ビットずつ送受信します。
高速通信に向いている理由
SPIでは、送信線と受信線が分かれているため、送信と受信を同時に行えます。また、アドレス情報を毎回送る方式ではなく、対象デバイスをチップセレクト信号で選びます。そのため通信の手順が比較的単純で、ソフトウェアの処理負担も小さく、高速なデータ転送を実現しやすいのが特徴です。
SPIのメリットと注意点
一方で、SPIには通信速度や電気的な条件を統一する標準規格が細かく定められているわけではありません。デバイスごとに最大クロック周波数、データの並び、通信モードなどが異なる場合があります。つまり、線をつなぐだけでは不十分で、接続先のデータシートを読んで設定を合わせる必要があります。
2. 4本の信号線とマスター・スレーブ構成
一般的なSPI接続では、SCLK、MOSI、MISO、CSの4種類の信号線を使います。名前はメーカーによって少し異なりますが、役割を理解しておけば回路図やデータシートを読み替えられます。
| 信号線 | 役割 | 向きの目安 |
|---|---|---|
| SCLK | 同期用クロック | マスターからスレーブ |
| MOSI | マスターから送るデータ | マスターからスレーブ |
| MISO | スレーブから返すデータ | スレーブからマスター |
| CS(SS) | 通信相手の選択 | マスターからスレーブ |
クロックとデータの関係
SCLKはデータを読むタイミングを共有するための信号です。MOSIとMISOは、クロックの変化に合わせてビットを移動させます。SPIは送信だけでも受信だけでも、内部的にはクロックを動かしてデータを進める仕組みです。そのため、受信したい場合もマスター側からダミーデータを送ってクロックを発生させます。
CSによるデバイス選択
CSは通常、Lowになったデバイスだけを通信対象にします。複数のスレーブを接続するときは、SCLK、MOSI、MISOを共有し、各デバイスに個別のCSを用意する構成が基本です。選ばれていないデバイスはMISOを高インピーダンス状態にして、ほかのデバイスの信号を邪魔しないようにします。
- マスターとスレーブのGNDを共通にする
- MOSIとMISOを機器の向きに合わせて接続する
- 各デバイスのCSが重ならないようにする
3. SPI通信モードとクロック極性・位相の違い
SPI通信モードは、クロックが待機中にHighかLowか、そしてクロックのどの変化でデータを読み取るかを決める設定です。この2つの条件が合わないと、配線が正しくても受信データがずれてしまいます。
CPOLとCPHAの意味
クロック極性はCPOL(Clock Polarity)、クロック位相はCPHA(Clock Phase)で表します。CPOLが0ならクロックのアイドル状態はLow、1ならHighです。CPHAは、データをクロックの最初のエッジで読むか、次のエッジで読むかを示します。これらの組み合わせによって、Mode 0からMode 3までの4モードが決まります。
| モード | CPOL | CPHA | 待機時のクロック |
|---|---|---|---|
| Mode 0 | 0 | 0 | Low |
| Mode 1 | 0 | 1 | Low |
| Mode 2 | 1 | 0 | High |
| Mode 3 | 1 | 1 | High |
設定を決めるときのコツ
モードは経験で推測せず、スレーブ側のデータシートにある「SPI mode」やタイミング図を確認します。マイコンのライブラリでは、CPOLとCPHAの組み合わせをMode番号で指定することが多いですが、ライブラリによって表記が異なる場合もあります。さらに、ビットを最上位から送るMSB firstか、最下位から送るLSB firstかも確認しましょう。

通信モードは「データが返らない」ときに最初に疑いたいポイントです。Mode 0から順番に試すのではなく、タイミング図から読み取るのが近道ですよ。
4. I2C・UARTとの比較と使い分け
SPIが常に最適とは限りません。必要な速度、配線本数、接続するデバイスの数、通信の距離を基準に選ぶと判断しやすくなります。
| 方式 | 主な特徴 | 向いている用途 |
|---|---|---|
| SPI | 高速、クロック同期、CSが必要 | 表示器、メモリ、高速センサー |
| I2C | 2本の信号線で複数機器をアドレス指定 | 低速センサー、設定用IC |
| UART | 非同期、送受信線中心で1対1接続 | PC接続、デバッグ、モジュール通信 |
SPIとI2Cの違い
I2CはSDAとSCLの2本で複数デバイスを接続でき、CS用の配線が不要です。ただし、アドレス管理やプルアップ抵抗が必要で、バス上の機器が増えると通信条件の調整が必要になります。SPIは信号線が多くなりやすい反面、アドレス競合を気にせず高速に扱いやすい方式です。
SPIとUARTの違い
UARTはクロック線を使わず、双方で通信速度をあらかじめ合わせます。少ない線で接続でき、PCとのログ出力にも便利です。一方、クロックの共有がないため、設定したボーレートやフレーム形式がずれると通信できません。複数デバイスを同じバスにつなぎ、高速にデータをやり取りするならSPIが有力です。
5. 配線・速度・複数デバイス接続の設計ポイント
SPIの安定性は、ソフトウェア設定だけでなく配線と信号品質にも左右されます。特にクロックを高速化するほど、配線の長さや分岐、ノイズの影響が表れやすくなります。
配線とクロック速度
信号線はできるだけ短くし、SCLKの配線を長く引き回さないことが基本です。GNDを信号線の近くに配置すると、信号の戻り道が確保されノイズを抑えやすくなります。通信が不安定なときは、最大速度にこだわらずクロックを下げて変化を確認します。必要に応じて、ドライバ側に小さな直列抵抗を入れて波形の反射を抑える方法もあります。
電圧レベルと電源
マイコンと接続先のロジック電圧が同じとは限りません。異なる電圧の信号を直接接続すると、誤動作や部品の破損につながる可能性があります。レベル変換回路の要否、電源電圧、入力のしきい値を確認し、電源投入時のCS状態も設計しておきましょう。
複数デバイスを接続する方法
複数のスレーブを使う場合は、各CSを個別のGPIOへ接続する方式が扱いやすいです。CSをLowにする前に、ほかのデバイスを非選択状態にします。MISOを共有できないデバイスや、CSの極性が異なるデバイスもあるため、接続前に端子仕様を確認してください。
- 使用する通信モードとビット順
- 通常時のCS、SCLK、MISOの状態
- 許容されるクロック速度と配線長
6. 通信できないときの確認手順とよくある原因
SPIが動かないときは、いきなりプログラム全体を疑うより、電源、配線、CS、設定、波形の順に切り分けると効率的です。読み出し値が常に0や255になる場合も、デバイスが選択されていない、MISOが浮いているなど複数の原因が考えられます。
基本的な確認手順
- 電源電圧、GND、リセット状態を確認します。
- SCLK、MOSI、MISO、CSの接続先と信号方向を見直します。
- CSが正しいタイミングで有効になっているか確認します。
- 通信モード、ビット順、クロック速度をデータシートと照合します。
- ロジックアナライザやオシロスコープで実際の波形を確認します。
よくある原因
配線では、MOSIとMISOの取り違え、GNDの未接続、CSの極性間違いが頻出します。設定では、Modeの不一致、最大速度を超えたクロック、読み出し前に必要なコマンドや待ち時間の不足が原因になります。複数デバイス接続時は、非選択デバイスがMISOを解放していないケースにも注意が必要です。
まとめ
SPIは、クロックに同期して高速にデータを送受信できる便利なインターフェースです。SCLK、MOSI、MISO、CSの役割と、マスター・スレーブの関係を押さえると、基本的な配線を組み立てやすくなります。
- 通信モードはCPOLとCPHAの組み合わせで決まる
- I2CやUARTとは、速度・配線数・接続方式で使い分ける
- 通信トラブルは電源、配線、CS、設定、波形の順に確認する
まずは低いクロック速度で1台のデバイスと接続し、正しいモードで読み書きできる状態を作りましょう。その後、配線を整理して速度や接続台数を増やすと、原因を切り分けながら安全に設計できます。

