どうも、なかしー(@nakac_work)です。
僕は自動車や家電製品のマイコンにプログラミングをする仕事をしています。
マイコンの勉強のために買った参考書を読み進めていくと「SPI通信」が出てくるんじゃないかと思います。
ぶっちゃけ、マイコンの通信系のプログラミングって難しいと思います。
マイコンの内部(レジスタ)を理解して、プログラミングをしないと通信が出来ないからです。
しかし、SPI通信を理解することで、A/D変換用のICやSDカードの読み書きができるようになります。
電子工作によく使われるPICマイコン・Arduino・Raspberry PiにはSPI通信の機能が付いてます。
この記事では次の内容を紹介します。
- SPI通信とは
- SPI通信の流れ
SPI通信とは
SPI通信のざっくりとした特徴を紹介します。
SPI通信とは「シリアル・ペリフェラル・インタフェース」の略です。
略称は、そこまで大事ではないです。
大事なのは「SPI通信はシリアル通信方式」だということです。
SPI通信はシリアル通信方式でデータを1bitずつ送信または受信をします。
SPI通信について他に理解しておくべきことは3つあります。
- マスタ(親)とスレーブ(子)が必要
- 同期式のシリアル通信
- データの送信はギブ&テイク
マスタとスレーブ
SPI通信には、マスタとスレーブが必要です。
マスタとスレーブをラジコンカーで例えるなら、マスタがコントローラーでスレーブがクルマです。コントローラーから信号を送ることでクルマが動きます。
SPI通信では、マスタが通信の開始のタイミングを決めます。
同期式のシリアル通信
マスタからスレーブにクロックを送って、タイミングを合わせる通信方式です。
クロックを使わない非同期式も存在しますが、クロックを使わない代わりにデータにスタート信号とストップ信号が加わるのでデータ量が多くなってしまいます。また、マスタとスレーブのタイミングがズレると、データが変わってしまうこともあります。
その点、同期式はマスタからのクロックを元に通信を行うので、スレーブはデータを確実に受け取れます。
データの送信はギブ&テイク
SPI通信は、マスタから送ったデータ量と同じ分のデータをスレーブは送り返します。
実はスレーブ側では、注射器を押すと中の液体が出てくるように、マスタから送られてきたデータに応じてビットがシフトします。レジスタから溢れたデータがマスタに送られるイメージです。
SPI通信の流れ
SPI通信の流れはこんな感じです。
- チップセレクト(もしくはスレーブセレクト)をLoにする
- SPI通信のバッファもしくは送信用レジスタにデータを入れる
- クロック信号に合わせて、データを1bit送信(受信)する
- チップセレクト(もしくはスレーブセレクト)をHiにする
SPI通信のコンフィギュレーションでは、データを送るタイミングや通信速度の設定などを行います。
設定はスレーブに合わせればOKです。
SPI通信|まとめ
この記事ではSPI通信について紹介しました。
SPI通信の特徴は次の3つです。
- マスタ(親)とスレーブ(子)が必要
- 同期式のシリアル通信
- データの送信はギブ&テイク
電子工作の人気記事
>>ラズベリーパイで実現できることを紹介【マイコンの域を超えた】