480MbpsのBus動作を実現するためには電気的な仕様の変更が、USB1.xとの互換性を維持しながら必要になります。 また、12/1.5Mbpsの転送と480Mbpsの転送が混在できるようにするために、プロトコルの変更が必要になります。また、USB1.xで目立つようになってきた問題点も改善されます。

USB1.xにおいてOut transactionにおけるNAK応答はTOKEN、DATA packetの転送が終了した後にしか発行できません。このため、ファンクション側の処理が遅くNAK応答の回数が多いデバイスを接続するとUSB busにOUT → DATA → NAKが多数発行されることになります。OUT → DATA → NAKは実際にUSB Busを占有する期間が長い上、データ転送としては無効ですから、USB Busでの実際の転送レートを低下させることになります。

USB2.0ではこれを解決するためにPINGとNYETと言う新しいパケットを仕様として追加しました。

 

PING and NYET

 

Bulk OUTデバイスに対して、ホストはまずPINGによってデータを受け付けるための空きBufferがあるかどうかを問い合わせます。ファンクションはデータを受け付けられないならNAK応答し、データを受け付けられるならACKで応答します。ホストはPINGに対してNAK応答を受信している限り、PINGを繰り返し送り、ファンクションの受信Bufferの空き状況を確認し続けます。
ホストがPINGに対してACK応答を受信したら、実際のBulk-out転送を行います。
ファンクションはこれに対してACK,NYET,NAK,(STALL)応答のいずれかで応答します。
ACK応答はさらにBufferの空きがあるので次のBulk-out転送を受け付けられることを意味しています。このため、ホストは連続してBulk-out転送を行います。NYET応答は、Bufferの空きがないため、次のBulk-out転送をすぐには受け付けられないことを意味しています。このため、ホストは次のBulk-out転送を行う代わりにPINGを送り、ファンクションの受信Bufferの空き状況を確認します。
NAK応答は基本的には使用すべきではありませんが、何らかの理由によりBufferの空きがなくなり、データ受信ができない場合には使うことができます。
このPING、NYETによって無意味にUSB Busのバンド幅を消費してしまうOut → data → NAKシーケンスの発生を防ぎ、効率的なUSB Busの利用を可能にします。

  • カタログポータル