I2CとSPIの選び方:主要な違いを徹底解説
はじめに
プロジェクトを設計していて、I2CとSPIのどちらを選ぶべきか迷っていませんか? どちらが自分のプロジェクトに適しているか判断できない場合、この記事が最適な選択をサポートします。
まず前提として、I2CとSPIはともに「ローエンド」の通信プロトコルですが、使いやすく、PCB上のチップ間通信には完璧に機能します。しかし、間違ったプロトコルを選んでしまうと、望ましくない結果を招く可能性があります。ここでは、この2つの似たプロトコルの違いをわかりやすく解説します。
SPIプロトコルとは?
SPI(Serial Peripheral Interface)は、1980年代にモトローラが開発したプロトコルで、当時のマイクロコントローラとEEPROMなどの周辺機器との通信を確立するために作られました。
SPIプロトコルは、電源とグラウンドを除いて4本の信号線を使用して通信を行います。4本のアクティブな信号線は以下の通りです:
- SS(Slave Select): スレーブ選択線(マスターSPIが制御)
- MOSI(Master Out Slave In): マスター出力・スレーブ入力(マスターSPIが制御)
- SCLK(Serial Clock): シリアルクロック(マスターSPIが制御)
- MISO(Master In Slave Out): マスター入力・スレーブ出力(マスターSPIデバイスが制御)
これら4本の線により、マスターSPI(制御デバイス)がスレーブSPI(周辺デバイス)と通信できます。
SPIバス上にはコントローラデバイス(マスター)は1つだけですが、ペリフェラル(スレーブ)の数に制限はありません。ペリフェラルを増やすにはSS線を追加します。以下は、3本の別々のSS線で異なるペリフェラルを制御する例です。
マスターSPIがペリフェラルと通信(データ送受信)したいとき、対応するSS線を「ロー(Low)」にプルダウンします。するとSCLK線がアクティブになり、設定された周波数でハイ・ローを繰り返します。マスターはMOSI線でデータを送出し、同時にMISO線でデータをサンプリングします。一度に通信できるのは1つのペリフェラルとマスターのみです。
I2Cプロトコルとは?
一方、I2C(Inter-Integrated Circuit)は1982年にフィリップスセミコンダクタ(現NXPセミコンダクタ)が開発し、1枚のPCB上のチップ間通信を体系化しました。
SPIと異なり、I2Cは電源とグラウンドを除いて2本の通信線のみを使用します:
- SDA(Serial Data): シリアルデータ線
- SCL(Serial Clock): シリアルクロック線
1本のバスに任意の数のマスターとスレーブを接続できます。SDAとSCLはオープンドレイン構成で、デバイスはラインを「ロー」にのみ駆動できます。そのため、ラインを「ハイ」に戻すためにプルアップ抵抗が必要です。
オープンドレイン設計のおかげで、I2Cでは同一バス上に複数のマスターを配置できます。2つのマスターが同時に通信を開始するとアービトレーション(仲裁)が発生し、一方が送信を停止します。マスターデバイスは通信中にSDA線を監視し、自分が送信中にSDAがローになっているのを検知したら送信を止め、他のマスターに譲ります。
通信開始時、マスターはSTARTコンディションを送信します(SDAがロー、SCLがハイの状態)。続いて、通信相手の7ビットアドレスと読み取りビット(1)または書き込みビット(0)を送信します。バス上のデバイスで、一致する7ビットアドレスを持つものだけがSDAをローにして応答(ACK)します。
I2CとSPIの主な違い
両プロトコルはともに「ローエンド」で、SATA、Ethernet、USBなどの高速プロトコルのような速度や機能は備えていません。しかし、動作原理と機能には明確な違いがあります。
SPIの動作モード
SPIにはクロックの極性と位相を決める4つのモード(モード0〜3)があり、マスターとスレーブは同じモードを使用する必要があります:
- モード0:立ち上がりエッジでデータサンプリング、クロックはアイドル時にロー
- モード1:立ち下がりエッジでデータサンプリング、クロックはアイドル時にロー
- モード2:立ち下がりエッジでデータサンプリング、クロックはアイドル時にハイ
- モード3:立ち上がりエッジでデータサンプリング、クロックはアイドル時にハイ
SPIのデータ転送速度は10 Mbpsを超えることもあり、大量データの転送に適しています。高速更新が必要なLCDや加速度センサーなどでよく使われます。
I2Cのデータ転送
I2Cは1バイトずつパケットで送信し、受信側は各バイトごとにACKビットで応答する必要があります。I2Cには異なる転送速度を持つ3つのモードがあります:
- 標準モード:最大 100 kbps
- ファストモード:最大 400 kbps
- ハイスピードモード:最大 3.4 Mbps
したがって、I2CはSPIより大幅に遅く、温度センサーやA/Dコンバーターなど、低速で問題ない用途に適しています。
I2CとSPIの比較表
| 機能 | SPI | I2C |
|---|---|---|
| ピン駆動方式 | プッシュプル | オープンドレイン |
| 最大速度 | 規定なし(実測10〜100 Mbps) | 100 kbps(標準) / 400 kbps(ファスト) / 3.4 Mbps(ハイスピード) |
| マルチマスター | 不可 | 可 |
| 信号線数 | 4本(デバイス追加ごとにSS線が必要) | 2本 |
| 接続可能ペリフェラル数 | マスターのSS線用ピン数が上限 | 最大112台(7ビットアドレスの場合) |
| フロー制御 | なし | あり(ACK/NACK) |
SPIとI2Cのメリット・デメリット
SPI
メリット
- 消費電力が少ない
- 高速な全二重通信をサポート
デメリット
- バージョンやカスタム版が多く、互換性問題が起きやすい
- 複数ペリフェラル接続時にSS線が追加で必要
- 短距離通信のみ(基板間通信には不向き)
I2C
メリット
- 追加の信号線なしで複数デバイスを制御可能
- 基板間通信も可能(低速だが)
- ノイズ耐性が比較的高い
- 長距離伝送に向く
- SPIより低コスト
デメリット
- 転送速度がSPIより遅い
- SPIより消費電力が大きい
- 1台のデバイスがバスを解放しないとバス全体がロックアップする
選択時に考慮すべき要素
プロトコル選びは価格だけで決めるべきではありません。以下のポイントを検討してください。
ピン数の制約
100ピン以上のマイコンを使いたくない場合、通信に必要な配線数が少ないプロトコルを選ぶのが賢明です。I2Cは2本、SPIは最低4本(スレーブ増加でさらに増える)です。
消費電力
設計によっては消費電力を最小化/最大化したい場合があります。要件に合ったプロトコルを選びましょう。一般的にSPIの方が省電力です。
速度
大量データを転送するなら、1マイクロ秒単位で速度が重要です。高速が必要ならSPI、低速でよければI2Cです。
PCBサイズ
基板サイズが小さい場合、配線スペースを節約できるI2Cが有利です。余裕があればどちらでも構いません。
用途別おすすめプロトコル
| 要件 | SPIが適しているケース | I2Cが適しているケース |
|---|---|---|
| 速度 | 高速転送が必要な設計 | 低速デバイス向けの設計 |
| PCBサイズ | 基板サイズに余裕がある | 小型基板で配線スペースが限られる |
| ピン数 | 追加配線を厭わない | 配線を最小限に抑えたい |
| 消費電力 | 低消費電力デバイス | 高消費電力を許容できるデバイス |
UARTの理解
UART(Universal Asynchronous Receiver/Transmitter)は、組み込みシステムでデバイス間のシリアル通信を確立するための、ICやマイコン内部の物理回路です。UART通信では、送信側と受信側のUARTが直接通信します。マスター/スレーブの概念はなく、2本の線(TxとRx)だけでデータをやり取りします。
まとめ
実際の現場では、SPIとI2Cの両方が幅広く使われています。1つのチップに両方のインターフェースが搭載されていることも珍しくなく、その場合は選択の必要がありません。
しかし、どちらかを選ばなければならない場合:
- 高速転送が必要なら → SPI
- マイコンのピン数が限られるなら → I2C
ご質問があればお気軽にお問い合わせください。喜んでお手伝いします。
産業技術
- 信頼性の高い電力システムのための変圧器油試験必須ガイド
- ラインリアクターでモーターを守る:VFDシステムの必須コンポーネント
- 研削砥石ガイドの必須ガイド:破損と怪我からユーザーを守る
- 精密加工におけるマイクロツールの5つの重要な知見
- TAAコンプライアンス完全解説:サプライヤーが知るべき5つの重要ポイント
- 知っておくべき機械学習の必須アプリケーション9選
- ウォータージェット専門用語集:プロフェッショナル必携のキーワード解説
- ナーリング(ローレット加工)完全解説:テクスチャー仕上げの技術と目的
- CNCオペレーター必須の7つの重要パラメータ設定
- クラッチフェイシング完全マスター:産業用設備のための包括的ガイド
- 開発者必携:マスターすべき7つの必須Reactライブラリ