en:User:Cburnett - 投稿者自身による作品 このW3C-unspecified ベクター画像はInkscapeで作成されました ., CC 表示-継承 3.0, リンクによる
I, Cburnett, CC 表示-継承 3.0, リンクによる
前回の改めてSPIについてを知る3の記事では、SPI通信のマスターとスレーブ間でのMOSIとMISOについてを触れた。
残りは冒頭の図のSSとSCLKについてが残っているのでそれに触れる。
冒頭の図では一つのマスター(マイコン)に対して、複数のスレーブが繋がっている。
マイコンはどのスレーブからデータを取得するか?の制御でSSを利用する。
SPI通信には詳細設定があり、それらに触れていくと大変なので、教科書でよく見かける図にする。
※これからの説明は下記のページのコードを解析しながら整理した内容になっている。
https://gist.github.com/takakabe/c4fc67451f3908b500413fcac3fadffb
SSはアイドル状態ではHIGH(1)になっており、シリアル通信を開始する時にLOW(0)にする。
一番上のスレーブとデータのやりとりをするのであれば、SS1をLOWにする。
SS1をLOWにした直後からSCLKで規則的なHIGHとLOWのクロック信号を生成する。
このクロック信号を元にして、MOSIとMISOのデータのやりとりが開始する。
一連の動作を図にすると、
になる。
クロックに合わせて、実際のデータを送信する方式が同期形式となるわけで、クロックがあることによって、片方にCPUのような演算装置がない場合のデータの送受信が可能となる。
https://gist.github.com/takakabe/c4fc67451f3908b500413fcac3fadffbのコードでは、データのやりとりを開始した時に最初の12ビットをコマンドアウトという形で送信して、最終的な測定値としては利用しておらず、コマンドアウトの後の12ビットを測定値として扱っている。
※12ビットはAD変換器が12ビットからきている
雑ではあるが、今回のSPI通信とESP8266とRaspberry Piでソケット通信を試すやUARTについてを知る2あたりの記事で見た通信で、IoTにおけるアナログ値を測定した後に遠方のコンピュータに測定値を送るまでの仕組みの理解が進んだ事になる。