このACK TPに対するレスポンスはPhoto01の様にまとめられる。基本的には珍しいものはなく、ごく普通の対応である。ただし見ての通り、エラー発生時にはそれぞれ対応する処理を行う必要がある関係で、次から説明するPacketがそれぞれ用意されることになる。

Photo01: 全てがNoというのは、単なる正常な転送完了の通知となるから、これまた何もしなくて良い(というか、次の転送に掛かればいい)事になる。

NRDY(Not Ready) TP(Photo02)

Photo02: Universal Serial Bus 3.0 SpecificationのFigure 8-12から抜粋

これはDevice→Hostでのみ使われるTPである。DeviceがOUT Endpointの場合、Data Packetを受け取るためのバッファが満杯の場合に、IN Endpointは逆に、ACK TPの返答としてData Packetを送り出す準備が整っていない場合にこれを送信する。フィールドのSubTypeにはNRDYが、Direction/Endpoint Number/Stream IDなどは直前に届いたACK TPと同じものが入る。

ERDY(Endpoint Ready) TP(Photo03)

Photo03: Universal Serial Bus 3.0 SpecificationのFigure 8-13から抜粋

これはDevice→Hostに対して、Device側が送信または受信の準備が整った事を通知するTPである。一見ACK TPと同じ機能であるが、フィールドを比較するとRetry/Host Error/Seq Numberなどのフィールドが無い(ACK TPはHost→DeviceのPacketだから、Device→HostのERDY TPがこれを持たないのはある意味当然ではある)ほか、Number of Packetsの意味合いがやや異なる。DeviceがOUT Endpointの場合、その意味合いはACK TPと同じである。問題はIN Endpointの場合で、この場合はHostがTransactionを再開した場合にどれだけのデータパケットを受け取れるか、を示す形になる。要するにTransactionの再開にあたって、Device側が準備出来ている事を示すために使われるものだ。

Status TP(Photo04)

Photo04: Universal Serial Bus 3.0 SpecificationのFigure 8-14から抜粋

これはHost→Deviceのみで使われるTPである。これはControl Endpointに対して、これからControl TransferのStatus stageを開始することを通知するTPである。ここまでちょっと説明してこなかったが、全てのEndpointはControl Endpointと呼ばれる機能を持っている(もっと正確に書けば、Control Endpoint単独で成立するものもあれば、Bulk Endpointとペアになっているものもあると言うべきであろう)。で、このStatus TPはControl Endpointに対するTPという形になる。フィールドの内容は概ねACK TPと同じであるが、ERDY同様Retry/Host Error/Seq Numberなどのフィールドは無い。

Stall TP(Photo05)

Photo05: Universal Serial Bus 3.0 SpecificationのFigure 8-15から抜粋

これはDevice→Hostのみで使われるTPとなる。これは、

・EndpointがHalt状態にある
・Control Transferが不正状態になった

事をHostに通知するために利用される。フィールドの内容はStatus TP同様である。

Device Notification(Photo06)

Photo06: Universal Serial Bus 3.0 SpecificationのFigure 8-16から抜粋

これはDevice→Hostでのみ使われるもので、DeviceあるいはInterfaceの状態がHostからのリクエストとは非同期に変化した場合に、それを通知するものとなる。例えばDeviceが独自の待機状態に入ったとか、逆に待機状態から抜けたといったケースである。といっても、基本的にはこのTPでは電源状態の変化の通知を行うのが主であり、Device Specificな情報を送ることは考慮していない。

フィールドを見ると、SubTypeにはDEV_NOTICICATIONが入り、続くNotification Typeは、

・FUNCTION_WAKE
・LATENCY_TORELANCE_MESSAGE
・BUS_INTERVAL_ADJUSTMENT_MESSAGE

の3種類のみが用意される。続くNotification Type Specificのフィールドであるが、これはNotification Typeによって当然異なる。FUNCTION_WAKEの場合、Photo07の様にごくシンプルである。要するにWakeupしたわけだから、それを通知すれば済む。

Photo07:Universal Serial Bus 3.0 SpecificationのFigure 8-16から抜粋

(続く)