エンジニアの電気屋さん

現役エンジニアが電気のトピックについて現物交えてご紹介します。

どうもミソジです。

今回は筆者が持っているラズベリーパイとSPIデバイスをつなげてSPIのCS,MOSI,MISO,SCLKの波形を見てみた」を紹介します

簡単にアナライザでSPI通信でのを確認するまでの手順を紹介しています。
「自分でSPIを色々解析してみたい!」という方におススメな記事となっています

過去記事の「I2CのACKとNACKの波形を見てみる」でI2Cでも同様に解析しましたので、I2Cのことも調べたいという方はこちらからどうぞ
sP_20180512_095551.jpg

目次
1.ラズベリーパイとSPIデバイスをつなげてみる
2.アナライザを用意する
3.アナライザを使ってSPIの波形を確認する
4.CS,MOSI,MISO,SCLKを見てみる
5.まとめ・感想

1.ラズベリーパイとSPIデバイスをつなげてみる
まずはSPI通信環境をラズベリーパイを使って作っていきます。

ラズベリーパイでのSPIの動かし方は既に先人たちにより多くの記事がありますので省略したいと思います。

※「ラズベリーパイ SPI」とググれば多くの参考になる記事がありますので、そちらを参考にしてください

実際につなげた写真がこちらとなります。
「ラズベリーパイ」「AD変換素子+温度センサ」「アナライザ」を接続しています。(AD変換ICはMCP3008、温度センサはMCP9700を使用しています。)

sP_20180715_014939.jpg

sP_20180715_015018.jpg

筆者のは少し型が古いラズベリーパイですが、SPIをつなぐのは新旧ともに簡単にできます。

AD変換ICと温度センサは下記のキットから使いました。





回路図的には下記の形になります。「3.3V」「GND」「CS」「MOSI」「MISO」「SCLK」をブレッドボードにジャンパー接続するだけで簡単にできます。

※ラズベリーパイのGPIOピン配置は新しい型に合わせています
※「CS」はアクティブローの意味で所々で「_N」を付けています
spi1.PNG

そしてラズベリーパイを設定・起動して無事SPI通信で温度センサの値を読み取れました
Pythonのプログラムで確認できました。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
pi@raspberrypi ~ $ cd python_apps/
pi@raspberrypi ~/python_apps $ cd spidev-spike/
pi@raspberrypi ~/python_apps/spidev-spike $ python spi_tmp36.py
adc  :      244 
volts:     0.79
temp :    28.71
~~~~~~~~~~~~~~~~~~~~~~~~~~~~

下記が結果の概要です。
①現在の温度を読み取り温度センサが0.79Vを出力する
②AD変換ICが0.79Vのアナログ値を読み取りデジタルの244と変換して出力する
③ラズベリーパイがデジタル244を読み取り換算して28.71℃と分かる
spi1.PNG

アナライザを使って②の出力した波形を次章から紹介してきたいと思います

2.アナライザを用意する
SPIの波形を見たいと思いますが、今回は「CS」「MOSI」「MISO」「SCLK」を見ますのでアナライザを使って確認していきます。

最近はI2CやSPIなど数MHz,数十MHz程度の解析するアナライザが1000円足らずで買えます。

筆者は色々触りたかったのでモジュール化されていないアナライザの開発ボードを買いました。

(値段は一番安く多くのピンで遊べますが、EEPROMなどの設定が必要ですのでマイコン初心者は少し難しいかもしれません)
sP_20171104_120005.jpg

本当にマイコン(サイプレス製CY7C68013A)が載っているだけのボードです。PCとUSB経由で接続して解析することができます。詳細は下記になります
MiniUSBケーブルとジャンパーワイヤは別で購入が必要です



但し数百円の差ですので下記のようなモジュールになっているアナライザを買った方が直ぐに測定できて楽できるかと思います。

PCとUSB接続してI2C,UART,SPIなど多くの通信を解析できます。
USBケーブル、ジャンパーワイヤまで付いてきますので単に解析するだけならば筆者的には下記をおススメします





「スポンサーリンク」


3.アナライザを使ってSPIの波形を確認する

