2013-10-23 53 views
7

Recentemente ho collegato un dispositivo USB incorporato (mp lpc1768) usando un normale cavo USB a un desktop Windows 7. Secondo i documenti forniti con il programma in esecuzione sul dispositivo, esso comunica con l'host (desktop) su una porta seriale virtuale USB.Comunicazione con un dispositivo USB su "USB Virtual Serial Port" usando C#?

Dove devo iniziare se ho bisogno di leggere/scrivere dati usando C#? Posso usare la classe SerialPort .NET o devo usare la libreria LibUsbDotNet o forse qualcos'altro?

risposta

10

È una notizia eccellente quando scopro che un dispositivo USB comunica in VCP piuttosto che in USB-HID, perché le connessioni seriali sono facili da capire.

Se il dispositivo funziona in VCP (Virtual Com Port), è facile come utilizzare il tipo System.IO.Ports.SerialPort. È necessario conoscere alcune informazioni di base sul dispositivo, la maggior parte delle quali può essere ricavata da Gestione Windows (Gestione periferiche). Dopo aver costruito in questo modo:

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

È may or may not necessità di impostare alcune bandiere aggiuntivi, come Richiesta di invio (RTS) e Data Terminal Ready (DTR)

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

Poi, aperto il porto.

port.Open();

Per ascoltare, è possibile collegare un gestore di eventi per port.DataReceived e quindi utilizzare 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 
}; 

Per inviare, è possibile utilizzare port.Write(byte[] buffer, int offset, int count)

+0

Dove posso vedere il (nome della porta portno)? SerialPort.GetPortNames restituisce 0 porte. – Karlth

+0

Nel mio caso, non conosco il numero di porta perché potrebbe non essere sempre lo stesso. Uso un 'ManagementObjectSearcher' per trovare il dispositivo (poiché conosco il nome), quindi eseguo' var searcher = new ManagementObjectSearcher ("SELECT * FROM WIN32_SERIALPORT") 'e iterato sulla raccolta' ManagementBaseObject' in 'searcher.Get () '. Lo farò nella risposta. –

+1

Beh, sembra che ho bisogno di installare un driver di porta seriale Mbed per Windows (http://mbed.org/handbook/Windows-serial-configuration). L'ho eseguito e il computer ha sbuffato e gonfiato per alcuni minuti, producendo finalmente una bella riga "mbed serial port (COM3)" nel Device manager! :) Ci proverò. – Karlth

Problemi correlati