シリアルインタフェイス I2CとSPIの選択

センサーや表示装置などのデバイスモジュールは多くの種類があり小型になり、また手頃な価格で入手できるようになりました。これらをマイコンまたはRaspberry piなどの小型Linux機で扱うのに容易なシリアルインターフェイスで制御できるものも多く有ります.

シリアルインターフェイスにはUART,I2C,SPI,Single wireなどがあります。UARTは主に一対一の通信に用いられます.Raspberry piでRaspbianをOSとして使っている場合はこのUARTはシリアルコンソール用と割り当てられています。
SPI通信ではマスターとスレーブを定義し、一つのマスターに対して複数のスレーブを持つことができます.スレーブの切り替えはSS(Slave select、CS:chip select, CE:Chip enableとも呼ばれる)信号で行います.Raspberry piには二つのCE信号線が有ります。
I2C通信では二つの信号線、データ線SDAとクロック線SCLによって通信します。(この他にモジュールはVccとGNDも接続します )SPIではMOSI,MISO,SCLK,SSの信号線が必要だったのと比較して信号線が少なくて済みますね。I2Cも複数のモジュールをスレーブとしてつなげることができます.同時に複数のデバイスをつなげた場合はそれそののデバイスが持つアドレスによってデータのやり取りの相手を指定します.同じバスで使うデバイスの持つアドレスが競合しないように気をつけなければなりませんが、標準の7ビットアドレスモードで使う場合は最大で112個のデバイスを扱うことができるのです.

センサーモジュールによっては同じ機能のものでもI2C用とSPI用と2種類有るものや、一つのモデルで設定でI2CとSPIを切り替えられるものも有ります.またI2CのみまたはSPIのみに対応しているデバイスもあります。

自分が実現したい仕様に対して、用いるデバイスがどちらのインターフェイスを持っているか、それと制御するマイコンまたはLinuxボードのインターフェイスの制約条件とを勘案してよりベターな組み合わせを模索する必要が有ります