
私が見つけた最も高速な USB キーボードは、1000 Hz ポーリングの USB 2.0 を使用しています。
映画を観ていて、何時間もこのキーボードに触れていない場合、往復の USB 通信は本当に 1 ミリ秒ごとに繰り返されるのでしょうか? それとも、通常は何らかの USB スリープ状態 (例: 1 Hz ポーリング) に入るのでしょうか?
私の理解つまり、1 ミリ秒ごとに、PC は IN 要求で処理を開始し、キーボードは DATA 応答 (「キーが押されていません」というメッセージ) を送信し、PC は ACK 応答を送信します。
それで、私はこれら全てが無駄に思えるのでこの質問をします...でも、大したことではないのかもしれません。
(この質問は通常のWindows PCに関するものですが、Androidデバイスについても興味があります。ちなみに、PS/2キーボードに触れていない場合、キーボードは PS/2 ケーブルを介して通信をやり取りしませんが、間違っていたら訂正してください。
答え1
USBキーボードのポーリングは、使用しないと通常は遅くなりますか?
いいえ、システムはキーボードが押されたかどうかを判断できません。"使用されていない"事前に。
ユーザーはキーボードを使用していないことを認識していますが、システムはユーザーの意図を検出できません。
接続されているすべてのデバイスに一貫性のあるタイムリーなサービスを保証するには、USB バス上のデバイスのポーリングが必要です。
イベント駆動型スキーム (割り込みの使用など) では、優先度の低いデバイスやアクティビティの少ないデバイスのリソース不足を回避するために、より複雑な適応型の回避策が必要です。
... USB 通信の往復は本当に 1 ミリ秒ごとに繰り返されるのでしょうか?
はい、それが共有メディア上での双方向通信のための USB プロトコルの定義です。
または、通常は何らかの USB スリープ状態 (例: 1 Hz ポーリング) に入りますか?
いいえ。
バスがアイドル状態であれば、ポーリングしてもペナルティはありません。
適応レート ポーリングは、複雑さが増すと実装できますが、それに応じて応答時間も低下します。
このポーリングは通常、USB ホストの CPU ではなく、主にホストの USB コントローラによって実行されることに注意してください。このポーリングは、PC プロセッサまたは OS に最小限の影響または負荷を与えます。
USB は、ハードウェアとソフトウェアに実装される標準です。OS ソフトウェア側の実装は、Windows や Android を含むどの OS でも同様であると予想されます。
例えば、USBデバイスのポーリングレートはデバイス自体によって指定され、ホストOSによって決定されるものではありません。
このポーリングレートは、エンドポイント記述子、範囲は「低速/全速デバイスの場合は 1ms、高速デバイスの場合は 125us」です。
PS/2キーボードは、キーボードに触れなければPS/2ケーブルを介して通信することはないと思います。
PS/2 インターフェイスはクロック ラインを使用して半二重通信の方向をネゴシエートしますが、USB はマスター/スレーブの時間プロトコルに依存する共有の半二重バスです。PS/
2 デバイスは、PC ホストがクロック ラインを低く駆動して PS/2 デバイスの送信を強制的に停止しない限り、いつでも送信できます。
答え2
映画を観ていて、何時間もこのキーボードに触れていない場合、往復の USB 通信は本当に 1 ミリ秒ごとに繰り返され続けるのでしょうか? それとも、通常は何らかの USB スリープ状態 (例: 1 Hz ポーリング) に入るのでしょうか?
毎ミリ秒、PCはINリクエストで物事を開始する必要があります
実際には、「通信」は毎ミリ秒ごとに発生するわけではありません。ただし、低速 USB ホストが毎ミリ秒ごとに「キープアライブ」でバスに継続的にパルスを送信するのは事実です。これは「USB フレーム」と呼ばれます。したがって、ここでは実際の通信は発生しません。
あなたが正しく指摘したように、「通信」はホストがポーリング (IN) 要求を送信したときにのみ発生します。Windows の通常のポーリング レートは 8 ミリ秒で、8 フレームごとに 1 回ですが、状況によって異なります。あなたが言ったように、「ゲーミング キーボード」などの専用ドライバーが使用されている場合、ポーリングは 1 ミリ秒ごとに発生する可能性があります。
はい、確かに無駄なプロセスです。ほとんどのポータブル デバイスが省電力技術を採用しているのはそのためです。ポーリング レートを遅くする代わりに、標準の USB_SUSPEND 関数を使用します。内部アルゴリズムによってキーボードやマウスから新しい情報が出力されていないと判断された場合、ホストは各 HID (ヒューマン インターフェイス デバイス) を選択的にサスペンドします。SUSPEND 状態に入るまでの待ち時間は 8 ミリ秒です。私の記憶が正しければ、非アクティブ タイムアウトは約 200 ミリ秒で、その後 USB ワイヤは SUSPEND 状態になり、トグルは発生しません。
キーボードやマウスに触れると、「Wake-UP」イベントが生成され、ホストは USB トラフィックと通信ポーリングを再開します。はい、この再開には通常のポーリングよりも長い時間 (15 ~ 20 ~ 50 ミリ秒) かかり、システム全体がある程度スリープ状態になるとさらに長くなるため、ユーザーは「キーボードの遅延」に不満を感じる可能性があります。ただし、このアクティブに管理されたサスペンド機能により、バッテリー寿命が節約されます。
デスクトップ PC で映画を観るだけであれば、電力消費はそれほど問題にはならず、キーボードのポーリングが止まることはないと思われますが、より積極的な電力節約を可能にする構成設定が存在する可能性もあります。
USB とは異なり、PS/2 インターフェイスはキーボード/マウス側から通信トラフィックをアクティブに生成できるため、ホストからのポーリングがなくてもインターフェイスは非アクティブなままになります。