「USBストリームスコープ」は、単にパケット・トランザクションを整理して表示するだけではありません。
「SETUP」パケットから始まる「デバイスリクエスト」や「ディスクリプタ」についても、できるだけ詳細に表示します。 (→表示イメージ)
「デバイスリクエスト」や「ディスクリプタ」の内容を、ただ16進数のバイト列で表示してもなかなか読みづらいものです。 このように「項目名」と「パラメータ」に分類してツリー表示することで、 初めてUSBを勉強する方が「デバイスリクエスト」「ディスクリプタ」を理解しやすいように配慮されています。
さらに詳細表示中のディスクリプタを選択すると、データ中の該当するバイト列が反転表示されますので、 「ディスクリプタの各項目」と「データパケット中のバイト列」の対応関係が一目で分かります。 ストリームスコープで解析した結果から、ディスクリプタを記述していくようなソフト設計も可能になります。
クラス固有のディスクリプタについても同様に解析できますので、より効率的なソフト設計が可能になります。
(注)現在、「クラス固有デバイスのディスクリプタ」については「HUB」「HID」「Audio」「Communication」
「MassStorage(SCSI Command Transparent Set、ATAPI SFF-8070i)」「Printer」「USB-TMC」に対応しています。
その他、クラスについても順次対応予定です。
(注)「ベンダー固有デバイスリクエスト」についてはUSB規格で定義されませんので、表示しません。
USBは「バス」である性格上、いろんなデバイス間の通信が輻輳して行われていることも、理解を複雑にする一因です。
USBストリームスコープではこの問題を解決するため、特定の「トランザクション」を表示・非表示にする「表示フィルタリング機能」を提供しています。 (→表示イメージ)
具体例を挙げてみましょう。
(例1) | HUBにつながれた2つのUSBデバイスの通信ログを取りました。しかし、HUBに対するINトランザクションが32msごとに割り込んで発生していて、本当に見たいUSBデバイスの方が見にくい。 |
→ | こんなときは、「HUBのUSBアドレスを指定して非表示にする」フィルタリングをかけます。 すると、USBデバイス側の見たいトランザクションのみ表示されます。 |
(例2) | USBマウスの通信ログを取りました。しかし、マウスを操作していない期間は延々とNAK応答が続き、マウス操作を表すDATAパケットがあちこちに散在していて見にくい。 |
→ | 「NAK応答のトランザクションを非表示にする」フィルタリングをかけます。 マウスからの有効なDATAパケットを含むACK応答のトランザクションだけズラリと表示されます。これはまさに「マウスの操作履歴」そのものです。 |
このフィルタ機能は一時的な表示フィルタとして機能し、キャプチャしたデータを切り捨てる訳ではありません。 従って、あるログデータに対してフィルタ条件を変えながら、様々な角度から解析することができます。
トリガ条件が設定しづらいような通信でも、最大20Gバイトもの連続記録容量とこの「フィルタリング機能」を使って、 目的のパケット・トランザクションを効率よく確認できます。
USBストリームスコープでは、「SETUP」や「ACK」などの特定のパケット種類で検索する事ができます。
しかも、検索速度は高速。Hi-Speed転送では数百万ものパケット/トランザクションが発生することも珍しくありませんが、
そのような巨大なログでも数秒〜十数秒で検索を完了します。
左図はトランザクションやパケット種類を検索条件にした場合の設定です。 (→表示イメージ)
トークンパケットとハンドシェイクパケットとの組み合わせで検索が可能ですので、「OUT-(DATA)-NYETトランザクション」のような
特定のトランザクションを対象にした検索も可能です。
また、特定のUSBアドレスやエンドポイントに限定して検索したり、複数のUSBアドレスやエンドポイントを対象とすることも可能ですので、
対象とするトランザクションを容易に探し出すことができます。
ストリームスコープでは、パケット種類だけではなく、DATAパケットの中から特定のバイト列を指定した検索も可能です。 (→表示イメージ)
ストレージデバイスの開発など、転送するデータが既知の場合には、該当するデータがどこにあるかがピンポイントで検索できます。 この場合でも、USBアドレスやエンドポイントを指定、除外できますので、検索効率が上がるだけでなく、 検索にヒットしたデータ列のアドレス評価が不要になりますので、検索結果に対する判定が楽に行えます。
さらに、検索するデータ列は、トランザクション間をまたがっていても検索ができますので、 データがパケット単位に分割して転送されることを意識しなくても素早く検索ヒットさせる事ができます。
上記の他に、SOF番号での検索や、非通信期間の検索、エラーパケットの検索といった、通信状況レベルでの検索も可能です。 (→表示イメージ)
特に「非通信期間の検索」では、通信が行われていないアイドル期間の有無を検索できます。 開発したUSBデバイスやドライバが、無駄に空き時間を作っている部分を探すのに威力を発揮します。
単一のログに対して様々な条件で検索をかけることができますので、トリガ設定で対象パケットだけを記録する方式では困難な、 全く同じ通信にいろいろなトリガ条件を設定して解析する様な、きめ細かな解析もストリームスコープでは可能になります。
(注)検索速度は、ご使用になるPCの性能、および、検索条件によって異なります。
2Gバイトにも及ぶログ解析では、着目すべきデータを検索やフィルタだけで把握する事は困難です。
このため、USBストリームスコープでは、99箇所ものマークを設定できる機能を持っています。 (→表示イメージ)
マーク間の移動も、ショートカットキーや、番号を指定してジャンプする事も可能。 マーク機能を使えば、一度とらえた現象を後でトレースしてより深い状況把握ができます。
さらに、各マーク毎に個別のコメントを設定できますので、各トランザクションが持つ意味などを書き留めておくことができ、 発生している現象の記録がより精密に行えます。
測定や観測を記録する上でもっとも大切な事の一つは、「観測条件を記録する」ことです。
対象とする開発中のUSBデバイスのソフトのビルド番号や、ドライバのリビジョン、場合によってはハードウェアのジャンパ設定などの測定条件は、 ログデータと一意対応した記録が不可欠です。
USBストリームスコープではこのような事にも配慮。ログデータ中に左図のような任意のコメントを付加できる機能 (→表示イメージ)を持っており、 保存したログファイルのコメント内容はファイルを開かなくても、エクスプローラ上からでも確認できます。
トランザクション間の時間も通信状況を把握する上では重要なことです。
USBストリームスコープは、任意の2トランザクション間の経過時間を簡単に確認することができます。 例えば、バルク転送を始めた地点から終了した地点までの経過時間を確認したい場合などに、 検索機能やマーク・ジャンプ機能と組み合わせて、この時間計測機能を利用できます。
高精度時間計測により16.7ns単位での計測が可能で、各地点間の計測もns単位(ns以下は切捨て)表示可能です。
ログデータの表示においても、観測したい現象によっては着目すべきパケットが異なります。
USBストリームスコープでは表示のカラーをパケット単位で設定する事ができますので、着目したいパケットに目立つ色を設定する事も可能です。 (→表示イメージ)
特にストリームスコープの特徴である、リアルタイムに近い表示をしながらの観測では、 表示されるパケット名を読まなくてもパケットに設定された「色」だけに注意を払うことで、 対象とするパケットの発生タイミングを知る事が容易にできます。
表示イメージを見ながら設定できますので、設定が容易です。