アナライザを「CS」「MOSI」「MISO」「SCLK」の箇所に接続してプログラムを実行しているときの波形を確認します。ジャンパー接続すればOKです
実際行ったときの写真が下記です
sP_20180715_015018.jpg 


そして実際にとれた波形の一部が下記です。無事「CS」「MOSI」「MISO」「SCLK」の波形を取れました。(しっかり見たい方は画像をクリックして拡大をお願いします)
 spi8.PNG

これだけだと何のデータか分からないので解析の設定でSPIを選択します
正しい波形が取れていれば勝手に解析をしてくれます
spi7.PNG

これで、無事アナライザでSPIの解析ができました。
下記のように各bit、データが視覚的に分かるようになります。

spi10.PNG

SPI解析まで含めると下記が結果となります。
spi6.PNG

では次の章から各信号とSPI解析した結果を確認してきます

4.CS,MOSI,MISO,SCLKを見てみる
①CS(Chip select)
まずCSに関してはSPIが通信する間はLow(1⇒0)になっており問題ありません
(本来は一つのSPIにデバイスを複数接続しているときに使う信号です) 
※デバイス側視点ではSS(Slave Select)と表記されているケースも多いです
spi6.PNG


②SCLK(Serial Clock)
今回のプログラムはネットから拾ってきており、特にクロックについては指定していなかったので実際どうなっていたかを現物確認します。

下記のように各データ幅8bit単位で適切なクロックが出ており、データシート通りの形となっており問題無しです。

※20180813時点のデータシートのリンク先はこちらから。「FIGURE 6-1: SPI Communication with the MCP3004/3008 using 8-bit segments」 の図が一番見やすいかと思います
spi6.PNG


今回のSPIクロックは約480KHzになっていることが下記の波形からも分かります。
(サンプリング含めてある程度適当に測定しましたので「約」となっています)
spi11.PNG


③MOSI,MISO
何の略後というと「MISO: Master In Slave Out」 「MOSI: Master Out Slave In」となっており名前の通りの信号となっています。今回はMasterがラズベリーパイで、SlaveがAD変換ICとなっています
spi1.PNG

実際どのようなデータを送っているかというと下記概要の①②③内容になります
※詳細のデータシートのリンク先はこちらから。「FIGURE 6-1: SPI Communication with the MCP3004/3008 using 8-bit segments」を参考にしてください)

今回は3つの8bitデータでMater・Slave間でSPI通信をしています。3つのブロック事に内容を説明していきます
spi6.PNG


最初に「1」ではSPI通信を始める合図をMater側からSlave側にMOSI信号を出しています
spi12.PNG


次に「2」でSlave側にAD変換ICの「何処のCH」「差動かシングル」とスレーブ側に読み取りたい情報をMaster側のラズベリーパイからMOSIで伝えます
spi13.PNG

最後に「3」でSlave側のAD変換ICから現在の読み取っている値「0xF4」をMater側のラズベリーパイにMISO信号で伝えます。これで完了です
spi14.PNG


そして今回読み取った値[0xF4]は16進数ですので10進数に直すと「244」となります
無事最初に伝えたAD変換ICの「adc:244」が無事読み取っていることが波形で確認できました
spi1.PNG

5.まとめ・感想
どうでしたでしょうか、最近では1000円足らずでSPIを測定・解析することができます。
前回記事のI2Cと同様にSPIでも波形解析を行うことが問題なく可能です。

データシート見て確認するのもいいですが、やはり実物の波形見ることでよりSPIの理解が深まると思います。よろしければ皆様もアナライザを購入して確認してみてください

今日はここまでにしたいと思います
どうもありがとうございました

<<20180813追記>>
SPIとは別にUARTのTX,RX波形を見てみた記事をアップしました。

UART通信のシリアル波形をアナライザで解析してみた」
リンク先はこちらからです。よろしければこちらもご確認ください
sP_20180814_070631.jpg


1000円足らずでアナライザが購入できます
HiLetgo 24MHz 8チャンネル USBロジックアナライザ 8CHロジックアナライザ UART IIC SPI デバッグ MCU FPGA ARMに対応 [並行輸入品]
HiLetgo






