USBプロトコル・アナライザー(フルスピード専用簡易型)

  必要に迫られ、フルスピード専用のUSBプロトコル・アナライザーを開発しています。すでに、シバ某さんはフルスピードのUSBプロトコル・アナライザを自作されています。フルスピードとハイスピードのデータ転送速度の差を利用したという着想に感心し、この着想を拝借しました。

  今回作成したアナライザーには、DPLL(digital phase locked loop)を採用したので、アイソクロナス転送に対応できていると思います。完全ではありませんが、USBプロトコル・アナライザーの機能検証の章に書いてある方法で、アイソクロナス転送への対応を検証しました。

  なお、使用しているパーソナル・コンピュータ(PC)のOSはWindows7 Professionalですが、PCやOSの違いによっては正常に働かない場合があるかも知れません。ところで、DPLLの解説書がありますが、その中の図2は不完全です。図2を手直ししたものがdpll.pdfです。

回路

  アナライザー本体はオプディマイズ社のカメレオンUSB SPA3だけです。カメレオンUSB SPA3はパーソナル・コンピュータ(PC)とハイスピードで接続しています。また、写真では、アナライザー本体とは別に、開発・検証用のUSBデバイスとしてPIC16F1445を使用しています。回路はPIC16F1455の章を参照ください。ただし、ここでは安全のため、VBUS(USBコネクターの1番ピン)からの5Vを三端子電圧レギュレータで3.3Vを作り、PICはこの3.3Vで動かしています。PICは、同じPCとフルスピードで接続しています。PIC-PC間のデータ転送をアナライザーで解析しようという訳です。

PICのD+とD-は、カメレオンUSB SPA3のb9、c9端子にそれぞれ接続しています。写真では、赤D+と黒D-の線での接続となっています。もちろん、PICのGNDとカメレオンUSB SPA3のGNDは接続しています。その他には接続箇所はありません。また、カメレオンUSB SPA3のI/O電源は3.3Vに設定しています(設定方法については、オプディマイズ社のホームページを参照のこと)。誤った接続をするとカメレオンUSB SPA3を壊す可能性があるので十分注意してください。

下図は、カメレオンUSB SPA3をFRISKのケースに入れた例です。


アプリケーション・ソフトウェアとその使用法

PC(OS: Windows7 Professional)用のアプリケーション・ソフトウェアはyts_usb.zipDPLLα2017.1.16版)です。このソフトウェアも、その中に含まれるSpartan3Aのロジックも、オプディマイズ社が提供しているもの(spd_chk16)を土台に、独自に開発したものです。

使用方法

以下、カメレオンUSB SPA3用のデバイス・ドライバーをPCにインストールしてあることが前提です(オプディマイズ社のホームページを参照のこと)。また、必要に応じて、PIC16F1455用のデバイス・ドライバーもPCにインストールしておきます。もちろん、PIC16F1455にはUSB用のファームウェア(HIDクラス、CDC等々)を書き込んでおきます。

1.カメレオンUSB SPA3とPIC16F1455それぞれをUSBケーブル(合計2本)で同一のPCに接続します。

2.PC(OSはWindows7 Professonal)上で、yts_usb.zipを解凍して出てくるyts_usb.exeを実行します。最初、メニュ-は以下のようにファイルが選択不可になっています。これは、記録しているデータがないことを意味しています。

3.メニュ-で設定を選ぶと以下のようなダイアログボックスが現れるので、記録するバイト数を設定します。512バイトを1単位として、何単位記録するかを数値で与えます。デフォルトでは1単位です。初めは小さい単位から設定して、様子を見ながら、順次大きくして行のが良いと思います。最大62500単位(約32Mバイト)まで設定可能です。USBフルスピードの場合で、フレームがデータですべて満たされている場合、1秒間に1.5Mバイト(12Mビット/8)のデータが転送されますから、約21秒間の記録ができます。その逆に、フレームが、例えばSOFパケット(4バイト)だけの構成ですと、1秒間に4Kバイトとなります。したがって、約8000秒間の記録ができるということになります。

4.記録を開始するためには、メニュ-で開始を選びます。記録中は、メニュ-項目がすべて選択不可になりますが、記録が終わると、すべて選択可能になります。そして、記録内容はウィンドウに表示されます。記録内容の意味については、USBフルスピード信号波形を参照ください。

5.記録内容をファイルに残す場合には、以下のように、メニュ-でファイルを選びます。ウィンドウに表示されたものを残す場合には文字データを、そして、記録した数値(元データ)を残す場合には数値データを選択します。すると、ファイルchar_out.txt(文字データ)、あるいはnum_out.txt(数値データ)が作成されます。なお、数値データは、ビット順が逆になっていますので注意してください。

6.USBデバイスが接続された時点から記録を取りたい場合は、単に、PIC16F1455とPCをつなぐUSBケーブルだけを外して、メニュ-で開始を選びます。10秒以内に、外したUSBケーブルをつなぐだけです。

なお、yts_usb.exeはレジストリなどを一切利用・編集していませんので、必要が無くなったらゴミ箱に入れてください。


把握している問題点

1.データを受信しているスレッドと、ウィンドウにデータを表示するスレッドの間で、同期がとれていない。このためウィンドウにデータがスムーズに表示されない。

2.アイソクロナス転送の場合で、偶数個のデータを受信した場合に、DATAパケットに続くSOFパケットの前で改行が入らない。ただ、文字データで保存したファイルでは、この改行がきちんと入っています。

3.アイソクロナス転送の場合で、奇数個のデータを受信した場合に、DATAパケットの最後にACKが、そして、DATAパケットの最後から2つめに余計なデータが入っています。これら2つのデータは実在していないので、無視してください。


スナップショット

  下図では、USB機器を接続した直後の2回目のシステムリセットの前後でのフレーム番号の様子を示しています。2回目のリセット時間(56ミリ秒)は、D+信号とD-信号(リセット波形:図12)で計測した時間と矛盾していません。なお、PCによってリセット時間は変わります。

  下図では、Human Interface Deviceクラスの場合のデータ転送の様子を示しています。1フレームに64バイトのデータパケットが1つしかないことが分かります。


戻る