エンジニアの電気屋さん

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

タグ:I2C

どうもミソジです。
今回は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の詳細は下記となります。

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

前回まで実際にラズベリーパイとI2C複数デバイスをつなげてアナライザを使って波形を見ていましたが、今回はLTSPICEでI2C等のシミュレーションを行う事前準備をしたいと思います。

前回記事のリンクはこちらです
sP_20180401_135924.jpg


目次
1.LTSPICEのI2Cのモデルを用意するには
2.IBISモデル⇒SPICEモデルの変換の仕方
3.変換するIBISモデルを拾ってくる
4.SPICEモデル頑張って作ってみた
5.SPICEモデルをLTSPICEで使えるように整える
6.まとめ・感想


1.LTSPICEのモデルを用意するには

はい、いきなり最難関の項目ですね。
LTSPICEでI2C,UART,SPIなど評価する際に一番難しいことと言えば「モデルを用意する」ことに尽きると思います

LTSPICEのデフォルトではCPUやI2C,UART,SPIのEEPROM,センサ等は有りませんので自らモデルを用意するしかありません。

またLTSPCIEに直接使えるCPU,I2Cデバイスの「SPICEモデル」はネットを探してもほとんど無いのが現状だと思います
i2c100.PNG


しかしデバイスメーカはLTSPICEには直接は使えないですが「IBISモデル」を提供しているケースはよくあります。下記例はI2CのEEPROMの例です
i2c112.PNG


そのため今回は「IBISモデル」⇒「SPICEモデル」に変換してLTSPICEでシミュレーションを行って行きたいと思います

2.IBISモデル⇒SPICEモデルの変換の仕方
この章に関しては詳細に書き出すとまとめきれないので今回は概要を記載しときます。(また詳細版は違う記事を起こしたいと思います)

※筆者もシミュレーションの専門家ではないので、あくまで個人的な遊びのシミュレーションということでお願いします

筆者が調べた中では2つほど変換ツールを見つけれました。

結論から言いますと今回は②の「IBIS-PSpice Converter Ver 3.0」を利用してIBISモデルからSPICEモデルを作ってみました

①IBIS2SPICE
IBISの本家HPであるIBIS Open Forumにも記載がありました。ここのサイトはIBISの規格書などがあり勉強になると思います。下記のようにIBIS自体の構成など書いてあります
ibis2.PNG

この中の「FREETools」紹介されているツールが下記のIBIS2SPCICEになります。
名前と電話番号アドレスなど適当に登録すれば使えてダウンロードできました

但し無料で公開されているのはIBIS_Ver1.1,2.1と大分古いようですソフトとしては1998年に作られたものが公開されているようです。(現在201805時点の最新IBISのVerは6.1ということです)
ibis1.PNG

多分これでも単純なI/Oは変換できそうですが、他にないか他にも探してみました

IBIS-PSpice Converter Ver 3.0
ネットでも結構探していましたが「①以外の変換ツールが見つからない…」と思っていましたが以前買った2017年10月のトラ技の付録CDに載っていました!その時の記事はこちらから
sP_20171002_043323.jpg

付録のDVDにプリント基板開発のツールが沢山入っていました。


いざ開いてみるといきなりポップアップが出てきて
ibis4.PNG

対応している形式としては「I/O」「3-state」のみということですがIBIS Ver3.2まで対応しているということです。

現状のデバイスではよく見かけるのはIBIS Ver4.2ですが、まぁ「I/O」と「3-state」は昔からあるIOタイプだからなんとかなるでしょう(と適当な筆者な考えです。まぁプライベートのシミュレーションということで見逃してください)

ibis5.PNG

作成されたのは2005年ですが北海道大学の吉川先生という方が作ってくれたようです。

日本人が作成してくれて少なからず日本の注記も多少有り、①のツールより取っ掛かりやすかったです。

大変便利なツールを残していただき、吉川先生にはこの場を借りてお礼を申し上げます。


3.変換するIBISモデルを拾ってくる

今回はI2Cのマスター側となるCPU、スレーブ側のデバイスのIBISモデルを例にしてみました。どこからか拾ってくる必要がありましたのでネット上で探していきました。

(1)CPUのIBISモデル
最初はラズベリーパイのCPU(Broadcom BCM2837等)のIBISモデルを使おうとしていましたがが見つからず…。
sP_20180512_095551.jpg

そのためI2CのIFを持っているCPUを適当に探します。IntelとかTIなどが登録無しにIBISモデルを簡単にダウンロードできるので、今回はTIの「AM3352」というものにしました。TIのリンク先はこちらからです。

ラズベリーパイのように小さいボードの「BeagleBone」で使われているCPUです。



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