ラズベリーパイで簡単にSPI通信ができます。




AD変換ICと温度センサは下記のキットから使いました。



どうもミソジです。
今回はLTSPICEでI2C,UART,SPIシミュレーションを行う過程の記事LTSPICEでAC特性をシミュレーションしてみた_モデル検証編」を紹介します

前回はIBISモデルからSPICEモデルに変換したI2CのSDAピンのDC特性を検証しましたので、今回はAC特性をシミュレーションしてみたいと思います。

前々回のモデルを作ったLTSPICEでI2C,UART,SPI等のシミュレーションをしてみた_モデル準備編」記事のリンクはこちらです
ibis10.PNG


そして前回のDC特性を検証したIBISモデルから作ったSPICEモデルのDC特性を検証してみた_モデル検証編」記事のリンクはこちらです
ibis23.PNG


目次
1.AM3352のAC特性をデータシートを確認する
2.「AC特性の出力特性_Rise time,Fall time」from データシート
3.「AC特性の出力特性_Rise time,Fall time」from IBIS
4.LTSPICEでシミュレーションしてみる_概要編
5.LTSPICEでシミュレーションしてみる_詳細編
6.まとめ・感想


1.AM3352のAC特性をデータシートを確認する

今回はAC特性をAM3352のデータシートから確認していきます

データシートはこちらからダウンロードできます。ラズベリーパイのように小さいボードの「BeagleBone」で使われているCPUです。



上記をIBISモデルが無かったラズベリーパイの代わりに見立てて使っています
Raspberry Pi 3 Model B V1.2 (日本製) 国内正規代理店品
Raspberry Pi
2016-02-29




今回は「AC特性の出力特性_Rise time,Fall time」の2つを確認してデータシート通りになっているかを確認したいと思います。

2.「AC特性の出力特性_Rise time,Fall time」from データシート
(20180722時点の)データシートでは「7.8.1章I2C Electrical Data and Timing」に記載されています。

引用すると「I2C Electrical Data and Timing」は下記になります。今回は100kbps想定でシミュレーションを行いますのでSTANDARD MODEの値です

 
MIN
NOM
MAX
UNIT
tr(SDA)
Rise time, SDA 

 
1000
ns
        tf(SDA)
Fall time, SDA  
 
 
300
ns


今回もですが正直上記だけですと、MAX値でしか記載がなくシミュレーション・検証する上ではもったいないのでIBISモデルでも「AC特性の出力特性_Rise time,Fall time」を確認してみます


3.
「AC特性の出力特性_Rise time,Fall time」from IBIS
AM3352のIBISモデルは自由に入手できます。TIのリンク先はこちらからです。
前回同様に今回のIBISモデルとしては標準的なものを使用します。

内部PU,PDなど特についていない標準的な3.3V_IFを使用します
「3.3V-I/O-PI-NORMAL, IND, 10%]」を使って検証していきます
ibis19.PNG


そしてIBISモデルを上から見ていきますと[Ramp][Rising Waveform]があります

「Rampが全体的なRise,Fallの傾き」を定義していて、「Rising Waveformが特定の条件化での立ち上がり時の波形データ」のようです。下記は50ΩのPU(3.3Vで吊っている)条件を表していると思います。

ibis31.PNG

その下を追っていくと[Falling Waveform]があります
「Falling Waveformも特定の条件化での立ち下がり時の波形データ」を示しているようです。

Rising Waveformと同様に50ΩのPU(3.3Vで吊っている)条件を持ってきています
ibis33.PNG


今回は時間に対しての電圧値(typ)(min)(max)が記載されています。PulldownとPullUPの必要な情報をEXCELに切り取ると便利です
ibis34.PNG


そしてEXCELでRising timeの必要な箇所をまとめますと、下記のようにグラフにできますので立ち上がり・立ち下がりの時間と電圧の関係性がよく分かります
ibis35.PNG

まずRising timeの時間-電圧のグラフは下記になります。
緑がV(max)、青がV(typ)、赤がV(min)を示しています

920a7b14.png

