2012-02-10 2 views
26

(가상) 직렬 포트를 통해 PC와 통신하는 장치에서 작업하고 있습니다. 문제는 때때로 우리가 보내고있는 데이터가 Windows에서 버스 마우스로 잘못 식별되는 것입니다. "Microsoft Serial Ballpoint"드라이버가로드되고 마우스 포인터가 화면에서 점프하여 무작위로 클릭하기 시작합니다.장치가 직렬 마우스로 잘못 감지되었습니다.

인터넷 검색의 한 비트는 직렬 장치에서 오래되고 잘 알려진 문제로서 일반적인 해결 방법은 위반하는 드라이버를 비활성화하기위한 레지스트리 해킹이라고 설명합니다. 그러나 사용자로부터 요구하는 것이 많아서 응용 프로그램을 사용자 레지스트리와 함께 사용하지 않는 것이 좋습니다. 특히 Windows 버전에 따라 수정 사항이 달라지면 사용자가 버스 마우스를 사용할 수도 있습니다.

대신 우리가 마우스로 잘못 식별 할 수있는 데이터를 보내지 않도록 프로토콜을 변경하여 문제를 피하고 싶습니다. 유일한 문제는 어떤 패턴을 피해야하는지 확실히 알 수 없다는 것입니다. 분명히 Microsoft의 마우스 프로토콜은 첫 번째 MSB가 설정되고 마지막 세 MSB가 설정된 4 바이트 패킷으로 구성됩니다.

전송은 7 비트 ASCII로 충분합니까? 내가 탐지되는 것에 대해 걱정할 필요가있는 다른 장치가 있습니까?

+2

당신은 일반적으로 사용할 수 없습니다 구현 세부 사항을 요구한다. 당신을 도울 수있는 누군가가 있습니다. 그는 Redmond에 거주하며 파트너 프로그램이나 Microsoft 지원을 통해 액세스 할 수 있습니다. –

+4

나는 과거에 장치가 COM 포트로 Windows에 자신을 소개 한 다음 시스템에 연결되면 마우스로 인식되는 즉시 자동으로 전송하기 시작한다는 것을 발견했습니다. 이것은 전송하는 데이터와 상관없이 4 바이트와 일치하지 않습니다. 기기가 전송을 시작하기 전에 잠시 기다릴 수 있습니까? – tinman

+0

주석 : 힌트를 보내 주셔서 감사합니다! 대신 PC 응용 프로그램에서 업데이트를 폴링하고 첫 번째 요청을하기 전에 두 번째 또는 두 번 기다려 봅니다. – doynax

답변

4

직접이 Windows 버그가 발생했습니다. 해당 항목에 대한 내 자신의 연구는 다음과 같습니다.

http://support.microsoft.com/kb/819036 Microsoft는이 도구를 다운로드하여 문제가 해결되는지 확인합니다.

  • & 다운로드 프로그램을 설치하십시오.
  • C : \ program \ Microsoft comdisable \
  • 에서 명령 프롬프트에서 실행하십시오. 프로그램을 실행할 때 comdisable /list을 작성하십시오.
  • 컴퓨터의 모든 포트가 표시됩니다.
  • 쓰기 comdisable /disable COMx 여기서 x는 포트 번호입니다.
  • 컴퓨터의 모든 포트에 대해 이렇게하십시오.
  • 재부팅.

이것은 잘하면 범용 솔루션으로 작동해야합니다.

또는 boot.ini를 해킹 할 수는 있지만 Vista/Win 7에서는 작동하지 않는다고 생각합니다. 시스코 시스템에서이 작업을 수행하는 방법에 대해 설명하는 애플리케이션 노트가 있습니다. 위의 방법으로도 문제가 해결되지 않으면 알려 주시기 바랍니다.

난 그냥 Windows 7 Professional x64에이 문제를 자신을 발견하고, 나를 위해 일한 솔루션은 레지스트리로 이동하여 다음 값을 편집했다
+0

제안 해 주셔서 감사합니다. 우리의 장치에서 프로토콜을 변경하여 Windows를 혼동하지 않도록 사용자 개입을 피하기를 원합니다.하지만 작동하지 않으면 적어도 공식적인 해결 방법 (및 "버그"승인)이 있어야합니다. 필자는 tinman의 제안을 구현하여 데이터를 7 비트 ASCII로 다시 패키징하고 아직 문제를 다시 보지 못했습니다. 솔직히 모든 것을 자주 보지는 못했지만. – doynax

+0

