40

(仮想) シリアル ポートを介して PC と通信するデバイスに取り組んでいます。問題は、送信しているデータが Windows によって誤ってバス マウスとして認識されることがあるということです。その後、"Microsoft Serial Ballpoint" ドライバーが読み込まれ、マウス ポインターが画面上を飛び回り、ランダムにクリックし始めます。

少しグーグルで調べると、これはシリアル デバイスの古くてよく知られた問題であることがわかります。通常の回避策は、レジストリをハッキングして、問題のあるドライバーを無効にすることです。ただし、ユーザーからの要求は非常に多いため、アプリケーションがユーザーのレジストリをいじるのは避けたいと思っています。修正が Windows のバージョンに依存しており、ユーザーがバス マウスを使用している可能性がある場合は特にそうではありません。

代わりに、マウスとして誤認される可能性のあるデータを送信しないようにプロトコルを変更することで、問題を回避したいと考えています。唯一の問題は、避けるべきパターンがよくわからないことです。Microsoft のマウス プロトコルは、最初の MSB が設定され、最後の 3 つの MSB がクリアされている 4 バイトのパケットで構成されているようです。

7 ビット ASCII のみを送信するだけで十分でしょうか? として検出されることを心配する必要がある他のデバイスはありますか?

4

9 に答える 9

35

でこの問題に遭遇しWindows 7 Professional x64ましたが、レジストリに移動して次の値を編集することで解決しました。

Location: HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\sermouse  
Key: Start  
Value: 3

に変更Valueする4と、この問題が発生しなくなります。

すべての有効な開始値のリストを次に示します

0 Boot (loaded by kernel loader). Components of the driver stack for the boot (startup) volume must be loaded by the kernel loader.

1 System (loaded by I/O subsystem). Specifies that the driver is loaded at kernel initialization.

2 Automatic (loaded by Service Control Manager). Specifies that the service is loaded or started automatically.

3 Manual. Specifies that the service does not start until the user starts it manually, such as by using Device Manager.

4 Disabled. Specifies that the service should not be started.

reg edit コマンドは次のようになります。

REG ADD "HKLM\SYSTEM\CurrentControlSet\Services\sermouse" /V Start /T REG_DWORD /F /D 4

次に、コンピュータを再起動する必要があります。これで、正しく起動し、シリアル マウスを検出しようとしなくなります。

幸運を。

于 2012-06-13T01:34:38.717 に答える
8

Windows でのマウス検出は通常、serenum.sysフィルター ドライバーによって処理されることがわかりました。このドライバーは、シリアル プラグ アンド プレイと共にレガシー シリアル マウスのサポートを実装します。Microsoft は、ソースコードを WDK サンプルとして提供しています。

検出中、ポートは 1200-7-N-1 モードに切り替わり、200 ミリ秒以内に応答が期待されるDTR+をアサートし、失敗した場合は数回再試行します。RTS残念ながら、従来のマウスでは、1 つMまたは1B文字で十分に識別できます。

私たちの場合、プロトコルはこれらの文字を回避するために作り直され、現在は誤認されていないようです.

ただし、仮想 USB シリアル ポートを使用していましたが、従来のシリアル ポートの場合、異なるボー レートで送信されたものはライン ノイズのように見える傾向があるため、このアプローチはやや難しい場合があります。この場合、最も簡単な回避策はおそらく、既に提案されているように、迷惑な送信を行わないようにすることだと思います。

または、シリアル制御信号が実際に接続されているか、USB CDC デバイスによって傍受され、DTRまたはRTS信号を処理して出力を保留します。実際にプラグ アンド プレイ プロトコルを実装することは、さらに優れたオプションです。おそらく、制御信号が完全に補完されていない安価な RS232 ケーブルが周りにあると思われるため、このアプローチは依然として失敗する可能性があります。

于 2014-09-23T09:55:32.597 に答える
5

私もこの問題に遭遇し、FTDIドライバーの詳細プロパティ(デバイスマネージャーのCOMポートのプロパティ)で「シリアル列挙子」を無効にすることで修正しました。これについてはhttp://www.ftdichip.com/Support/Documents/AppNotes/AN_107_AdvancedDriverOptions_AN_000073.pdfで説明されています。

于 2015-02-04T21:38:35.440 に答える
4

私はこの Windows のバグに遭遇しました。このトピックに関する私自身の研究は次のとおりです。

Microsoft はこのバグを認識しています: http://support.microsoft.com/kb/819036 ツールのダウンロードから始めて、問題が解決するかどうかを確認してください。

  • プログラムをダウンロードしてインストールします。
  • C:\program\Microsoft comdisable\ のコマンド プロンプトから実行します。
  • comdisable /listプログラム実行時に書き込みます。
  • コンピュータのすべてのポートが表示されます。
  • xcomdisable /disable COMxはポート番号です。
  • コンピュータのすべてのポートに対してこれを行います。
  • リブート。

これはうまくいけば、普遍的な解決策として機能するはずです。

別の方法として、boot.ini をハッキングすることもできますが、これが Vista/Win 7 で機能するとは思えません。これを行う方法を説明した Cisco システムからのアプリケーション ノートがあります。上記で問題が解決しない場合は、お知らせください。

于 2012-02-13T09:28:28.470 に答える
1

「真の」シリアル ポートまたは USB ドングル (RS-232、RS-485 は関係ありません) を使用している場合、この問題は、最初に問題のシリアル ポートを端末または任意のアプリケーションで開くことで回避できます。あなた自身のために、接続を終了する前にデバイスを取り外すことにも注意を払う必要があります。

デバイス自体にはんだ付けされた FTDI チップを使用すると、逮捕されます。USB ソケットがどんなに滑らかに見えても、PCB 会議 Windows コンピュータにはんだ付けされた FTDI チップとペアになって独自に通信するデバイスは、使いやすさに合格しない可能性が高いという管理を説明するのに数ラウンドかかりました。キャビネットの上... (ありがたいことに、これらすべての条件が一緒になることは非常にまれで珍しいことです)

于 2014-09-22T18:54:15.357 に答える
1

これが役立つかもしれません: FTDI FT232RL で同じ問題が発生しました。PCB のハードウェアの問題であることがわかりました。

FTDI-Datasheet は、#RESET-Pin: アクティブ ロー リセット ピンについて述べています。これは、外部デバイスが FT232R をリセットするために使用できます。不要な場合は、未接続のままにするか、VCC にプルアップできます。

このアプリケーションでは RESET ピンは必要ないため、1k プルアップを介して Vcc に接続しました。#RESET-Pin のプルアップが FT232RL の未定義の起動を引き起こしたように見えました。#RESET-Pin のプルアップ抵抗を削除したため、#RESET-Pin は接続されていません。それ以来、すべてのインターフェイスが問題なく動作し、Windows デバイス マネージャーでシリアル ボール ポイントを作成しなくなりました。

于 2013-05-14T12:57:32.537 に答える