公開日 2007/06/08(Fri)
最終更新日 2007/07/16(Mon)

USBアナライザ(フルスピード対応)を作る

【警告】
 本頁では回路図・プログラム等も公開していますが、各人の環境での動作を保証する ものではありません。 自分なりに応用し、トラブっても自力で解決してください。
何が起きても私は責任を取れません。あくまでも 自己責任で お願いします。
 また、この注意は、同様の注意を明示していない他のページでの保証、及びサポート 義務の発生 を意味するものでもありません。


 今回の製作を通じて私の USB規格や EZ-USBに関する知識・理解・使いこなしは まだまだ だなあと痛感したくらいですので、内容は決して鵜呑みにせず、自分でも資料をあたって 確認するようにしましょう。

TUSBana Ver.0.2 + FX2jtag.DLL バグ修正 2007/07/16(Mon) 追加

■はじめに
 「USBアナライザ(USBプロトコルアナライザ)」とは、ホストPCと  USB機器(ターゲット)を繋ぐ USBケーブルを流れる通信データ(パケット)を観測(記録) するツールです。
本物(ちゃんとした製品)に触れたことがないので、本で読んでこんなものだろうと 思いながら作りました。パケットのキャプチャはできますが、解析機能はないに等しいです。

オプティマイズさん の  MINI FX2 キットと CQ出版 Design Wave Magazine 2005年1月号付録の FPGA基板(または 2007年7月号付録基板) を合体させた  ミミックUSB FX2 の最初のアプリ(応用)品です。
製作を通じて、USBや EZ-USB FX2、FPGA の使い方に関する経験値を得るのも目的です。

■USBアナライザの仕様
参考資料を読みながら、実際に観測したパケットのやりとりはある程度整理して テキスト出力するようにつくりましたが、その他は未経験の通信で何が 起こるか一切保証できません。
USBハブについては勉強のため入手して実験してみたいです(が、その後の用途が…)。


ハード製作

回路図兼配線図
MINI FX2基板と DWM Spartan-3基板(2005年1月号)合体配線図
IFCLKのライン(赤ペン入れ部分)は33Ω抵抗を挟んで接続しています→実物よく見たら 330Ωだ。
R13 として図を修正 但し、実機では間違えて 330Ω使用(本信号は現在未使用 未試験)

コネクタ同士の結線図で書いてしまうと味気ないので、実体配線図風に描いてみました。  配線が間違ってると困る(手書き原図は裏表逆だった)ので、HDLソースに含まれる  usbana.ucf とも照合が必要です。

FX2LPから出力される 48MHzクロック信号で Spartan-3を駆動させる無茶をしているので 配線距離を最短にする為に、両面スルホールユニバーサル基板の両側に MINI FX2基板と Spartan-3基板を配置しています。ユニバーサル基板の両側にピンヘッダを立てるので、 製作順序をよく考えてやらないとピンヘッダ間の配線ができなくなります。
またひとつの穴(ランド)に皮を剥いた線材を差し込んでおき、さらにピンを差し込む ので、ピンヘッダがかなり入りにくくなります(自分の場合、トンカチで叩いて強引に 押し込みましたが、ピンの高さがバラバラになって、揃え直しました)。

【追記】 DWM 2007JUL付録基板への対応
 最小限の手間で 2007年7月号の XC3S250E搭載基板用にする修正方法を紹介します。
    DWM 2007年7月号 付録基板 2007JUL への変更点
    信号2005JAN基板2007JUL基板
    FX2 CN1-16(PD[0])CN3-A08CN3-A10
    JTAG-JP(TDI列)CN3-A13CN3-A14
    JTAG-JP(TCK列)CN3-B13CN3-B14
    変更してないが 要注意信号
    CN-GPIO 6番CN3-A05そのままでは入力専用
    FX2 CN2-6(IFCLK)CN3-A01CLK入力用ピンではない
    FX2 CN1-3(CLKOUT)CN3-B02CLK入力用ピンではない
    FX2 CN2-14(CTL2)CN2-A12(無問題だが)入力専用

    注意
      これは TUSBana を動かすための最低限の修正にすぎず、
      「変更してないが要注意信号」は CTL2 以外は後で問題になる
      可能性があります。
      付録基板のコネクタと FPGAのピン番号の対応は 2005JAN/2007JULで全く
      違うので、論理合成の際に使う ucfファイルは大幅に変更されています。
      一から作るなら、全面的に配線を見直したほうが賢明です。

