本当に「USB通信プロトコル」はありますか?


24

ウィキペディアによると、USB:

コンピュータと電子デバイス間の接続、通信、および電源供給のためにバスで使用されるケーブル、コネクタ、および通信プロトコルを定義します

しかし、本当に「USB 通信プロトコル」はありますか?私の理解は:

  1. USBデバイスをマシンに接続します(Ubuntuまたは任意の種類のLinuxなど)
  2. Linuxはそのデバイスのデバイスドライバーを見つけ(何らかの理由で知っていればボーナス!)、それをロードします
  3. これでデバイスが接続されました /dev/theDevice
  4. ユーザー空間のアプリが読み書きできるように/dev/theDeviceなり、ドライバーが下位のデバイス/ハードウェアへの低レベルIOを処理

私には、このフローのどこにも「USB通信プロトコル」は表示されません。私の理解が正しければ、USBはPCとデバイス間のケーブルと電気接続にすぎません。

私はここで間違っていますか?USBは実際に上記のフローを強調するある種の低レベルプロトコルを実装していますか?もしそうなら、それは何ですか、それは30,000フィートのビューでどのように機能しますか?


45
「ドライバは、基礎となるデバイス/ハードウェアへの低レベルIOを処理します」これは、標準にある通信プロトコルを使用してこれを行います。
EBGreen

29
ああ...質問を読んで、「本当に「USB通信プロトコル」はありますか?」答えはイエスです。実際の通信プロトコルが何かを知りたい場合は、単に標準を読んでください。または、リンクしたWikiページのセクション11を読んでください。
EBGreen

6
「USBは、PCとデバイス間の単なるケーブルおよび電気接続です」。イーサネットケーブルは、PCとスイッチ/ルーター/その他の間の単なるケーブルです。それでも、このケーブルを介して通信し、有用な処理を行うために使用されるプロトコルがいくつかあります。
ysdx

13
「Linuxはそのデバイスのデバイスドライバーを見つけます」Linuxは、どのデバイスがもう一方の端に接続されているかを検出できると思いますか。おそらく、一般的なプロトコルですか?
支出者

4
@Ramhound「これらの通信プロトコルは、少なくともイーサネットの場合、標準から独立しています。」これは誤りです。イーサネットプロトコル(物理層とMAC層の両方)は、IEEEイーサネット標準(具体的には802.3標準)で定義されています。もちろん、イーサネットプロトコル以外のものをカテゴリ6ケーブルで送信することも可能ですRJ-45コネクタですが、その時点ではイーサネットではありません。これは、たとえば、非VoIP電話システムの一般的な慣行です。
-reirab

回答:


47

はい、USBプロトコルを参照してください

私が理解しているように、USB仕様は、階層化されたプロトコルとデバイスプロファイルの複雑なセットを定義しています。

たとえば、USBデバイスは、大容量記憶装置、キーボード(またはヒューマンインターフェイスデバイスなど)などの高レベルテンプレートに準拠し、汎用デバイスドライバーによって管理できます。一部のUSBデバイスは、OSの低レベルUSBサポートがデバイス固有の高レベルドライバーが必要であることを認識できるように、低レベルで通信できます。


30

質問:動作中の低レベルのUSB通信プロトコルはありますか?

回答:

はい。USB仕様には、ビットレベルでのバスの使用方法を定義するUSBプロトコルが含まれています。これは、高レベルのプロトコル、つまり大容量記憶装置、HIDなどの基礎となる「低レベル」プロトコルです。

USBプロトコルの動作の詳細については、このOSDev wikiが役立ちます。シーケンス図を使用して、USBプロトコルごとにさまざまなデータトランザクションを説明する別の興味深い説明を次に示します。

ボーナス質問:Linuxはそのデバイスのデバイスドライバーをどのように見つけてロードしますか?

ボーナス回答:

Linuxでは、USB対応カーネルを使用している場合、USB仕様により、動作中のUSBデバイスがハードウェアカーネルを介して検出されます。ハードウェア側では、検出はUSBホストコントローラーによって行われます。次に、カーネル内でホストコントローラードライバーが引き継ぎ、ワイヤ上の低レベルビットをUSBプロトコル形式の情報に変換します。この情報は、カーネルのUSBコアドライバーに入力されます。

私は、この優れたOpensourceforuの記事から言い換えました。この記事には、Linuxコンテキストでのあなたの質問についての詳細と明確さがあります。


7
「ボーナス質問」があなたにとって「報奨金」を意味することを願っています。
-dotancohen

@projectdp-プライマリリファレンスからの情報の一部を回答自体に入れると、非常に便利です。
ラムハウンド

@Ramhound-ご意見をお寄せいただきありがとうございます。回答をより便利な方法で書き直しました。リソースからより多くの情報を追加することに関して、それは質問に関連するものを見たいですか?
projectdp

