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

USB2.0では仕様追加として480Mbpsの転送が規定されました。USB2.0ではUSB1.1の上位互換の仕様ですから、USB1.1のシステムにつないだ場合にも正常の通信ができなければなりません(装置としてfull機能を使用できるかどうかは別ですが)。これに対応した12Mbpsと480Mbpsの両方で動作できるデバイスがhigh-Speed capable deviceと呼ばれます。USB2.0では480Mbpsを実現するためにコネクタ、ケーブルが変更されることはありません。つまり、外見えに480Mbpsのシステムか12Mbpsのシステムかを判定することはできないのです。このため、ホスト、ファンクションの両方にとってどのような通信スピードで動作するかを示し合う必要があります。USB1.1までではファンクション側に接続されたプルアップ抵抗の位置によってfull-Speedとlow-Speedの判定していました。

 

Chirp handshake

 

high-Speedはプルアップ抵抗の位置でスピードを判定する方法は取れませんので何か別の方法が必要になります。デバイスはhigh-Speed capable deviceでも12Mbpsで動作できなければなりません。このことを利用して、すべてのデバイスはまずfull-Speed デバイスとして接続され、その後、利用できる動作スピードをホストとファンクションの間で確認しあうようになっています。これをChirp handshakeと読んでいます。Chirp handshakeは以下のようなタイミングでUSB Reset sequenceの間に行われます。

 

Chirp handsakeタイミング

 

Chirp handshakeタイミング

 

Chirp handshakeの終わりにファンクション側のプルアップ抵抗をoffにして、USB2.0 high-Speed bufferとして動作するようになります。
何らかの理由でhigh-Speed capable deviceにも関わらず、480Mbpsで通信できなかった時のために、SoftwareによるRetryの思想としてGet_Descriptor Device_QualifierとGet_Descriptor Other_Speed_Configurationが追加されました。

Get_Descriptor Device_QualifierとGet_Descriptor Other_Speed_Configurationについて

high-Speed modeではIdleとしてD+ = D- = Low を使いますから、そのままではSUSPEND状態とUSBRESETの区別がつきません。
このため、以下のように規定時間以上のD+ = D- = Lowを検出したら、ファンクション側のプルアップ抵抗を有効にする事でSUSPENDかUSB RESETかの判定を行います。

 

SUSPEND/USBRESET判定

  • カタログポータル