第24回 SPI通信の考え方(2)

データ通信システムを拡張します。

「シリアル通信」

今まで、2種類の通信手順でデータ通信ができることを確認しました。ひとつは1つの信号で時計を見ながらデータ通信を行う方法、もう一つはクロック信号とデータ信号の2つの信号でデータ通信を行う方法です。

通信手順は異なるものの、共通していることがあります。それは、データを1ビットずつ送信していることです。今回は3ビットのデータを扱っていますが、この3ビットのデータを1桁ずつ順番に通信しています。

Pic practice 24 serial communication

このように1桁ずつ順番に通信する方法を「シリアル通信」と呼んでいます。「シリアル」とは「連続」や「一列」という意味です。

ご参考として「シリアル通信」の対となる種類も説明しておきます。「シリアル通信」に対する通信の種類に「パラレル通信」があります。パラレルとは「並列」や「平行」という意味です。

シリアル通信は1ビットずつ通信しますが、パラレル通信は何ビットかのデータを一度に通信します。今回検討しているデータ通信ステムでは、3ビットのデータを送りますので、パラレル通信の場合は以下のように3本のデータ通信線により3ビット同時に通信する、という方式です。

Pic practice 24 parallel communication

ところでシリアル通信とパラレル通信では、どちらが通信速度が速いと思いますか?

例えば8ビットのデータを送る場合、シリアル通信であれば1ビットずつ8回送信する必要があります。一方パラレル通信であれば、8ビットを1回送信すればOKです。

このように考えると、単純計算でパラレル通信の方が8倍早そうですよね。ところが実はシリアル通信の方が高速に通信できるんです。この理由について簡単に説明します。

パラレル通信は、通信速度が速くなると以下のような問題が顕著になってきます。

Pic practice 24 prarllel issue

パラレル通信では複数本の信号線を使いますが、全ての信号線の電気的な特性を全く同じにすることはできず、信号の伝わる速度がそれぞれの線で異なり、各信号線の信号が受信側に到着する時間がズレてしまいます。通信速度が低速の領域ではこのズレはほとんど問題になりませんが、高速になるとちょっとのズレが信号のズレになります。ある程度の速度を超えると、パラレル通信では全ての信号線のタイミングを合わせることは非常に困難になります。

一方、シリアル通信は1ビットずつ送りますので、パラレル通信のようなズレを気にする必要はありません。1ビットの送信時間を物理的な限界まで追求できます。その結果、現在ではパラレル通信よりシリアル通信が高速で通信ができるようになっています(以前はパラレル通信の方が早い時期がありました)。

 

データの送受信

それでは、データ通信システムに戻りたいと思います。

ここまでの検討で、クロック信号とデータ信号を使って、1Fのリビングから2Fの子供部屋に情報を送ることができるようになりました。ところで、このシステム何か足りないですよね。

今のシステムでは、リビングから子供部屋に情報を送ることができても、子供部屋からリビングに返事ができないんです。

そこで、以下の情報を子供部屋から送るようにシステムを改装して通信手順を検討したいと思います。

 

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

子供部屋からリビングに情報を送るには、一番簡単な方法としてはもう1組スイッチと電球を追加すれば大丈夫ですよね。以下のようにシステムを改装してみました。以前の信号の名前は「クロック信号」「データ信号」に変えてあります。

Pic practice 24 clk sdi sdo lines

子供部屋のスイッチを操作すると、リビングの電球を制御することができます。この追加したスイッチより子供部屋から先ほどの返事ができるようにしてみます。

返事も電球の点滅パターンで表現しますので、電球の点灯を1、消灯を0として以下のパターンを割り当てます。3種類の返事ですので、2ビットのデータになります。

点滅パターン 返事
00 すぐ行きます
01 ちょっとしたら行きます
10 今忙しくて行けません

これから、リビングからの情報に対して、上のいずれかの答えを送信するように通信手順を考えていきます。

 

このデータ通信システムの特徴

このデータ通信システムには、ある特徴があります。

このシステムの通信手順では、データはクロック信号の立ち上がり時の値を読むことになっています。この重要なクロック信号を制御するスイッチはリビングに1つだけ用意されています。

ということは、データの通信を行う権限はリビングにいる母親しか持っていないことになります。勉強部屋からデータを送りたくても、クロック信号を制御できない以上、自らクロック信号を制御してデータを送ることができないシステムになっています。

このように、通信を行う制御権を持っている側と、持っていない側がいるシステムでは、制御権を持っている側が「マスター」、持っていない側が「スレーブ」と呼ばれています。今後はマスター、スレーブ、という呼び方もしていきます。

Pic practice 24 master slave

