新品のオシロスコープ、SDS804X HD は快調です。
デジタル・オシロスコープですが、反応が早く A/D 変換は 12 ビットなので、以前の機種より波形表示がなめらかなでアナログ・オシロスコープ的な感じで使えています。
ところで、最近のオシロスコープには、以前使っていたアナログ・オシロスコープではひっくり返っても真似の出来ない数々の機能がてんこ盛りです。
その中から、今回は Arduino などのマイコンで良く使う、I2C と SPI 信号の解析機能を使ってみます。
マニュアルを読んだ限りでは、高性能なロジック・アナライザ的な機能が使えるようなのですが、私でも使いこなせるかなぁ。
なお、入手できる色々なオシロスコープから、悩みながら Siglent SDS804X HD を選んだ細かな過程は下の記事をご覧ください。
I2C と SPI とは
実際に信号を見てみる前に、I2C と SPI について簡単に振り返ります。
I2C
LCD や OLED ディスプレイなど、低速で動作する部品の接続に良く使われる通信方式です。
1980年代にオランダのフィリップス社(現在は NXP セミコンダクターズ社)が開発した規格で、2本のデータ線だけで送受信できる利点があります。
SDA(Serial Data) : データ線
SCL(Serial Clock):クロック線
それぞれの線は用途が決まっているので、入れ替えると動作しません。
この2本の線は、速度に応じて数 kΩのプルアップ抵抗(信号線を安定させるための電源につなぐ抵抗)が必要です。
I2C では2本の線で並列に多数の部品をつなぐことが出来ますが、個々の部品を識別するためにアドレスが必要です。(アドレスと言うと住所ですが、ここでいうアドレスはマイナンバーのように固有番号です。)
I2C のアドレスは、「0x3C」のように16進数で指定します。(16進数で表すので頭に「0x」を付けます。)
I2C の細かな規格やプルアップ抵抗の計算方法については「「I2C スキャナ」完成!と基板のお裾分け」の記事に記載しています。気になる方は下のリンクから記事をご覧ください。
今回のデジタル信号の解析で使用したのは、I2C の OLED です。
端子は下の写真の左2本が電源で、右から2本をデータ線として使います。
SDA:シ リアル・データライン
SCL:シリアル・クロックライン

SPI
SPI(Serial Peripheral Interface)は、I2Cと同様に複数の部品をつなぐことが出来ます。
元々はモトローラ(現在は I2C と同じく NXPセミコンダクターズ)が作った規格です。
配線は4本で、I2C の通信速度が最新規格でも 3 Mbps 以下(スタンダード・モードは、最大 100kbit/s)なのに比べて、SPI は最大速度が数十 Mbps程度と一桁以上も速度が早いです。
使用する信号線は、
・SS(Slave Select)
・MOSI(Master Out Slave In)
・MISO(Master In Slave Out)
・SCK(Serial Clock)
ですが、使用する部品によっては下の写真のように、I2C と違ってピン名が違うことがあるので、SPI に慣れていない私はいつも接続に迷ってしまいます。
今回使用する SPI の部品は、I2C と同じ 0.96 インチの OLED(SSD1306(128 X 64 ドット))を使います。

ご覧のように端子部分に記載されている名前は、上に書いた略号と合いません。
上の写真の OLED の端子は左からこのようになっています。
(私は「D0」を Data Out と勘違いしますが、クロックですね。)
OLED端子 | SPI端子 | 概略 |
GND | グランド | |
VCC | 5V/3V | |
D0 | SCK | クロック |
D1 | MOSI | データ |
RES | リセット | |
DC | データ・コマンド | |
CS | SS | チップ・セレクト |
信号源の準備
I2C と SPI の信号源を作ります。
と言っても、Arduino UNO(互換機)に OLED ディスプレイをつないだだけです。
標準で組み込まれている SSD1306 のスケッチ例は I2C と SPI に別れています。
今回はオシロスコープで I2C と SPI 波形を見る都度、書き換えることにします。(実際には、それぞれのスケッチ例の中身を「Yatte Miyoh!」という文字表示だけになるように編集しています。)