@ 도이 탁 :이 "볼펜"쓰레기가 사용하는 모호한 프로토콜의 종류는 확실하지 않지만 7 비트 ASCII로 변경하면 아무 것도 해결되지 않을 수도 있습니다. Windows에서는이 고대 Microsoft 마우스가 특정 전송 속도를 사용한다고 가정하기 때문입니다. 9600보다 빠른 보오 레이트를 사용할 때 문제가 발생했습니다. 데이터가 갑자기 마우스에서 오는 것으로 해석 될 수 있습니다. 그 일이 생길 때 ... 재앙. 마우스는 빛의 속도로 화면 전체를 움직이며 모든 곳을 클릭합니다! 아무거나 일어날 수있다. 나는 위험을 감수하지 않을 것이다. 나는 그 링크에서 Microsoft가 권장하는 도구를 사용할 것이다. – Lundin

+0

고맙게도 실제 직렬 포트 대신 가상 직렬 포트 드라이버가있는 FTDI 칩을 사용하고 있습니다. 따라서 잘못된 전송 속도 설정을 통해 데이터가 엉망이 될 위험이 없습니다. – doynax

25

: 4

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

변경 Value를하며 발생이 문제가 중지됩니다 .

Here is a list of all valid Start values :

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 ADD "HKLM\SYSTEM\CurrentControlSet\Services\sermouse" /V Start /T REG_DWORD /F /D 4 

당신은 다음 올바르게 시작하고 발견하지해야 컴퓨터를 다시 시작해야 직렬 마우스.

행운을 비네.

+0

Perfect! OS를 다시 시작해야했습니다. – iforce2d

+0

그 말을 잊어 버렸습니다. 나는 대답에 그것을 추가 할 것입니다, 고마워요. – Serdalis

+1

그것은 2 시간 동안 나를 미치게했다! – gonatee

1

아마 이것이 도움이 될 것입니다 : 우리는 FTDI FT232RL과 동일한 문제가있었습니다. 우리는 그것이 우리 PCB의 하드웨어 문제라는 것을 알았습니다.

FTDI- 데이터 시트에 대해 # RESET-Pin : 액티브 로우 리셋 핀이 나와 있습니다. FT232R을 리셋하기 위해 외부 장치에서 사용할 수 있습니다. 필요하지 않다면 연결되지 않거나 VCC까지 끌어 올 수 있습니다.

RESET-Pin은 우리의 어플리케이션에서 요구되지 않았으므로, 1k Pull-Up을 통해 Vcc에 연결했습니다. # RESET-Pin의 풀업으로 인해 FT232RL의 시작이 정의되지 않은 것으로 보였습니다. 적어도 두 번째 변환기마다 USB 소켓에 연결하여 devive manager에서 직렬 볼 포인트를 발생 시켰습니다. # RESET-Pin에서 pull-up-resistor를 제거 했으므로 # RESET-Pin은 연결되지 않았습니다. 그 이후로 모든 인터페이스가 프로 덕 티브하게 작동하고 더 이상 Windows 장치 관리자에서 직렬 볼 포인트를 만들지 않았습니다.

+0

FT232BR로는 효과가 없었습니다. – HOPE

1

"true"직렬 포트 또는 USB 동글 (RS-232, RS-485)은 문제가되지 않지만이 문제는 터미널에서 문제의 직렬 포트를 먼저 열어서 해결할 수 있습니다. 또는 어떤 응용 프로그램을 모니터링하고 싶은지, 그리고 장치를 꽂은 후에 만 ​​연결을 종료하십시오. 연결을 종료하기 전에 장치를 제거하는 데주의해야합니다.

FTDI 칩을 장치 자체에 납땜하면 체포합니다. Windows 컴퓨터를 만나는 PCB 회의에서 납땜 된 FTDI 칩과 짝을 이루고있는 장치가 USB 소켓이 얼마나 매끄러운 지 상관없이 사용자 친화적 인 것으로 보이지는 않을 것이라고 경영진을 설명하는 데 몇 차례 걸렸습니다. 캐비닛에 ... (고맙게도, 이러한 모든 조건은 함께 희귀하고 드문 경우입니다)

+0

@Jubation 개인적으로 FTDI, CH340G, ATmega32u4 등 대신 Serial-to-USB 칩에 대한 더 나은 대안이라고 생각 하시나요? 더 사용자 친화적 인 인터페이스가 필요하십니까? –

+1

@DRS David Soft 여러분의 디자인이 여러분의 장치에 적합한 장치 클래스를 사용하여 적절한 USB 인터페이스를 포함 할 수 있다면 최종 사용자의 경우에 가장 적합한 것입니다 (물론 이것은 드라이버 생성을 요구합니다). 그렇지 않다면 보통의 DSUB-9 커넥터 (RS-232)를 사용하는 것이 더 좋다고 생각합니다. 나중에 좀 더 자율적 인 시스템을 위해 다른 마이크로 컨트롤러 구동 장치와 결합 된 장치를 사용하려면 더욱 강력합니다. . 동글 (또는 RS-232 인터페이스 카드)을 사용하여 PC에 연결하십시오. – Jubatian

5

