ロジックアナライザー ZEROPLUS LAP-C を使ってみた ( SDカードの SPI クロック測定等 )

工具、測定器

5.LAP-C でSPI 信号を解析

では、いよいよロジアナ解析してみます。

まず、Arduino IDE のシリアルモニタを起動しておきます。
シリアルモニタの右下隅のところは必ず115200bps にしておきます。

LAP-C はパソコンとUSB接続するとこんな感じで表示が青で光ります。

次に、ESPr Developer ( ESP-WROOM-02 ( ESP8266 )) のリセットボタンを押して、下図の様に
read wait——————
と出たら5秒以内にロジアナ LAP-C Standard アプリの記録をスタートする。

記録をスタートするとこのようにLAP-C のインジケーターがカラフルに光ってトリガ待ち状態になります。

SSピンがHIGHからLOWレベルに変化するとトリガされて、下図のように記録されます。

そうしたら、下図の様に5us を選択して下図のところをクリックします。

何やらテキストデータっぽいところが見えてきたので、下図の様にズームツールを使って、ドラッグするとそこが拡大されます。

そうすると、下図の様にアプリがSPIプロトコルを解析して、ASCIIコードを表示してくれます。
見事に “testing 1, 2, 3.” というテキスト文字列がSDカードから送信されていることが分かると思います。このASCII表示はロジアナならではの機能ですね。
このASCII表示はSS信号がHIGHからLOWに切り替わった後の途中から解析するとこのASCII文字は表示されませんでした。その場合はプロトコルを判別できないようです。

因みに、下図の様に周波数モードにすると、SCLKの信号の周波数が分かります。
この機能は便利ですね。速度の測定に使えます。

つまり、Arduino IDE のESP8266ボード専用SDカードライブラリでは、
SD.begin(15);
というクラス設定だけでは4MHz の速度しか出ていないことになります。
ESP8266 ではCPU周波数 の最大が160MHz ですので、まだまだ速度が上げられそうな気がします。
試しにサンプルスケッチの17行目を
SD.begin(15, 32000000);
と変更してみて(つまり32MHz)、再度測定してみました。
結果、下図のようになりました。

25MHz の速度が出ています。
ただ、パルスの間隔が均等でありませんね。
これはロジアナの100MHz というサンプリング周波数のために正確にパルスを検知していないと思われます。。
ただ、SDカードのデータの読み書きは正常でした。
このSPI クロック周波数の測定については後の項目で詳しく述べます。

さて、もう一つの測定したかったことがあります。
今度はSDカードの書き込み信号の解析です。

Bus のところを右クリックして、「バス特性」の「パラメータ構成」をクリックすると下図の様なウィンドウが出ますので、そこのDATAのところをA3 にします。
つまり、そこにテキストデータがESP8266から出力されているか確認したいのです。

そうしたら、下図の様にトリガ回数を3回にします。
1回だと記録がテキストデータまでたどり着けないので、3回にして、メモリは32kにします。
そして、サンプルスケッチの先ほど修正した SD.begin(15, 32000000) はそのままにして、33行目のコメントを外してコンパイルし直し、シリアルモニタに
Writing to test.txt…
と表示されたらすぐにロジアナ解析スタートします。

すると下図の様に表示され、テキストデータっぽいところ探します。

このようにズームすると A3 回線にちゃんとテキストデータが出ていました。

ということで、Arduino core for ESP8266 Wi-Fi Chip の中のSDカードライブラリでは、SS(CS)ピンを SD.begin(15); と指定すると、

SCLK —> GPIO #14
MISO —> GPIO #12
MOSI —> GPIO #13

と、自動的に割り当てられるということが明白になりました。
ライブラリの SD(ESP8266) のサンプルスケッチではSCLK, MISO, MOSI のピンアサイン例が無いので、ライブラリのソースコードを読み解くか、ESP8266 のデータシートを見るか、こうやってロジアナで確かめなければなりません。

6.SD(esp8266) ライブラリのSPI信号クロック速度測定

では、今度は Arduino core for ESP8266 Wi-Fi Chip の SD ( esp8266 )ライブラリのSPI通信クロック速度を測ってみたいと思います。
SCLK 信号の周波数を測れば分かります。
先に述べましたが、例えば4MHzの速度で通信する場合は、SD.begin(15, 4000000); というように、beginクラスで設定できます。

SPI信号は正直あまり詳しくないのですが、調べるとCPUクロック周波数の半分が限界周波数で、推奨は 1/4 だそうです。
ということは、ESP8266 の最大クロック周波数は160MHz ですから、その1/4の 40MHz が推奨値ということになります。
はたして、この周波数が出ているのかどうかを調べたいところです。

ロジアナ LAP-C が正しいかどうかチェックするために、オシロスコープも併用してチェックしてみます。
私が現在愛用しているのはPCベースのオシロで、
P&A Technologies の PA-S2000/E です。
リアルサンプリング周波数が 100M/s なので、LAP-C (16032) と同じということになります。
ESP8266を測定するのならもっとサンプリング周波数が高い方が良いですね。
1Gくらいのオシロが欲しい・・・。
これ、なんと Amazon.co.jp でも売っていました。

USB接続デジタルストレージオシロスコープ メモリ1M搭載モデル PA-S2000/E
ピーアンドエーテクノロジーズ
¥107,700(2024/04/25 06:39時点)

