直感的にどのようなデータが流れているのかを分かるようにと、開発においてこだわったものの一つが、USBストリームスコープソフトウェアのログの表示方法。 表示の見やすさが、最終的には開発のスピードの短縮に寄与します。
ホストPC←→USBデバイスの間は、「パケット」を最小単位としてやりとりが行われますが、 一般にソフトウェア設計者が意識するのはパケットをいくつか組み合わせた「トランザクション」単位での通信内容です。
「USBストリームスコープ」シリーズでは、従来機US-F100Aから1トランザクションを横一列に並べて表示する方式を採用し、「見やすい」と好評を得ています。 この表示方式は目的のトランザクションをすばやく確認できる優れたユーザーインターフェースです。
さらにUS-H200ではこれを発展させ、データパケットを小さく折りたたんで表示することができるようになりました (←表示イメージ)。
1画面により多くのトランザクションを表示できるため、トランザクションの進行状況を確認するのが、よりわかりやすくなりました
USBデバイスはデータの通信準備ができていないという意味で、「NAK」や「NYET」といったパケットを返すことがあります。 特に、バルク転送においてはこのような応答が延々と続くことがあり、そのような「NAKトランザクション」をそのまま並べて表示していると、 全体的なトランザクション構成の見通しが悪くなることがあります。 (←表示イメージ)。
そこで、USBストリームスコープでは、そのような連続する「NAKトランザクション」をまとめて表示するようになっています。 (→表示イメージ)
この表示方法により、トランザクションの前後の状況も広く見渡せるようになり、 有効なデータパケットがどの程度詰まっているかを直感的に視認できるようになっています。
もちろん、このようなNAKトランザクションそのものを表示しないようにするための 「表示フィルタリング機能」も備わっています。
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フレーム内に6〜7トランザクションのデータパケットが発生しており、そのすべてに有効なデータパケットが詰め込まれているのが確認できます。 各データパケットが512バイト長であることを考えると、わずか125usの間に3〜3.5Kバイトのデータが転送されていることが分かります。
性能の高いUSB2.0ホストコントローラでは、多くのトランザクションが1フレーム内に詰め込まれている様子を見ることができます。
上の2画面のように、US-H200のログを見ればデータパケットの詰まり具合に違いがあることがすぐに判別できます。
USBデバイスの実効転送能力を少しでも高めたい時、一般にソフトウェア開発者ができることはこの「NAKトランザクションの発生をいかに少なくできるか」というところにあります。USBストリームスコープを使って「NAKトランザクション」の発生する箇所や条件を特定したうえで、ソフトウェアやドライバの非効率的な部分を改善します。