Bulk Streamingの紹介が簡単に終わったところで、話を本筋に戻す。最後にProtocol Layerの総括として、どんな形で転送が利用されるかという話をちょっとまとめておきたい。

USB 3.0が定義するTransfer TypeにはControl/Interrupt/Isochronous/Bulkの4種類がある、という話は既にしたが、これらはUSB 2.0の時から定義されていた転送方式で、USB 2.0との互換性を保つためにUSB 3.0でもこれらの転送方式はそのままサポートされる。USB 2.0のSpecificationによれば、

・Control Data Transfer : デバイスの接続時に、そのデバイスのConfigurationに利用されるほか、その他デバイス独自の機能の設定などにも利用される。
・Interrupt Transfer : 即時転送が必要で、かつ伝達保障が必要な転送。例えばHID(Human Interface Device)におけるキー入力やマウス操作など、USB経由での入力にホスト側が即時応える必要のある転送向け
・Isochronous Data Transfer : あらかじめ利用する帯域や遅延を想定できる転送(Streaming Real Time Transferとも呼ばれる)
・Bulk Data Transfer : 上のいずれにも属さない汎用のデータ転送で、データ量が多い場合に利用される

の4つが定義されており、これらはUSB 3.0でも引き継がれる。簡単に例を挙げておけば、Controlはそもそもデバイスの装着時などに使われるだけのもので、InterruptはUSBキーボード/マウスなど、IsochronousはUSBオーディオなど、データ量は劇的に多くないが、必ず一定のデータ転送が行われるケースで利用され、USB Flash MemoryなどはBulkを使うといった具合だ。このあたりのスキームはそのままUSB 3.0にも受け継がれている。とは言え、こうしたスキームはあくまでもアプリケーション(というか、Protocol Layerの上に来るDevice DriverというかFreamwork Layer)から見れば変わらないという話であり、Protocol Layerでの実装は大分変わっている。既にBulkについては一連の転送手順を説明してあるので、残る3つについてもまとめて紹介しておく。

Photo01はまずControl TransferのReadである。このケースではDeviceから、Device SpecificなDataを含むConfiguration Dataの受け取りを行う形である。Controlは(Read/Write)共に、基本はSetupとStatusという2つのStageからTransactionが構成され、オプションで間にData Stageが入る。

Photo01: HostがDeviceからのControl Transferを受け取る(Read)ケース

まず最初にHostからSetup fieldを1にしたDPHが送られる。これを受けてDeviceはACK TPを返す形でSetup Stageが成立する。この際にSequence Numner=0、Data Length=8でなければいけない。

これに続きDataの転送が入る場合、DeviceはACK TPを返す際にERDYを指定することになる。これが指定されると、Data Stageが開始されることになる。Data Stageでは、再びSequence Number=0から転送が開始される。まずHostからACK TPが送られ、これにあわせてDeviceからDPが送られる形である。ちなみに1回のDPで送りきれない場合は、複数のDPを転送することが許されている。このあたりまでの手順は、若干のDPHの設定を除けばBulk In Transferと酷似している。ただしちょっと異なるのがData Stageの最後で、ここは必ずHostからのACK TPで終了することになっている。つまりHandshakeで考えると、最後のACK TPが1個余分になる形だ。

Dataの転送が終わったら、最後にStatus Stageとなる。ここではまずSTATUSをSubTypeにセットしたTP(Status TP)がHostから送られ、これに対してACK TPをDeviceが返すことで終了となる。ちなみにDeviceはここでNRDYあるいはSTALLを返す事も出来る。NRDYはDevice側のSetupが終了していない場合に返すもので、これを受け取ったHostはDeviceの準備が整うまでERDY TPを送り、ACK TPが返ってくるまで次のSTATUS TPを送らないで待機することになる。またSTATUS TPにDefered bitが立っていた場合も、HostはERDY TPを送り返す事が求められている。

(続く)