【備考】配線の基本方針



左上 合体状態その1  右上 基板製作途中 Spartan-3基板側
左下 合体状態その2  右下 基板製作途中 MINI FX2基板側

CN-GPIO(ピンソケット)はまだ実装してないときのものです。
(CN-GPIO付の写真は ミミックUSB FX2 のページに)


●USBアナライザのアダプタについて
 USB信号を観測するために CN-GPIO に USBコネクタを接続して使います。
レセプタクル(コネクタ)を確実に固定するのとスペースの都合で、変換基板を使って 2階建てにしました。
サンハヤトが2個イチ品を出していますが日本橋価格で700円以上と高いので、 デジットで見つけた ダイセン電子工業C-USB-AC-USB-B にしました(それぞれコネクタ付きで \220)。

尚、C-USB-A(Aコネクタの方)基板は USB規格の1番〜4番と 変換基板上の番号がちゃんと合致していますが、C-USB-B(Bコネクタの方)は 単に 左右に並んだ順に番号を振っているだけなので

 基板側1番=USB規格の3番(D+)、基板側3番=USB規格の1番(VBUS 5V)、
 基板側2番=USB規格の2番(D-)、基板側4番=USB規格の4番(GND) になっています。


上下の基板でそのまま直結はできないので注意が必要です(1番と3番を入れ替え)。


写真 2
上:USBアダプタと接続状態
下:USBアダプタ 2方向

背の低い シリーズAレセプタクル を下にすれば手持ちの 10mmスペーサーが使えました。 (上の Bレセプタクルのピンをショートさせないように、Aレセプタクルの上面をビニール テープで絶縁)。
レセプタクルのシールド同士は接続していませんが動きました。 VBUS を除く 2-4番は 2列ピンヘッダで引き出します(ピンは 6本ありますが2本ずつ 同じ信号です)。

【追記】 接続先の CN-GPIO は 10ピンなので (写真では隠れて全く見えませんが)接続場所に注意。

プルダウン抵抗(100kΩ)は、回路図と違って実物では(写真では隠れて見難いですが) リード品(再生品)を使っています。  (どうせ相手は FPGAなので)適当に作ったので、図にしてみたら配線がややこしくなって しまいました。


ソフトについて

■USBアナライザ用 FPGA HDL
 フルスピード 12Mbps(12MHz)の信号を観測するので、FX2の 48MHzを使います。 USBの信号は D+ と D- の 差動信号ですが、フルスピードなら 0V-3.3Vロジックなので、 単純な LVCMOS入力にしました。
XILINXの アプリケーションノート XAPP224.pdf を参考にデータ復元回路を組み、 USBで使われている NRZI の復調も同時に行います(そもそも XAPP224は例えば  12MHzクロックで12MHz信号を受信する回路なので、無意味な使い方している気もしますが…)。
ビットスタッフィング('1'〜NRZIでは信号が変化しない〜 が 6個連続すると 自動的に'0'〜同 信号が変化する〜 を挿入する)についてはホストPC側がデータを 受信した後ソフトで処理することにしました(パケットの開始時間をクロック単位 で決定したかったので)。

また、基本的に信号の抽出(復元)は D+信号しか見ていません。 D-信号は EOP状態(極性異常)確認用です。
それでも両方の状態を見ていることになり、アナライザ用ホストPCは 24Mbps相当 のデータレートで FX2からデータを受け取ります(正確には、タイムオーバー〜 FPGA内の  FIFO溢れ確認用の追加データで、更に 16/15倍)

また、FPGA内には データ復元回路に入力する前に、サンプリングした USB信号を加工する ブロックが存在します(ソフトの使い方で後述)。