ブレッドボードに刺した OLED と Arduino UNO の接続は、ライブラリ例に記載されている接続指示どおりです。
配線の色は、ブレッドボード用に購入した配線で重ならない色にしています。
I2C 用の接続
OLED | Arduino UNO | 配線色 |
GND | GND | 黒色 |
VCC | 5V | 赤色 |
SCL | アナログpin5 | 黄色 |
SDA | アナログpin4 | 緑色 |
SPI 用の接続
OLED | Arduino UNO | 配線色 |
GND | GND | 黒色 |
VCC | 5V | 赤色 |
D0 | Pin 10 | 緑色 |
D1 | Pin 9 | 青色 |
RES | Pin 13 | 白色 |
DC | Pin 11 | 橙色 |
CS | Pin 12 | 黄色 |
オシロスコープの準備
今回、使用したオシロスコープは Siglent SDS804X HD です。
このオシロスコープは最新型のデジタル・オシロスコープで、デジタル信号の解析機能が搭載されています。
解析できる信号の種類も、組み込みマイコンで良く使用する I2C、SPI、UART に加えて、他社の同価格帯のオシロスコープでは搭載されていない自動車用の CAN、LIN が標準で使えます。
I2C を解析するには2本のプローブが、SPI を解析するには3本のプローブが必要なので、残念ながら2チャンネルの SDS802X では SPI は見られません。
このような用途のためにも、多少の価格差なら後で後悔しないように4チャンネル機の購入をおススメします。
オシロスコープのプローブに識別用のリングを付けていない方は、3チャンネル分(黄色・ピンク色・青色)を取り付けておきます。
I2C 信号の解析
プローブの接続
オシロスコープの入力端子に、2チャンネル分のプローブをつなぎます。
プローブの接続が終わったら、本体のピンク色のスイッチを押すか、画面右下の薄く表示されている「+」部分を押して2チャンネル目を表示させます。

チャンネル1(黄色)のプローブを I2C の SCL につなぎます。
チャンネル2(ピンク色)のプローブを I2C の SDA につなぎます。
OLED | Arduino UNO | 配線色 | オシロスコープ接続 |
GND | GND | 黒色 | |
VCC | 5V | 赤色 | |
SCL | アナログpin5 | 黄色 | チャンネル1 |
SDA | アナログpin4 | 緑色 | チャンネル2 |
波形の表示と位置の調整
前面パネルの青色の「Auto Setup」スイッチを押して、表示されるメッセージに「OK」を押して、波形を表示させます。

必要に合わせて垂直軸を「2 V」に、時間軸を「10 u Sec」程度にします。
そのままだと見づらいので、黄色の線を上に、ピンク色の線を下の適切な位置へ、ノブで調整します。

トリガの設定
画面上の「Trigger」を押して、タイプを「シリアル」、プロトコルを「I2C」にします。

上の画面の「チャンネル設定」を押します。
表示される I2C SIGNAL 画面で、SCL を「C1」に、SDA を「C2」にします。
Threshold は「1.5 V」位にしておきます。

波形の解析
表示されている I2C 波形を解析します。
画面上の「Analysis」を押します。
表示されるメニューから「Decode」を選びます。

「DECODE」画面で「Bus Protocol」を「I2C」にします。
トリガが正常に取れていれば、画面のように最下段に解析した結果が表示されます。
解析結果が表示されない場合は、次の項目を確認してください。(私はココの表示を解決するのに、数日かかりました。)

必要に応じて時間軸を調整して、表示される波形を見やすくします。
最終的にはこんな感じで表示してみました。

解析結果が表示されない場合
最初、どんなにガンバって色々なノブを調整してみても最下段の「S1」欄に何も表示されませんでした。
取説やネットの情報・動画などを確認しましたが、どれも簡単な説明で解析結果が表示されているのにおかしいなぁ・・・
しかし、最終的には、以下の部分を確認して変更したら、簡単に解析結果が表示されました。(今までの苦労は何だったのか。)
手順は簡単です。最下段に解析結果が表示されない場合は、「DECODE」設定画面の「Protcol Signals」を押して各信号の設定を確認します。

