[初投稿] [理系学生向け] SPIにモードがあるなんて知らなかったんですけど…!?

初投稿にしては,かなり理系(特に電子系)に振ってますが,備忘録的に残しておきたくなったのでまとめてみました.

本記事のお題は,「SPI通信におけるモードとは」です.
おそらく,知ってて当たり前で,今更?感があると思いますが,大目に見てやってください…

Key words: SPI通信 / mbed / 衛星開発

SPI通信とは?

簡単にいうと,何かの機器と通信する時の通信方式のことです.
一般的にマイコン(プログラムを書き込んで,機器を操作する賢いやつ)を使用して,機器と通信する時は,UART,I2C,SPI通信の3種類が有名なやつです.そのうちの1つです.
詳しくは,別サイトで詳しく説明されているので,割愛します.

参考
SPIの基本を学ぶ:
https://www.analog.com/jp/analog-dialogue/articles/introduction-to-spi-interface.html

クロックの極性と位相

SPI通信では,MOSI,MISO,CLK,CSの4種類の信号ラインを使用して通信します.
先ほど紹介した参考サイトにもある通り,クロック(CLK)ラインのSPIメイン(あまり使わなくなったのかもしれませんが,マスターのことです)の極性と位相を選択できるようです.
参考サイトでも,かなり早い段階で説明として出てきていましたが,これをすっ飛ばして今までSPI通信をしてました…(あ〜こわいこわい)

てなわけで,クロックの極性と位相とはなんぞや,ということですが,

極性:クロックが基本の状態(アイドル状態)では,HighなのかLowなのか

位相:データを送る時(受け取る時),クロック信号に対してどのタイミングでやり取りをするのか.

と,私なりに簡単に書いてみました.おそらく,極性は理解が容易だと思いますが,位相は少しイメージがつきずらいかもしれません.参考の画像をもとに,見ていきます.


図2. SPIモード0のタイミング図。CPOLは0、CPHAは0、アイドル状態のCLKはローです。データを立上がりエッジでサンプリングし、立下がりエッジでシフトします。

これを見るとわかるように,こちらではクロックは基本Lowに落ちています.
通信時になると,クロックが立ち上がったり立ち下がったりして,一定の信号をおくります.
その際,図では,クロック信号が立ち上がる際にデータを送っています(MOSIライン).
はたまた,データ受信のライン(MISO)では,クロックが立ち下がった際にデータを受け取っています.これが先ほどから出ている,位相のことです.

当たり前ですが,通信をする機器(サブノード,別名スレーブ)側が,どのモードで通信するかは設計の段階で決まっているはずで,必ずデータシートなどには記載されているはずです.

現在,6Uサイズの超小型人工衛星「PRELUDE」の開発にて,動作検証をおこなっている機器でSPI通信のものがあります.

これがまた厄介で,送ったコマンドに対して,いつまで経っても反応してくれないのです…
しかし,製造元の会社の人にメールで問い合わせているうちに,
「そもそもSPIのモードは合っているよね?」と聞かれてしまい,そこでハッと気づきました.

説明書は普段読まず,直感的に触って覚えるタイプなので,そろそろちゃんと説明書が読めるようにならないとな…と思いました.