■USBアナライザ用 FW / ホストPCアプリ
 FX2用FW についてはGPIFを使うのは今回が初めてなので、オプティマイズさんの FX2FW(F2FW - V100) で実験した後、必要+追加コマンドだけにした軽量化 改造をしています。

FW.c や dscr.a51 も修正していますが、詳細は ホストアプリ側の I/F部(mmcusb.c mmcusbfx2.c)の 部分もあわせて、 ミミックUSB FX2のページ へどうぞ
ストリングディスクリプタは FWNAME = "FX2-USBA" 、FWVER = "1V00" にしています。

ダウンロードはここから
【追記】Ver.0.1->Ver.0.2 に伴い こちらに移動

・TUSBana / JTAG-DLL の実行ファイル一式 xxxKB
・TUSBana(ミミックUSB FX2)/ JTAG-DLL ソースファイル一式 xxxKB


使い方

■注意・警告
接続
 USBアナライザ(ミミックUSB FX2 + USBアダプタ)の接続は下図のようにします。
但し、観測対象のターゲット機器は TUSBana を実行して、FPGAのコンフィグが
完了してから接続します
(コンフィグ前に接続すると ホストPCに認識されないままになることがある)。

推奨使用形態
USBアナライザ 通常の接続状態
    TUSBana は PC Aで実行します。
    PC B(ホスト)とUSBデバイス(ターゲット)の間の通信を観測します。
 一応、下図のように、TUSBana を動かす PC A自身で、別のUSBポートの フルスピード通信の観測も、私の環境で実験した範囲では動きました。
但し、 PC A は、観測対象のターゲットと、ミミックUSB FX2 両方の 通信を発生させています。ハイスピード通信は信号レベルが違うので観測には 引っ掛かりませんが、一定の時間帯はハイスピード通信に割いている訳で 観測対象のターゲットの転送速度が低下している筈です。
また、長期間バスを使用することがあるアイソクロナス通信では、PC Aと ミミックUSB FX2 の通信が後回しにされて、データの取りこぼしが発生する 恐れがあります。

非推奨形態
USBアナライザ 特殊な接続状態

下図は間違った接続です。こんな接続では使えません。
PC A がミミックUSB FX2 を認識できません。
そもそも ミミックUSB FX2 はハイスピード通信なので観測対象外です。

NG形態
使用不可な接続状態


TUSBana 実行
 ミミックUSB FX2 を PCに接続した状態で TUSBana を実行すると、以下の画面になり、  EZ-USB FX2 を探して オープン します。
EZ-USBが複数接続されていて適当なものが決められない場合は自動オープンしないので、 接続EZ-USB リストBOXの中から選択して、I/F open ボタンで手動オープンが必要です。

オープンの過程で FPGAがコンフィグに成功すると 2005JAN基板の二つのLEDが点灯します。
【追記】 2007JUL基板では LEDはひとつしかありません。

起動画面
TUSBana 起動画面


TUSBana のメニュー & ボタンの説明
ファイル->パケットデータ保存
キャプチャ(測定)したデータがあるならば 固定ファイル名"RES" でデータをセーブ
このファイルは LOGvw.EXE でテキスト変換できる。
ファイル->終了
TUSBana を終了する。右上の×ボタンでも可


表示→パケット記録表示
キャプチャデータがあるなら TUSBana の表示枠に表示。
表示->表示消去
表示枠を空にする


トリガ設定
観測トリガの設定ダイアログを開く


信号調整
USB信号の調整ダイアログを開く


表示消去
表示メニュー下の表示消去と同じ


USB->IF CHECK
PCに接続された EZ-USBから TUSBanaに適したものを探す
TUSBana起動時には自動的に実行
USB->IF PRINT
オープンした EZ-USB(= ミミックUSB FX2)の状況表示
USB->IF OPEN
(EZ-USBをオープンしていないとき)リストBOXで選択した EZ-USBで オープンする
USB->IF CLOSE
オープンした EZ-USB(ミミックUSB FX2)をクローズする
USB->FX2 RESET
オープンした EZ-USBがあれば CPUリセットを掛け、さらにクローズする
異常事態からの復帰用
 実行すると、大抵の場合、EZ-USBのデバイス番号が移動するので、 IF CHECK を実行して接続情報の更新が必要