※本来は筆者が持っている安いマイコン(MSP430)の軽いデータ量のIBISモデルを持って来ようと思ったのですが、無かったです。
sP_20180512_092731.jpg
TI掲示板見るとメーカ曰く、「もっと高速通信をするデバイスじゃないとIBISモデル要らないでしょ」という感じでした。掲示板リンク先はこちらから


(2)I2Cのスレーブ側となるデバイスのIBISモデル

こちらに関しては以前から使っているEEPROMのIBISモデルがありました。リンク先はこちらから
ibis6.PNG
EEPROMの詳細は下記となります。
EasyWordMall AT24C256 I2C インターフェースEEPROMメモリモジュール
Apple Trees E-commerce co., LT






「スポンサーリンク」



4.SPICEモデル頑張って作ってみた
先ほどIBISモデルは手に入れたのでSPICEモデルを作っていきます
正直なところツール使ってのIBIS⇒SPICEモデル変換も一筋縄ではいきません

特にCPU等は変換途中でエラーが沢山出ますので対応して狙ったモデルを変換するようにIBISモデルを弄る必要があります。
ibis7.PNG
ここは地道な作業ですが、IBISファイルをテキストエディタを見つつ変換に必要・不要な箇所を修正していきましょう

(特にCPUは細かい設定が多々あるので大変です)。まずは変換したいピンのモデル名を見て原因を追っていきます
i2c37.PNG

今回はモデルに細かな設定があったのでツールが変換できなかった様子です
必要ない細かい設定名はツールが迷わないように一旦削除してしまいましょう
i2c38.PNG

他に細かい修正した箇所もあるのですが、何とか変換することができました。
(また細かい修正などは別記事にしたいと考えています)
ibis8.PNG

同様にデバイス側EEPROMのSPICEモデルも作っていきます。
EEPROM側は細かな設定が無いのでCPUよりはSPICEモデル作るのは楽だと思います


5.SPICEモデルをLTSPICEで使えるように整える
(1)送信側のモデル
ようやくSPICEモデルが入手できたのでこれをLTSPICEで使えるようにサブサーキット化します。
作ったSPICEモデルの中身を確認し、接続に対応させてサブサーキットのファイルを作成してあげます。
i2c25.PNG

今回はIBIS-PSpice Converter Ver 3.0のツールを使いましたので、そちらの出力形式に合わせてサブサーキットを作りますと「1_IN,2_OUT,3_VCC,4_VSS」ですので下記のような形作ってみました。
i2c20.PNG

これが実際どういうモデルのかというと、そもそもIBISモデルの構造から説明する必要があるのですが詳細は省略します。(「IBISモデル」でググれば簡単にでてきますので…)。
筆者が考えているイメージとしては下記です。
ibis11.PNG  

作ったサブサーキットに作ったSPICEモデルをリンクさせてあげます
ibis10.PNG

これで送信側(ドライバ・マスター)のモデルが作成完了しました。

(2)受信側のIBISモデル
受信側のIBISモデルに対しては、どこまで作りこむというのがあるのですが今回は簡単に「パッケージのRCL成分」と「パッドまたはダイの容量成分C_comp」だけ入れて終わりにしたいと思います。
イメージとしては下記イメージです
ibis12.PNG
もしかしたら本来はこちらのリンク先の「レシーバモデル」のように電源・GNDも作って上記橙色のクランプダイオード分まで入れこむ必要があるかもしれませんが手間なので省略します。

そのためIBISモデルを必要情報を引っ張ってきましょう

IBISモデルの一番最初に出てきます。今回はTyp値を使います
ibis13.PNG


まずは送信側同様に受信側のサブサーキットを作ります。今回は「1_Pin,2_Die,3_Vss」と作ってみました。
ibis14.PNG

ライブラリをテキストで作ってあげます。
ibis15.PNG

下記のように何時ものブロック図で書いてもらっても結構です
特にRCLだけですので、ここらへんは好きに作ってもらっていいと思います
ibis16.PNG

あとはサブサーキットに作ったSPICEモデルをリンクさせてあげます。これで完成です
ibis17.PNG



「スポンサーリンク」

6.まとめ・感想
これにてシミュレーションで使える送信側と受信側のモデルが用意できました。
今回はI2Cのモデルを用意しましたが、同様にUART、SPI等のIFのモデルが作成できます。

モデルの妥当性が怪しい箇所があると思いますが、個人的にIFのシミュレーションをして動作確認程度ならばこれで十分かと思います。

次回は作ったモデルが本当にICのスペック通り機能しているのか妥当性を確認しています。

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

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



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


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

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

