実際のUSB通信プロトコルはありますか?
私たちのほとんどは私たちのUSBデバイスにあまり多くの考えを与えることはありません、私たちはただそれらを接続してそれらを忘れるだけです。しかし、あなたがUSBのしくみについてもっと知りたいと思う好奇心旺盛なタイプの場合はどうしますか?本日のSuperUser Q&A投稿には、興味をそそられる読者の質問に対する答えがあります。.
本日の質疑応答セッションは、コミュニティ主導のQ&A Webサイトのグループである、Stack Exchangeの下位区分であるSuperUserの好意により提供されます。.
Evilelka Kowalski(Flickr)による写真提供.
質問
SuperUserリーダーのsmeebは、実際のUSB通信プロトコルが本当にあるかどうかを知りたがっています。
ウィキペディア、USBによると:
- コンピュータと電子機器間の接続、通信、および電力供給のためにバスで使用されるケーブル、コネクタ、および通信プロトコルを定義します。.
しかし、実際にはありますか USB通信プロトコル? 私の理解はそれです:
- あなたはUSBデバイスをマシンに接続します(例えばUbuntuや他の種類のLinux).
- Linuxはどういうわけかそのデバイスのデバイスドライバを見つけます(あなたが知っていればボーナス!)それをロードします.
- これで、デバイスは下に接続されました / dev / theDevice.
- ユーザースペースのアプリが読み書きできるようになりました / dev / theDevice そしてドライバは基礎となるデバイス/ハードウェアへの低レベルの入出力を処理します。.
私が言うことができる限りでは、 USB通信プロトコル このフローのどこにも現れません。私の理解が正しければ、USBはPCとデバイス間の単なるケーブルと電気接続です.
私はここで間違っていますか? USBは実際に上記の流れを強調するある種の低レベルプロトコルを実装していますか?もしそうなら、それは何ですか、それはどのように30,000フィートのビューで動作しますか?
実際のUSB通信プロトコルはありますか?
答え
SuperUserの貢献者RedGrittyBrickとprojectdpが私たちに答えを持っています。まずはRedGrittyBrick:
はい(USBプロトコルを参照).
私が理解しているように、USBの仕様は、階層化されたプロトコルとデバイスプロファイルの複雑なセットを定義しています.
たとえば、USBデバイスは、大容量記憶装置、キーボード、ヒューマンインタフェースデバイスなどの高レベルテンプレートに準拠し、汎用のデバイスドライバによって管理できます。一部のUSBデバイスは、オペレーティングシステムの低レベルUSBサポートがデバイス固有の高レベルドライバが必要であることを認識できるように、低レベルで通信できます。.
projectdpからの回答が続きます。
質問
動作中の低レベルのUSB通信プロトコルはありますか、またそれは何ですか??
回答
はいあります。 USB仕様には、バスの使用方法をビットレベルで定義するUSBプロトコルが含まれています。これは、高レベルのプロトコルの基礎となる低レベルのプロトコルです(つまり、マスストレージ、HIDなど).
USBプロトコルの機能の詳細については、このOSDev Wikiが役立ちます。 USBプロトコルごとのさまざまなデータトランザクションを説明するためにシーケンス図を使用した別の興味深い説明があります。.
ボーナス質問
Linuxはどのようにそのデバイスのデバイスドライバを見つけてロードするのですか??
ボーナス回答
Linux上でUSB対応のカーネルを使用している場合、USB仕様により、正常に機能しているUSBデバイスがハードウェアとカーネルを介して検出されます。ハードウェア側では、検出はUSBホストコントローラによって行われます。その後、カーネル内でホストコントローラドライバが処理を引き継ぎ、ワイヤ上の下位ビットをUSBプロトコル形式の情報に変換します。この情報はカーネルのusbcoreドライバに読み込まれます。.
私は、この優れたOpensourceforuの記事から言い換えました。Linuxの文脈であなたの質問についてより詳細で明確にしてあります。.
以下で共有されているスレッドリンクを介して活気のある議論の残りをチェックアウトするようにしてください!
説明に追加するものがありますか?コメントで音を消す。他の技術に精通したStack Exchangeユーザーからの回答をもっと読みたいですか?こちらのディスカッションスレッドをチェックしてください。.