USB->キャプチャ強制終了
USBキャプチャが使用しているスレッドを強制終了させる
異常事態からの復帰用


ヘルプ
プログラムバージョン表示


I/F chk ボタン I/F openボタン
USBメニュー内の IF CHECK IF OPEN と同じ


RUN/STOP ボタン
USBキャプチャの開始・停止
一度停止を押しても「停止」しない場合、繰り返すと強制終了を実行

【備考】信号調整
USBのパケット観測が動きだした時期に、USB通信が激しくなったときに  SYNC信号(00000001) や PID(パケットID) がビット落ち・ ビット化けを起こすことが分かりました。
「パケット抽出ソフトのバグか?」と悩んだのですが、オシロで USB ケーブルを流れる信号と FPGAに取り込んだものを比較すると、(48MHz サンプリングなので)4clock分の幅があるはずのLOW信号が 2clock分 しかないケースがありました。
USBケーブルの終端ではなく、中間で信号を観測するので反射の影響を 受けている様です(D+ の方だけ酷い理由がよく分かりませんが)。

USB信号サンプリング
USB信号の 48MHzサンプリング波形
CH1(上)D+信号
CH2(下)D-信号

    画面中央に LOW幅が 48MHz 2clock分しかない信号が現れています。
    もしやと思って、"1001" や "0110" という信号が現れたらトリガ 信号を発生する回路を FPGA内に設けることで、やっと確認できました。

原信号と変化エッジとサンプリング用 48MHzとのクロックエッジの関係で、 3clock幅になることは十分ありえますが、2clock幅になると XAPP224の回路 では信号の変化エッジを検出できないケースがあります。

 幸い、常に LOW幅が短くなる方向に変形している様なので、サンプリング データ復元回路に入力する前に波形を加工することにしました。
具体的には D+信号の最初のサンプリング信号と、それを 1clock(48MHz) ディレイさせた信号と AND を取って FFを通すことで LOW幅を太らせて います。 TSUBana では 「信号調整」メニューで現れるダイアログで、この波形加工を ON/OFF変更できます。

波形整形
波形加工例
    D-信号は変形せずに理想的なサンプリングが出来ていると仮定して描いています。
    D+信号が処理の分遅れるので、D-信号も 1clockディレイさせたものを使います。

信号調整ダイアログ
信号調整の設定ダイアログ
最初から上記の 波形加工 処理がされる設定です。
D+/D- のチェックを全て外せば無加工でデータ復元回路に入ります。
    設定画面の L太1' L太2 はまた別のアルゴリズムで LOW幅を太らせる 回路(モジュール)が繋がっていてその設定です。FPGAに余裕があるので捨てずに 残っています。

    「デバッグ出力選択」は ミミックUSB FX2の JTAG-JP の 4本の信号に  FPGAの内部信号を出力できるようになっていて、その内容切換え用です。
     【追記】 上記オシロ波形は 出力選択を '1' にして、波形加工オフ状態を測定したもの。

    「信号チェック」 はデータ復元回路への入力前の信号をチェックするものです。
    オシロスコープがなくても、不正な(極端にHIGH幅や LOW幅の狭い)信号がないか 調べられます(設定を変更した後、時間を置いてから何度か繰り返さないと、変更を 反映した結果が得られません)。

トリガ設定

トリガ設定
トリガ設定ダイアログ (Ver.0.2版)

ほぼ見たままです。デフォルトは フリー

中央のテキストBOXには USBのアドレス(+’:’コロンで エンドポイント)を入力します。
 ADR限定 ADR除外にチェックが入っているときに有効です。

測定
 必要ならばトリガを設定し、観測対象を繋いだら、RUN/STOP ボタンで USBキャプチャを開始します。
繋いだ時の通信を記録したいなら、 SETUPをトリガにして RUN してから 観測対象を繋ぎます。
記録バッファが溢れるかトラブルが発生すると自動的に「停止」します。 また、右下の表示が 停止 に戻らない場合、RUN/STOP ボタンで停止します。