Windows에서의 마우스 감지는 일반적으로 serenum.sys 필터 드라이버에서 처리됩니다. 이 드라이버는 serial plug-and-play과 함께 기존 직렬 마우스에 대한 지원을 구현합니다. Microsoft는 심지어 소스 코드 as a WDK sample을 제공했습니다.

감지하는 동안 포트는 1200-3-N-1 모드로 전환하고 응답이 200 ms 이내에 예상되는 DTR + RTS을 지정하고 실패시 두 번 다시 시도합니다. 불행하게도 레거시 마우스의 경우 M 또는 B 문자만으로도 충분합니다.

우리의 경우 프로토콜은 이러한 문자를 피하기 위해 수정되었으며 더 이상 오인되지 않습니다.

그러나 우리는 가상 USB 직렬 포트를 사용하고 있었고 전통적인 직렬 포트의 경우이 방법은 다소 다른 전송 속도로 전송 된 것이 회선 잡음처럼 보이기 때문에 다소 어려울 수 있습니다. 이 경우에는 가장 쉬운 해결 방법이 이미 제안 된 것처럼 원하지 않는 전송을 피하기 위해 있다고 가정합니다.

또는 USB CDC 장치에서 실제로 직렬 연결 제어 신호를 연결하거나 차단하여 DTR 또는 RTS 신호를 처리하고 출력을 억제 할 수 있습니다. 실제로 플러그 앤 플레이 프로토콜을 구현하는 것이 훨씬 더 간단한 옵션이 될 것입니다. 아마도 RS232 케이블은 완벽한 제어 신호없이 RS232 케이블을 저렴하게 사용할 수 있습니다. 그래도이 방법은 여전히 ​​실패 할 수 있습니다.

+0

이 코멘트는 나에게 매우 유용하다! 이제 왜 내 Arduino 클론이 전원을 켜기 전에 몇 시간 재부팅하는지 이해합니다. ('100NF'캡을 통한 CH340의 DTR 핀이 리셋 핀에 연결되어 있기 때문입니다.) 훌륭한 설명에 감사드립니다! –

+0

https://electronics.stackexchange.com/a/279630/51756 –

3

또한이 문제가 발생하여 FTDI 드라이버의 고급 속성 (장치 관리자에서 COM 포트의 속성)에서 "serial enumerator"를 비활성화하여 해결했습니다. 자세한 내용은 http://www.ftdichip.com/Support/Documents/AppNotes/AN_107_AdvancedDriverOptions_AN_000073.pdf에 설명되어 있습니다.

+0

내 생각에 가장 좋은 해결책입니다. 내 라디오 링크 장치에서 호스트 TX/RX 표시등이 항상 깜박이는 것을 볼 수 있었고 분명히 직렬 열거자를 스캔했습니다. 일단 장치를 비활성화하고 연결하면 (다시 부팅 할 필요가없는 다른 플러스) 장치를 사용하는 프로그램이 시작될 때까지 아무런 작업도 없었습니다. 또한 과거에 장치에 연결하는 데 어려움을 겪었습니다. 히트 앤 미스는 직렬 포트를 열거 나 잠그기위한 응용 프로그램의 자체 시도 사이에서 점차 열거 된 직렬 열거 자 였을 것입니다. 감사! –

1

나는이 문제가 2010 년 이후에 시리얼 스케일 헤드가 PC에 연결되어 있기 때문에 발생했다. 직렬 변환기에 또는 아닙니다......................................... 제거하지 마십시오. 단순히 사용 중지하십시오. 그런 다음 드라이버를 설치 한 상태에서 재부팅해도 창은 직렬 마우스로 무시하고 입력 데이터를 사용합니다. 볼펜 드라이버가 활성화되어 있으면 COM 포트가 사용 중이고 때로는 COM 포트에 액세스 할 수없는 경우가 있습니다 ... Tx Ben

0

내 개발 환경에서, 단순히 장치 관리자에서 Microsoft 직렬 마우스을 비활성화하십시오.

이것은 내 문제의 범인을 해결하는 것으로 보입니다. 그렇게하기 전에 내가 디자인에서 사용한 CH340G 칩은 연결을 시작하기 전에 DTR을 5 번 낮추어 효과적으로 Arduino 기반 보드를 재부팅하여 쓸모 없게 만들었습니다.

Microsoft Serial Mouse Drivers Messing With Arduino Clone's CH340G UART to USB

+0

개인적으로 도움이 될 수 있지만 원래 질문의 문제는 해결하지 못합니다. 최종 질문은 시스템 구성을 수정하려는 개발자뿐만 아니라 최종 사용자에게 적합한 솔루션이 필요합니다. –

+0

@ChrisStratton True로 답변을 게시하지 않았을 수 있습니다. 그러나 저는이 문제에 대한 인터넷 검색을위한 개발자 용 빠른 솔루션을 제공하기를 원했습니다. 직렬 연결 후 500ms 지연을 사용하여 Windows가 내 장치를 마우스로 감지하지 못하게했습니다. –