$99のオープンソースなロジック・アナライザ DSLogic Proを使ってみたところかなり良かった

2017年1月9日月曜日

前回: ハード開発で詰みが見えたので、やすうまロジック・アナライザを探した

TL; DR

  • $99のオープンソースなロジック・アナライザ DSLogic Proを購入し、使ってみた
  • 製品は注文から2週間ほどで届き、未署名ドライバの壁はあるもののトリガー込みできちんと動作した
  • 信号キャプチャ→デコード確認のためArduino Pro Miniに対するUSBシリアル書き込み(UART)をデコードしてみた
    • 調歩同期式のUARTでは正しいbaud rateを見つけるのが割と大変
  • 想定通りに動作したので満足しました。これから使っていけそう
図1 DSLogic Proで信号をキャプチャしているところ

発送から到着まで

12/13の晩に注文したところ、同深夜に「配送トラブル時のために電話番号を教えてほしい」というメールが届きました。電話番号を連絡するついでに、住所表記の一部が漢字だったのでアルファベット表記で発送してほしい旨を返信しました。
DreamSourceLabは決済だけではなくショッピング管理全体にPayPalを使っているようで、12/27にPayPalから荷物トラッキング番号の通知メールが届きました。
日本での配送は安定の郵便局で、トラッキング情報は次の通りでした。
  • 2016/12/15 19:55 引受 (CHINA)
  • 2016/12/16 14:59 国際交換局から発送 (GUANGZHOU, CHINA)
  • 2016/12/26 07:11 国際交換局に到着 (川崎東郵便局, 神奈川県)
  • 2016/12/27 09:00 通関手続中 (川崎東郵便局, 神奈川県)
  • 2016/12/27 09:56 国際交換局から発送 (川崎東郵便局, 神奈川県)
  • 2016/12/27 23:54 到着 (最寄り局)
2週間弱で最寄り局着ですね、China Post系としては一般的な日数です。以前Twitterに書いた時は3週間弱かかったと書きましたがこれは勘違いでした。12/27の晩に最寄り局へ到着、翌日配達(不在持ち戻り)となりましたが、結局コミケ(C91)の1日目が終わってから引き取りに行きました。

波形ビューア: DSViewのインストール

基本的にWindows用のセットアップ手順へ従います。
ダウンロードした0.96をインストールします。
特にドライバのインストールでハネられることもなく終わりました。そんなばかな。

DSLogic用ドライバのインストール

前述のインストール手順はWindows 8までをカバーしますが、手元環境はWindows 10なので少々手順にアレンジが必要です。
まずDSViewのインストール先を見たところ、ファイルはコピーされていました。
図2 DSLogic用のドライバディレクトリ
この状態なら、Windows 10でやたら強固になった未署名ドライバのインストール制限を回避すれば使えそうですね。当然、仕事用PCでやるべきことではないので注意してください。
手順はhttp://pasofami.game.coocan.jp/Win10_DrvIns.htmに従いました。
一通りの回避設定をして前述の場所にあるdpinst-amd64.exeを実行したところ、次の画面が表示されました。
図3 未署名ドライバの警告
ちなみに回避設定をしない状態だとインストールが強制中断されます(スクリーンショットを残していませんが)。ドライバをインストールしないと話が進まないので、今回は「このドライバー ソフトウェアをインストールします」を選択して続けます。
図4 ドライバのインストールが完了
さて、ドライバをインストールしたら諸々の回避設定を元に戻します。TESTSIGNINGをOFFにしてもきちんと動作するか否かはドライバ依存な気がしますが、DSLogicのドライバは問題なく動作し続けました。めでたしめでたし、です。
ドライバのインストール後にDSLogic ProをUSB接続すると、次のダイアログが出ます。よかったですね。
図5 ドライバがうまく入ってる雰囲気

DSViewの起動とDSLogic Proのセルフテスト

DSViewを起動したら、ひとまず簡単な動作確認をしてみます。
図6 DSViewの起動直後
DSLogic Pro側にセルフテスト用の仕組みが備わっているので、まずはそれを使います。
DSLogicのチュートリアルから多少画面が変わっていますがノリで。Optionsを開いてInternal Testを雰囲気で実行します。0番ピンから15番ピンにかけて信号間隔が広がっていく結果が出ればokです。
図7 DSLogic Proのセルフテスト結果

DSLogic ProでArduino書き込み時のシリアル通信をダンプする

