3.0)は幅広い分野で普及しているUSBの次世代規格です。2.0で用いられた同じ通信線を上りと下りを切り替えて通信する半二重通信から、上りと下りそれぞれに専用の通信線を持つ全二重通信へと大きく変更されました。この全二重通信の採用により、上りと下りの切り替えに要するオーバーヘッドがなくなることや、パケットごとに同期パターンを持つ必要がなくなったことや、上りと下りの通信が同時に行えることなどの利点により5Gb/sの高速転送速度を十分に生かした高スループットの通信を実現しています。2.0との下位互換を維持しながら、大きく変更された物理層の差を吸収するためにリンク層が設けられました。リンク層は、以下のような役割を担っています。リンクのトレーニングパワーマネジメントフレーミングフロー・コントロールとバッファのマネジメント以下に、おのおのの役割を解説していこうと思います。リンクのトレーニングこれは、リンク先のデバイスと同期を取り、リンクを確立することを目的としていますが、レシーバのイコライザは、リンクの減衰に応じてトレーニングを通して最適化しなければなりません。リンクの確立からループバックモードに入るまでの信号を示していましたが、通常の通信においてもほとんど同じ信号を使ってリンクをアクティブに設定します。異なるのは、TS1とTS2の内容だけです。Machineによって管理されています。パワーマネジメント全二重通信においては、リンクがアクティブな状態ではデータの送受信が行われないアイドル状態でもアイドル信号を使って通信が続けられています。2.0のようにパケットの最初に同期パターンを持つ必要がないというメリットがありますが、5Gb/sもの高速通信を維持するにはそれなりの電力を必要とします。従って、第1回で紹介したように、きめ細かなパワーマネジメントが重要で、必要のないデバイスは通信を止めて低電力状態に行えるようになっているのです。3.0スーパースピードでは、表1のように2種類のアイドル状態が追加されています。(移行要求の拒否)、LPMA(LAUの受信通知)が用意されています。このようにパワーマネジメントがリンク層で管理することができるので、上位のプロトコル層やアプリケーション層で管理する手間が省けます。通信が続けられていることはすでに解説したとおりです。3.0スーパースピードでは同様の方法が使えないのは明らかです。そこで、ロジカル・アイドル状態と有意なデータを区別するために、ある決まった枠にはめ込んだ構造にします。この構造をフレームと呼びます。8b/10b8b/10bコーディングは、リンク層ではなく物理層の役割とされていますが、フレーミングと関連するので少しここで解説しておきます。3.0スーパースピードでも同期を取るためには、受信器のクロック・リカバリ回路の動作が重要になります。Invert)を使って変換されますが、元のデータで1が続くと信号の極性が反転しないため、クロック・リカバリ回路で同期が取れなくなり、これを避けるために、6個以上1が続かないようにスタッフ・ビットを入れることになっています。Zero)が使われているため、0または1が連続すると同様の問題が発生します。Length)を制限するために8b/10bコードを用いて8ビットのデータを10ビットのコードに変換します。ビットのデータに割り当てているものです。図1には8b/10bによって0または1の連続する数が制限される様子を示しています。8b/10bによって0または1の連続する数が制限される様子ほかにもいくつかルールがありますが、詳述することはこの記事の目的ではありませんのでほかに譲るとにします。して変換されたコードはレシーバで安定的に同期を取ることができるようになりますが、・1100111101011100・のように流れてきたデータでどれがbit0かを判定するには、何か目印が必要です。8b/10bコードでは、データに割り当てたDコード以外にKコードと呼ばれる特殊コードを用意しています。K28.5と呼ばれるコードですが、流れてきたデータ列の中にこのコードを見つけると、見つけた位置を基点としてデータ列を10ビット単位で区切ることができます。後は、10ビットごとに10b/8b変換して元のバイトデータに変換することができます。2.0の全トランザクション・タイプをサポートしますが、物理層が異なるので、その動きが若干異なっています。2.0では、図2のようにINトークン・パケットをホストが流し、これに対応してデバイスがINトークン・パケットを正しく受信すると、データ・パケットを返します。ホストはデータ・パケットを正しく受信するとACKパケットを返して終了となります。3.0スーパースピードでは、INトークン・パケットはなくなりACKになっています。Payloadが合体されて送信されます。Ready)を発行して準備完了を知らせることができます。リンク層に下って見るとERDYやACKを含めてすべてのパケットを通信するには、それぞれフレームにしなければいけません。どこからパケットが始まってどこでパケットが終わるかを示す構造体(フレーム)にして送らなければならないのです。Payloadの始まりを知らせるために、K28.2コード(SDP)3つに続いてK23.7コード(EPF)をデータの前に付けてパケットの始まりを、データの後ろにはCRC-32とK29.7(END)3つに続いてK23.7コード(EPF)を付けてパケットの終わりをそれぞれリンク層に知らせます。ERDYやACK、DPPも同様に始めと終わりを示すコードを前後に取り付けたフレームにして通信しています。リンク層で見ると、図3のようにフレームにしてデータの通信を行い、必要な情報をプロトコル層に受け渡しをしています。フレームにしてデータの通信を行い、必要な情報をプロトコル層に受け渡すこれを、プロトコル・アナライザで観測すると図4のように見えます。フロー・コントロールとバッファのマネジメント前ページのように、リンク層ではフレーミングされたパケットを処理してプロトコル層に引き渡していますが、ここではフレーム・レベルの通信の制御を行っています(リンク・コマンドを使って制御)。LGOOD_n(フレーム受信成功の通知)、LBAD(フレーム受信失敗の通知)、LRTY(再送の通知)、LCRD_x(バッファ準備の通知)、LUP(リンク・アクティブの通知上りのみ)などです。上記の例では、ACKやDHPのフレームに対してハンドシェイクが行われます。Packetで知らせます。LCRD_Dを送ります。LGOOD_5がデバイスから返送され、続いてバッファの準備を知らせるLCRD_Bが返送されます。Packetの受信に成功すると、そのAcknowledgeとしてLGOOD_1返送され、続いてバッファの準備を知らせるLCRD_Aが送られます。Packetの受信をLGOOD_6で知らせ、バッファの準備をLCRD_Cで知らせます。0〜7まで順番に使われます。LCRDの後の文字は、バッファの番号に相当し、A〜Dまで順番に使われます。ホスト側とデバイス側は独立してナンバリングが行われていますので、ホストがLGOOD_0を送った後にデバイスがLGGOD_5を送っているのは特におかしなことではありません。リンク・コマンドによるフレームのフロー・コントロールこれをプロトコル・アナライザで見るには、リンク・コマンド・レベルまで見るように設定すればよく、その結果は、図6のようになりフレーム・レベルでのハンドシェイクの様子が分かります。3.0スーパースピードのプロトコルを理解する近道となります。2.0ではホストが接続されたすべてのデバイスに一斉に送信(ブロードキャスト)し、応答すべきと判断したデバイスが返信する方式を取っていました。2.0では、応答すべきと判断したデバイスが返信する方式を取っていたこれは、不必要なデバイスに対しても送信するということなので、電力管理という意味でも非効率でした。3.0スーパースピードでは、通信を行う場合にルート・ストリングを指定して対象のデバイスにのみ送信(ユニキャスト)する方式を取っています。ルート・ストリングは、4つのサブ・ストリングからなっており、それぞれがハブのルートを指定しています。2.0では半二重通信であり、その通信の主導権はホストが握っているので、通信したいデバイスはホストからの問い合わせ(ポーリング)がなければ、通信することができません。3.0スーパースピードでは全二重通信となり上り専用の通信線があるために、デバイスから通信の要求ができるようになりました。そのため、ポーリングは廃止されています。3.0スーパースピードではデータ・ストレージ・デバイスの転送の効率化を主目的として、ストリームがバルク転送で利用できるようになっています。これも、5Gb/sの高速通信でリッチなコンテンツを効率的に転送するための工夫です。アイソクロナス転送にも改良が加えられており、リッチな画像コンテンツの利用をサポートしています。互換性があるため、すべてのユーザーがスムーズに導入できます。3.0はかなりの難題です。データ・リンクには、新しい設計アプローチ、高品質の製造工程、包括的なテストおよびデバッグ手順が要求されます。レートする機能があります。