2013-10-23 3 views
7

저는 최근에 일반 USB 케이블을 사용하여 Windows 7 데스크탑에 USB 내장 장치 (mbed lpc1768)를 연결했습니다. 장치에서 실행되는 프로그램과 함께 제공된 문서에 따르면 USB 가상 직렬 포트를 통해 호스트 (데스크탑)와 통신합니다. 나는 C#을 사용/쓰기 데이터를 읽을해야하는 경우C#을 사용하여 "USB 가상 직렬 포트"를 통해 USB 장치와 통신 하시겠습니까?

은 어디서부터 시작 할까? SerialPort .NET 클래스를 사용할 수 있습니까? 아니면 LibUsbDotNet 라이브러리 또는 다른 것을 사용해야합니까?

답변

10

내가 직렬 연결 이해하기 쉽기 때문에 USB 장치가, VCP보다는 USB-HID에서 통신하는 것을 알아 뛰어난 소식입니다.

장치가 VCP (Virtual Com 포트)에서 작동하는 경우 System.IO.Ports.SerialPort 유형을 사용하는 것만 큼 쉽습니다. 장치에 대한 몇 가지 기본 정보를 알아야하며 대부분 Windows Management (장치 관리자)에서 수집 할 수 있습니다. 과 같이 구성 후 :

SerialPort port = new SerialPort(portNo, baudRate, parity, dataBits, stopBits); 

당신 may or may not 다음과 같은 (RTS)를 보낼 수 요청 및 데이터 터미널 준비 (DTR)

port.RtsEnable = true; 
port.DtrEnable = true; 

과 같은 몇 가지 추가 플래그를 설정해야합니다 오픈 항구. 나는 PORTNO (포트 이름을 보는가 어디 port.Write(byte[] buffer, int offset, int count)

+0

를 사용할 수 들으려면

port.Open();

, 당신은 port.DataReceived에 이벤트 핸들러를 첨부 할 수 있습니다 다음 port.Read(byte[] buffer, int offset, int count)

port.DataReceived += (sender, e) => { byte[] buffer = new byte[port.BytesToRead]; port.Read(buffer,0,port.BytesToRead); // Do something with buffer }; 

전송하는 데 사용)? SerialPort.GetPortNames는 0 포트를 리턴합니다. – Karlth

+0

내 경우 포트 번호가 항상 같지 않을 수 있기 때문에 포트 번호를 알지 못합니다. 나는 (이름을 알고 있기 때문에)'ManagementObjectSearcher'를 사용하여 디바이스를 찾는다. 그래서'var searcher = new ManagementObjectSearcher ("SELECT * FROM WIN32_SERIALPORT")'를 실행하고'searcher.Get()의'ManagementBaseObject' 컬렉션을 반복한다.)'. 나는 대답으로 그것을 일할 것이다. –

+1

글쎄, Windows 용 Mbed 직렬 포트 드라이버 (http://mbed.org/handbook/Windows-serial-configuration)를 설치해야 할 것 같습니다. 나는 그것을 달리고 컴퓨터는 몇 분 동안 허프하고 부풀어 오르고 마침내 장치 관리자에 "mbed 직렬 포트 (COM3)"라인을 만들어 냈다! :) 나는 그것을 시도 할 것이다. – Karlth