それでも停止しない場合、USBメニューの中の 強制終了や RESETを使います。
TUSBana自体 「応答なし」になっている場合、Cypressコントロールパネルを 使えばリセット可能です。それでもダメなら ミミックUSB FX2自体ケーブルを 抜くしかありません。

表示
測定が終わったら、「表示」メニュー内の「パケット記録表示」で前回キャプチャ したパケットデータを表示します。
尚、一番最後に「---- 全表示完了 ----」と出ない場合は表示バッファが溢れて 途中で止まっています(表示バッファには上限がある)。
以後、全ての操作に対する応答が表示されなくなるので、「MES消去」を押してクリアしてください。

「ファイル」から 「パケットDATA保存」を使ってキャプチャデータのバイナリデータを 出力し、コマンドラインから "LOGvw.exe RES" とやれば長いデータも全部表示されます。
こちらの方が表示速度も速いです。

パケットデータ例
SOF  FRM#  27  CRC5=03 :  12004
OUT  ADR7=3  EP= 1  CRC5=07 :DATA0 00  CRC16=02FD :ACK   1855  1891  1940

SOF  FRM#  28  CRC5=1D :  12001
OUT  ADR7=3  EP= 2  CRC5=1E :DATA0 01 02  CRC16=7E78 :ACK   1602  1638  1695

SOF  FRM#  29  CRC5=02 :  12002
OUT  ADR7=3  EP= 3  CRC5=13 :DATA0 03 04 05  CRC16=3D3F :ACK   1588  1624  1689

SOF  FRM#  30  CRC5=00 :  12001
OUT  ADR7=3  EP= 4  CRC5=00 :DATA0 06 07 08 09  CRC16=912A :ACK   1626  1662  1735

SOF  FRM#  31  CRC5=1F :  12002
OUT  ADR7=3  EP= 5  CRC5=0D :DATA0 0A 0B 0C 0D 0E  CRC16=20B1 :ACK   1612  1648  1729

SOF  FRM#  32  CRC5=19 :  12002
PRE : LOW-IN   ADR7=1  EP= 1  CRC5=1A :     75    95
OUT  ADR7=3  EP= 6  CRC5=14 :DATA0 0F 10 11 12 13 14  CRC16=697B :ACK   1637  1673  1763
SOF  FRM#  33  CRC5=06 :  12002
OUT  ADR7=3  EP= 7  CRC5=19 :DATA0 15 16 17 18 19 1A 1B  CRC16=52E3 :ACK   1650  1686  1783

SOF  FRM#  34  CRC5=04 :  12002
SOF  FRM#  35  CRC5=1B :  12002
IN   ADR7=3  EP= 1  CRC5=07 :DATA0 FF  CRC16=00FF :ACK    108   149   200

SOF  FRM#  36  CRC5=05 :  12002
IN   ADR7=3  EP= 2  CRC5=1E :DATA0 FE FD  CRC16=FE75 :ACK   1818  1858  1919

SOF  FRM#  37  CRC5=1A :  12003
IN   ADR7=3  EP= 3  CRC5=13 :DATA0 FC FB FA  CRC16=B13E :ACK   1766  1806  1874

SOF  FRM#  38  CRC5=18 :  12002
IN   ADR7=3  EP= 4  CRC5=00 :DATA0 F9 F8 F7 F6  CRC16=1103 :ACK   1808  1849  1925

SOF  FRM#  39  CRC5=07 :  12003
IN   ADR7=3  EP= 5  CRC5=0D :DATA0 F5 F4 F3 F2 F1  CRC16=88B0 :ACK   1810  1850  1933

SOF  FRM#  40  CRC5=17 :  12002
PRE : LOW-IN   ADR7=1  EP= 1  CRC5=1A :     74    94
IN   ADR7=3  EP= 6  CRC5=14 :DATA0 F0 EF EE ED EC EB  CRC16=E98A :ACK   2148  2189  2281

SOF  FRM#  41  CRC5=08 :  12003
IN   ADR7=3  EP= 7  CRC5=19 :DATA0 EA E9 E8 E7 E6 E5 E4  CRC16=22E2 :ACK   2067  2107  2207

