$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をなんとか調べて合わせるのが重要です。
想定通りに動作したので満足しました。これから使っていけそうです。

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

2017年1月6日金曜日

基板上の信号が見えない

昨年末に同人ハードウェア製作をしていたのですが、自前設計の基板に正しく信号が流れているのか確認するのに苦労することが何度かありました。
これまでは安いテスター1本でやってきたのですが、さすがに限界かなということでオシロスコープ(オシロ)やロジック・アナライザ(ロジアナ)の導入を検討しました。

オシロを買うかロジアナを買うか

信号がきっちり出ていることを確認したいという意味では、オシロの範疇に思えます。回路や基板の設計をやっていると、たとえばI2Cでのプルアップ抵抗値と信号波形の関係を把握しつつ試行錯誤するケースがあります。そのような場合にロジアナではどうにもなりません(ロジアナのA/D変換部分で4-8bit程度の出力をするMSO風オプションがあっても良い気はしますが)。
しかし、私が扱うのは基本的にデジタル信号です。迷ったら両方買えという格言がありますが、このあたりの高額機材をポンポン買っていては身が持ちません。扱っている信号種別はSPIやI2Cのようにスタンダードなものが多く、それらをいかにサクッと検証できるかを重視すべきと考えました。
ということで今回はロジアナを買うことにしました。格好良くいえばデジタル側に軸足を置くみたいな話ですが、アナログ側で本格的に詰まったら結局半泣きで秋月へ駆け込んでオシロも買うと思います。

安価で機能の充実したロジアナ探し

1万円~2万円あたりの(製品ドメインとしては)手頃なロジアナを求める人は昔から居て、一定は先人のレールがあるようでした。検討の過程で上がってきたものをいくつか書き残しておきます。
AliExpressもざっと見てみましたが、ライセンス的に危うそうなSaleae製品のコピー商品が多いと感じたのでやめました。

ZEROPLUS 64kb 16ch 100MHz

秋月で売っているZEROPLUSロジックアナライザ64kビット16ch100M LAP−C(16064)は割と良さそうでした。2万円は予算オーバーですが、調べた限りハード・ソフト共に評判が結構良い製品です。しかし発売から6年経っていることから、もう少し新しいアーキテクチャで確保可能なデータ量も多い製品があるのではないかと考えました。

1万円ロジアナ自作キット

一部界隈で有名なカメレオンUSBの方のロジックアナライザキットもあります(ました)。あまりこの方面の手組みはしたくないなと思って見送りました。

Sigrok: オープンソースの信号分析ソフト

ここで少々目をソフトに転じました。信号をキャプチャするハードを安価に揃えられても、信号を解釈してデータダンプするにはソフトが必須です。
いくらか探してみて見つかったのがSigrokというオシロとロジアナの両方の機能を持つオープンソースの信号分析ソフト(というか信号分析基盤)です。幅広いロジアナをサポートし、それなりに幅広い信号種をサポートするという素晴らしさです。

Sigrokと組み合わせる前提の廉価ロジアナ

Sigrok wikiのCategory:Open source hardwareでいくつかの製品が紹介されています。
20MHz駆動のPICに32KBのSRAMを4つ組み合わせるというゴリ押しみの高いLogic Shrimpが割とツボでした(実用性はさておき)。
AndroidとがっちゃんこしたOsciPrimeも面白そうでしたがオシロはひとまず買わないことにしたのと、値が張るので回避しました。
この界隈ではFPGAをベースとするロジアナの老舗SUMP.ORGがあり、これに基づいたボードが数種類存在するようでした。たとえば$50のOpen Workbench Logic Snifferです。割と良さそうですね。
秋月ではXilinxのSpartan系開発ボードであるPapilioシリーズに対するロジアナ拡張であるPapilio FPGA Logic Analyzer Tools Kitも扱っています。

DSLogic Pro

そんな中で見つけたのがDreamSourceLabのDSLogic Proです。元々は2013年末頃のKickstarter案件だったようです。
製品ポイントをまとめると:
  • 最大サンプリングレート: 4チャネル400MHz
    • 16チャネル時は100MHz
  • 内蔵バッファメモリサイズ: 256Mbit
  • ソフト: Sigrokのカスタム版+自前ビューア
    • Windows/Mac OS X/Linux用ドライバ提供
    • ビューアはSigrokのPulseViewベース
  • 直販で買えばクリップ10個付き送料込み$99
ということで、きちんと動いてくれればかなりお買い得な製品だと感じました。似た価格帯でオープンソースなものとそうでないものがある場合、オープンソースなものを選んだほうが何かと嬉しいですし。
ビューアのGitHubリポジトリ: DSViewを見た感じ、最近メンテスピードが落ちているようですがそれなりの品質には到達していそうです。
そういうわけでサイト直販のPayPal払いで2016年12月13日の晩に注文しました。
次回は製品が無事に届いて実際に動作を確認した話です。