これはプローブが別売りですので注意してください。
250MHzのプローブはかなり高価でした。
PA-S2000用プローブ x1/x10 PA-S2000/PRB
ピーアンドエーテクノロジーズ
¥37,700(2024/04/25 13:47時点)

これは随分前に購入したのですが、当時でもかなり高価だったと思います。
今はもっと高性能で安価なのが売っているかもしれませんね。
ただ、これは持ち運びに便利なので、とても重宝しています。

測定している様子はこんな感じです。

では、話を戻しまして、まず、ライブラリ標準の
SD.begin(15)
として、速度を指定しない場合で測定してみます。
ロジアナ LAP-C の結果はこんな感じです。
周波数モードで表示しています。

SCLK のパルス間隔が均等になっていて、4MHz と出ています。

では、オシロスコープで確認するとこんな感じです。

山から山までのパルス長が 250ns となっていて4MHz を示しています。
ということで、ロジアナ LAP-C は正常に動作していることが確認できました。
つまりは、SD.begin(); クラスは何も指定しないと4MHz しか速度が出ないということが分かりました。

次に、
SD.begin(15, SPI_FULL_SPEED);としてみます。
SPI_FULL_SPEED はライブラリのソースコードを読み解いていくと 8000000 で定義されていました。
ロジアナ LAP-C の測定はこうなりました。

7.692MHz と出ました。
オシロスコープの結果はこうなりました。

パルス長は128ns で 7.812MHz と出ています。
概ね 8MHz で良いのではないでしょうか。
ということで、SPI_FULL_SPEED = 8000000 ということで問題なしです。

FULL_SPEED 以上はダメなのかを確認するために、
SD.begin(15, 32000000);
として、32MHz で動作するか確認してみます。
ロジアナ LAP-C はこうなります。

25MHz と出ていますね。
オシロスコープではこうなります。

これはサンプリング周波数が100M/s なので、矩形波としては捉えられなくなってきました。
やっぱり1GHz以上のオシロが欲しい・・・。
かろうじてパルス長 30ns 、周波数 33.333MHz と出ました。
Arduino IDE のシリアルモニタも正常に表示されたので、32MHz は問題なく動作するとして良いでしょう。

次に、SPI 通信の推奨値、CPUクロック周波数 160MHz の 1/4 の 40MHz を測定してみます。
ロジアナ LAP-C ではこうなります。

50MHz と出ましたが、パルス間隔が均等ではありません。
やはり100MHz のロジアナでは正しい測定はもう無理ですね。
オシロスコープではこうなりました。

これもノコギリ波みいになっていて正確な測定はできません。
ただ、8つ山があるのでなんとか判別できます。
約35MHz と出ています。
因みに、Arduino IDE のシリアルモニタではこれも正常に表示されていました。
ですから、40MHz もOKといえるのではないかと思います。

では、64MHz にしてみました。
ロジアナ LAP-C はこうなります。

パルス間隔が均等ではなくなり、50MHz なんだか 33MHz なんだか分からなくなってます。
これは測定不能です。
オシロスコープも同様にこうなります。

ただ、オシロの測定だと、40MHz と64MHz ではパルス長が変化ないように見受けられます。
ということは、やはり40MHz が限界なのではないかという予想ができるのではないかと思います。
Arduino IDE のシリアルモニタでは64MHz でも正常に表示されてはいました。
でも、不意のエラーを考えると40MHz が最大値と考えておいて良いと思います。
因みに、これでSDカードを読み書きするとメッチャメチャ早いです。

あとは、SDカードにはクラス分けがありますので、ハイスピードのものを選ぶと良いかもしれません。
この記事の最初に紹介したTDKのmicro SD カードは class4 なので、最低4MB/s です。
この 最低 というのが勘違いしてしまいますね。最高ではないんです。
ま、いずれにしても、クラスは高い方が速いのでそちらを選んだ方が良いと思います。

以上、ESP8266のSDカードライブラリの SPI クロック速度測定でした。

7.まとめ

ということで、やはり、ロジアナっていうのは便利ですね。
ZEROPLUS社のLAP-C (16032) は、この値段でこれだけ測定できれば趣味程度の電子工作ならばとても重宝します。
ただ、最近のマイコンチップはクロック速度が速くなってきたので、できるだけ高周波数のものがいいですね。
まだ当分、電子工作程度のマイコンチップでは100MHz のロジアナで十分だと思います。

今回の実験で、Arduino IDE の SDカード用ESP8266ライブラリが少し解明されてきました。
よくよく調べると、ESP8266 のポテンシャルの高さに驚かされます。
電子工作でここまで高速のSDカードデータ読み書きができれば十分です。
これからは、その他の件もいろいろと調査していきたいと思っています。

しかし、ロジアナというものはとても便利で、トラブルシューティングに最適だとつくづく思いました。
こんなイイものがあったんだ・・・、と感心してしまいました。
プロの方々の間ではロジアナは当たり前のアイテムなのでしょうが、一般人の私にとってはとても新鮮な発見でした。
このロジアナは買って損は無かったと思います。
これからは電子工作の必携アイテムとなるでしょう。

ではまた・・・。

コメント

タイトルとURLをコピーしました