SOF  FRM#  42  CRC5=0A :  12002

表示の見方
 上は カメレオンUSB(AN2135SC)に Cypressサンプルの bulktest.hex をダウンロードして  bulktest.exe を走らせた時のものです。 TUSBanaを実行している PC(WindowsXP Home)に接続しています。
専門用語を連発しますが、細かいことは説明しません。

カメレオンUSBは ADR7=3(7ビットADDRESS = 3)に割り当てられており、SOF パケット、即ち 1フレーム=1ms 毎に EP エンドポイントを変えて OUT / IN  トランザクション が発生しています。 1行1パケットまたは、1行 1トランザクションを表示します。

SOF FRM#32 と SOF FRM#40 の次、の2行に PREパケットから始まる ADR7=1 への INパケットが混じっていますが、これは別ポート経由で PCに繋いでいる USBマウスとの通信です。 ホスト→ターゲット方向だけは別ポートのものも信号が流れてくるようで、 マウスは NAK パケットを返している(マウスを動かしていないのでデータがない) 筈ですが、そちらは見えません。
PREパケットは 「今からロースピード通信するよ」という予告パケットです。

行の最後に登場する数値 はその行に登場するパケットが、前回の SOFパケットから 何クロック目に登場したかの開始時間を表しています(クロックは 12MHz)。 パケットが 3つあれば、数字も 3つ登場します。  また、SOFパケットごとにリセットされるので、SOFパケットはだいたい 12000(誤差がある)に なります(ならないと何らかの異常が発生している)。


もう1台の PC(Windows98SE)に繋いだ場合
・OUT/INトランザクションは 2フレームに1回しか発生しないので半分の速度しかでない
・ロースピード通信前に PREパケットは発生しない。
といった違いがありました。

LOGvw.EXE で表示した場合、 SOFパケットには記録開始からのパケットの通し番号が付きます。

変換エラー
キャプチャデータがなんらかの理由で正規パケットと判断できなかった場合、 bit列をそのまま適当な長さで記録します。[ERROR RAW] と表示されます。 前半のデータ列は NRZI復号結果 ':' の後のデータ列は D+/D- の極性が一致している 部分だけ 1 になります。 1bit = 1/12MHzです。


参考データをもうひとつ キャプチャ出力例(CAPsample.TXT)  (Ver.0.1で測定)
カメレオンUSB(AN2135SC)を ホストPCにつないだ時の通信結果を LOGvw.EXE でテキスト出力 したものです。 冗長部分は手動でカットしてあります。


2007/07/16(Mon) 公開

TUSBana Ver.0.2

 TSUBana をバージョンアップしました。

追加・変更仕様
ダウンロード
TUSBana 実行ファイル(TUSBana/JTAG-DLL) 一式 203KB
TUSBana(ミミックUSB FX2)/ JTAG-DLL ソースファイル一式 173KB

 2005JAN基板を使う場合 TUSBana.EXE を、
 2007JUL基板の場合 TUSBana3E.EXE を使ってください。 それぞれ専用品ですが、リンクしている FPGAコンフィグ用の bitファイルが異なるだけです。

Ver.0.2 パケットデータ例(ほぼ同じシーン)
SOF FRM#1593  CRC5=00 :|  12002
OUT   ADR=3  EP= 1  CRC5=07 :DATA1 00  CRC16=02FD :ACK|  10962 10998 11048

SOF FRM#1594  CRC5=02 :|  12001
OUT   ADR=3  EP= 2  CRC5=1E :DATA1 01 02  CRC16=7E78 :ACK|   1824  1860  1917

SOF FRM#1595  CRC5=1D :|  12001
OUT   ADR=3  EP= 3  CRC5=13 :DATA1 03 04 05  CRC16=3D3F :ACK|   1699  1735  1801

SOF FRM#1596  CRC5=03 :|  12002
OUT   ADR=3  EP= 4  CRC5=00 :DATA1 06 07 08 09  CRC16=912A :ACK|   1524  1560  1633

