連載
» 2010年07月15日 12時00分 UPDATE

USB 3.0、スーパースピードを支える技術(4):USB 3.0のプロトコル層 (1/2)

次世代インターフェイス「USB 3.0」を技術面から掘り下げる連載。最終回はプロトコル層を解説する

[レクロイ・ジャパン 辻 嘉樹,@IT MONOist]
USB 3.0、スーパースピードを支える技術 レクロイ・ジャパン
いま、エレクトロニクス業界で最もホットな話題の1つである「USB 3.0」。本連載では、次世代インターフェイスとして期待されているこの高速通信規格の概要から、物理層を中心に技術的な面まで掘り下げて解説していく。(編集部)

 前回まで、USB 3.0スーパースピードで最も大きく変更された物理層の解説を行ってきましたが、今回は、プロトコル層の解説をしていこうと思います。

リンク層

 前回、USB 3.0スーパースピードでは、USB 2.0で用いられた同じ通信線を上りと下りを切り替えて通信する半二重通信から、上りと下りそれぞれに専用の通信線を持つ全二重通信へと大きく変更されたことを紹介しました。この全二重通信の採用により、上りと下りの切り替えに要するオーバーヘッドがなくなることや、パケットごとに同期パターンを持つ必要がなくなったことや、上りと下りの通信が同時に行えることなどの利点により5Gb/sの高速転送速度を十分に生かした高スループットの通信を実現しています。

 そして、USB 2.0との下位互換を維持しながら、大きく変更された物理層の差を吸収するためにリンク層が設けられました。リンク層は、以下のような役割を担っています。

  1. リンクのトレーニング
  2. パワーマネジメント
  3. フレーミング
  4. フロー・コントロールとバッファのマネジメント

 以下に、おのおのの役割を解説していこうと思います。

1. リンクのトレーニング

 これは、リンク先のデバイスと同期を取り、リンクを確立することを目的としていますが、第2回の物理層で解説したようにレシーバのイコライザは、リンクの減衰に応じてトレーニングを通して最適化しなければなりません。第3回の図6では、リンクの確立からループバックモードに入るまでの信号を示していましたが、通常の通信においてもほとんど同じ信号を使ってリンクをアクティブに設定します。異なるのは、TS1とTS2の内容だけです。こうした動きは、すべて第1回の図6に示されたLink Training and Status State Machineによって管理されています。

2. パワーマネジメント

 全二重通信においては、リンクがアクティブな状態ではデータの送受信が行われないアイドル状態でもアイドル信号を使って通信が続けられています。このことは、受信器が常に同期を維持している状態なので、USB 2.0のようにパケットの最初に同期パターンを持つ必要がないというメリットがありますが、5Gb/sもの高速通信を維持するにはそれなりの電力を必要とします。従って、第1回で紹介したように、きめ細かなパワーマネジメントが重要で、必要のないデバイスは通信を止めて低電力状態に行えるようになっているのです。USB 2.0では、アクティブとサスペンドの切り替えで電力管理を行っていましたが、USB 3.0スーパースピードでは、表1のように2種類のアイドル状態が追加されています。

photo 表1 USB 3.0スーパースピードでは2種類のアイドル状態が追加

 リンク層ではパワーマネジメント用のリンク・コマンドとして、LGO_UX(U1、U2、U3への移行要求)、LAU(移行要求の承認)、LXU(移行要求の拒否)、LPMA(LAUの受信通知)が用意されています。このようにパワーマネジメントがリンク層で管理することができるので、上位のプロトコル層やアプリケーション層で管理する手間が省けます。

3. フレーミング

 USB 3.0スーパースピードの信号が全二重通信であり、リンクがアクティブな状態ではデータ通信がなされない間(ロジカル・アイドル)であっても、5Gb/sでの通信が続けられていることはすでに解説したとおりです。USB 2.0の通信ではパケットはバースト状に現れるので電気的に信号振幅を判定して検出することができますが、USB 3.0スーパースピードでは同様の方法が使えないのは明らかです。そこで、ロジカル・アイドル状態と有意なデータを区別するために、ある決まった枠にはめ込んだ構造にします。この構造をフレームと呼びます。