14

他のほぼすべてのタイプの通信インターフェイスと同様に、USBはプロトコルスタックとして実装されます。。すべてまたは複数のタイプのデバイスに共通するこのスタック内のレベルは、USB標準自体によって定義されます。これにより、互換性が可能になり、各デバイスが冗長なプロトコル設計を行うことができなくなります。さらに、プロトコルの各層は、次の層が心配する必要のない詳細を抽象化します。したがって、実際にデバイス固有のレイヤーを作成するときは、エンドポイントAからエンドポイントBにデータを取得する汎用の「送信」および「受信」機能が必要です。デバイス設計者は、気にする必要はありません。それがどのように起こるか。さらに、プロトコルスタック内の下位レベルは、上位のレイヤーへの共通インターフェイスを公開している限り、実装を変更できます。このように、プロトコルスタックの一部が変更されても、スタックの残りの部分は必ずしも変更する必要はありません。これはプロトコルスタックのいくつかの低レベルで使用されています。一般的に言えば、スタックの下の各連続層は、メッセージが送信されるときに、自身のペイロードフィールド内で次に高い層によって生成されたメッセージをカプセル化します。メッセージが受信されると、各レイヤーはそのレイヤーに関連する部分を剥離し、そのペイロードをスタックの次の適切なレイヤーに転送します。これは、USBだけでなく、ほぼすべての通信バスにも当てはまります。たとえば、TCP / IP / Ethernetスタックがおそらく最も一般的に使用されています。与えられたレイヤーが一般的に担当するタスクは、OSIモデルなどのモデルで説明されています。

USBには、電圧状態/タイミングなどを定義する物理層プロトコルがあります。ワイヤ上でどのように解釈されるべきか。このプロトコルは、明らかに、特定のデバイスに固有ではなく、USB標準自体の一部である必要があります(特に、ホストは特定のUSBポートに差し込まれるデバイスの種類を知る方法がないため)。

次に、誰がいつバスで話すことができるかを説明するために使用されるバス管理プロトコルがあります。これは、OSIモデルではメディアアクセスレイヤーと呼ばれます。USBでは、この層は「ホストから指示されたときにデバイスが送信できる」と要約できるため、USBのこの層には特に複雑なプロトコルはありません。

次に、データのパケットと、送信者から受信者へのルーティング方法を記述するための標準プロトコルがあります。この層は、USB標準自体の一部である必要もあるため、特定の種類のデバイスがホストによって実際に認識される前に、どの種類のデバイスが接続されているかを検出するための初期通信を行うことができます。この層に特定のIDを持つ各デバイスに加えて、USBにはエンドポイントIDの概念もあります。これにより、特定のデバイスが複数のUSBエンドポイントを持つことができ、それらは標準のUSBスタックによって多重化および逆多重化されます。これは、標準のTCP / IPスタックによってソケットが多重化および逆多重化されます。アプリケーションは、これらの各エンドポイントを個別のデータストリームとして扱うことができます。

最後に、デバイス自体に対して定義されたプロトコルがあります。実際には、大容量記憶装置、マウス、キーボードなどの一般的なユースケース用のUSB標準の一部として含まれているいくつかの一般的な事前に設計されたものがあるため、すべてのデバイスメーカーが再発明する必要はありませんホイール。ただし、より複雑なデバイスは、この層で独自のカスタムプロトコルを自由に設計できます。特定の伝送に対するこの層の出力は、前の層でデータパケットのペイロードとして渡されます。十分に複雑なデバイスの場合、プロトコルのデバイス固有の部分自体が複数の独立したレイヤーに分割される場合がありますが、下位レベルはそれについて知ったり気にしたりする必要はありません。知っておく必要があるのは、ホストから特定のデバイスエンドポイントまたは特定のデバイスエンドポイントからホストに特定のバイトセットを渡す必要があるということだけです。繰り返しますが、レイヤー間に標準インターフェースがあることで懸念を分離できるため、あるレイヤーは別のレイヤーの内部動作を気にする必要はありませんが、すぐ上のレイヤーまたはスタック内のその下。


9

実際には、相互作用する関連する一連の通信プロトコルがあります。

最下位レベルには、バイトのパケットがシリアル接続を介して送信される方法を説明するプロトコルがあります。これはすべてのUSBデバイスに共通です(ただし、USB2とUSB3では異なります)。

送信された最初のパケットの1つは、デバイスに自身の説明を要求します。鶏と卵の問題を防ぐために、識別プロトコルはすべてのUSBデバイスで同じです。OSはこの識別を使用して、正しいドライバーをロードできます。

さらに別のレベルでは、USBはバスであるため、複数のデバイスが帯域幅を共有する必要があります。これは、各デバイスが通信できるときとできないときを通知するプロトコルがあることを意味します。すべてのUSBデバイスはこれに準拠する必要があるため、これを調整するために共通のプロトコルが使用されます。

