公開日 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アナライザの仕様
- ホストアプリ名
TUSBana.EXE 以下、 TUSBana と記述
(Tiny USB ANAlyzer から)。
- 対応スピード
フルスピード(12MHz) 及び ロースピード(1.5MHz)
ハイスピード(480MHz)は 対応外。これは通信速度もさることながら、
USBケーブルを流れる信号レベル(電圧)がロー、フルスピードのそれと異なるので今の
構成では絶対無理。
- 方式
FPGAで USB信号を簡単に処理して、 FX2経由で随時PCに送る。
外付けメモリは存在せず、FPGA内のブロックRAMと FX2のエンドポイントのクワッド
バッファだけで、後はフルスピードとハイスピードの差を利用してリアルタイム記録。
よって TUSBana を動かす PCは USB2.0対応必須。
【追記】 PCの性能により、まともに動かない可能性もあり!
- (簡易)トリガ機能
フリー or 特定のパケット(SETUP/IN/OUT)を基点として記録開始、
プラス 特定ADR限定 または特定 ADR除外 を実装したつもり。
但し、トリガ手前のパケットも不定長で記録に残る。
- フィルタ機能
なし。 記録はテキスト化できるのでエディタ上作業で代用
(Ver.0.2 で、IN-NAKパケットが連続する場合スキップ記録が可能に)
- 動作実績
作者が開発過程で実験・観測した機器は
- USBマウス(ロースピード)
- メモリーカードアダプタ(PS3の周辺機器)
- カメレオンUSB(AN2135SC)
などの コントロール転送・インタラプト転送・バルク転送。
アイソクロナス通信や 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-A08 | CN3-A10
|
| JTAG-JP(TDI列) | CN3-A13 | CN3-A14
|
| JTAG-JP(TCK列) | CN3-B13 | CN3-B14
|
| 変更してないが 要注意信号
|
|---|
| CN-GPIO 6番 | CN3-A05 | そのままでは入力専用
|
| FX2 CN2-6(IFCLK) | CN3-A01 | CLK入力用ピンではない
|
| FX2 CN1-3(CLKOUT) | CN3-B02 | CLK入力用ピンではない
|
| FX2 CN2-14(CTL2) | CN2-A12 | (無問題だが)入力専用
|
注意
これは TUSBana を動かすための最低限の修正にすぎず、
「変更してないが要注意信号」は CTL2 以外は後で問題になる
可能性があります。
付録基板のコネクタと FPGAのピン番号の対応は 2005JAN/2007JULで全く
違うので、論理合成の際に使う ucfファイルは大幅に変更されています。
一から作るなら、全面的に配線を見直したほうが賢明です。
【備考】配線の基本方針
- EZ-USB FX2は信号レベルが 3.3Vなので、Spartan-3側は JTAG系を除いて 3.3Vの
I/Oピンと繋ぐ(2.5V系I/Oピンは使わない)。
- FPGA基板を動かすメイン電源(+3.3V)は MINI FX2基板が作ったものを
供給する(バスパワーで使うので消費電流には注意)
- FPGAを駆動するシステムクロックも EZ-USB FX2 から供給し、
クロック入力に対応した GCKピンに繋ぐ。
- JTAG信号は PA(PortA)の上位4bitを用いる。
Spartan-3側が 2.5V論理なので、100Ωをかませる(直接接続は絶対NG)。
JTAG-JP は FPGAのコンフィグが終わったあと、ジャンパピンを刺し替えて
Spartan-3 と FX2LP の接続信号を増やす目的で設置しましたが、せこいことは考えずに
直結したほうが確実かもしれません。
-
FX2の PB(PortB) PD(PordD)は 基本的に GPIFバスとして使う。
スレーブFIFO モードはあきらる(JTAG用に割り当てた PA信号も必要らしい)。
汎用I/Oにしたり 8bitバスで使うことは可能。
-
GPIO(汎用I/O)信号線は 100kΩでプルダウン+直列に33Ω保護抵抗。
プルダウン抵抗の抵抗値が高いのは、FPGA内部でプルアップ設定も可能であること、
USBアナライザとして使うときのコネクタ接続の都合上、2本同時に接続するので
(片方は未使用)、実質半分の抵抗値になるのを見越して決めています。
付けないほうがいいのかもしれません。

左上 合体状態その1 右上 基板製作途中 Spartan-3基板側
左下 合体状態その2 右下 基板製作途中 MINI FX2基板側
CN-GPIO(ピンソケット)はまだ実装してないときのものです。
(CN-GPIO付の写真は ミミックUSB FX2 のページに)
●USBアナライザのアダプタについて
USB信号を観測するために CN-GPIO に USBコネクタを接続して使います。
レセプタクル(コネクタ)を確実に固定するのとスペースの都合で、変換基板を使って
2階建てにしました。
サンハヤトが2個イチ品を出していますが日本橋価格で700円以上と高いので、
デジットで見つけた ダイセン電子工業の
C-USB-A C-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アナライザを動かす PCは USB2.0接続可能であること
- TUSBana のウィンドウサイズをドラッグで変更しない
- FPGAのコンフィグ前に観測対象機器を繋がない
FPGAコンフィグが完了するまで(つまり初回コンフィグ前、およびFPGAコンフィグ中)は
各I/O端子は FPGA内部でプルアップされているので USBバスの D+ D- が共に HIGH
(USB規格では禁止状態)になります。
FPGAのコンフィグが終了しても機器が認識されない場合があります。
- 自分で設定した締め切り(6/8前後)に間に合わせるため、バグが潜んだままです。
そこのところを覚悟した上で試してください(問題があればまずソースを)。
接続
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 はハイスピード通信なので観測対象外です。
使用不可な接続状態
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信号の 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
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出版の雑誌いろいろからつまみ食い
以上。