ところで、マスター/スレーブの言葉ですが、「マスター」は主人、「スレーブ」は奴隷という意味からきています。このような用語は今の時代にそぐわない、ということで以前アメリカでは裁判になったこともあります。現在では、辞書にコンピュータ用語として、マスターは制御装置、スレーブは制御される装置、と説明が追加されています。

それでは、通信手順をどのように決めれば子供部屋から返事ができるか考えていきます。

 

信号線の呼び方

システムを改装後、信号線は3本になりました。SPI通信の場合のこれらの信号線の呼び方を説明します。

クロック信号線

SPI通信では、クロック信号の線のことを、シリアル通信をするためのクロック信号、という意味で「シリアルクロック」と呼んでいます。英語では「Seiral Clock」で、「SCK」と略記します。

マスターからスレーブにデータを送る信号線

1Fリビングのマスターから2F勉強部屋のスレーブにデータを送る線は、呼び方が2通りあります。

呼び方(1)
この信号線は、「マスターから出力してスレーブに入力する」信号であることから、「Master Out Slave In」と呼び、「MOSI」と略記します。この呼び方は、役割が明確ですで、マスター側、スレーブ側両方ともこの呼び方ができます。

Pic practice 24 mosi

呼び方(2)
呼び方がもう一つあります。これはマスター側とスレーブ側で呼び方が異なりますので注意が必要です。マスター側では「シリアルデータを出力」することから「Serial Data Out」と呼び、「SDO」と略記します。一方スレーブ側では「シリアルデータを入力」することから「Seiral Data In」と呼び、「SDI」と略記します。

Pic practice 24 sdisdo

同じ信号線で異なる呼び方がありますのでご注意ください。

スレーブとなる温湿度・気圧センサでは「SDI」と表記されています。

Pic practice 24 bme280 sdi

スレーブからマスターにデータを送る信号線

先ほどと逆方向の、2F勉強部屋のスレーブから1Fリビングのマスターにデータを送る線です。こちらも2通りの呼び方がありますが、先ほどとデータ向きが逆になるだけですので、想像はつきそうですよね。

呼び方(1)
この信号線は、データを「マスターに入力するスレーブからの出力」信号であることから、「Master In Slave Out」と呼び、「MISO」と略記します。

呼び方(2)
こちらの信号線も呼び方がもう一つあります。マスター側では「シリアルデータを入力」することから「Serial Data In」と呼び、「SDI」と略記します。一方スレーブ側では「シリアルデータを出力」することから「Seiral Data Out」と呼び、「SDO」と略記します。

Pic practice 24 miso

温湿度・気圧センサでは「SDO」と表記されています。

Pic practice 24 bme280 sdo

今後、タイミングチャートで説明する場合、「SDO/SDI」ではどちら側の信号線を指しているのかわからなくなりますので、「MOSI」「MISO」を使用することにします。

 

通信手順の検討

これから、以下の情報をやり取りする通信手順を検討します。

ポイントは、クロック信号はマスターのみが制御できる、という点です。

今までは3ビットの情報をマスターからスレーブに送るために、クロック信号を3回生成していました。さらに2ビットの情報をスレーブからマスターに送るわけですから、以下の通信手順を追加すれば実現できそうです。

それでは、この通信手順をタイミングチャートにしてみます。以下のタイミングチャートは、リビングの母親から110(掃除を手伝って)という情報を送り、勉強部屋の息子から10(今忙しくて行けない)という返事をするやり取りです。

Pic practice 24 timing chart

だんだん複雑になってきましたね。

この通信では、マスター(リビング)からスレーブ(勉強部屋)に3ビットの用事の情報を送った後、続けてスレーブからマスターに2ビットの返事を送るので、クロックは5つあります。

最初の3クロックでは、クロックの立ち上がりでスレーブは3ビットの情報を読み取りますので、立ち上がり時に110になるようにマスターはMOSI信号線を制御します。スレーブは、クロックとMOSIにより3ビットのデータを読み取ります。

3ビットのデータを読み取ると、用事は「掃除を手伝って」ということが判明しますので、「今忙しくて行けない」という返事をします。この返事は、マスターが生成するクロックに合わせてデータを送信する必要がありますので、続く2回のクロックの立ち上がり時にスレーブは、マスターが「10」を読み取れるようにMISOの信号線を制御します。

SPI通信ではこのように、クロック信号をマスターが制御して、あらかじめ決められた通信手順でマスターはMOSI信号、スレーブはMISO信号を制御しながら通信を行います。

これでデータの送受信ができました。ポイントとしては、送受信とは言っても、スレーブ側は自分の意思でデータを自由に送信できるわけではなく、あらかじめ決められた通信手順に従って、マスターが生成するクロックに合わせてデータを送信する必要がある、という点です。

SPI通信ではもう1本信号線があります。この信号線については次回の記事でシステムを改装して検討します。

 

更新履歴

日付 内容
2018.4.14 新規投稿