有限会社オービット
AuBit

製品紹介 USB2.0規格対応 US-H220

豊富な解析機能

USBトランザクション表示機能

直感的にどのようなデータが流れているのかを分かるようにと、開発においてこだわったものの一つが、USBストリームスコープソフトウェアのログの表示方法。 表示の見やすさが、最終的には開発のスピードの短縮に寄与します。

トランザクション単位の表示

ホストPC←→USBデバイスの間は、「パケット」を最小単位としてやりとりが行われますが、 一般にソフトウェア設計者が意識するのはパケットをいくつか組み合わせた「トランザクション」単位での通信内容です。

「USBストリームスコープ」シリーズでは、従来機US-F100Aから1トランザクションを横一列に並べて表示する方式を採用し、「見やすい」と好評を得ています。 この表示方式は目的のトランザクションをすばやく確認できる優れたユーザーインターフェースです。

さらにUS-H220ではこれを発展させ、データパケットを小さく折りたたんで表示することができるようになりました (←表示イメージ)。

1画面により多くのトランザクションを表示できるため、トランザクションの進行状況を確認するのが、よりわかりやすくなりました

NAKトランザクションの表示

USBデバイスはデータの通信準備ができていないという意味で、「NAK」や「NYET」といったパケットを返すことがあります。 特に、バルク転送においてはこのような応答が延々と続くことがあり、そのような「NAKトランザクション」をそのまま並べて表示していると、 全体的なトランザクション構成の見通しが悪くなることがあります。 (←表示イメージ)。

そこで、USBストリームスコープでは、そのような連続する「NAKトランザクション」をまとめて表示するようになっています。 (→表示イメージ)

この表示方法により、トランザクションの前後の状況も広く見渡せるようになり、 有効なデータパケットがどの程度詰まっているかを直感的に視認できるようになっています。

もちろん、このようなNAKトランザクションそのものを表示しないようにするための 「表示フィルタリング機能」も備わっています。

USBデバイスの転送能力

USBストリームスコープでは、「有効なデータパケットがどのくらい詰まって送受信されているか」という点を直感的にとらえられるよう工夫されています。
下の画面をご覧下さい。