前章で記載したデータシートではRise_time(MAX)=1000nsということでした。

あくまで1例ですが、IBISデータを見ると1ns程度で立ち上がりますのでデータシートはあらゆる条件を考慮したかなり大きな幅を持った値になっている様子です

220c1872.png


次に
Falling timeの時間-電圧のグラフは下記になります。
緑がV(max)、青がV(typ)、赤がV(min)を示しています
28d91135.png

Risingと同様にデータシートではFall_time(MAX)=300nsということでしたがIBISデータを見ると1ns程度で立ち下がります
ae8509a0.png


この特性がIBIS⇒SPICE化したモデルでも同様な特性が出ているのかを次の章で確認していきます

「スポンサーリンク」



4.LTSPICEでシミュレーションしてみる_概要編
データシート,IBISモデルともに立ち上がり・立下りを見てきましたので
IBISのデータと対応するように出力先を50ΩのPUに合わせてシミュレーションしていきたいと思います。

今回もIBISモデルの特性は「Typ」を選択しています
ibis8.PNG

モデルは前回作成したI2CのSDAピンをモデルにしたものです
ibis10.PNG

今回のモデルのイメージとしては下記IBISモデルとしてみると分かりすいと思います

①「IN」・・・ SDA信号の波形を決めるピン
 ※今回は100kbps_周期10uでHigh,Lowを繰り返すパターンとします)
②「Vcc」・・・ ICの電源ピン
③「Vss」・・・ ICのGNDピン
④「Out」・・・ I2C_SDAの出力ピン

ibis11.PNG

実際のシミュレーションするモデルでは下記形で行います。
ibis36.PNG


前回作成した出力側のモデルを利用して出力先に抵抗を付けて特性を検証します。

今回の抵抗は50Ωです。本来50Ωなどつける機会は無いのですが、IBISデータの条件と合わせるため50ΩでPUします。(通常数mA流せば良いところを50Ωだと3.3V/50Ω=66mAも流れてしまいます)
ibis37.PNG

シミュレーションの結果は下記形となりました。電圧が0Vからでなく1.6V付近からの波形となっています。(多くの電流を流しているので内部のFETのオン抵抗で電圧差が出ている様子です)

しかしこれは前章で記載したIBISのデータ通りのため問題ありません。
ibis38.PNG

IBISのEXCELデータのtypを抜粋しますと1.6V付近からスタートしています。
前記事でも確認していましたがDC特性でもIBISからSPICEへ問題なく変換できています。
6e50ffdd.png

それでは今回の目的のRise time・Fall timeを見ていきましょう。立ち上がり・立下りの一部分をアップしていきます。
ibis38.PNG

まずはRise timeです縦軸は1.6V~3.4Vを示しており、横軸は1目盛1nsで10ns区間を表示しております。
ibis42.PNG

そして次にFall time です。横軸が上グラフと違い1目盛2nsになっていることにご注意ください
ibis43.PNG

上記の結果を分かりやすく図示すると下記のように「0.1nsのRise/Fall入力波形」がSPICEモデルを通すことで「数nsのRise/Fall出力波形」になまっている形となります。無事ピンの特性を引き継いでシミュレーションができている様子です

ibis36.PNG


次の章からは実際にIBISとのデータ比較・入力出力波形の差分を詳細に確認してみます

5.LTSPICEでシミュレーションしてみる_詳細編

①IBISデータとの比較
ざっくりとですが、立ち上がり時間をLTSPICEでのシミュレーションでは完全に立ち上がるまでに3.5ns程度かかっています。
ibis42.PNG

そしてIBISのデータでは約1nsとなり、nsレベルでは差分が出てきています。

作成したSPICEデータはIBISとは完全に一致ではありませんでしたが、個人的なシミュレーション・デバッグレベルでは気にしない程度かとは考えています

8abe693a.png


②入出力の差分
先ほど示した下記の差分をLTSPICE上で確認してみます
ibis36.PNG

シミュレーションを行うと下記結果となり橙色の入力波形が0~3.3V緑色の出力波形が約1.6V~3.3Vとなっているので、少し変な波形になりますが立下り箇所をアップします
ibis45.PNG