どうもミソジです。
今回は筆者が持っているラズベリーパイとI2C複数デバイスをつなげてアナライザを使い「I2Cで複数スレーブ接続の波形を見てみた」を紹介します

CPUは1本のI2Cで複数デバイス接続している際でもしっかり何処にデバイスがあるか見つけてくれます。実際にどうやっているかをアナライザで確認してみました


目次
1.ラズベリーパイとI2Cデバイスを複数つなげてみる
2.i2cdetectが何を行っているのか確認する
3.隣接するアドレス間の周期を確認してみる
4.離れたアドレス間の周期を確認してみる
5.まとめ・感想

1.ラズベリーパイとI2Cデバイスを複数つなげてみる
環境構築は前回記事と同じになります。詳細はこちらをご確認ください
実際につなげた写真がこちらとなります。
「ラズベリーパイ」「I2Cデバイスを2つ(EEPROMと加速度センサ)」接続しています
sP_20180512_095551.jpg

回路図的には下記の形になります。「3.3V」「GND」「SDA」「SCL」ブレッドボードにジャンパー接続するだけで簡単に可能です。
※ラズベリーパイのGPIOピン配置は新しい型に合わせています
i2c100.PNG 

そしてラズベリーパイを設定・起動してI2C先にデバイスがいるか「i2cdetect」のコマンドで確認できます。
赤字の50,58がEEPROM青字の68が加速度センサのアドレスになります
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
pi@raspberrypi ~ $ sudo i2cdetect -r -y 1
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- UU -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: 50 -- -- -- -- -- -- -- 58 -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- 68 -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- --      
~~~~~~~~~~~~~~~~~~~~~~~~~~~~

そしてアナライザをSCL、SDAの箇所に接続して「i2cdetect」しているときの波形を確認します。
sP_20180401_135924.jpg

2.i2cdetectが何を行っているのか確認する
それではi2cdetectで実際どのようにしてデバイスを検知しているのかを確認してみました

i2cdetectのコマンドのデフォルトでは0x03~0x77のアドレスにすべてRead命令してACKが返ってきたものに関してデバイスがあると認識しているようです。
i2c108.PNG
上記のように「0x1*」で各ブロックになっています


「スポンサーリンク」

3.隣接するアドレス間の周期を確認してみる
今回はI2CのクロックのSCLは100kbps(100kHz)ですので1周期10μsになっていることが波形からも分かります
i2c103.PNG


i2cdetectでの各アドレス間の周期はどうなっているのか確認してみます
まず連続でデータを取りにいっている0x20~0x2Fのアドレス周辺の周期を見てみました
i2c110.PNG

5周期ほど確認しましたが結果は「290us,264us,221us,217us,230us」と一定ではありませんでした。
ラズベリーパイ内(Linux)でのデータのやり取り時間があるのですかね?もし今度機会があればRTOSでも確認してみたいと思います
i2c109.PNG


4.離れたアドレス間の周期を確認してみる
あと離れたアドレスのブロックごとの周期を確認してみました。
下記のように「0x2*」~[0x3*]などの各ブロック周期を見てきます
i2c108.PNG

こちらも5周期ほど確認しましたが、やはりこちらも「963us,797us,804us,822us,809us」とバラつきが多くありました。
i2c111.PNG


5.まとめ・感想
「I2Cは指定の周期でほぼずれなくデータやり取りしているんだろうな」と考えていましたがいざ実際に測定してみると、意外にバラつきなどがあり新たな発見でした。

データシート見て確認するのもいいですが、やはり実物の波形見て今一度現実と認識のずれを把握する重要ですね

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


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






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

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

どうもミソジです。
今回は筆者が持っているラズベリーパイとI2Cデバイスをつなげてアナライザを使いI2CのACKとNACKの波形を見てみる」を紹介します

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

目次
1.ラズベリーパイとI2Cデバイスをつなげてみる
2.アナライザを用意する
3.アナライザを使ってI2Cの波形を確認する
4.I2Cの解析してACK/NACKを見てみる
5.まとめ・感想

1.ラズベリーパイとI2Cデバイスをつなげてみる
まずはI2C通信の環境をラズベリーパイを使って作っていきます
ラズベリーパイでのI2Cの動かし方は既に先人たちにより多くの記事がありますので省略したいと思います。「ラズベリーパイ I2C」とググれば多くの参考になる記事がありますので、そちらを参考にしてください

実際につなげた写真がこちらとなります。
「ラズベリーパイ」「I2Cデバイスを2つ(EEPROMと加速度センサ)」接続しています
sP_20180512_095551.jpg

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

EEPROMの詳細は下記となります。
EasyWordMall AT24C256 I2C インターフェースEEPROMメモリモジュール
Apple Trees E-commerce co., LT






