目次
1.USBロジアナの概要、ハードウェア
2.ソフトウェアの入手
3.ソフトウェアのインストール、基本的な設定
4.USBロジアナの使い方(基本操作)
5. プロトコル・デコーダの選択と設定
6. カーソルとマーカー
7. その他の機能
・デバイスの構成
・View の追加
・データのインポートとエクスポート
・表示のテーマ/スタイルの変更
8. アナログチャネルと Demo device
9. 16チャネルのUSBロジアナ
10. 別の格安ボードで USB ロジアナ!
・Raspberry Pi Pico
・USBシリアル変換ボード
11. Android で PulseView
1.USBロジアナの概要、ハードウェア
EZ-USB とか FX2LP と呼ばれる安価なマイコンボードで簡単にロジックアナライザが実現できます。この記事をご覧になる方は、ロジアナがどういう測定器なのかご存知だろうと思いますので説明は省略します。下図は、この記事で使用するソフトの表示例とハードウェアです。
上の裸のマイコンボードはサイプレスのCY7C68013Aを搭載していて 8chまたは16Chのロジアナとして使用できます。サイズは41mm×57mm、アマゾンで1000円以下で購入できます。
CY7C68013A: USB 2.0 Peripheral controller with 16K RAM, 24 GPIOs, 56-pin QFN
下の2つは同じマイコンを内蔵し、8Chのロジアナに特化して27mm×57mmのケースに収まっています。片側をパソコンにUSB接続し、他方の8本の信号線とGND線を被測定機器に接続します。2つを見比べると端子名が微妙に異なりランプの配置も逆だったりします。何れもアマゾンで1000円~2000円、Aliexpressだと少し日数はかかるけど1000円以下で入手できます。
ケースの隙間に細いマイナスドライバを差し込むとカバーが簡単に取り外せました。
裸のボードがケース入りと異なる点は ①青い電源スイッチと ②白いRESETスイッチと ③ジャンパピンがある、④IOピンの数が多い、⑤シリアルEEPROMのメモリサイズ、⑥基板サイズ、ですが基本的には同じ構成です。
実は何年も前にこれらのボードを買って、その内試そうと思ったまま放置してました。このボードを使用したUSBロジアナに関して既に多くの方がネットで紹介されてますが、ダウンロードできなかったりバージョンアップで内容が少し変化している事があったり、使い方の説明が物足りなく感じたりしたので、この記事を書くことにしました。
■ これらのボードはSaleae社のLogicというロジアナのクローンを作るために販売されているようです。Saleae社の製品は秋月電子通商、アマゾン、Mouserで販売されていて高性能ですが、素人の趣味の工作用としては少し高価です。
私が注目したのは入力が8または16本あって、A/D両方つまりアナログ波形も測定できる(分解能は10bitまたは12bit)という点です。格安ロジアナはデジタルのみです。
【蛇足】どーでもEことですが Saleae って何? 何て発音するの? サレアエ?セールアエ? 辞書に載ってないけど固有名詞? 造語? 中国語? 中華製? と買うつもりは全く無いけどとても気になりました。ホームページにFAQがあったので翻訳しました、Googleが。
Q: Saleaeはどのように発音しますか?
A: Saleae は say-lee-a と発音します。最初の音節にアクセント (強勢) が置かれます。SAY-lee-a のようになります。ご想像のとおり、お客様は独自の発音をする傾向があり、それはまったく問題ありません :)
サレアエではなくセイリアのように発音するようです。試験に出ます。社名を考える際に元素周期表を使用したためセレンが起源の一部だった、というようなことが書いてあります。つまり造語ということです。会社はサンフランシスコにあり、社員14名の顔写真が掲載されてます。
2.ソフトウェアの入手
格安USBロジアナ用のソフトウェアとして、オープンソースの信号解析ソフトウエアの Sigrok というプロジェクトが提供する PulseView と Sigrok-cli があります。PulseView は GUIのアプリです。Windows, Linux, MAC OS X で動作します。Sigrok-cli はCLI で Python と連携して便利なことができるようですが興味ないので詳細は省略します。
下記からダウンロードできるとのことですが・・・問題発生!
Windows用のPulseView (64bit) のボタンをクリックすると「Microsoft Edgeによってブロックされました」というエラーメッセージが表示され、ダウンロードのフォルダには「未確認458311.crdownload」というファイル(サイズは44MB)ができてました。
えぇっ! な、何これ? どうすればいいの~? 調べると、セキュリティの問題だとかウイルス対策ソフトウェアのチェックを外せばいいとか・・・ う〜ん、面倒くさい&気が進まないようなことが書いてあります。そっち方面は詳しくないから下手に手をつけたくないなぁ。とりあえず変な拡張子のファイルはゴミ箱へ捨てました。
う~むむむ、困ったな〜・・・・・ 何か簡単で手抜きで楽チンな方法ないかなぁ? Edgeがブロックした? だったらブラウザを Google Chrome に変えてみたらどうだろ? と思いついて試したところ正解! 無事ダウンロードできました~!!
(Windows でブラウザは Edge のみの人へ:わざわざこれだけの為に Chrome をインストールする価値あると思いますよ)
3.ソフトウェアのインストール、基本的な設定
ダウンロードしたのはexeファイルなのでダブルクリックするとインストールされます。
sigrokというフォルダができて中に色々入ってます(Example も一緒にダウンロードしました)。使用するのは黄色枠の2つです。HTMLとPDFのマニュアル(英文)もあります。
■ 先ずは USBドライバのインストールです。PCとUSBロジアナをUSBで接続してから上記スタートメニューの「Zadig (PulseView)」をクリックして、⇩⇩⇩のウィンドウが表示されたら「Install Driver」をクリックします。
■ USBドライバがインストールできたらスタートメニューの「PulseView」で起動します。PulseViewのウィンドウ ⇩⇩⇩ で「設定」のスパナとドライバのアイコンをクリックし、設定のウィンドウで言語を「Japanese」に変更します。以前のバージョンでは「Japanese」は無かったようです。変更は再起動すると反映されます。下記は日本語表示に変更された後の画面です。
■ 次はデバイス接続の設定です。
①画面上部のツールバーの中央部にある「No Device」または「Demo Device」というボタンをクリックします。
②デバイス接続のウィンドウのステップ1で「fx2lafw ~~」を選択、ステップ2は USB です。
③ステップ3で「上記のドライバーを使用してデバイスをスキャンする」というボタンをクリックして、ステップ4のボックスに「Saleae Logic with 8 channels」と表示されたら、
④ OK をクリックして完了です。下記のようにデバイス名が Saleae(クイズ:サレアエではなく何?)に変わっていればOKです。
③でデバイスが認識されない場合は USB ケーブルを抜き差ししてから再トライしてみましょう。なかなか認識せず何度も抜き差ししたり PulseView を再起動したり色々やって、やっと認識することもあるのであきらめずにトライ!です。
これで基本的な設定はできました。
【どーでもEこと:その2】 sigrokのアイコン
この左上の小さくて、もやっとしたの、何に見えますか? そんなの何だっていーぢゃないか、ですって? いやいや、そうはいかないんです、気になって気になって・・・ずっと、もやもやしてたけど sigrokのダウンロードのページにありました、大きく拡大したのが!
あっ~、これを小さくしたものだったんだぁ! 誕生日とか X‘mas のケーキに立てるカラフルなローソク? でも測定器と何の関係が?? 違います、よく見てください。 おおっ、プローブの先っぽ、クリップだ! 8bitだ! カラーコード順に並んでる〜! 黒いGND線もある! あっ、パルスの波形も書いてあるー! 新発見に痛く感動したのでした。
4.USBロジアナの使い方(基本操作)
どんなことができるの? 操作はどうするの? という疑問に対する答は英語のマニュアルに書いてあります。サンプルの画面を見るだけでも参考になると思います。(て書いても概ね92.3%ぐらいの人はこうゆーの見に行かないんだよなぁ、英語だとなおさら・・)
私の印象ですが、機能、操作性ともによくできたアプリだと思います。日本語に対応しているのも嬉しい。これがフリーソフトとして無料で入手できるのはとても有難いことです。以下に機能と操作の概要を簡潔に説明します。
■ それでは実際にArduino NANO と OLED間のI2C信号の波形を測定してみましょう。
被測定機器との接続ですが製品に付属のケーブルはメスーメスです。部品の端子に当てるときは写真のようなクリップを付けると便利です。アマゾンで販売してます。
ブレッドボードの場合はメスーオスのジャンパーワイヤー(写真:下)が使い易いです。これもアマゾンで販売してます。
ケース入りロジアナのCH0のプローブ〈ジャンパーワイヤー)を SDAに、CH1をSCLに、GND線も忘れずに接続します。
裸の基板はコネクタに PA0~7、PB0~7、PD0~7 の信号が出ていますがロジアナとして使うのは PB0~7 です。
画面左上の「実行」をクリックすると波形がどんどん流れていきます。デフォルトではサンプリング周波数は20kHz、サンプリング回数は 1M samples(100万回)です。
サンプリング周期: 1 / (20×10^3) = 50×10^-6 (sec) ⇨ 50μs
サンプリング時間: (1×10^6) × 50×10^-6 (sec) = 50 (sec)
サンプリングが終わるまで50秒間待ってる間に「ウィンドウに合わせる」ボタンをクリックすると波形がどんどん縮みながら表示されます。+ーのボタン、またはマウスホイールで時間軸を拡大/縮小(ズームイン/ズームアウト)できます。
ドラッグすると波形全体が上下左右に動きます。色々いじくり回したあと「ウィンドウに合わせる」ボタンをクリックすると波形全体がウィンドウのサイズ一杯にピタッと合わせて表示されます。
■ チャネル構成
赤いクリップのアイコン「チャネルの構成」をクリックすると下記のようなウィンドウが開き、各チャネルの表示/非表示を設定できます。
下のほうにある「Named」と「Unnamed」というボタンですが、各チャネルにはD0~D7というデフォルトの名前がラベルに書いてあります。これを任意の信号名に変えることができます(後述)が、デフォルト名から別名に変更したものが「Named」、D0~D7のままのものは「Unnamed」です。
「Changing」は波形の変化が有ったチャネル、「Non-changing」は波形変化無しのチャネルです。
5. プロトコル・デコーダの選択と設定
プロトコル・デコーダとは?
プロトコル・デコーダは、取得した入力データ(波形)を理解しやすい形式で表現します。例えばI2Cの場合、下図のように SDAの波形データを "1" と "0" に変換し、さらに「Address write: 68」と解釈して表示します。
サポートするプロトコルは非常に多くあり(約130種類)びっくりしました! 少しだけ例を挙げると 1wire, CAN, DMX-512, I2C, I2S, IR-NEC, IR-RC5, IR-RC6, IR-SIRC, JTAG, LIN, MDIO, MIDI, Modbus, Parallel, PS/2, RGB LED (WS28xx), SWD, UART, USB-PD, USB LS/FS, Wiegand・・・といったものがあります。
プロトコルデコーダの表示をするには、まずは信号名の変更から・・・
(変更しなくてもOKですがプロトコルの信号名に合わせると見やすくなります)
先ほど測定した画面でチャネル名を D0⇨SDA、D1⇨SCL に変更し、「トレースの高さ」を高くしてみました。⇩⇩⇩
チャネル名はローマ字入力(カナ漢字変換、IME)での日本語入力はできません。しかし、エディタで作成した日本語文字列をコピーすれば日本語を表示できることを発見しました。これって裏技?
プロトコル選択
①黄色と緑の波形の「プロトコル・デコーダ」のアイコンをクリックすると右側にカテゴリーの一覧が表示されます。
②「Embedded/industrial」の左側の「>」をクリックすると、そのカテゴリーに分類されたプロトコルが展開されます。
③「I2C」をクリックすると下のペインに説明が表示されます。
(または②③の代わりに虫メガネの検索ボックスにI2Cと入力します)
(または、先頭の「All Decoders」の左側の「>」をクリックすると全てのプロトコルがアルファベット順に表示されるので、そこから選択します)
④「I2C」をダブルクリックするとチャネルが追加表示されます。⇩⇩⇩
追加されたI2C のラベルをクリックして I2Cの設定画面を開きます。
SCL とSDAの欄はそれぞれの信号名を選択します。デフォルトの選択肢はD0〜D7ですが、先程D0⇨SDA、D1⇨SCLと変更した内容が反映されています。
● Displayed slave address format の shifted ⇩⇩⇩ というのはアドレス部の8bitを(7bit+R/W)形式で表示し、unshifted はそのまま8bit値として表示します。
●「Stack Decoder」は選択した個別のIC毎の追加情報が表示されます。
チャネルのラベルも選択したICの名前(この例では I2C ⇨ LM75)に変わります。
今回は該当するものは無いので Stack Decoder は選択しません。
I2C デコーダで解析されたデータ ⇩⇩⇩ を見ると何か変です。SCL のパルス数が少ないし、I2C アドレスが 0X70 ???
OLED の I2C アドレスは 0X78 と 0X7A の何れか選択可能で 0x78 に設定されてます。
原因はサンプリングの速度が遅いからでしょう。I2Cの速度は下表[wikipediaのI2Cの項より引用&編集]のようにモードによってクラス分けされています。
I2Cのモード | 速度 |
---|---|
低速モード(Low-speed mode) | 0〜10kbit/s |
標準モード(Standard mode) | 10〜100kbit/s |
ファーストモード(Fast mode) | 100〜400kbit/s |
ファーストモードプラス(Fast mode Plus) | 400〜1000kbit/s |
高速モード(High speed mode) | 1.0〜3.4Mbit/s |
Ultra Fast Mode (UFm) | 3.4〜5Mbit/s |
Arduino NANO の I2C はどの位?標準モードだとしても 20kHzのサンプリングでは遅すぎます。サンプリング周期はどのくらいにすればいいの?
ナイキスト周波数とは?
ご存知の方は多いと思いますが、初めて聞いたとか「あ?何だっけ?昔聞いたような気もするが・・」という方はご覧ください。
アナログ波形をサンプリング(標本化)してデジタル化する際に、元の信号に忠実であるにはどのくらいの周波数でサンプリングすればよいかということを示す サンプリング定理(標本化定理) というのがあります。これはフーリエ変換という何だか難しい数学を使って説明できるようですが、そこは大胆にカットしまして結論だけ言うと元の波形の周波数の2倍の周波数でサンプリングすれば良いということです。元の波形の周波数をナイキスト周波数、ナイキスト周波数の逆数をナイキスト周期と言います。ナイキスト Nyquist は学者の名前で、シューズ/ソックス/ウェア/短パンの全てをNikeで固めた広告塔のようなアスリートのことではありません。
I2C の周波数が分からないのでサンプリング周波数を少しずつ上げながら確認しました。
100kHz だめ ⇨ 200kHz だめ ⇨ ・・・ ⇨ 1MHz で OK!
サンプル数は1Mだとすぐに終わって波形を取りこぼすので5Mにしました。サンプリング時間は5秒です。
SCLのパルス幅は 2μSなので 500KHz、思ってたより速いです。アドレスが0x78と正しく表示されました。これは Displayed slave address format が unshifted の時です。アドレス部の8bitを(7bit+R/W)形式で表示する shifted にすると下記のように 0x3c になりました。
デコードした内容がおかしいと感じたら、そのプロトコルの周波数を確認し適切なサンプリング周期に設定して再度波形を取り込むと良いでしょう。
参考:USBの速度
規格 | 速度 |
---|---|
USB 1.0 | 12Mbps |
USB 1.1 | 12Mbps |
USB 2.0 | 480Mbps (USB1.1の規格仕様に High-Speedモード 480Mbps を追加) |
USB 3.0 | 5Gbps |
USB 3.1 | 10Gbps |
USB 3.2 | 20Gbps |
(注)格安USBロジアナで測定できる上限周波数は 24MHz です。
名称 | 速度 | 用途など |
---|---|---|
Low Speed(LS)モード | 1.5 Mbps | キーボードやマウスなど低速の周辺機器 |
Full Speed(FS)モード | 12 Mbps | イメージスキャナー、プリンターなど |
High Speed(HS)モード | 480 Mbps | 大容量ストレージなど。USB 2.0で新設された |
Super Speed(SS)モード | 5 Gbps | HDD やSSD 等の高速デバイス。USB 3.0で新設された |
Super Speed Plus(SS+)モード | 10 Gbps, 20 Gbps | 600 MB/s以上のSSD等高速デバイスを扱える |
■ プロトコル・デコーダは自作できる!
プロトコル・デコーダは Python で記述されていて、下記を参照してテキストエディタだけで作成できる、とのことです。
6. カーソルとマーカー
①カーソル ボタンをクリックすると「カーソル」が有効になります。
②時間スケール領域に3つの青いラベルが表示され、それをドラッグすると両方の境界やカーソル全体を移動できます。中央のラベルには、時間、周波数、サンプル数が表示されます。マウス右ボタンでそれらの表示/非表示を設定できます。
③時間スケールの任意の場所でダブルクリックすると「マーカー」が作成されます。または任意の場所で右クリックすると表示される「ここにマーカーを作成」というメニューを使用します。
マーカーが複数ある場合 ⇩⇩⇩ マーカーの 1 つにマウスを合わせるとマーカー間の時間差を表示できます。
マーカーのラベルをクリックすると名前を変更したり、ドラッグして位置を変更したりできます。このラベル名はチャネル名変更と同様にローマ字入力(カナ漢字変換、IME)での日本語入力はできませんが、日本語文字列をコピーすれば日本語を表示できます。
7. その他の機能
■ 「デバイスの構成」 をクリックすると設定ウィンドウが表示されます。
(同じアイコンが左上にありますが、こちらは「設定」です)
● Frame limit
デフォルトは No limit 無制限。Frame とは何か? マニュアルを検索すると、トリガー機能の項に以下のような説明があったので翻訳しました、Google が。
現在フレーム制限はありません。デバイス ドライバーがサポートしている場合、PulseView はトリガーを作動させてデータを収集し続けます。これは、「停止」をクリックするか、メモリが不足するまで続きます。
● Number of samples to average over(アナログのみ)
平均化するサンプル数。デフォルトではアベレージングはしない。
● Pre-trigger capture ratio
トリガー以前の波形を取り込む期間の割合です。例えば5%と設定した場合、トリガー以前の期間は全期間の5%です。
■ View の追加
画面左上の View のアイコンをクリックすると「Trace View」「Binary Decoder Output View」「Tabular Decoder Output View」の3つの選択肢があります。
●「Trace View」 は今見ている波形と同じものが追加されます。別の時刻の部分を表示させたり、大まかに見た場合と拡大した詳細波形を同時に見たりできます。2つ以上でも表示できます。
●「Binary Decoder Output View」
I2C、I2S、EEPROM24xx、SPI、UART など一部のデコーダーで、これをクリックするとバイナリ出力データを表示します。
I2S データを取得し、I2S プロトコル デコーダーを使用すると、例えばサウンドデータを生の .wav ファイルデータとして取得できます。上部の「保存」アイコンを使用すると、このデータをバイナリファイル (この場合は有効な .wav ファイルを作成) または様々なタイプの 16 進ダンプとして保存できます。
●「Tabular Decoder Output View(表形式のデコーダ出力ビュー)」は、新しく追加された機能でマニュアルに記載は無いけど sigrok のホームページに下記の画面(赤外線リモコンですね)と、説明がありました。表の各列は表示/非表示を選べます。
■ データのインポートとエクスポート(ファイル入出力)
様々な形式のファイルからデータをインポート(開く)およびエクスポート(保存)できます。汎用的なものもあれば、非常に特殊なものもあります。
PulseView をダウンロードする際に Example も一緒にダウンロードしたのですが、そのデータ(拡張子は .sr)をインポートして波形を表示できます。
■ 表示のテーマ/スタイルの変更
画面左上の「設定」アイコンをクリックして表示のテーマ、スタイルを変更すると雰囲気がガラッと変わります。
8. アナログチャネルと Demo device
PulseView にはアナログチャネルの機能があります。本家 Saleae社のLogicというロジアナはアナログに対応してますが、格安USBロジアナは残念ながらアナログに対応していません。
デバイスが「Saleae」の場合はロジック(デジタル)チャネルのみですが、デバイスを「Demo device」にするとアナログも表示されます。
「Demo device」というのは機能の確認や操作の練習用かなと思います。ハードウェア(ボード接続)無し状態でも「実行」ボタンをクリックすると下記のようにアナログ8、デジタル5の計13チャネルの全てに、実際に波形を取り込んでいるかのような動きで表示します。
「チャネルの構成」をクリックすると設定ウィンドウ⇩⇩⇩が開きます。
アナログは A0~A4 の5チャネルあります。各チャネルのチェックマークで表示/非表示を設定します。図では D5,D6,A2 が非表示です。
アナログチャネルの Pattern のボックスは波形を選択します。square(方形波)sine(サインカーブ) triangle(三角波) sawtooth(のこぎり波) random(ランダム)の選択肢があります。
■ アナログチャネルの設定
アナログチャネルのラベルをクリックすると図のような設定ウィンドウが現れます。説明は省略します。
■ Math:波形演算機能(アナログのチャネルのみ)
メニューバーの右端にグラフのアイコンがあります。何かな?と思ってマニュアルを見ても説明が見当たりません。新しく追加された機能だけどマニュアルの更新が追い付いてないのでしょうか。これをクリックすると「Math1」というチャネルが追加されました。
「Math1」のラベルをクリックして表示された設定ウィンドウの「式」の「+-x÷」のアイコンをクリックすると「数式エディタ」が表示されます。
デジタル・オシロスコープには「Math:波形演算」という機能があり、複数の波形の足し算、引算、掛算、さらに微分、積分、FFT(Fast Fourier Transform: 高速フーリエ変換)などもあります。これと同じことができるようです。
用意されている関数を使うとFFTできるのかも? よくできてるな~凄いな、このソフト、って感心しました。使わない(使えない)けど。
9. 16チャネルのUSBロジアナ
この記事の最初のほうで裸のEZ-USB基板は16チャネルに対応していると書きましたが「対応しているものもある」というのが正しいようです。私が持っていたのは8chでした。試してませんがEEPROMを書き換えれば16chになるらしい? ⇩⇩⇩
8chと16ch、多い方が便利な気がしますがパラレルで8bitの信号を観測する機会って少ないように思います、まして16chとなるとどうでしょう?必要? う〜ん、パラレルじゃないけど回路内のあちこちの様子を同時に見たいことはありますが、それでも8chあれば十分な気がします。
10.別の格安ボードで USB ロジアナ!
この記事で使用したハードウェアはサイプレスの CY7C68013A を搭載したマイコンボードですが、下記のボードでも USB ロジアナが実現できるようです。近いうちにこれらも試して、できれば別の記事でレポートしたいと思います。
■ Raspberry Pi Pico
ラズパイ Pico に μLA(またはuLA: Micro Logic Analyzer)というフリーソフトのファームウェアを組み込み、PulseView でロジアナとして動作します。この組み合わせはスペックに注目です。
・16 チャネル
・サンプリングレート: 100 MHz
・200 KB サンプルメモリ
・PIO を使用した高速トリガ
■ USBシリアル変換ボード
I/Oポートが沢山あるもの、例えば秋月電子通商の「FT232HL ハイスピードUSBシリアル変換モジュール」でもロジアナができるようです。
11. Android で PulseView
ダウンロードのページで、Android 版について下記のように書いてあります。
注: プロジェクトの人員が限られており、ユーザーの関心が低いため、2023 年 9 月時点では提供されていません。Android でのユーザー エクスペリエンスの向上にご興味がある場合は、ぜひチャットにお越しください。
と言いつつも experimental PulseView nightly build APK が下記にあります。これも試してみたいです。
■■■ ここまで長文をお読み頂きお疲れ様でした。■■■
最後に理解度を確認致します。
Saleae はサレアエではなく何?
【他の投稿記事:ノートPC】
【他の投稿記事:Arduino】
【他の投稿記事:Raspberry Pi Pico】
【他の投稿記事:ESP32】