SPI_three_slaves2

en:User:Cburnett - 投稿者自身による作品 このW3C-unspecified ベクター画像Inkscapeで作成されました ., CC 表示-継承 3.0, リンクによる


SPI_8-bit_circular_transfer

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のデータのやりとりが開始する。


一連の動作を図にすると、

spi_serial

になる。


クロックに合わせて、実際のデータを送信する方式が同期形式となるわけで、クロックがあることによって、片方にCPUのような演算装置がない場合のデータの送受信が可能となる。


https://gist.github.com/takakabe/c4fc67451f3908b500413fcac3fadffbのコードでは、データのやりとりを開始した時に最初の12ビットをコマンドアウトという形で送信して、最終的な測定値としては利用しておらず、コマンドアウトの後の12ビットを測定値として扱っている。

※12ビットはAD変換器が12ビットからきている


雑ではあるが、今回のSPI通信とESP8266とRaspberry Piでソケット通信を試すUARTについてを知る2あたりの記事で見た通信で、IoTにおけるアナログ値を測定した後に遠方のコンピュータに測定値を送るまでの仕組みの理解が進んだ事になる。