【コラム】

セカンド・オピニオン

297 USB 3.0の研究(24)

    大原雄介  [2009/08/13]
    • Hot Reset(Photo01)

    Photo01: Universal Serial Bus 3.0 SpecificationのFigure 7-22からの抜粋。

    DSPのみ、Hot Resetを行う事が出来る。USB 3.0のSpecificationはあくまで通信部分のみの規定だから、USBを搭載したApplicationがここで何をすべきかについて別に規定はしていないが、通常ApplicationがHot Reset動作を行う場合は当然USBのポートもHot Resetとなるだろう。ただ実際にHot Reset動作を行う場合、DSPはHot Resetでいいとしても、USPにはHot Resetは送出できないので、結局SS.InactiveにStateを遷移させるしかなくなる事になり、Host ControllerとかUSB Hub以外ではHot ResetというStateは使いにくいのが実情だ。

    このあたりは、USBのMaster-Slaveの関係をReset動作にも及ぼしていると考えていいだろう。つまりHost側というか上位側がReset動作を行う場合、Device側というか下位側もこれに従ってReset動作を行うのは問題ないが、下位側のReset動作に上位側が連動することは無い、という発想であろう。まぁ確かに下位Deviceが勝手にHot Resetを掛けまくり、通信がさっぱり行われない、なんて事になるのは御免ではある。

    想定されるのはむしろ、通信エラーなどが検出されているので、Linkを再構成しなおしたいといった用途が一般的だろう。こうした用途ならば、DSPのみに適用できるのも不思議ではないし、有用と思われる。

    さてそのHot Resetだが、こちらは2つのSubstateを持つ。まずHot Resetを行う事を決定したら、Hot Reset.Activeに遷移する。このHot Reset.Activeでは、DSPに対しReset bitを立てた状態でTS2を最低16回送信する。これを受けて相手側はHot Resetに入るが、この際には相手もReset bitを立てた状態でTS2を送り返し続けるので、こちらも引き続きReset bitを立てた状態でTS2を送り続ける。相手側がHot Resetを完了すると、Reset bitを落とした状態でTS2を送り返してくるので、これを受け取ったらこちらもReset bitを落とした状態でTS2を送り返す事になる。双方とも、

    • Reset bitを落としたTS2を連続して2回以上受信する
    • 自分がReset bitを落としてTS2を送信した後で、4回以上連続してReset bitを落としたTS2を受信する

    を経てHot Resetを完了することになる。この一連のシーケンスは12ms以内に完了する必要があり、失敗した場合はSS.Inactiveに遷移することになる。またこのシーケンスの中で、USPの先(つまり自分より上流のデバイス)がWarm Resetのシーケンスに入っている事を確認した場合、自身はEx.Detectに遷移することになる。

    正常にHot Reset.Activeが終了したら、Hot Reset.Exitに遷移する。ここでは基本的にIdle Symbolを相互に通信しあう。Hot Reset.Exitでは2msのTimerをスタートし、

    • 8個の連続するIdle Symbolを受信する
    • 1つ以上のIdle Symbolを受信後、連続して16個のIdle Symbolを送信する

    が成立すると終了であり、ここでTimeoutが発生したらSS.Inactiveに遷移する。問題がなければ、そのままU0に戻る事になる。

    ちなみにHot Resetが無事終了すると、DSPのLink Error Countはゼロクリアされるが、Configurationとか(Loopbackなどで定めた)PHY Levelなどは一切変更されない。このあたりは、Link Trainingからやり直しとなるPowerOn Resetとは異なる部分だ。

    ちなみにこのHot Resetは、あくまでLink層のみのResetであり、基本的にはDeviceのResetは考慮していないと思われる。というのは、USB 3.0ではResetを大別して、

    • PowerOn Reset(上でも触れた、電源投入直後に行われるReset)
    • Inband Reset(Link層のみのReset)

    に分けており、Inband Resetは更に、

    • Hot Reset(今説明したもの)
    • Warm Reset(LFPSのtResetからやり直すシーケンス)

    に分かれる。LFPSを使うため、こちらは当然Link Trainingのやり直しから始める事になるため、所要時間も長くなる。恐らく上位層のインプリメントとしては、まずLink Errorが出るようならHot Resetを何回か繰り返し、それでもダメならWarm Resetを行い、それでもダメだとLink Down(ここで例えばHostからDeviceに、USB 3.0を使わずにUSB 1.1/2.0で接続するようにリクエストを送って再起動といった事は、Specificationレベルではインプリメントされていないようだ)といったアプローチになるのではないかと思われる。

    (続く)

    関連したタグ

    新着記事

    特設サイトの情報

      人気記事

      一覧

      新着記事

      特別企画

      マイナビニュースマガジン