今回は筆者が持っているラズベリーパイとSPIデバイスをつなげて「SPIのCS,MOSI,MISO,SCLKの波形を見てみた」を紹介します
簡単にアナライザでSPI通信でのを確認するまでの手順を紹介しています。
「自分でSPIを色々解析してみたい!」という方におススメな記事となっています
過去記事の「I2CのACKとNACKの波形を見てみる」でI2Cでも同様に解析しましたので、I2Cのことも調べたいという方はこちらからどうぞ
ラズベリーパイとSPIデバイスをつなげてみる
まずはSPI通信環境をラズベリーパイを使って作っていきます。ラズベリーパイでのSPIの動かし方は既に先人たちにより多くの記事がありますので省略したいと思います。
※「ラズベリーパイ SPI」とググれば多くの参考になる記事がありますので、そちらを参考にしてください
実際につなげた写真がこちらとなります。
「ラズベリーパイ」と「AD変換素子+温度センサ」と「アナライザ」を接続しています。(AD変換ICはMCP3008、温度センサはMCP9700を使用しています。)
筆者のは少し型が古いラズベリーパイですが、SPIをつなぐのは新旧ともに簡単にできます。
AD変換ICと温度センサは下記のキットから使いました。
回路図的には下記の形になります。「3.3V」「GND」「CS」「MOSI」「MISO」「SCLK」をブレッドボードにジャンパー接続するだけで簡単にできます。
※ラズベリーパイのGPIOピン配置は新しい型に合わせています
※「CS」はアクティブローの意味で所々で「_N」を付けています
そしてラズベリーパイを設定・起動して無事SPI通信で温度センサの値を読み取れました。Pythonのプログラムで確認できました。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
下記が結果の概要です。
①現在の温度を読み取り温度センサが0.79Vを出力する
②AD変換ICが0.79Vのアナログ値を読み取りデジタルの244と変換して出力する
③ラズベリーパイがデジタル244を読み取り換算して28.71℃と分かる
アナライザを使って②の出力した波形を次章から紹介してきたいと思います
アナライザを用意する
SPIの波形を見たいと思いますが、今回は「CS」「MOSI」「MISO」「SCLK」を見ますのでアナライザを使って確認していきます。
最近はI2CやSPIなど数MHz,数十MHz程度の解析するアナライザが1000円足らずで買えます。
筆者は色々触りたかったのでモジュール化されていないアナライザの開発ボードを買いました。
(※値段は一番安く多くのピンで遊べますが、EEPROMなどの設定が必要ですのでマイコン初心者は少し難しいかもしれません)
本当にマイコン(サイプレス製CY7C68013A)が載っているだけのボードです。PCとUSB経由で接続して解析することができます。詳細は下記になります。MiniUSBケーブルとジャンパーワイヤは別で購入が必要です
但し数百円の差ですので下記のようなモジュールになっているアナライザを買った方が直ぐに測定できて楽できるかと思います。
PCとUSB接続してI2C,UART,SPIなど多くの通信を解析できます。USBケーブル、ジャンパーワイヤまで付いてきますので単に解析するだけならば筆者的には下記をおススメします
アナライザを使ってSPIの波形を確認する
アナライザを「CS」「MOSI」「MISO」「SCLK」の箇所に接続してプログラムを実行しているときの波形を確認します。ジャンパー接続すればOKです
実際行ったときの写真が下記です
そして実際にとれた波形の一部が下記です。無事「CS」「MOSI」「MISO」「SCLK」の波形を取れました。(しっかり見たい方は画像をクリックして拡大をお願いします)
これだけだと何のデータか分からないので解析の設定でSPIを選択します。正しい波形が取れていれば勝手に解析をしてくれます
これで、無事アナライザでSPIの解析ができました。
下記のように各bit、データが視覚的に分かるようになります。
SPI解析まで含めると下記が結果となります。
では次の章から各信号とSPI解析した結果を確認してきます
CS,MOSI,MISO,SCLKを見てみる
①CS(Chip select)
まずCSに関してはSPIが通信する間はLow(1⇒0)になっており問題ありません
(本来は一つのSPIにデバイスを複数接続しているときに使う信号です)
※デバイス側視点ではSS(Slave Select)と表記されているケースも多いです
②SCLK(Serial Clock)
今回のプログラムはネットから拾ってきており、特にクロックについては指定していなかったので実際どうなっていたかを現物確認します。
下記のように各データ幅8bit単位で適切なクロックが出ており、データシート通りの形となっており問題無しです。
※20180813時点のデータシートのリンク先はこちらから。
「FIGURE 6-1: SPI Communication with the MCP3004/3008 using 8-bit segments」 の図が一番見やすいかと思います
今回のSPIクロックは約480KHzになっていることが下記の波形からも分かります。
(サンプリング含めてある程度適当に測定しましたので「約」となっています)
③MOSI,MISO
何の略後というと「MISO: Master In Slave Out」 「MOSI: Master Out Slave In」となっており名前の通りの信号となっています。
今回はMasterがラズベリーパイで、SlaveがAD変換ICとなっています
実際どのようなデータを送っているかというと下記概要の①②③内容になります※詳細のデータシートのリンク先はこちらから。
「FIGURE 6-1: SPI Communication with the MCP3004/3008 using 8-bit segments」を参考にしてください)
今回は3つの8bitデータでMater・Slave間でSPI通信をしています。
3つのブロック事に内容を説明していきます
最初に「1」ではSPI通信を始める合図をMater側からSlave側にMOSI信号を出しています
次に「2」でSlave側にAD変換ICの「何処のCH」「差動かシングル」とスレーブ側に読み取りたい情報をMaster側のラズベリーパイからMOSIで伝えます
最後に「3」でSlave側のAD変換ICから現在の読み取っている値「0xF4」をMater側のラズベリーパイにMISO信号で伝えます。これで完了です
そして今回読み取った値[0xF4]は16進数ですので10進数に直すと「244」となります。無事最初に伝えたAD変換ICの「adc:244」が無事読み取っていることが波形で確認できました
SPI通信をオシロスコープで確認しました
今回はアナライザでSPI通信を解析しましたが、オシロスコープでも別途確認しました。
Pythonのプログラムを変更して、SPI通信の設定も変えて波形確認しています。
よろしければ一緒にご覧ください。(リンク先はこちら)
まとめ・感想
データシート見て確認するのもいいですが、やはり実物の波形見ることでよりSPIの理解が深まると思います。
よろしければ皆様もアナライザを購入して確認してみてください
<<20180813追記>>
SPIとは別にUARTのTX,RX波形を見てみた記事をアップしました。
「UART通信のシリアル波形をアナライザで解析してみた」
今日はここまでにしたいと思います。どうもありがとうございました
1000円足らずでアナライザが購入できます
コメント