加速度センサの詳細は下記となります







回路図的には下記の形になります。「3.3V」「GND」「SDA」「SCL」ブレッドボードにジャンパー接続するだけで簡単に可能です。
※ラズベリーパイのGPIOピン配置は新しい型に合わせています
i2c100.PNG

そしてラズベリーパイを設定・起動してI2C先にデバイスがいるかを確認してみましょう
「i2cdetect」のコマンドで確認できました。
赤字の50,58がEEPROM青字の68が加速度センサのアドレスになります

~~~~~~~~~~~~~~~~~~~~~~~~~~~~
pi@raspberrypi ~ $ sudo i2cdetect -r -y 1
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- UU -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: 50 -- -- -- -- -- -- -- 58 -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- 68 -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- --      
~~~~~~~~~~~~~~~~~~~~~~~~~~~~


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

2.アナライザを用意する
I2Cの波形を見たいと思いますが、今回はACKとNACKを見ますのでアナライザを使って確認していきます。最近はI2CやSPIなど数MHz,数十MHz程度の解析するアナライザが1000円足らずで買えます。

筆者は色々触りたかったのでモジュール化されていないアナライザの開発ボードを買いました。(値段は一番安く多くのピンで遊べますが、EEPROMなどの設定が必要ですのでマイコン初心者は少し難しいかもしれません)
sP_20171104_120005.jpg

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



但し数百円の差ですので下記のようなモジュールになっているアナライザを買った方が直ぐに測定できて楽できるかと思います。PCとUSB接続してI2C,UART,SPIなど多くの通信を解析できます。
USBケーブル、ジャンパーワイヤまで付いてきますので単に解析するだけならば筆者的には下記をおススメします





「スポンサーリンク」

3.アナライザを使ってI2Cの波形を確認する
アナライザをSCL、SDAの箇所に接続して「i2cdetect」しているときの波形を確認します。
実際行ったときの写真が下記です
sP_20180401_135924.jpg

回路ベースですと下記箇所「SDA」「SCL」をアナライザに繋げています。
i2c100.PNG

そして実際にとれた波形の一部が下記です。無事SDA、SCLの波形を取れました
i2c102.PNG

今回はI2CのクロックのSCLは100kbps(100kHz)ですので1周期10μsになっていることが波形からも分かります
i2c103.PNG


これでアナライザで無事波形取ることができました。

4.I2Cの解析してACK/NACKを見てみる
それではI2Cのデータの解析を行っていきます。解析する設定をI2Cに設定します
i2c101.PNG


解析設定するだけでI2Cのビット情報、そしてデータの「アドレス」「R/W」「ACK/NACK」が確認できました。
i2c104.PNG


これでACK,NACKが確認できるようになりました。
それではACK,NACK時のSDA,SCLの波形を確認していきたいと思います

先ほども記載しましたが、デバイスのアドレスがある箇所はi2cdetectで読み取れている(ACKが返ってきている)ということなので、今回の例では下記2例を見ていきたいと思います
①ACKが出てると思われるアドレス「50」
②NACKになっているアドレス「03」

赤字の50,58がEEPROM青字の68が加速度センサのアドレスになっています
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
pi@raspberrypi ~ $ sudo i2cdetect -r -y 1
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- UU -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: 50 -- -- -- -- -- -- -- 58 -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- 68 -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- --      
~~~~~~~~~~~~~~~~~~~~~~~~~~~~

①ACKが出てると思われるアドレス「50」
狙い通りEEPROMから「ACK」が返ってきてデバイスがあることを確認できました。
i2c105.PNG

ACKの箇所のアップが下記となります。
Readの後にデバイス側からSDAをLow(1⇒0)に出力していて、ACKが返ってきている形となっています
i2c106.PNG


②NACKが出ているアドレス「03」
やはり何もデバイスが無いためReadしても何も反応がなくNACKと判断しています
i2c104.PNG

NACK箇所のアップは下記となります。
Read後にデバイス側から何も出力がされずHi(1)のままとなっておりNACKという形になっています
i2c107.PNG


5.まとめ・感想
どうでしたでしょうか、最近では1000円足らずでI2Cを測定・解析することができます。
今回はi2cdetect時のACKとNACKに焦点を当てていましたが、応用すればR/W時のI2Cのスタートからストップまでのデータも詳細に確認できます。

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

<<20180813追記>>
I2Cとは別にSPIのCS,MOSI,MISO,SCLKの波形を見てみた記事をアップしました。

SPIのCS,MOSI,MISO,SCLKの波形を見てみた」
リンク先はこちらからです。よろしければこちらもご確認ください
sP_20180715_014939.jpg


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


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






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

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

↑このページのトップヘ