USB 3.0のプロトコル層:USB 3.0、スーパースピードを支える技術(4)(2/2 ページ)
次世代インターフェイス「USB 3.0」を技術面から掘り下げる連載。最終回はプロトコル層を解説する
4. フロー・コントロールとバッファのマネジメント
前ページのように、リンク層ではフレーミングされたパケットを処理してプロトコル層に引き渡していますが、ここではフレーム・レベルの通信の制御を行っています(リンク・コマンドを使って制御)。LGOOD_n(フレーム受信成功の通知)、LBAD(フレーム受信失敗の通知)、LRTY(再送の通知)、LCRD_x(バッファ準備の通知)、LUP(リンク・アクティブの通知上りのみ)などです。
上記の例では、ACKやDHPのフレームに対してハンドシェイクが行われます。図5に示したように、まず、デバイスが準備完了をERDY Transaction Packetで知らせます。ホストはこのフレームの受信が成功するとAcknowledgeとしてLGOOD_0を送り、続いてバッファの準備を知らせるLCRD_Dを送ります。ホストは、ここでACK Transaction Packetを送ってデバイスからのデータ送信を要求しますが、デバイスでこのフレームの受信が成功すると、やはり同様にAcknowledgeとしてLGOOD_5がデバイスから返送され、続いてバッファの準備を知らせるLCRD_Bが返送されます。その後、ホストへのデータの転送が開始されますが、ホストがData Header Packetの受信に成功すると、そのAcknowledgeとしてLGOOD_1返送され、続いてバッファの準備を知らせるLCRD_Aが送られます。
データの受信が完了すると、ホストはACK Transaction Packetを送って受信を完了しますが、デバイスはACK Transaction Packetの受信をLGOOD_6で知らせ、バッファの準備をLCRD_Cで知らせます。ここで、LGOODの後の数字はシーケンス番号ですが、これは0〜7まで順番に使われます。またLCRDの後の文字は、バッファの番号に相当し、A〜Dまで順番に使われます。ホスト側とデバイス側は独立してナンバリングが行われていますので、ホストがLGOOD_0を送った後にデバイスがLGGOD_5を送っているのは特におかしなことではありません。
これをプロトコル・アナライザで見るには、リンク・コマンド・レベルまで見るように設定すればよく、その結果は、図6のようになりフレーム・レベルでのハンドシェイクの様子が分かります。
このように、USB 3.0スーパースピードの通信では、リンク層の動きは非常に重要な役割を果たしていますので、この動きを理解することがUSB 3.0スーパースピードのプロトコルを理解する近道となります。
ユニキャスト
USB 2.0ではホストが接続されたすべてのデバイスに一斉に送信(ブロードキャスト)し、応答すべきと判断したデバイスが返信する方式を取っていました。
これは、不必要なデバイスに対しても送信するということなので、電力管理という意味でも非効率でした。USB 3.0スーパースピードでは、通信を行う場合にルート・ストリングを指定して対象のデバイスにのみ送信(ユニキャスト)する方式を取っています。ルート・ストリングは、4つのサブ・ストリングからなっており、それぞれがハブのルートを指定しています。
ポーリング
USB 2.0では半二重通信であり、その通信の主導権はホストが握っているので、通信したいデバイスはホストからの問い合わせ(ポーリング)がなければ、通信することができません。しかしながら、USB 3.0スーパースピードでは全二重通信となり上り専用の通信線があるために、デバイスから通信の要求ができるようになりました。そのため、ポーリングは廃止されています。
そのほか
USB 3.0スーパースピードではデータ・ストレージ・デバイスの転送の効率化を主目的として、ストリームがバルク転送で利用できるようになっています。これも、5Gb/sの高速通信でリッチなコンテンツを効率的に転送するための工夫です。またアイソクロナス転送にも改良が加えられており、リッチな画像コンテンツの利用をサポートしています。
まとめ
ここでは、4回にわたってUSB 3.0スーパースピードの解説を行いました。ほかにさまざまな解説がなされており、高度な内容のものもあると思います。USB-IFのWebには、英文ですが豊富な資料が掲載されています。ここではそうした高度な内容を理解するうえで必要かつ基本的な考え方をまとめてみたつもりです。少しでも皆さまの助けになれば幸いです。
Copyright © ITmedia, Inc. All Rights Reserved.