アップした結果が下記となります。入出力の立下りの差分が一目で分かります。前章でも記載しましたが作成したピンの出力特性が影響しており、十分にシミュレーションできているようです
ibis44.PNG

「スポンサーリンク」



6.まとめ・感想
今まで作ったSPICEモデルのAC特性は個人的なシミュレーション・デバッグレベルでは引き継げていたのではと思います。次回からは実際にある配線やIFを想定したシミュレーションを確認したいと考えています。

今日はここまでにしたいと思います
どうもありがとうございました


ラズベリーパイで簡単にI2C通信ができます。

EEPROMの詳細は下記となります。

どうもミソジです。
今回はLTSPICEでI2C,UART,SPIシミュレーションを行う過程の記事IBISモデルから作ったSPICEモデルのDC特性を検証してみた_モデル検証編」を紹介します

前回はI2CのSDAピンをIBISモデルからSPICEモデルに変換しましたので、そのモデルがICのデータシート(スペック)通りかを確認したいと思います。

前回のモデルを作ったLTSPICEでI2C,UART,SPI等のシミュレーションをしてみた_モデル準備編」記事のリンクはこちらです
ibis10.PNG

目次
1.AM3352のデータシートを確認する
2.「DC特性の出力特性_VOH,VOL」from データシート
3.「DC特性の出力特性_VOH,VOL」from IBIS
4.LTSPICEでシミュレーションしてみる
5.まとめ・感想


1.AM3352のデータシートを確認する

送信側のモデルを検証していきます。(前回作った受信側はパッケージ成分だけのため検証の必要がないため)

データシートはこちらからダウンロードできます。ラズベリーパイのように小さいボードの「BeagleBone」で使われているCPUです。



上記をIBISモデルが無かったラズベリーパイの代わりに見立てて使っています
Raspberry Pi 3 Model B V1.2 (日本製) 国内正規代理店品
Raspberry Pi
2016-02-29




今回は「DC特性の出力特性_VOH,VOL」の2つを確認してデータシート通りになっているかを確認したいと思います。

2.「DC特性の出力特性_VOH,VOL」from データシート
(20180624時点の)データシートでは「5.7章DC Electrical Characteristics」に記載されています。
今回I2Cの電圧としては3.3Vとして使うためデータシートに書かれている「VDDSHV6=3.3V」とします。

引用すると「DC特性の出力特性_VOH,VOL」は下記になります。標準的なDC特性だと思います

 
MIN
NOM
MAX
UNIT
VOH (IOH=4mA) 
VDDSHV6-0.45
=3.3-0.45
=2.85
 
 
V
VOL (IOL=4mA) 
 
 

0.45
V


正直上記だけですと、「とある電流値(IOH,IOL=4mA)引いている時のVOH,VOL」でしかなくシミュレーションする上ではもったいないのでIBISモデルでも「DC特性の出力特性_VOH,VOL」を確認してみます


3.「DC特性の出力特性_VOH,VOL」from IBIS

AM3352のIBISモデルは自由に入手できます。TIのリンク先はこちらからです。
今回のIBISモデルとしては標準的なものを使用します。

内部PU,PDなど特についていない標準的な3.3V_IFを使用します
「3.3V-I/O-PI-NORMAL, IND, 10%]」を使って検証していきます
ibis19.PNG


詳細は省き概略でいいますと「L出力時の特性がPulldown」「H出力時の特性がPullUP」に記載されていますのでこれらを使っていきます

ibis20.PNG

電圧に対しての電流値(typ)(min)(max)が記載されています。PulldownとPullUPの必要な情報をEXCELに切り取ると便利です
ibis21.PNG

そしてEXCELでVOLの必要な箇所をまとめますと、下記のように表・グラフにできますので
「IOL電流値」と「VOL電圧値」の関係性がよく分かります
ibis22.PNG

まずPulldownのVOL-IOLのグラフは下記になります。
緑がI(max)、青がI(typ)、赤がI(min)を示しています
19d9c973.png