最後に、多くの単純なUSBデバイスは非常に単純であるため、デバイスのクラス全体(マウス、キーボード、ストレージ、イーサネットアダプターなど)を記述する追加のプロトコルがあります。ほとんどのデバイスは、これらの機能プロトコルのゼロまたは1つをサポートします。


「USBはバスであり、複数のデバイスが帯域幅を共有する必要があることを意味します」 -OPが質問にポイントツーポイントのセットアップのみを使用するときに見落としているポイント。2つ(またはそれ以上)のUSBデバイスがホストPCへのケーブルを共有できるため、プロトコルが必要であると推測できます。
おがくず

@sawdustまったく(ポイントツーポイントでも)機能するため、プロトコルがあると推測できます。たとえば、標準プロトコルがなければ、デバイス検出は不可能です。
reirab

確かに通信規格があり、その中核にシリアル通信がありUniversal Serial Busます。
ラムハウンド

@Ramhoundはい、メモリインターフェイスを除くすべての最新のバス設計と同様に、USBはデータ転送にシリアル差動ペアを使用します。USB <USB 3は、2つの追加の差動対有しながら= 2.0は、単一の差動対を有していた(5 Gbpsで全二重通信をそれぞれの方向を可能にするのSuperSpeed送信とのSuperSpeed受信するために別のものを、。)
reirab

シリアルバスを標準のコアに向けると思ったのですが、作者はこの事実を知らなかったので、質問です。
ラムハウンド

5

おそらく、答えの一部は、「通信プロトコル」というフレーズの定義にあります。同じソース(Wikipedia)にアクセスすると、次のような役立つ情報が見つかります。

  • 通信を行うには、プロトコルを合意する必要があります。
  • 通信システムは、メッセージを交換するために明確に定義されたフォーマット(プロトコル)を使用します。
  • プロトコルは、通信の構文、セマンティクス、および同期を定義する必要があります。
  • したがって、プロトコルはハードウェア、ソフトウェア、またはその両方として実装できます。

それを考える簡単な方法は、プロトコルが事前に定義され、何かを行う方法に同意していることです。この場合、かとは、USB接続デバイスとの間でデータをやり取りする方法です。ハードウェア的には、各ピンには事前に定義された電圧レベルと使用プロトコルがあり、各タイプのデバイスには各ピンごとに事前定義された使用プロトコルがあり、各データパケットには事前定義された構文とデータ形式があります。通信ハンドシェイクプロトコルも組み込まれています。これらはすべて、USBデバイス(別名USBプロトコル)を使用するための一連の標準の一部です。USB Implementers Forum、Incのメンバーによって決定(設計、提案、議論、改訂、最終的に合意)されます。

そうです、そこにある USBプロトコル、またはより正確に存在している多数の事前定義されており、USBプロトコルに合意別のUSB用途に。


1
1.通信のプロセスには、(少なくとも)3つの要素が含まれます。(1)エンコード/送信 AND(2)受信/デコード(3)_情報_(ランダムノイズではなく)。これらの3つの要素のいずれかが欠落している場合、プロセスは失敗します。フィードバック、媒体(チャネル)、コンテキストなどの追加要素も存在する場合があります。情報源:私の学位の1つはコミュニケーション研究です
-OMY

1
2. SETIはコミュニケーションではなく探索と発見に関するものです。本物の製造信号を検出したとしても、それを理解したり送信者と通信できるという保証はありません。出典:[SETI Mission Statement] [1] [1]: seti.org/about-us
OMY

1
3.ブラウザー間の互換性は通常、(a)ブラウザーの製造元がプロトコルに従わない、または(b)欠陥のある実装を引き起こす不適切に記述されたプロトコルによって引き起こされます(例:悪名高いIEボックスモデルのバグを検討し、< quirksmode.org>も参照してください)。プロトコルを改善する必要があるため、HTML 5とCSS 3を使用することになりました。SOURCE:私自身のWeb開発会社を長年にわたって所有および運営していました
OMY

1
4.最初に、周波数で「同期」する無線信号はAM(振幅変調)プロトコルを使用します。FM(周波数変調)ラジオ信号は、時間積分に「同期」します。FMシステムのプロトコルには、情報を処理するための固定要素と動的要素が含まれます。動的な要素は可変周波数設定であり、事前定義された限定された周波数範囲に制限されています。
-OMY

1
固定要素は、信号を変調および復調するための数式です。周波数が何であれ、これらの式は一定であり、アナログハードウェアまたはデジタルソフトウェアを介して信号を処理するために実装できます。情報源:エレクトロニクス愛好家としての個人的経験[Wikipedia] [1] [1]:en.wikipedia.org/wiki/Frequency_modulation
OMY
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.