ビット演算を介してシリアル通信を見るまでの記事で二つのデバイス間でのデータのやりとりに超重要なビット演算を見てきたので、改めて同期形式のシリアル通信について見ていく事にする。



SPI通信はRaspberry PiにPH4502Cを繋いでみたの記事で実際に触れて調べたので、今回からの内容は改めて更に深堀する。

SPIはシリアル・ペリフェラル・インターフェースの略で、ペリフェラルというのはコンピュータ周辺の機器という意味があり、CPUを持つコンピュータとAD変換器のような機器と接続し、データの送受信を行うシリアル通信の一種になる。

シリアル・ペリフェラル・インターフェース - Wikipedia

周辺機器 - Wikipedia



上の図は前にRaspberry PI 4BとAD変換器であるMCP3208を繋いで、pHメーターから得られたデータを読み込んだ時の回路になる。

右側のピンがたくさんある方がRaspberry Piで後ほど改めて触れるが、マスター(master)になり、真ん中のピンが少ない方がMCP3208でスレーブ(slave)になる。

マスターとスレーブという用語はプログラミングに触れていると頻繁に出現し、マスターが制御する側スレーブが制御される側になる。

※マスター(master)の意味は主人、スレーブ(slave)の意味は奴隷

マスタースレーブ - Wikipedia




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


SPIはマスターとスレーブを上の図のように繋ぎ、スレーブ側は複数繋ぐことも出来る。


SPI通信には4本について改めて触れるが、

・SCLK(Serial Clock:CLKに該当):マスターモードの時はクロック出力ピンになり、スレーブモードの時はクロック入力ピンになる

・MISO(Master In Sleve Out:Doutに該当):マスターモードの時はデータ入力ピンになり、スレーブモードの時にはデータ出力ピンになる

・MOSI(Master Out Sleve In:Dinに該当):マスターモードの時はデータ出力ピンになり、スレーブモードの時はデータ入力ピンになる

・SS(Sleve Select:CSに該当):スレーブの制御に用いて、スレーブの数だけ必要になるピン

の構成になっている。


複数のスレーブと繋ぐ場合は、マスター側にあるSS1、SS2、SS3のようにマスター側でGPIOピンを空けておかなければならない。

SSはGPIOピンでHIGH(1)とLOW(2)ができれば良いので、HIGH or LOW以外の役割が当てられていないGPIOピンを用いて良い。


ラズパイ4対応 カラー図解 最新 Raspberry Piで学ぶ電子工作 作る、動かす、しくみがわかる! - ブルーバックスシリーズの特設ページの本に掲載されていたサンプルコードを解読すると、SSのHIGH or LOWを用いることで、マスターがどのスレーブとデータの通信を行うか?といった制御の開始と終了の合図になる。