実際データシートではVOL(IOL=4mA)の際にMAX0.45Vということでした。
Pulldown特性のみを下記グラフから見ると赤線のI(min)がVOL(MAX)=約0.28Vと言ったとこでしたので、そんなもんかと言った感じです。

青線のTypの場合VOL=約0.17Vとなっています
3592c56e.png

あとPullUPのVOH-IOHのグラフは下記となります。
IBISのデータをそのまま持ってくると「電圧値がH特性にオフセットされていない」、「極性が逆」となっており少しイメージしにくいグラフとなっています。

61db553a.png
※また変に右端にでている緑線のI(max)の箇所は実用上使わない箇所だと思いますので無視しています

そのため必要に応じて、見たい箇所にオフセットしてあげます。
オフセット値に関してはIBISモデルで記載していた[Volatage_Range]の値を使って
青線のI(typ)は3.3V、赤線のI(min)は2.97V、緑線のI(max)は3.63Vを足してします
2c70f039.png


修正後のグラフが下記です。大分見やすくなったかと思います。
IOH(typ)が4mA流すとき約3.15Vとなっていますので、ここもシミュレーションして結果を見ていきたいと思います
65e8758b.png



「スポンサーリンク」



4.LTSPICEでシミュレーションしてみる
データシート,IBISモデルともにIOH,IOL=4mA周辺を見てきましたので
対応するように出力先のPU,PDを合わせてシミュレーションしていきたいと思います。

今回は特性は「Typ」を選択しています
ibis8.PNG

モデルは前回作成したI2CのSDAピンをモデルにしたものです
ibis10.PNG

今回のモデルのイメージとしては下記IBISモデルとしてみると分かりすいと思います

①「IN」・・・ SDA信号の波形を決めるピン
 ※今回は100kbps_周期10uでHigh,Lowを繰り返すパターンとします)
②「Vcc」・・・ ICの電源ピン
③「Vss」・・・ ICのGNDピン
④「Out」・・・ I2C_SDAの出力ピン

ibis11.PNG

実際のシミュレーションするモデルでは下記形で行います。
ibis23.PNG

(1)VOH-IOH特性
前回作成した出力側のモデルを利用して出力先に抵抗を付けて特性を検証します。

今回の抵抗は1kΩです。少し電流が多めに流れますが3.3V/1kΩ=3.3mAとなり、前章までに検討していた4mAに近いため1kΩを選択しました

ibis24.PNG  

シミュレーションの結果は下記形となりました。
特に問題なく100kbpsのI2C想定の波形が出力されています。
3.3V出力時(VOH出力時)をアップしてみたいと思います
ibis25.PNG

シミュレーションでのVOH=3.17V(IOH=3.3mA)となりました。
前章でIBISモデルで確認したのはVOH=約3.15V(IOH=4mA)でしたので、かなり近い値ではないかと思います。
無事IBISモデルのDC特性をSPCIEモデルに引き継げているようです
ibis26.PNG


(2)VOL-IOL特性
同様にVIL特性を見ていきます。下記でシミュレーションを行います
ibis27.PNG

今度は下記のようにVILを確認できるように1kΩの抵抗を接続します
ibis28.PNG

シミュレーションの結果は下記形となりました。
同様に0V出力時(VOL出力時)をアップしてみたいと思います
ibis29.PNG

シミュレーションでのVOL=0.129V(IOL=3.3mA)となりました。
前章でIBISモデルで確認したのはVOL=約0.17V(IOH=4mA)でしたので、こちらも近い値ではないかと思います。

ibis30.PNG


5.まとめ・感想
今回の検証にて前回作ったSPICEモデルが作成元のIBISモデルのDC特性を引き継げていたのではと思います。次回はAC特性の妥当性を確認したいと考えています。

<<20180812追記>>
作成したSPICEモデルのAC特性を検証した記事をアップしました。

LTSPICEでAC特性をシミュレーションしてみた_モデル検証編」
リンク先はこちらからです
ibis36.PNG

今日はここまでにしたいと思います
どうもありがとうございました


ラズベリーパイで簡単にI2C通信ができます。

EEPROMの詳細は下記となります。

↑このページのトップヘ