web-dev-qa-db-ja.com

USBキーボードは信号を送信するだけですか、それともコンピュータからも受信しますか?

キーボードはコンピュータからの信号を必要とせず、電源だけでいいのですか? ORシグナルを送信するだけでなく受信する必要がありますか?

編集:私はこの質問がこれほど多くの関心を生み出すとは思っていませんでした!私はそれを頼みました。キーボードが同時に2台のコンピュータに同じ文字を送ることができるように信号を複製するdoohickeyを作るという夢のような夢を見たからです。 (私が答えでできることから)コンピュータは他のデバイスのように積極的にキーボードを制御しているので、これは明らかに不可能です。実際に私はとにかくそれを構築するためのスキルを持っていなかったとして大したことではない!

82
Ne Mo

" ヒューマンインタフェースデバイス(HID)のデバイスクラス定義"バージョン11.1 "の仕様から。

LEDの状態とCAPS LOCK、NUM LOCK、SCROLL LOCK、COMPOSE、およびKANAイベントとの間の同期は、キーボードではなくホストによって維持されます。付録Bのキーボード記述子を使用している場合は、Set_Report(Output)要求を介して 5ビットの絶対レポートをキーボードに送信することでLEDの状態を設定します。

キーボードのLEDを変更するには、キーボードは変更するコマンドを受け入れます。そのため、これは「入力専用」デバイスではありません(つまり、ホストにデータを出力するだけです)。

そうは言っても、ホストとデバイス間のやり取りを必要とするすべてのUSBデバイスとのネゴシエーションおよび列挙プロセスがあります。あなたは「読み取り専用」のUSBデバイスを持つことはできません。

USBの前でさえも、キーボードを読む以外にもいくつかのことをしているので、PCのキーボードコントローラはコマンドを受け付けます( reference

キーボードが独立した周辺システムユニット(最新のデスクトップコンピュータなど)の場合、キーボードコントローラはキーに直接接続されていませんが、キーボードに埋め込まれたマイクロコントローラから何らかのシリアルインタフェースを介してスキャンコードを受け取ります。この場合、コントローラは通常、ワイヤを介してデータをキーボードに送り返すことによってキーボードのLEDも制御します。

IBM PC ATは、キーボードとのインタフェースにIntel 8042チップを使用しました。このコンピュータはまたIntel 80286の破片の虫のための対応策を実行するためにA20ラインへのアクセスを制御した。 1 キーボードコントローラーはまた使用されたCPUが保護モードから実モードに移行できるようにするには、ソフトウェアCPUリセットを開始します。 1 286では、CPUを保護モードから移行できませんでした。 CPUがリセットされない限り、実モードから実モードに切り替わります。 BIOSとオペレーティングシステムサービスがリアルモードでのプログラムによってのみ呼び出すことができたので、これが問題でした。

これらの動作は、この動作を期待する多くのソフトウェアによって使用されてきました。そのため、キーボードコントローラによるリセットの必要性がIntel 80386の切り替え機能によって不要になった場合でも、キーボードコントローラはA20ラインの制御とソフトウェアCPUリセットを実行し続けます。 CPUリセットなしで保護モードから実モード。

100
LawrenceC

USBデバイスのクラスに関係なく、機能するには双方向通信が必要です。すべてのUSBデバイス(またはUSB仕様では関数)は、受け入れまたは受信するバッファーと見なすことができるエンドポイントのセットとして表されます。データ。ただし、データを送信できるだけのエンドポイントでも、返信が可能になる前にトークンという特別なパケットを待機します。 enter image description here

からの画像はここ 、灰色のボックスはUSBホストを表し、白いボックスはUSB機能を表します)

USBホストがトークンパケットを使用して接続デバイスをポーリングすることで、いわゆる割り込み転送もこの方法で行われます。通常の(バルク)転送と割り込み転送の違いは、ポーリング時間が短く、後者の場合は保証されることです。それでも、すべての転送はホストによって開始されます。

55

この問題は、キーが押された(またはマウスが動いた)ときにUSBデバイスが自分自身で何かをPCに「送信」するという一般的な誤解を反映しているため、それほど注目されていません。実際、USBデバイスは、ホストからの対応する要求を受け取るまで何も送信しません。 1つの例外は、一時停止中のデバイスからのウェイクアッププロセスです。

