プロジェクトで周辺機器とマイクロコントローラを接続する場合、I2C (またはI²C - Inter-Integrated Circuit) またはSPI (Serial Peripheral Interface) のいずれかに遭遇する可能性が高くなります。どちらのプロトコルも、マスターと1つ以上のスレーブ デバイス間の通信を定義します。いくつかのシナリオでは互換性がありますが、各プロトコルには特定の利点と欠点があり、エレガントで高機能なデバイスを実現するには、どのプロトコルを使用するかを選択することが重要です。
SPIとI2C
SPIとI2Cはどちらも1980年代に考案されました。SPIはMotorola社、I2CはPhilips (現在のNXP) 社によって考案されました。SPIは事実上の標準として存在していますが、I2Cはより形式化されています。どちらも同期プロトコルであり、短距離通信に適しており、通常は3.3 Vまたは5 Vの範囲で動作します。
I2Cの利点
ユーザーが特定のアプリケーションにI2Cプロトコルを好む理由は主に2つあります。
1.シンプルさ。I2CとSPIの最も明らかな違いは、I2Cが2線式バスとして動作し、データの転送と同期にはシリアル データ (SDA) ラインとシリアル クロック (SCK) ラインのみが必要であることです。一方、SPIでは、1つのスレーブを制御するために、SCK、マスター出力スレーブ入力 (MOSI)、マスター入力スレーブ出力 (MISO)、スレーブ選択 (SS) の4本のワイヤが必要です。
2.簡単なアドオン。ユーザーが複数のスレーブ デバイスを必要とする場合、SPIはデバイスごとに追加のSSピンを実装します。I2Cシステムで新しいスレーブ デバイスを実装する必要がある場合、各モジュールを識別する7ビット アドレス指定システムを使用して、既存のバスに「クリップオン」するだけです。このI2C方式では適切なアドレス構成が必要ですが、各デバイスに追加の配線を行う負担は回避されます。
SPIの利点
I2Cの配線のシンプルさと標準化は大きな利点ですが、SPIにも魅力的な機能がいくつかあります。
1.コミュニケーション。個別のMISO/MOSIデータ ラインは、データの送信と受信の送信を交互に行う必要があるI2Cの半二重操作とは対照的に、全二重通信が可能であることを意味します。
2.スピード。I2Cは当初データ転送速度を100kbpsと定義していましたが、超高速モードでは400kbpsまたは5Mbpsまで向上することもあります。ただし、SPIでは通信速度の上限は定義されておらず、10 Mbps以上の速度で実装できます。
SPIの利点により、SDカードへのデータの読み取り/書き込みなどのアプリケーションや、データ転送速度が重要なその他のアプリケーションに適しています。逆に、I2Cは、リアルタイム クロックからの読み取りやリモート スピーカーの音量調整など、比較的単純な制御信号を複数の周辺機器に送信する場合に強力になる傾向があります。ユーザーはSPIをリモート スピーカー制御にも利用できます。ただし、SPIの配線要件はより複雑であるため、あまり魅力的なオプションではない可能性があります。
非常に単純化した経験則として、大量のデータを転送する必要がある少数の周辺機器の場合は、SPIの方が適していると言えるでしょう。多くの周辺機器を制御する必要がある場合、特に各周辺機器に少量のデータを転送する場合は、I2Cが最適なオプションです。もちろん、アプリケーションは異なる場合があり、設計者は、いずれかのプロトコルのみをサポートするデバイスが利用可能かどうかも考慮する必要があります。