第25回 SPI通信の考え方(3)

今回のデータ通信システムの検討で、SPI通信の基本形が完成します。

データ通信システムの改装

前回まで検討したシステムで、マスター(リビング)からスレーブ(勉強部屋)に対して情報を送り、その返事をスレーブからマスターに返信することができるようになりました。

ところで、今頃こんなことを説明して申し訳ないのですが、実はこの家には弟がいて、2Fに別の勉強部屋を持っているんです。(予算の都合で、兄と弟がそっくりになってしまいました…)

Pic practice 25 brother

今回は、1Fのリビングから2Fの2つの勉強部屋にどのように情報を送ればよいか考えていきます。

すぐに思いつく方法は、今のシステムをもう一つ別に用意する方法です。

Pic practice 25 two sets

このようにすれば、今まで検討した通信手順で兄と弟と情報のやりとりができます。ただ、このように拡張するとリビングには電球とスイッチのセットが2セット必要になりますし、リビングから出て行く信号は今までの2倍の6つの信号になってしまいます。

この家族は2人兄弟なのでこれでもいいかもしれませんが、もっと人数が多い場合、リビングにはその人数分の電球とスイッチのセットが必要になってしまいます。そこで、リビングの電球とスイッチのセットを増やさずに、兄弟と個別にデータ通信できる方法を検討します。

リビングのスイッチと電球を1セット、ということは、例えばクロック信号は兄弟の2つの部屋で共有するしかありません。1つのスイッチで2個の電球を制御するには、以下のように電球を並列接続すれば制御できます。当然ですが、スイッチを制御すると、2個の電球は全く同じ点滅をします。

Pic practice 25 prarallel lamp

クロック信号(SCK)とデータ信号(MOSI)をこのように接続すると以下のようなシステムになります。

Pic practice 25 sck mosi lines

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

Pic practice 25 parallel switch

データ信号(MISO)をこのように接続すると以下のようなシステムになります。

Pic practice 25 sck mosi miso

かなり複雑になってきました……理解しづらいようでしたら、すべての信号線(クロック、MOSI、MISO)を兄弟で共有している、というポイントだけ押さえていただければ大丈夫です。

このように信号線を共有しましたので、リビングのスイッチと電球は増やさずにすみました。その代わり、当然ながらリビングのスイッチ(SCKとMOSI)を操作すると、両方の勉強部屋の電球が同時に点滅します。リビングから勉強部屋に送る情報が兄に向けてなのか、弟に向けてなのかわからない、という状況になってしまいました。これはなんとしてでも解決する必要があります。

これを解決する方法ですが、SPI通信では意外に簡単な方法が取られています。以下のように、誰あての通信かを知らせるスイッチと電球の組を追加してしまおう、という解決策です。

Pic practice 25 ss lamp

このように追加したスイッチと電球を使って、兄向けなのか弟向けなのかを知らせるようにします。例えば、兄に送るのであれば、データ通信操作をする前に、「兄向け」スイッチを押して、これから始める通信は兄向けであることを知らせます。

Pic practice 25 ss selectec

このように、自分あての電球が点灯したら、これから行われるデータ通信は自分あての情報、というように理解します。

誰あてかの電球を操作したあと、母親はリビングのクロックスイッチとMOSIスイッチを操作して情報を送信します。この際、弟の勉強部屋の電球も点滅しますが、弟は「自分あての通信」の電球が点灯していないので無視します。

なお、この誰あてかの電球は通信している間はずっとONにします。通信が終わったらOFFにします。

 

信号線の呼び方

SPI通信では、この通信先を選択する信号線を「スレーブセレクト」または「チップセレクト」と呼んでいます。

「スレーブセレクト」は文字通り、どのスレーブをセレクト(選択)するか、という信号で、「SS」と略記します。

「チップセレクト」の「チップ」は部品を意味しています。どの部品(チップ)を選択(セレクト)するか、ということでこのように呼ばれていて、「CS」と略記します。

ここからがややこしくなります。

実際のSPI通信のチップセレクト信号は、選択していない時を1、選択している時を0で表現します。

スイッチと電球の例では、選択している時を電球ON(=1)、選択していない時を電球OFF(=0)にしました。このように表現するのは、なんとなく感覚的に合っているので理解しやすいですよね。でもコンピュータの世界では、逆に表現することが普通に出てきます。

ONや有効の時を0、OFFや無効の時を1と表現することを「負論理」と呼んでいます。それに対して、普通に表現することを「正論理」と呼んでいます。(「逆論理」という言い方もあるのではないかと思っていますが、業界用語では「負論理」です)

このような負論理の信号の場合、以下のように記号の上に横線をつけます。

Pic practice 25 ss cs bar

また、この横線のことを「バー」と呼びます。上の表記の読み方はそれぞれ「エスエスバー」「シーエスバー」となります。

特に「シーエスバー」については「CSB」(CS Barの略)と表記されることもあります。温湿度・気圧センサでは「CSB」と表記されています。

Pic practice 25 csb

なお、「スレーブセレクト」の場合、このような表記にすると「SSB」となりますが、「SSB」という表記はみたことがないです(寡聞にして知らないだけかもしれません)。

これまでの信号線の名前をまとめると以下のようになります。これがSPI通信の4つの信号線です。

Pic practice 25 spi signals

温湿度・気圧センサの端子も確認しておきましょう。SPI通信のための4つの信号と残りの2ピンは電源(プラスのVDDとマイナスのGND)です。

Pic pracitce 25 bme280 signals

 

タイミングチャートまとめ

それでは、リビングと複数の勉強部屋と通信するシステムのタイミングチャートをまとめましょう。今までの知識があれば、通信の方法が読み解けると思います。実際に温湿度・気圧センサのプログラムを作成する際、データシートに記載されている以下のようなタイミングチャートを確認しますので、この段階で読めるようにしておきましょう!

以下のチャートは兄向けに情報を送り、兄から返事をもらう通信手順です。今までの内容と照らし合わせて通信手順を確認してみてください。特にCSB(スレーブセレクト信号、SS)は、通信相手に選択された場合に0になる点に注意してください。選択されていない時は1になります。

Pic practice 25 spi timing chart

 

実際のSPI通信手順

以上がSPI通信の基本的な考え方です。これをちょっとだけ変更すると正式なSPI通信手順になります。

次回はSPI通信手順の説明を行い、そのあとチャレンジ課題に挑戦してみます。

一通り通信について理解できたところで、実際の温湿度・気圧センサのプログラム作成に入ります。

 

更新履歴

日付 内容
2018.4.14 新規投稿