SOF FRM#1597  CRC5=1C :|  12002
OUT   ADR=3  EP= 5  CRC5=0D :DATA1 0A 0B 0C 0D 0E  CRC16=20B1 :ACK|   1518  1554  1634

SOF FRM#1598  CRC5=1E :|  12001
OUT   ADR=3  EP= 6  CRC5=14 :DATA1 0F 10 11 12 13 14  CRC16=697B :ACK|   1530  1566  1655

SOF FRM#1599  CRC5=01 :|  12002
OUT   ADR=3  EP= 7  CRC5=19 :DATA1 15 16 17 18 19 1A 1B  CRC16=52E3 :ACK|   1538  1574  1670

SOF FRM#1600  CRC5=1D :|  12001
PRE : L-IN    ADR=1  EP= 1  CRC5=1A :|     75    95

SOF FRM#1601  CRC5=02 :|  12002
IN    ADR=3  EP= 1  CRC5=07 :DATA1 FF  CRC16=00FF :ACK|    109   149   200

SOF FRM#1602  CRC5=00 :|  12001
IN    ADR=3  EP= 2  CRC5=1E :DATA1 FE FD  CRC16=FE75 :ACK|   1665  1705  1767
ロースピードデバイス(マウス)の測定例
L-IN    ADR=2  EP= 1  CRC5=18 :L-NAK| 27283102/REL + 8001μs + 8027μs
L-IN    ADR=2  EP= 1  CRC5=18 :L-NAK| 27379119/REL + 8001μs + 8027μs
L-IN    ADR=2  EP= 1  CRC5=18 :L-NAK| 27475136/REL + 8001μs + 8027μs
L-IN    ADR=2  EP= 1  CRC5=18 :L-NAK| 27571152/REL + 8001μs + 8027μs
L-IN    ADR=2  EP= 1  CRC5=18 :L-NAK| 27667169/REL + 8001μs + 8027μs
L-IN    ADR=2  EP= 1  CRC5=18 :L-NAK| 27763186/REL + 8001μs + 8027μs
L-IN    ADR=2  EP= 1  CRC5=18 :L-NAK| 27859203/REL + 8001μs + 8027μs
L-IN    ADR=2  EP= 1  CRC5=18 :L-DATA0 00 00 FE 00  CRC16=FDDD :L-ACK| 27955219/REL
+ 8001μs + 8027μs + 8077μs
L-IN    ADR=2  EP= 1  CRC5=18 :L-DATA1 00 02 00 00  CRC16=7AD8 :L-ACK| 28051237/REL
+ 8001μs + 8027μs + 8076μs
L-IN    ADR=2  EP= 1  CRC5=18 :L-DATA0 00 02 FD 00  CRC16=78D1 :L-ACK| 28147256/REL
+ 8001μs + 8027μs + 8077μs
L-IN    ADR=2  EP= 1  CRC5=18 :L-DATA1 00 06 F9 00  CRC16=BA51 :L-ACK| 28243274/REL
+ 8001μs + 8027μs + 8076μs

    ホストは 8フレーム(8ms)毎にデータを取りに来ます。前半はマウスを動かしておらず、 マウスは NAKを返します。後半はマウスを動かしたので移動量を返します。
    SOF がないので時間表示方法が変更されます。


その他の情報

開発・テスト環境
PC
PC-A Gateway GT4012j(AMD 64 X2 3800+ RAM 1GB WindowsXP Home SP2 USB2.0まで対応)
PC-B SOTEC M350V(PenIII 500MHz RAM128MB Windows98SE USB1.1対応)

FPGA開発ツール

ISE WebPACK8.1.03i
EZ-USB FW開発ツール
Keil μVision2 V2.10(評価版)
C/C++コンパイラ
Borland C++ 5.5.1(無償版)

■参考資料(本文に登場しなかったもの)
「Interface 2000年3月号、2001年1月号」 CQ出版 〜USB特集 あり
「USB2.0活用ハンドブック」 CQ出版(Interface 2001年1月号付録)
USBターゲット機器開発のすべて」  CQ出版
 他 CQ出版の雑誌いろいろからつまみ食い

以上。