今回の記事では、実際のSPI通信手順の補足説明をします。
説明内容
前回までの記事で、SPI通信の基本的な考え方をみてきました。
今までの内容でSPI通信を理解できた、ということになりますが、実際のSPI通信を理解するにはもう少し補足知識が必要です。
そこで今回の記事では、実際のSPI通信の通信手順やタイミングチャートを確認します。
「実際のSPI通信」とは言っても、今までの説明から大きく変わることはありません。
それではこのあと、実際のSPI通信の接続形態、通信手順、タイミングチャートを確認して、SPI通信の理解を深めましょう!
SPI通信の接続形態
今までの復習になりますが、再度SPI通信の接続形態について確認しておきましょう!
ホストとデバイスの接続は次のようになります。

実践編では、ホストはPICマイコン、デバイスは温湿度・気圧センサーですので、デバイスは1個です。
デバイスが2個ある場合は、上のようにクロック信号とデータ信号は共有して、チップセレクト信号(通信相手を指定する信号)はデバイスごとに用意します。
3個以上の場合も、クロック信号とデータ信号は共有、チップセレクト信号はデバイスごとにそれぞれ接続することになります。
SPI通信手順
次にSPIの通信手順をまとめます。
前回までの記事では、送受信するデータの長さは3ビットや2ビットでした。
実際のSPI通信では、データ長は8ビットが基本になります。
次の通信手順は、ホストからデバイスに8ビットデータを送信し、その後デバイスからホストに8ビットデータを返信する例を示しています。
データは最上位ビットから順番に送信します。
順番 | ホストの動作 | デバイスの動作 |
---|---|---|
1 | 通信する相手のチップセレクト信号を0にして、通信相手を指定する | チップセレクト信号が0になったデバイスは、これからクロック信号に従ってデータ通信を行う |
2 | クロックを信号を発生させて8ビットのデータを送信する(最上位ビットから送信) | クロック信号の立ち上がりでMOSI信号を読み取り、8ビットデータを受信する |
3 | 引き続きクロック信号を発生させて、クロックの立ち上がりでスレーブからの送信されるMISO信号を読み取り、8ビットデータを受信する | クロック信号に合わせて8ビットデータを送信する(最上位ビットから送信) |
4 | データの送受信が終わったら、チップセレクト信号を1にする | チップセレクト信号が1になったら通信処理おわり |
ところで、この通信手順では1バイトデータの送受信になっていますが、実際の通信では電子部品ごとに異なります。
例えば、今回使用する温湿度・気圧センサーでは、温度情報を読み取る場合、次のやり取りを行います。
最初に、PICマイコンからセンサーに対して「温度情報をください」という意味の1バイト(8ビット)の情報を送信します。
次に、センサーからPICマイコンに2バイト(16ビット)の温度情報を返信します。
データのやり取りの単位は1バイト(8ビット)ですが、やり取りするデータサイズは電子部品ごとに異なります。
どのようにデータをやりとりするのかという仕様は、電子部品のデータシートに解説されていますのでそれを読み解くことになります。
通信の仕様はタイミングチャートやそれに類する図で説明されていますので、タイミングチャートに慣れていただければと思います。
SPI通信タイミングチャート
上の例で説明しました、ホストからデバイスに1バイト送信し、デバイスからホストに1バイト返信するタイミングチャートを説明します。
上の例のタイミングチャートは次のようになりますので、ぜひ読み解いてみてください。(クリックすると拡大できます)

SPI通信補足
SPI通信の説明の最後に、次の2点を補足いたします。
- データの同時送受信
- データ読み取りタイミング
❶ データの同時送受信
今回使用する温湿度・気圧センサーでは、ホストからデバイスに対して「温度情報をください」という指示を送り、それに回答する形でデバイスからホストに「温度情報」を送ります。
このように、ホストからデバイス、デバイスからホスト、というように片方向の通信でやり取りしますが、実際のSPI通信ではデータが同時に送受信されています。
ちょっと?ですよね。
そこで、ホストとデバイスの中身から、この意味を理解していきたいと思います。
SPI通信を行うホストとデバイスの中には、次のようにデータをやり取りするための8ビットのレジスタがあります。「8ビットのレジスタ」とは、送受信専用の箱のようなものです。

この8ビットレジスタは、上の図のように輪のように接続されていて、ホストが生成するクロック信号に従って、最上位ビットから順にデータを交換する、という仕組みになっています。
例えば、ホストから「温度情報をください」という情報を送るときでも、この情報を送っている最中にデバイスからホストに何らかの情報が送られることになります。
とはいっても、このときにデバイスからホストに送る情報はありませんので、一般的には0x00や0xFFなどのダミーデータが送られます。
実践編で作成するプログラムでは、マスターから制御情報を送信する際、スレーブからの情報は特に受信しないように作成します。
このように、マスターからスレーブに情報を送ると同時に、スレーブからマスターに何かの情報を送る、というのはそれほど多くありませんので、この補足の内容は参考程度にご理解いただければと思います。
❷ データ読み取りタイミング
今までの説明で、データ信号(MOSI信号とMISO信号)の読み取りタイミングは、クロック信号の立ち上がりのタイミングで説明してきました。
電子部品によっては、データ信号の読み取りタイミングはクロックの立ち下がりのものもあります。
タイミングチャートで確認すればわかりますが、電子部品のデータシートの概要のところに、立ち上がりで読み取るか、立ち下がりで読み取るか言葉で書いてあることもあります。
電子部品のデータシートは英語版のケースもありますので、英文表記も確認しておきたいと思います。
「立ち上がり」は「Rising Edge」、「立ち下がり」は「Falling Edge」です。
これでSPI通信の説明は終わりです。次回、チャレンジ課題に挑戦した後、実際のSPI通信のプログラムを作成します。
更新履歴
日付 | 内容 |
---|---|
2018.4.15 | 新規投稿 |
2025.7.25 | 「マスター」「スレーブ」をそれぞれ「ホスト」「デバイス」に変更 |
広告も無いし書いた方のプロフィールも無いしでなぞが多いサイトですが、非常にわかりやすいです。ありがとうございます!!
コメントどうもありがとうございます。
すみません、プロフィールについてはそのうち書こうと思います。