
Amazonで廉価で購入したロジックアナライザーを動作させてみました。結構面倒なのでその記録です。 ついでにシリアル通信でMIDIを送信した時の波形を見てみました。今Amazonを検索してみると、沢山表示されます。 少しずつパッケージの印刷が違いますが、たぶん中身は同じなんだと思います。
とりあえずPCにUSBをつないで、デバイスマネジャーで見てみると、「不明なデバイス」と認識されます。
ソフトウェアをインストールします。sigrok.orgのダウンロードのページから、母艦となるPCの種類に応じてソフトウェアとダウンロードします。私はWindows 10, 32bit ですので、pulseview-NIGHTLY-32bit-static-release-installer.exeをダウンロードしました。ただし、クリックしてもダウンロードできません。右クリックで「名前を付けてリンク先を保存」でダウンロードします。
しかし、「このファイルは安全にダウンロードできません」とブラウザに怒られます。ですので、継続を選択する場合は自己責任で進めて下さい。
インストールすると、"Program Files\sigrok\PulseView"にファイルが展開されます。スタートメニューには3つのアプリ、PulseViewer(Debug), Zading(PulseViewer,XP), Zading(PulseViewer)がインストールされました。
Logic Analyzerをもう一度PCにつないで見ましたか、ドライバーは未だに認識されていません。こちらのサイト、格安ロジックアナライザのインストールと使い方を参考にさせていただきました。
Zading(PulseViewer)でドライバーを差し替えます。Zading を立ち上げると私の場合は以下のような画面でした。

"Reinstall Driver"を押すとドライバーが指し変わります。画面は以下のようになりました。

表示されている、"fx2lafw"を検索してみると、EZ-USBロジックアナライザーに行き着きます。 この製品に使われているボードがEZ-USB FX2LPであることがわかりました。 この状態でLogic Analyzerをもう一度PCにつないで見ると、ドライバーは以下のように認識されていました。

相変わらず"Unknown Device #1"と表示されますが、良しとします。PulseViewer(Debug)を立ち上げます。すると、msvcr100.dll見つからないのでプログラムが起動できない、と表示が出てPulseViewerが起動できません。
Microsoft Visual C++ 2010 Service Pack 1 再頒布可能パッケージをインストールします。vcredist_x86.exeがダウンロードできますのでこれを実行します。
PulseViewerが立ち上がります。

PulseViewerの動作を確認するために、Arduinoを使います。Logic AnalyzerとArduinoを以下のように接続します。Arduinoに以下プログラムを書き込みます。このプログラムは0番ピンから7番のピンを2msecごとに順番に、1msecの間Lowとするプログラムです。1周期は16msecとなるはずです。
void setup() {
for(int i=0; i<8; i++){
pinMode(i, OUTPUT);
digitalWrite(i, HIGH);
}
}
static int i=0;
void loop() {
digitalWrite(i, LOW);
delay(1);
digitalWrite(i, HIGH);
delay(1);
i++;
i=i&0x07;
}
PulseViewerの左上の"Run"を押すと以下のようにデータを取得することができます。

MIDIのシリアル通信のBaud Rateは31,250bpsです。MIDIのイベントメッセージ(例えばNote ON)は3バイトデータです。これをLogic Analyzerで見てみます。ArduinoのUART、TXは1番ピンですので上の接続でD1で見ることができます。3バイトのデータを0x9C 0x55 0x7C とします。その結果得られる波形は次の通りです。

このデータを分析してみます。データは左から右へ時間が流れています。1番左でLowに下がっているのはシリアルデータのスタートビット(SB)です。その後に8ビットのデータがLSBから並んでいます。これを並べ替えてみると、送っている0x9C 0x55 0x7Cと一致しています。

MIDIの1つのイベントメッセージは、イベントとイベントの間に32usec(1/31250)のマージンを含めて、だいたい1msecで送信されていることがわかります。