今回は、実際のSPI通信手順の説明です。前回までの説明で、SPI通信の基本的な考え方をみてきました。今回は実際のSPI通信の通信手順やタイミングチャートを確認します。「実際のSPI通信」とは言っても、今までの説明から大きく変わることはありません。今までの説明と異なるところは、実際のSPI通信ではデータの長さは8ビットという点です。前回までの説明で使用したデータ通信システム(リビングと勉強部屋間のデータ通信システム)では、リビングから勉強部屋には3ビットの情報を送り、その返事を勉強部屋からリビングに2ビットで送っていました。実際のSPI通信では、データの送信単位は8ビットになります。そのほかのスレーブセレクト信号、クロック信号、MOSI信号、MISO信号の使い方は、前回までの説明の通りです。タイミングチャートを確認して、実際のSPI通信を理解しましょう!SPI通信の接続形態SPI通信のマスターとスレーブの接続は以下のようになります。実践編では、マスターはPICマイコン、スレーブは温湿度・気圧センサですので、スレーブは1個ですが、以下はスレーブが複数の場合を説明します。スレーブが3個以上ある場合は、2個目と同様に増設すればOKです。今までの繰り返しになってしまいますが、以下のように接続します。SCK(クロック信号)マスターが生成するクロック信号をすべてのスレーブが受信できるように、以下の図のようにマスターから各スレーブに接続します。MOSI(マスターからスレーブへの信号)クロック信号と同様に、マスターが生成する信号をすべてのスレーブが受信できるように、以下の図のようにマスターから各スレーブに接続します。MISO(スレーブからマスターへの信号)各スレーブからマスターに信号が送信できるように以下の図のように各スレーブからマスターに接続します。CSB(スレーブセレクト信号)スレーブセレクト信号は、マスターがそれぞれのスレーブを選択できるように、以下の図のようにスレーブごとに接続します。今までの説明では家族が登場していたので、このような図にするとなんだか味気ないですね。次にSPIの通信手順をまとめます。以下の手順は、マスターからスレーブに8ビットデータを送信し、その後スレーブからマスターに8ビットデータを返信する例を示しています。データは最上位ビットからシリアルに送信します。スレーブセレクト信号が1になったら通信処理おわりところで、この通信手順は1バイトの送受信ですが、マスターとスレーブが通信するバイト数はSPIモジュールごとに異なります。今回使用する温湿度・気圧センサでは、温度情報を読み取る場合は、PICマイコン(マスター)からセンサ(スレーブ)に温度情報をください、という意味の8ビットの情報を送信し、スレーブからマスターに温度情報の16ビットの返信があります。データのやり取りの単位は8ビットですが、必ずしもマスターからスレーブに8ビット送信してスレーブからマスターに8ビット返信される、というわけではない点にご注意ください。どのようにデータをやりとりするのかという仕様は、各SPIモジュールごとに異なり、データシートに解説されていますのでそれを読み解くことになります。その際、タイミングチャートやそれに類する図で説明されていますので、ぜひタイミングチャートの読み方になれるようにしましょう!SPI通信タイミングチャート上の例で説明しました、マスターからスレーブに8ビット送信、スレーブからマスターに8ビット返信のタイミングチャートを以下に説明します。上で説明した通信手順を図にしたものですので、特に説明は必要ないと思いますが、不明点ありましたらコメント欄かお問い合わせフォームからご質問いただければと思います。今までの知識をもとに、読み解いてみてください。補足SPI通信手順の説明は以上ですが、最後に以下の2点の補足があります。実際のSPI通信は先ほど説明したように、マスターからスレーブに指示情報(温度情報をください、など)を送って、それに回答する形でスレーブからマスターに返信情報(温度情報)を送ります。SPI通信の一般的な通信手順としては、以下のように解説されています。(スレーブセレクト/チップセレクトは省略しています)どういうことかというと、この図のようにマスターとスレーブは内部に送受信用の8ビットの箱(レジスタやバッファと呼ばれます)を持っていて、この8ビットをマスターが生成するクロック信号に従って、最上位ビットから順にデータを交換する、というものです。マスターから「温度情報をください」というような制御情報を送るときでも、制御情報を送っている最中にスレーブから何かの情報を受け取ることになります。スレーブからは特に有意な情報を送ることはできませんので、その際は0x00や0xFFなどのダミーデータが送られてきます。実践編で作成するプログラムでは、マスターから制御情報を送信する際、スレーブからの情報は特に受信しないように作成します。このように、マスターからスレーブに情報を送ると同時に、スレーブからマスターに何かの情報を送る、というのはそれほど多くありませんので、この補足の内容は参考程度にご理解いただければと思います。データ読み取りタイミング今までの説明で、データ信号(MOSI信号とMISO信号)の読み取りタイミングは、クロック信号の立ち上がりのタイミングとしてきました。SPIモジュールによっては、データ信号の読み取りタイミングはクロックの立ち下がりのものもあります。英語版のデータシートが多いので、英文表記も覚えておきましょう。これでSPI通信の説明は終わりです。