Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

USB 3.xでプラグをゆっくり挿すとUSB 2.0で接続されてしまうという話

Twitterなどでも話題になった, USB 3.xでプラグをゆっくり挿すとUSB 2.0で接続されてしまうという話について,USBに詳しい筆者陣の皆さんに聞いてみました.

 

 


 

意図的にゆっくり挿さないと起こらない

 

USB 3.xでプラグをゆっくり挿すとUSB 2.0で接続されてしまうという話ですが,1秒以上かけてプラグ挿入するなど,意図的に「ゆっくり」挿さないと、この現象は起きません。最後まできちんと差し込まずに途中で止められてしまったということでない限り、普通に差し込んだときには起こらないでしょう。

 

規定からこの動作を考えてみる

 

時間規定は、UFPがVBUS検出してからUSB3のRx Detectをどれだけ試しても見つからなかったらUSB2で接続するかという形で間接的に規定されています。

 

Rx.Detect.QuietとRx.Detect.Activeのループを8回試して、ダメだったらUSB2へ遷移します。

 

1回のループは12msなので96msが時間規定です。しかし、0.1秒以内に差し込まないといけない訳ではありません。USB2でつながった後も、Bus Resetがかかると、またUSB3に戻ってRx Detectを実行するからです。

 

USB3デバイスでは、USB2動作時のenumerationでデバイスが返すDescriptorのUSB Versionが2.1になっているので、USB DriverはデバイスがUSB3対応であることが分かり、普通の作りのドライバならばBus Resetするはずです。

 

この動作を3回行った後でもUSB3のRx Detectが成功しない場合に初めてデバイスはUSB2動作に固定します。その後はBus ResetがかかってもUSB2のままです。

 

ここに至るまでの時間はOSやUSB driverの実装依存になるので環境次第ですが、1秒以上はゆうに必要となるはずです。

 

ここからは筆者の予想です

 

おそらく想像になりますが,PS5のドライバがUSB Version = 2.1の場合にBus Resetをかけるという処理を行ってくれなくて、0.1秒以内に素早く挿さないとUSB2になってしまう、という動作なのではないかと思います。

 

WindowsやMacではきちんとBus Resetを行うので、そこまでシビアなことにはなってなく、今までそのような話が上がってくることがなかったのでしょう。