ハードウェアのデバッグについて

f:id:ohki_s:20191208134146j:plain

先日、IoT開発を始めたばかりという方から「ハードウェアのデバッグはどうやるんですか?」と質問を受けました。デバッグというか動作確認には各種測定器を使うわけですが、どういう手順でどういう測定器を使うかはあまり解説されていないと思ったので、まとめてみます。 既存のマイコンボードやブレークアウトボードにはんだ付けされたデバイス(ICチップ)をジャンパワイヤを使ってつないで使っていることを前提としています。

テスター(デジタルマルチメータ)

まず使ってほしいのがテスターです。そもそも電源が供給されているか、その電圧はデバイスが必要としている電圧かを確認しましょう。HiまたはLoに固定されているべき端子が本当にそうなっているか、変化しているはずの端子がHiやLoになりっぱなしになってしまっていることもわかります。

何をやっても値が返ってこないデバイスがあったのでテスターで各端子の電圧を調べてみたらそのデバイスのリセットがかかりっぱなしだった、ということも過去にありました。

スイッチサイエンスで取り扱っている製品では、テスターとしては多機能でちょっと高いのですが pokitMeter を挙げておきます。スマートフォンを画面として使えるかわいい測定器です。

www.switch-science.com

もちろん、もっと安価なデジタルテスターでも大丈夫です。安いものほど測定数値の更新頻度が低いのですが、まあないよりはずっとよいです。

ロジックアナライザ

どうやらデバイスに正しい電圧がかかっているということがわかったら、次はマイコンとデバイス間の通信内容を見てみます。そのためにはロジックアナライザという測定器を使います。

ロジックアナライザは、配線にかかっている電圧がHiなのかLoなのかの時間変化を測定する測定器です(えらくまどろっこしい書き方をしている理由は後で書きます)。ロジックアナライザを使うと「正しい値を書き込んでいるつもりなのになぜか想定した値が返ってこない」といった状況で、何が起こっているかを調べることができます。

また、最近のロジックアナライザプロトコルアナライザの機能も入っている物も多く、てシリアル通信やI2C、SPIは解析してくれるので、単にビット列を見るよりも格段に楽に動作を確認することができます。 I2Cのアドレス間違いや返ってきた値の解釈間違いなどよくあります。

スイッチサイエンスで取り扱っている製品ではUSBロジックアナライザ - 24 MHz/8チャンネル がいいです。お安いです。

www.switch-science.com

パソコンとUSBケーブルでつないで使うタイプの測定器で、オープンソースの測定ソフトPulseViewにプロトコルアナライザ機能もあります。

オシロスコープ

と、ここまではある程度デバイスが信用できる時の話です。ロジックアナライザという測定器は、測定している信号がHiかLoかであるという前提で測定結果を出力するので、本当はHiは5Vになっているはずなのに3Vしか出ていない時もHiとして表示してしまう可能性があるのです。

なので、ロジックアナライザでは動作しているように見えるのに実機ではうまく動かない時は、オシロスコープを使ってどういう信号が流れているかを測定しましょう。

オシロスコープにはアナログとデジタルがあって、という話を書き始めるとまた長くなるので書かないでおきます。簡単に手に入るのはいわゆる「デジタルストレージ方式のオシロスコープ」です。信号の波形をサンプリングして表示します。ロジックアナライザと違って多段階(256段階とか)で電圧の変化を見ることができるので、先に書いた「5Vのつもりが3V」などもわかります。

また、ロジックアナライザでは時間をかけずに信号が変化しているように見えますが、実際の信号はある程度の時間をかけて変化しています。ゆっくりと変化するとデバイスが信号の変化を認識できず誤動作することがあるので、それを見つけるのにもオシロスコープを使います。

スイッチサイエンスで取り扱っている製品の中ではDSO Quad - アルミ合金ケース(シルバー)がよいでしょう。DSO nanoやpokitMeterはマイコンの信号を見るには力不足です。

www.switch-science.com

ロジックアナライザの前にオシロスコープだろ、という意見があるのはもちろんわかります。つまるところ、何をどこまで信用するか、ということにつきます。今回はんだ付けは信頼するという前提で考えたのでこのような順序で紹介しました。自分で基板設計して実装したのならオシロスコープのほうが先でしょう。

動作を確認する際に重要なのは、この「何をどこまで信用するか」ということです。無条件に正しいと信じ込んで確認の対象から外してしまうと、そこに問題があったときに永久に解決しなくなってしまいます。どこまで信用してどこを疑っているのか、常に意識しながら動作確認することを忘れないようにしましょう。