すでに上のトリガを設定する手順の I2C SIGNAL 画面でチャンネル1 を SCL、チャンネル2 を SDA にしていましたが、解析(DECODE)の同じ画面の設定は連動していなくて別のようです。
どちらも C1 になっていました。(これでは解析結果が表示されないのも納得です。)

ここを設定すると、すぐに最下段に解析結果が表示されました。


SPI 信号の解析
プローブの接続
SPI 信号は4本の信号線が必要ですが、データ解析には3本で OK です。
オシロスコープの入力端子に3チャンネル分のプローブをつなぎます。
つなぎ終わったら、本体の青色のスイッチを押すか、画面右下の薄く表示されている「+」部分を押して3チャンネル目を表示させます。

チャンネル1(黄色)のプローブを SPI の SCK(OLED の D0)につなぎます。
チャンネル2(ピンク色)のプローブを SPI の MOSI(OLED のD1)につなぎます。
チャンネル3(青色)のプローブを SPI の SS(OLED の CS)につなぎます。
OLED端子 | SPI端子 | 概略 | オシロスコープ接続 |
GND | グランド | ||
VCC | 5V/3V | ||
D0 | SCK | クロック | チャンネル1 |
D1 | MOSI | データ | チャンネル2 |
RES | リセット | ||
DC | データ・コマンド | ||
CS | SS | チップ・セレクト | チャンネル3 |
波形の表示と位置の調整
前面パネルの青色の「Auto Setup」スイッチを押して、表示されるメッセージに「OK」を押して、波形を表示させます。

I2C と続けて波形を表示している場合は、何も押さなくても波形は出ているかもしれません。
その場合は、青色の「Auto Setup」スイッチを押す必要はありません。
ただし、Arduino UNO の SPI 信号は I2C と同じタイミングでは見づらかったので、時間軸を 100 u Sec 位に変更しました。
トリガの設定
画面上の「Trigger」を押して、タイプを「シリアル」、プロトコルを「SPI」にします。(画像を使いまわしているので「I2C」と書かれている部分を「SPI」にします。)

チャンネル設定を押します。
表示される SPI SIGNAL 画面で、
・CLK を「C1」
・MISO を「C2」
・CS を「C3」
に設定します。
Threshold は「1.5 V」位にしておきます。
なお、MOSI は、自動的に C2 になります。

波形の解析
表示されている SPI 波形を解析します。
画面上の「Analysis」を押します。
表示されるメニューから「Decode」を選びます。
「DECODE」画面で「Bus Protocol」を「SPI」にします。
今回は、DECODE の「Protcol Signals」のプローブ設定は認識されたようで、トリガ側の設定だけで解析結果が最下段に表示されました。

もし、解析結果が出ない場合は、I2C と同様にDECODE の「Protcol Signals」の設定で各チャンネルが正しく設定されているか確認してください。
評価
最新式デジタル・オシロスコープの SDS804X HD は、今までのアナログ・オシロスコープでは考えられなかった、ロジックアナライザのような使い方が出来ます。
ロジックアナライザとの違いは、
良い点
・信号の振幅が確認できる。
・追加投資なしで、オシロスコープ単体でデジタル信号の解析ができる。
微妙な点
・最大で4チャンネルしか見られない。
・用意されている信号しか解析できない。
ぐらいでしょうか。
次回の予定
この、SDS804X デジタル・オシロスコープは、FFT(高速フーリエ変換)を利用した周波数解析も出来ると取説に書いてありました。
という事は、スペアナ的に横軸を周波数にした計測が出来るという事でしょうか?
Siglent 社の日本法人の HP を見てみると「FFT機能は優れたスペクトル分解能を備え、スペクトラムアナライザのように信号の周波数成分とエネルギー分布をより正確に解析できます。」と記載されていました。
FFT 機能で計測できる最大周波数は、今のところ見つけられていませんが、マニュアルの操作画面を見てみると横軸の目盛りには 400 MHz 以上の周波数まで表示されていました。
SDS804X のオシロスコープとしての最大周波数は 70 MHz ですが、FFT 機能ではそれ以上の周波数まで見れるのでしょうか?
その辺を次回の宿題にしたいと思います。
コメント