画面イメージ内で、横に1本走った黒い線は「フレーム」(USB規格で1フレーム = 1ms[Fullスピードの場合]、または125us[Hiスピードの場合]と 決められています)の境界を表しています。 また、パケットそのフレーム内のどこに出現しているのかを、フレームの上部にパケットと同じ表示色で表示しています。 (→パケットポジションバー
下記で、そのフレーム内に、有効なデータパケットが何回やりとりされたかを見てみましょう。

この画面(→拡大イメージ)は、USB2.0 Hi-Speedに対応したUSBメモリのログです。

1フレーム内に有効なデータパケットは1つ程度しかなく、USB帯域のほとんどが大量のNAKトランザクションで費やされているのが確認できます。 これはFlashROMに対するアクセスタイムが遅いためで、Hi-Speedデバイスの高速性が十分に生かせていない様子がうかがえます。

この画面(→拡大イメージ)は、USB2.0 Hi-Speedに対応したハードディスクのログです。

こちらは、1フレーム内に11トランザクションものデータパケットが発生しており、そのすべてに有効なデータパケットが詰め込まれているのが確認できます。 各データパケットは512バイト長ですので、わずか125usの間に5.5Kバイトのデータが転送されていて、その最大瞬間転送速度が約43MByte/secに達していることが分かります。

性能の高いUSB2.0コントローラでの通信では、このように無駄のないデータ転送が行われている様子をつぶさに見ることができます。

上の2画面のように、US-H220のログを見ればデータパケットの詰まり具合に違いがあることがすぐに判別できます。

USBデバイスの実効転送能力を少しでも高めたい時、一般にソフトウェア開発者ができることはこの「NAKトランザクションの発生をいかに少なくできるか」というところにあります。 USBストリームスコープを使って「NAKトランザクション」の発生する箇所や条件を特定したうえで、ソフトウェアやドライバの応答速度改善に取り組みます。

表示カラー設定機能

ログデータの表示においても、観測したい現象によっては着目すべきパケットが異なります。

USBストリームスコープでは表示のカラーをパケット単位で設定する事ができますので、着目したいパケットに目立つ色を設定する事も可能です。 (→表示イメージ)

特にストリームスコープの特徴である、リアルタイムに近い表示をしながらの観測では、 表示されるパケット名を読まなくてもパケットに設定された「色」だけに注意を払うことで、 対象とするパケットの発生タイミングを知る事が容易にできます。 「トークンパケット」「データパケット」「ハンドシェイクパケット」を各カラムに分けて表示し、同じカラムには他の要素を表示しないUSBストリームスコープの表示スタイルは、このカラー設定による視認性の良さを追求した結果です。

実際の表示イメージを見ながら色の指定を行いますので、変更後の見やすさを確認しながら設定ができます。

バスステート記録機能

USBストリームスコープは、パケット/トランザクションといった単位のログ記録だけに留まりません。 プロトコル上、特に重要な「USBバスリセット」「サスペンド」「ディスコネクト」といったパスイベントも漏れなく記録します。

バスステート

USBバスリセットでは、リセットの時間表示(単位:msec)も行います。

また、これらのバスイベントを条件にしたトリガ設定も可能です。

高精度時間計測機能

高精度時間計測

SOFパケットが1msec(Fullスピード時)/0.125msec(Hiスピード時)毎に発生しますので、 このSOFパケットとトランザクションの前後関係からトランザクションのおよその発生タイミングを知ることは可能ですが、 USBストリームスコープでは各パケット毎に16.7ns単位の高精度時間計測が可能です。

得られた詳細なパケットタイミング情報を利用すれば、トランザクション間の時間間隔を調べてUSBホストの応答性能を確認したり、 また1トランザクション内でのパケット間の時間間隔を調べてインターパケットディレイ(パケット間遅延時間)違反の調査もできます。

パケットポジションバー

こういったパケット・トランザクションの発生間隔をビジュアル的に捉えることができる「パケットポジションバー」を搭載し、 転送効率を一目で把握できるようになっています。

パケットポジションバー

左端から右端までのトランザクションの表示範囲を1フレーム(Hiスピードでは1マイクロフレーム)の区間と捉え、 そのフレーム内のトランザクション/パケットをその発生位置と長さにあわせてバーで表示します。 この場合も、パケットの種類にあわせて設定したカラー設定が使用されますから、どのパケット/トランザクションがどのくらい時間をかけて送受信されたかが直感的に捉えることが可能です。

速度表示

パケット速度

USBバス上でのトランザクション/パケットの転送速度を左側にコンパクトに表示します。

   Hiスピードの場合
   Fullスピードの場合
   Lowスピードの場合

SPLITトランザクションの場合は、右図のように2つの速度表示を行います。
最初の速度はUSBバス上での転送速度で、2番目の速度は、SETUPやINなどのパケットが実際のUSBデバイスに対して送受信されるときの速度を表します。(トランザクショントランスレータ(TT)の作用による速度変換結果)

トリガ機能

トリガ設定

USBストリームスコープが備えるトリガ機能は「シーケンシャルトリガ」と呼ばれるもので、 最大16個のトリガ条件とそれぞれに対応する16個のアクションを定義できる高機能なものです。 シーケンシャルトリガと名が付いているように、1つのトリガ条件を満たしたらその次のトリガ条件に、更に次へ・・・と 発生するトリガイベントのシーケンスを定義できますので、単発のトリガ動作だけでは捉えきれない複雑な条件をきっかけとして、 ログ開始/ログ停止/トリガ端子出力といったアクションを実行することが可能です。

トリガ条件も豊富に用意し、トリガ条件を満たした時のアクションはログ開始・ログ停止だけでなく、 トリガ発生時点を遡って記録する「プリトリガ機能」と、トリガ発生時点よりも後まで記録する「ポストトリガ機能」も備えていますので、 解析したい問題が発生する前後の状況までしっかりと捉えることができます。
また、USBストリームスコープ US-H220にはトリガ出力端子がありますので、トリガ発生時にトリガ出力をさせることで、 オシロスコープやロジック・アナライザと連携した問題解析も可能としています。

(設定可能なトリガ条件)

  • パケットのタイプ(SETUP/INやACK/NAKなど)
  • データパケット内のバイト列(dont careも指定可能)
  • CRCやPIDなどのエラー
  • USBバスリセット/サスペンドなどのバスイベント
  • トリガ端子を使った外部からのトリガ入力

リピートモード機能

リピートモード リングバッファ

通常の2GByteのログ取得機能に加え、2GByte×20ファイルのリングバッファ構成で最大40GByteの連続記録が可能です。

このリピートモードでは、エンドレスなログの連続記録が可能になります。 複数のログファイルをリングバッファのように順繰りに記録していくことで、 ログを停止した時点から遡って最大40GByte前までのログがPCのディスクに残ります。
トリガ条件の設定しづらい稀で複雑なトラブルであっても、問題が発生したと思われる時点でログを止めれば、 残されたログの中にトラブルが発生した瞬間の通信内容が記録されているはずです。 それを、検索や表示フィルタ機能を使って絞り込んで見つけ出します。

残すログファイルのサイズとファイル数は、自由に設定できます。

マーク&ジャンプ機能

2Gバイトにも及ぶログ解析では、着目すべきデータを検索やフィルタだけで把握する事は困難です。

このため、USBストリームスコープでは、99箇所ものマークを設定できる機能を持っています。 (→表示イメージ)

マーク間の移動も、ショートカットキーや、番号を指定してジャンプする事も可能。 マーク機能を使えば、一度とらえた現象を後でトレースしてより深い状況把握ができます。

さらに、各マーク毎に個別のコメントを設定できますので、各トランザクションが持つ意味などを書き留めておくことができ、 発生している現象の記録がより精密に行えます。

CSVエクスポート機能

USBストリームスコープで取得したUSBログをCSV形式にエクスポートできます。
カンマで区切られたテキストで読める形式に書き出せますから、お客様で独自の解析・集計をすることが可能になります。

バイナリファイル保存機能

ログデータのデータパケット部分から、バイト列のみを切り出して、バイナリファイルで保存可能です。

この機能を使用するとアプリケーションから流したデータと流れてきたデータをすばやく比較検証できます。 例えば、音楽・ビデオなどのマルチメディア系データのストリーミング部分だけをバイナリ保存し、 Windows Media Playerなど外部アプリケーションで再生してみるなどの方法で、USBバス上での送受信データの妥当性検証ができます。

リクエスト/コマンドの翻訳表示機能

「USBストリームスコープ」は、単にパケット・トランザクションを整理して表示するだけではありません。

「SETUP」パケットから始まる「デバイスリクエスト」や「ディスクリプタ」についても、できるだけ詳細に表示します。 (→表示イメージ)

「デバイスリクエスト」や「ディスクリプタ」の内容を、ただ16進数のバイト列で表示してもなかなか読みづらいものです。 このように「項目名」と「パラメータ」に分類してツリー表示することで、 初めてUSBを勉強する方が「デバイスリクエスト」「ディスクリプタ」を理解しやすいように配慮されています。

さらに詳細表示中のディスクリプタを選択すると、データ中の該当するバイト列が反転表示されますので、 「ディスクリプタの各項目」と「データパケット中のバイト列」の対応関係が一目で分かります。 ストリームスコープで解析した結果から、ディスクリプタを記述していくようなソフト設計も可能になります。

クラス固有のディスクリプタについても同様に解析できますので、より効率的なソフト設計が可能になります。

(注)現在、「クラス固有デバイスのディスクリプタ」については「HUB」「HID」「Audio」「Communication」 「MassStorage(SCSI Command Transparent Set、ATAPI SFF-8070i)」「Printer」「USB-TMC」「Wireless Controllerクラスのうち、Bluetooth Programming Interface(USB-BluetoothドングルのHCIインターフェース)」に対応しています。 その他、クラスについても順次対応予定です。
(注)「ベンダー固有デバイスリクエスト」についてはUSB規格で定義されませんので、表示しません。

2種類のフィルタ機能

USBは「バス」である性格上、いろんなデバイス間の通信が時分割で輻輳して行われていることも、理解を複雑にする一因です。 従って、余分なトランザクションに惑わされることなく、解析したい対象のトランザクションだけに集中して解析できるデバッグ環境が必要です。

そこで、USBストリームスコープ US-H220では2種類のフィルタ機能を用意しています。
一つは表示フィルタ(オフラインフィルタ)、 もう一つはリアルタイムフィルタ(オンラインフィルタ)です。

表示フィルタ(オフラインフィルタ)

表示フィルタは、ソフトウェア処理によって一度PC上に取り込んだログデータから指定されたトランザクションのみを抽出して表示する機能です。

このフィルタ方式の利点は、USBバス上に流れるトラフィックを一切加工せずに取り込んだログを、 フィルタ条件を変えながら様々な角度から検証することできるところにあります。 解析したい対象のフィルタ条件が事前に明確になっておらず、とりあえずすべてのUSB通信ログを取得した後で解析をする場合に利用します。

具体例を挙げてみましょう。

(例1) HUBにつながれた2つのUSBデバイスの通信ログを取りました。 しかし、HUBに対するINトランザクションが32msごとに割り込んで発生していて、本当に見たいUSBデバイスの方が見にくい。
こんなときは、「HUBのUSBアドレスを指定して非表示にする」フィルタリングをかけます。
すると、USBデバイス側の見たいトランザクションのみ表示されます。

(例2) USBマウスの通信ログを取りました。しかし、マウスを操作していない期間は延々とNAK応答が続き、 マウス操作を表すDATAパケットがあちこちに散在していて見にくい。
「NAK応答のトランザクションを非表示にする」フィルタリングをかけます。
マウスからの有効なDATAパケットを含むACK応答のトランザクションだけズラリと表示されます。 これはまさに「マウスの操作履歴」そのものです。

このフィルタ機能は一時的な表示フィルタとして機能し、キャプチャしたデータを切り捨てる訳ではありません。 従って、あるログデータに対してフィルタ条件を変えながら、様々な角度から解析することができます。

トリガ条件が設定しづらいような通信でも、最大40Gバイトもの連続記録容量とこの表示フィルタ機能を使って、 目的のパケット・トランザクションを効率よく確認できます。

リアルタイムフィルタ(オンラインフィルタ)

リアルタイムフィルタ設定

リアルタイムフィルタは、ログを取得と同時にUS-H220本体側にて指定された条件のトランザクションをフィルタリングした上で、 ログをPC上のディスクに保存するものです。
記録するトランザクションを必要な内容だけを記録しますので、 ログファイルをコンパクトに抑えることができます。また、各種処理の速度も向上します。

自由な組み合わせのUSBアドレス/エンドポイント番号をフィルタ条件として設定できます。
また、NAKトランザクションなど有効なデータ転送を伴わないトランザクションをリアルタイムフィルタによって、取り除くことができます。

インスタントフィルタ機能

「インスタントフィルタ機能」は、「表示フィルタ」を素早く設定するための一つの方法です。

「インスタントフィルタ機能」を使うと、画面に表示されているトランザクションの中から必要なもの、あるいは不要なものを指定して、 「表示フィルタ」の設定を追加・変更することができます。
例えば、画面上に見えているUSBアドレス=4のトランザクションが不要だと判断したら、そのトランザクション上で右クリックします。 すると、そのトランザクションに対して適用可能なフィルタ一覧が現れますから、 適用したいフィルタ条件をクリックするだけでUSBアドレス=4を表示フィルタで除外できます。

パケット検索機能

USBストリームスコープでは、「SETUP」や「ACK」などの特定のパケット種類で検索する事ができます。
しかも、検索速度は高速。Hi-Speed転送では数百万ものパケット/トランザクションが発生することも珍しくありませんが、 そのような巨大なログでも数秒〜十数秒で検索を完了します。

左図はトランザクションやパケット種類を検索条件にした場合の設定です。 (→表示イメージ)

トークンパケットとハンドシェイクパケットとの組み合わせで検索が可能ですので、「OUT-(DATA)-NYETトランザクション」のような 特定のトランザクションを対象にした検索も可能です。
また、特定のUSBアドレスやエンドポイントに限定して検索したり、複数のUSBアドレスやエンドポイントを対象とすることも可能ですので、 対象とするトランザクションを容易に探し出すことができます。

(注)検索速度は、ご使用になるPCの性能、および、検索条件によって異なります。

データ検索機能

ストリームスコープでは、パケット種類だけではなく、DATAパケットの中から特定のバイト列を指定した検索も可能です。 (→表示イメージ)

ストレージデバイスの開発など、転送するデータが既知の場合には、該当するデータがどこにあるかがピンポイントで検索できます。 この場合でも、USBアドレスやエンドポイントを指定、除外できますので、検索効率が上がるだけでなく、 検索にヒットしたデータ列のアドレス評価が不要になりますので、検索結果に対する判定が楽に行えます。

さらに、検索するデータ列は、トランザクション間をまたがっていても検索ができますので、 データがパケット単位に分割して転送されることを意識しなくても素早く検索ヒットさせる事ができます。

エラー検索機能

パケットやトランザクションのエラーを検索することも可能です。

パケットのCRCエラーや不正PIDエラーのような単純なエラーのほか、 データパケットのトグルシーケンスエラーや、トランザクション構造の異常(例えば、バルク転送なのにハンドシェイクパケットが無いなど)も見つけることができます。こういったエラー判定のために必要な各パイプの転送モード(バルク転送/インタラプト転送など)は、 エニュメレーション部分があれば自動的に判別されます。

上記の他に、SOF番号での検索や、非通信期間の検索機能もあります。

リクエスト/コマンド検索機能

標準デバイスリクエストや、クラス固有リクエストを検索する機能を備えています。
また、USBメモリやMTPデバイスの解析に便利なクラス固有のコマンド(SCSIコマンドのRead(6)や、PTP/MTPコマンドのGetObjectなど)も、 パラメータとともに検索することが可能です。

統計情報出力機能

統計情報

パケット/トランザクション数、転送バイト数、平均転送レートを表示する機能を備えています。
アドレス/エンドポイント毎に分けて集計する他、ハンドシェイクパケットのタイプ別にも分類して計数します。 これらの集計結果は、クリップボード経由で表計算ソフトへコピーすることが可能となっています。

VBus測定機能

「VBus測定機能」は、デバッグ対象であるUSBデバイスの消費電力を測定します。
測定の対象は、USBデバイスのVBus電圧・電流・消費電力の3項目です。

USB規格で定められている消費電流の上限値を満たしているか、設計どおりの消費電流となっているかを確認するためだけでなく、 特定条件下での急な消費電流の上昇や異常なVBus電圧降下を起因とするトラブル解析にうってつけです。 最大4億ポイントの電圧・電流値をPCのディスクに連続して記録し、数時間〜数日というスパンでの観測が可能です。 発生頻度が稀なトラブルにも対応できます。

また、VBus電圧の状態はログを取得する/しないにかかわらず、常時アプリケーションの上部に表示されていますから、 現在の値をちょっと見るだけであれば特別な操作は必要がありません。


Ver3.6.0.0からは、USBパケット/トランザクションのログと、VBus電圧・電流の変化を、時系列的に記録することができるようになりました。
これにより、突発的な電圧低下や消費電流の上昇と、USBプロトコル上の通信異常との関係性を確認・検証しやすくなっています。