USBは表面的には単純に見えますが、実際にはその機能は非常に複雑です。新しいUSBデバイスは、機能を開始する前に最初に「列挙」する必要があります。シーケンスは以下のとおりです。

  1. キーボードが接続された後、ホストポートは「接続ステータス」信号を受信します(LS信号の場合、D-はキーボードによってHIGHにプルされます)。

  2. その後、ホストはポートを「ポートリセット」モードに設定し、USB PHY(物理層ドライバ)はD +/D-ラインの下に「USB_RESET」を送信します(両方のラインが所定の時間LOWに駆動されます)。 FS/HSデバイスの「ポートリセット」に関する情報は、 こちら にあります。

  3. その後、ホストは1ms間隔でフレーム境界パケットの出力を開始します。通常の有線キーボードのような低速(LS)デバイスの場合、これらは単に「キープアライブ」パルスですが、FSの場合は特別なSOF - フレーム開始パケットが生成されます。これらのパケットはデバイスをアクティブモードに保ち、低電力のSUSPENDにならないようにします。

  4. その後、「列挙」が始まります。ホストはデバイス記述子を取得する要求を送信します。要求はデバイスアドレス "0"の "デフォルトパイプ"に送信されます。 [現時点では、そのようなデバイスは1つしかありません - キーボード - バス上の他のすべてのデバイスにはすでに個別に割り当てられたUSBアドレスがあるはずです。]

  5. キーボードは要求された情報を返すので、ホストはどの種類のドライバをロードすべきかを決定することができます。

  6. ホストは、デフォルトアドレスを新しく割り当てられたアドレスに変更するようデバイスに要求するトランザクションを送信します。

  7. その後、ホストはデバイスとの新しいラウンドの通信を開始します。これで、新しいアドレスが割り当てられます。他のすべての機器はこの通信を無視しているので無視します。

  8. ホストは他のいくつかの記述子からもっと多くの情報を読むかもしれず、そして最終的に "デバイス設定"を選択します。これで列挙のプロセスは終了です。

  9. USBデバイスクラスに応じて、ホストはデバイスとの通信を開始します。キーボードの場合、ホストは基本的に「IN」要求を定期的に送信し、基本的にデバイスをポーリングします(この定期的なパイプが「割り込み」パイプと呼ばれる場合でも)。キーボードのキーが押されたり押されたりしている場合、キーボードはこの情報を返します。そうでない場合、データはデバイスドライバに返されません。

要するに、すべてのUSBデバイスはUSBホストから固有のアドレスを受信する必要があり、2つのUSBホストはデバイスと通信するのが困難になります - バスの衝突、アドレスの不一致、キープレスデータのランダムな傍受など。 2つのUSBホスト間のデバイス。

17
Ale..chenski

他の答えが説明したように、USBはそれが働く方法の一部として双方向通信を必要とします。 PS/2は、双方向通信を可能にしながら、コンピュータにキーを送信するためにそれを必要としませんが、キーボードLEDを設定するためにそれを必要とします。

理論的には、PS/2信号を複製して2台目のコンピュータに送信し、コンピュータからのコマンドを破棄するようにデバイスを構築すれば、キーボードを複数のコンピュータに送信することはできますが、キーボードLEDは点灯しません。 Num Lock、Caps Lock、およびScroll Lockの状態(または、Linuxなどの他のLED状態の変更)に応答して、キーボードのLEDが代替目的で使用されることがあります。

そのようなプロジェクトがどれほど複雑になるかは私にはわかりません。私がPS/2を使って作業してからしばらく時間が経ったので、あなたが単純に2つのワイヤ/コネクタをつなぐことができるかどうか、あるいは一方向にコマンドを渡すのにそれらを破棄する他では。もしあなたがマイクロコントローラを持っていたのなら、キーボードのLEDコマンドを解釈してそれらを表示のために "結合"できるようにデバイスを作ることもできます。コンピュータ2では点灯しているがコンピュータ1では消灯している場合は、両方のコンピュータで点灯している場合は点灯し、両方のコンピュータで消灯している場合は消灯します。しかしそれはもっと進んでいるでしょう。

また、1台のコンピュータを別のコンピュータから、または2台のコンピュータを同じ机から制御できるようにすることなどを目的としている場合は、次の点を検討する必要があります。

  • VNC(ネットワークを介してあるコンピュータを別のコンピュータから制御することを可能にします)
  • RDP(Microsoft Windowsに組み込まれているがProfessionalバージョンが必要です)
  • KVM(2台のコンピュータ間で1セットの周辺機器を切り替えることを可能にするハードウェアの一部)
2
Micheal Johnson

USBキーボードより前のPS/2キーボードは、2つのデバイスに1つのキーボードを接続して動作させることが可能な、はるかに単純なプロトコルを使用していました。必要なのは単純なY接続だけです。

古いUSBキーボードにはまだPS/2エミュレーションモードが組み込まれています。これらの紫色のコネクタアダプタのいずれかを使用すると、コンピュータの背面にあるPS/2ポートに接続できます。そのため、2台のコンピュータでUSB/PS/2ブレイクアウトケーブルを使用してから、紫色のアダプタをUSBキーボードに接続するとうまくいく可能性があります。

新しいUSBキーボードはレガシーPS/2モードを削除したので、この場合はうまくいきません。

1
Tomuo