8b/10b

 8b/10bコーディングは、リンク層ではなく物理層の役割とされていますが、フレーミングと関連するので少しここで解説しておきます。USB 2.0でもUSB 3.0スーパースピードでも同期を取るためには、受信器のクロック・リカバリ回路の動作が重要になります。USB 2.0では、データはNRZI(Non Return to Zero Invert)を使って変換されますが、元のデータで1が続くと信号の極性が反転しないため、クロック・リカバリ回路で同期が取れなくなり、これを避けるために、6個以上1が続かないようにスタッフ・ビットを入れることになっています。USB 3.0スーパースピードでは、NRZIではなくNRZ(Non Return to Zero)が使われているため、0または1が連続すると同様の問題が発生します。そこで、0または1が連続する数(Run Length)を制限するために8b/10bコードを用いて8ビットのデータを10ビットのコードに変換します。8ビットのデータは256種類あり、10ビットのコードは1024種類ありますが、この1024種類のコードのうち、0または1が続く数が少なく、かつ0と1の数がほぼ同数のコードを選んで、8ビットのデータに割り当てているものです。図1には8b/10bによって0または1の連続する数が制限される様子を示しています。

photo 図1 8b/10bによって0または1の連続する数が制限される様子

 ほかにもいくつかルールがありますが、詳述することはこの記事の目的ではありませんのでほかに譲るとにします。こうして変換されたコードはレシーバで安定的に同期を取ることができるようになりますが、……1100111101011100……のように流れてきたデータでどれがbit0かを判定するには、何か目印が必要です。8b/10bコードでは、データに割り当てたDコード以外にKコードと呼ばれる特殊コードを用意しています。最も有名なのはK28.5と呼ばれるコードですが、流れてきたデータ列の中にこのコードを見つけると、見つけた位置を基点としてデータ列を10ビット単位で区切ることができます。後は、10ビットごとに10b/8b変換して元のバイトデータに変換することができます。

フレーム

 USB 3.0スーパースピードでは、USB 2.0の全トランザクション・タイプをサポートしますが、物理層が異なるので、その動きが若干異なっています。

INトランザクション

 USB 2.0では、図2のようにINトークン・パケットをホストが流し、これに対応してデバイスがINトークン・パケットを正しく受信すると、データ・パケットを返します。ホストはデータ・パケットを正しく受信するとACKパケットを返して終了となります。

photo 図2 USB 2.0では、ホストが流したINトークン・パケットを正しく受信するとデータ・パケットを返す

 USB 3.0スーパースピードでは、INトークン・パケットはなくなりACKになっています。データはData Header PacketとData Packet Payloadが合体されて送信されます。基本的にはUSB 2.0の動きとほぼ同様の動きに見えますが、デバイスは上り専用に通信線を持っているので、ホストに対してERDY(End Point Ready)を発行して準備完了を知らせることができます。また、リンク層に下って見るとERDYやACKを含めてすべてのパケットを通信するには、それぞれフレームにしなければいけません。つまり、どこからパケットが始まってどこでパケットが終わるかを示す構造体(フレーム)にして送らなければならないのです。

 例えばDPPは、Data Packet Payloadの始まりを知らせるために、K28.2コード(SDP)3つに続いてK23.7コード(EPF)をデータの前に付けてパケットの始まりを、データの後ろにはCRC-32とK29.7(END)3つに続いてK23.7コード(EPF)を付けてパケットの終わりをそれぞれリンク層に知らせます。ERDYやACK、DPPも同様に始めと終わりを示すコードを前後に取り付けたフレームにして通信しています。リンク層で見ると、図3のようにフレームにしてデータの通信を行い、必要な情報をプロトコル層に受け渡しをしています。

photo 図3 フレームにしてデータの通信を行い、必要な情報をプロトコル層に受け渡す

 これを、プロトコル・アナライザで観測すると図4のように見えます。

photo 図4 プロトコル・アナライザで観測した様子
       1|2 次のページへ

Copyright© 2017 ITmedia, Inc. All Rights Reserved.