内部信号を使うセルフテストは通ったので、次は外部信号を実際にキャプチャしたいところです。ロジアナを使うの自体が初めてなので、クリップ設置が難しくないターゲットでお手軽に動作確認したいという気持ちもあります。
そこで、ちょうど目の前にあったArduino Pro Mini互換機へUSBシリアル変換モジュール経由でファームウェアを書き込む通信をダンプしてみることにしました。
秋月のFT232RL USBシリアル変換モジュールにつないだPro Mini互換機です。かわいいですね。
気持ちでプローブをつなぎ、気持ちでUARTのデコードまで試してみました。
図8 気持ちの結果(うまく動作していない)
サンプリングレートとサンプル数の設定をいくつか変更してみたところ、いずれもきちんと動作していそうでした(RLE付きの圧縮保存系は未確認)。
一見きちんと動作していますが、ここでのデコード結果はデタラメです。バイナリエディタで書き込み対象のArduinoスケッチを開いてバイト列の一致を探したところ、一切見つかりませんでした。
しばらく試行錯誤した後に、もしや通信速度(baud rate)が合っていないのではないかと考えました。Arduinoの書き込みに内部で利用されているavrdudeはbaud rateを割と好きに変更できます。
Arduino IDEの書き込みログを詳細表示へ切り替えて確認したところ、案の定57600指定になっていました。
図9 baud rate = 57600
そういうわけで1MHz-16Mサンプル取得を指定してデコーダのオプションを次のように設定しました。
図10 UARTデコーダの設定
baud rate以外は、Data formatをasciiからhexへ変更しただけで他はデフォルト値のままです。
デコード設定の変更はダイアログを閉じるとすぐに反映されるので、データの再取得は必要ありません。baud rate指定に対して取得済みデータのレートが低すぎる場合には警告が表示されます。最低でもbaud rateの4倍は必要なようで(サンプリング定理の都合というよりは、信号立ち上がり位置の正確な検出にはよく4倍と言われるあれでしょうか)、今回のbaud rate = 57600では200kHzまで怒られて500kHzから通りました。
今回はDSLogic Pro上のDRAMにキャプチャ済みデータを一旦全て溜め込んでキャプチャ終了後にホストPCへ転送するBuffer Modeを利用しました。さきのレート計算によると115,200bpsの通信も500kHzで収まるので、よくあるシリアル通信であれば64Mサンプルめいっぱい使って131秒間キャプチャできる計算です。優秀ですね。
逐次ホストへキャプチャデータをストリーム転送するStream Modeでは(16ch時10MHz、8ch時25MHzの制約はあるものの)データ量制限がある程度緩和されます。しかしディスク容量の限りキャプチャできるかというとそういうわけではなく、DSView側の制限で512Mサンプルまでしか指定できません。更に、512Mサンプル取得を指定してキャプチャを実行するとメモリ確保エラーが発生します。32bitアプリ・・・。このあたりは必要と思う人がいじって拡張すればよいという感じでしょうか。
本題に戻ります。正しいbaud rateを指定してデコードしたところ図11のとおり、キャプチャした信号をデコードした結果と書き込み対象ファームウェアのバイナリの一部が一致することを確認できました。キャプチャ成功です。
図11 ファームウェア書き込みのキャプチャ結果
調歩同期式のUARTでは設定baud rateが合っていなくてもそれなりに正しそうな誤ったデータへとデコードできてしまうので、baud rateをなんとか調べて合わせるのが重要という教訓を得ました。
I2Cのように常時クロック信号が出ているものなら高レートでクロック信号をキャプチャするだけで実レートの推測が可能なはずですが、UARTだと微妙に面倒ですね。ソフトとデコーダによっては高レートキャプチャしたデータからbaud rateをそれなりの精度で推測してくれそうですが、どうなんでしょう(その後にGuess bitrateというデコーダがDSView内にあるのを見つけたので、今度使ってみます)。それとも信号線のstart bitを見つけた時点で信号サイクルの逆数から通信レートを察するのが基礎技能なんでしょうか。
さて、その後にDTR信号線の立ち上がり/立ち下がりにトリガーを仕込んでのデータキャプチャも試してみました。Arduino IDEの場合、画面上の書き込みボタンを叩くと再度コンパイルから走るためキャプチャタイミングを図りづらいのですが、トリガーがあると無駄に巨大データをキャプチャせずに済みますね。DSViewのUI上で信号線にトリガーオプションを付けるだけで、期待通り必要な部分のサンプリングをおこなえました。

今後

DSView(というか元のPulseView+プラグイン群)ではSPI通信のデコーダ(図12)など、プロトコル解析機能が割と充実しているので開発の中で順次試していこうと思っています。
図12 SPIのデコードオプション

まとめ

$99のオープンソースなロジック・アナライザ DSLogic Proを購入し、使ってみました。
製品は2週間ほどで届き、未署名ドライバの壁はあるもののトリガー込みできちんと動作しました。
手軽なキャプチャ→デコード確認用にArduino Pro Miniに対するUSBシリアル書き込み(UART)をデコードしてみました。
調歩同期式のUARTでは設定baud rateが合っていなくてもそれなりに正しそうな誤ったデータへとデコードできてしまうので、baud rateをなんとか調べて合わせるのが重要です。
想定通りに動作したので満足しました。これから使っていけそうです。

0 件のコメント:

コメントを投稿