Prismjs

2019年9月1日日曜日

SPI通信とは

SPI通信について、自分用メモとして調べたこと、経験したことをまとめる。

SPI通信の概要

SCLK、MOSI、MISO、CSの4線式(電源、GND除く)のデータ通信方法。
マスター側デバイス(マイコン、Arduino、ラズパイ等)とスレーブ側デバイス(温度センサーやA/Dコンバータ等)でデータのやり取りをする。
似たような通信方法としてはI2Cがある。設定や構成にもよるが、SPI通信はI2C通信に比べて高速で動作させることができる。
1つのマスターに対して複数のスレーブをつなげることができる。しかしスレーブの数だけマスターのCSピン数が増えてしまう。
送信用と受信用の線(MOSI・MISO)があるので、コマンドを送りながらデータを受け取ること(全二重通信)が可能(デバイスにより非対応な場合もある)。
I2C等と同様、基本的に同じ基板内のIC同士の通信や隣り合う基板間の通信など近距離通信向けなので長距離伝送には向かない(ノイズがのってしまうので)。ただしSPI通信の信号を差動信号で伝える等の対策でノイズ耐性を上げてやれば数十メートル級の長距離通信も可能(わざわざそこまでして長距離通信する人はほとんどいないようであるが)。
SPI通信は規格がかなりガバガバなので、デバイスにSPI対応と書いてあっても通信できないことがある。たいていの場合は問題ないが、まれにトリッキーな動きをするSPI対応デバイスもあるので気を付けよう。