今回のデータ通信システムの検討で、SPI通信の基本形が完成します。
データ通信システムの改装
前回まで検討したシステムで、リビング(ホスト)から勉強部屋(デバイス)に対して情報を送り、その返事をデバイスからホストに返信することができるようになりました。
ところで、今頃こんなことを説明して申し訳ないのですが、実は弟さんがいるんです。
弟は、兄とは別の勉強部屋を持っているんです。(予算の都合で、兄と弟がそっくりになってしまいました…)

このシステムでは、母親が情報を送るとき、兄か弟のどちら向けなのか明確にする必要があります。
そこで今回は、1Fのリビングから2Fの2つの勉強部屋にどのように情報を送ればよいか考えていきます。
今回完成するシステムがSPI通信の基本形になりますので、じっくり考えていきましょう!
母親から兄か弟のどちらかに情報を送るシステムとしてすぐに思いつく方法は、今のシステムをもう一つ別に用意する方法です。

このようにすれば、今まで検討した通信手順で兄と弟と情報のやりとりができます。
ただ、システムをこのように拡張するとリビングには電球とスイッチのセットが2セット必要になりますし、1階と2階を接続する信号線は今までの2倍の6本必要になってしまいます!
この家族は2人兄弟なのでこれでもいいかもしれませんが、もっと人数が多い場合、リビングにはその人数分の電球とスイッチのセットが必要になってしまいます。
そこで、リビングの電球とスイッチのセットを増やさずに、兄弟と個別にデータ通信できる方法を検討します。
「リビングの電球とスイッチを増やさない」ということは、例えばクロック信号は兄弟の2つの部屋で共有するしかありません。
1つのスイッチで2個の電球を制御するには、以下のように電球を並列接続すれば制御できます。当然ですが、スイッチを制御すると2個の電球は全く同じ点滅をします。

クロック信号(SCK)とデータ信号(MOSI)をこのような考え方で接続すると、次のようなシステムになります。

次に、2つの勉強部屋からリビングに情報を送るデータ信号(MISO)は、次のように電球とスイッチを並列に接続すると、兄弟のどちらでもリビングの電球を制御できます。

データ信号をこのような考え方で接続すると、次のようなシステムになります。

かなり複雑になってきましたね…
このように信号線を共有しましたので、リビングのスイッチと電球は増やさずにすみました。
その代わり、当然ながらリビングのスイッチを操作すると、両方の勉強部屋の電球が同時に点滅してしまいます。
リビングから勉強部屋に送る情報が兄に向けてなのか、弟に向けてなのかわからない、という状況になってしまいました。これはなんとしてでも解決する必要があります。
これを解決する方法ですが、SPI通信では意外に簡単な方法が取られています。
次のように、誰あての通信かを知らせるスイッチと電球の組を追加してしまおう、という解決策です。

このように追加したスイッチと電球を使って、兄向けなのか弟向けなのかを知らせるようにします。
例えば、兄に送るのであれば、データ通信操作をする前に、上のように「兄向け」スイッチを押して、これから始める通信は兄向けであることを知らせます。
このように、自分あての電球が点灯したら、これから行われるデータ通信は自分あての情報、というように理解します。
母親は、宛先の電球を操作したあと、クロックのスイッチとデータのスイッチを操作して情報を送信します。
このとき、弟の勉強部屋の電球も点滅しますが、弟は「自分あての通信」の電球が点灯していないので無視します。
この誰あてかの電球は通信している間はずっとONにします。通信が終わったらOFFにします。
信号線の呼び方
SPI通信では、この通信先を選択する信号線を「スレーブセレクト」または「チップセレクト」と呼んでいます。
「スレーブセレクト」は文字通り、どのスレーブ(デバイス)をセレクト(選択)するか、という信号で「SS」と略記します。
「チップセレクト」の「チップ」は部品を意味しています。
「チップセレクト」はどのチップ(Chip・部品)をセレクトするか、という信号で「CS」と略記します。
ここからがややこしくなります!
実際のSPI通信のセレクト信号は、選択していない時を1、選択している時を0で表現します。
上のスイッチと電球の例では、選択している時を電球ON(=1)、選択していない時を電球OFF(=0)にしました。このように表現するのは、なんとなく感覚的に合っているので理解しやすいですよね。
でもコンピュータの世界では逆に表現、つまりONや有効の時を0、OFFや無効の時を1と表現することが結構あります。
このように、ONや有効の時を0、OFFや無効の時を1と表現することを「負論理」と呼んでいます。
それに対して、ONや有効の時を1、OFFや無効の時を0と表現することを「正論理」と呼んでいます。
このような負論理の信号線の場合、明確にするために次のように記号の上に横線をつけます。

この横線のことを「バー」と呼びます。上の表記の読み方はそれぞれ「エスエスバー」「シーエスバー」となります。
実際の部品では、「シーエスバー」は「CSB」(CS Barの略)と表記されることもあります。
このシリーズ記事で使用している温湿度・気圧センサーでは、次のように「CSB」と表記されています。

ここまでの内容をまとめます。
SPI通信では、「CSB」「SCK」「MOSI」「MISO」の4種類の信号線で通信を行います。

温湿度・気圧センサーの端子も確認しておきましょう。
全部で6ピンありますが、そのうち4ピンはSPI通信用で、残りの電源(プラスのVDDとマイナスのGND)です。
なお、「MOSI」「MISO」ではなく、それぞれ「SDO」「SDI」で表記されている点に注意してください。

タイミングチャートまとめ
それでは、リビングと複数の勉強部屋と通信するシステムのタイミングチャートをまとめましょう!
次のタイミングチャートは、兄向けに情報を送り、兄から返事をもらう通信手順です。(クリックすると拡大できます)
CSB(チップセレクト信号・通信相手を特定する信号)は、特定する場合0になる点に注意してください。

実際のSPI通信手順
今までお疲れさまでした!! 以上がSPI通信の基本的な考え方です。
次回の記事は、実際のSPI通信の補足説明を行います。
更新履歴
日付 | 内容 |
---|---|
2018.4.14 | 新規投稿 |
2025.7.24 | 「マスター」「スレーブ」を「ホスト」「デバイス」に変更 |