何が変わった? USB 3.0プロトコル:失敗しないUSB 3.0、規格解説と実現のキーポイント(1)(2/2 ページ)
USB 3.0の高速伝送は、転送速度の向上だけで実現できたわけではない。本連載ではプロトコル面での改善点を中心に解説
USB 3.0のパケットのBulk Burst
USB 3.0プロトコルでは、このパケット共有によるオーバーヘッド削減というのはプロトコル改良のほんの一部です。さらに画期的なプロトコル追加としては、Bulk Burst転送が挙げられます。これはトランザクションの正常終結を待たずに次々とデータ転送が可能となるため、従来のUSBの最大のネックだったハンドシェイク待機時間を解消することが可能となります。また、Bulk転送の延長上のプロトコルであるため、非定期的なBulk転送を主に行うすべてのクラスへの適用が容易で、すぐにこの恩恵が受けられるのが強みとなります。
もう少し具体的に見てみましょう。
USBではパケットリクエスト/受領を意味するACK TPとData Packetが対になってトランザクションを構成しますが、Bulk Burstの仕組みはそのシーケンス制約を受けないことにあります。具体的にはACK TPにはNumPフィールドと呼ばれる固有の数字を表す4bitのフィールドがあり、最大のバーストサイズは、エンドポイントコンパニオンディスクリプタでデバイスからホストに通知されます。
IN転送の場合
ホストからのデータ要求であるACK TPが非0である場合、各パケットが最大パケットサイズのデータペイロードを保持する限り継続されます(デバイスはバースト時、Data Packetの間隔を100ns未満にしなくてはいけません。これを守れないときはEOBを付けてバーストを中断します)。
ホストが発行するACK TPのNumPフィールドは最大バースト値を超えない範囲でいつでもインクリメントすることが可能ですので、理論上バーストを永久に継続することができます。なお、NumPフィールドをデクリメントする場合は1ずつ減らしていかなればなりません。
この例外として、以下の条件のときにホストはその前のNumPフィールドの値にかかわらずNumPフィールドに0をセットしたACK TPを送出し、バーストを終了することが可能です。
- バーストの終わり(中断)を示すEOB(End of Burst)フィールドがセットされたData Packet受信
- ショートパケットのData Packet受信
OUT転送の場合
ホストがデバイスにデータパケットを送信すると、デバイスからACK TPを受け取ります。このACK TPのNumPに記載された数だけACK TPを待たず連続してパケットを送信することができます。デバイスもNumPフィールドをインクリメントでき、デクリメントする場合は1ずつ減らす必要がありますが、ホストと異なり、データをこれ以上受け取れない場合はNumPフィールドを突然0にしてパケットを受け取れないことを通知できます。
このとき、ホストがパケットを余計に送ってしまった場合は、デバイスでは破棄し、ホストは再度転送するときに再送しなくてはいけません。
※ IN転送と異なり、OUT転送ではDataPacketの間隔に規定はありません。
気を付ける必要があるのはバースト中に何らかのエラーが生じた場合です。このときは再送処理が行われ通信の再起が期待されますが、再送要求通知が到達する前に新たなパケットが次々と転送されています。
データ受信側は再送要求パケット以降を受け取っても破棄しなければならず、データ送信側は再送要求パケットから新たに転送を再開できる処理が必要となります。この間だけは無駄なパケット転送が集中的に行われる期間となる可能性があります。
USB 3.0のパケットの複合発行
従来のUSBのパケット転送では、すべての接続されたデバイスにデータを到達させ、自身のアドレスと一致したデバイスのみが応答を行う「ブロードキャスト」と呼ばれる方式が採用されています。ホストは順番にトランザクションを発行し、順番に応答、もしくはタイムアウト処理を行うことができます。ハブはリンクスピードの調停こそあるものの、同様の情報を下位デバイス伝達することでUSBバスシステムが実現されています。
1つのホストが全デバイスの面倒を見るわけですから、接続デバイス数が多ければ多いほど、無関係なパケット転送が増え、通信の影響を受けやすいことがUSBでのよく知られた弊害です。また、すべてのリンクが活性化されるため、本当に必要な電力より多くの電力を費やすことも代表的な弊害として挙げられます。
それに対してUSB 3.0では、通信すべきデバイスだけと通信を行う方式が採用されています。この通信方式は「ユニキャスト」と呼ばれ、ホスト/ハブの機能はより複雑さを求められるようになりました。ホストは、通信すべきデバイスアドレスとエンドポイントを指定したパケットを転送する点でいままでのUSBと同じです。しかしハブは、自身のダウンストリームポートにどんなアドレスを持つデバイスが接続されているかを把握しておく必要があり、よりインテリジェンスな動作が求められます。
さらにUSB 3.0では、物理的な信号線が5.0Gbpsというビットレートを実現するために、送信用/受信用に分離されています。ユニキャスト+物理的なバスという双方向化のメリットを最大限に生かすために、複数のトランザクションを同時に行えるようになりました。USBのトランザクションでは、INトランザクションをホストが1つ発行可能な点は従来のUSBと同じです。しかしながら、OUTトランザクションは完結、もしくはタイムアウトを複数待たずとも発行することができるので、ホストはINトランザクションでデータ受信を待っている間に、ほかのOUTトランザクションを複数発行することができます。
USB 3.0は伝送速度向上だけでなく、プロトコルでの改善が行われてきたことがお分かりいただけましたでしょうか?
次回は、USB 3.0で動作させるために必要なハードや条件、規格から見たUSB 3.0/USB 2.0での接続スピード決定仕様などから、下位互換性について理解を深めていきます。
Copyright © ITmedia, Inc. All Rights Reserved.