2013-10-23 6 views
7

मैंने हाल ही में एक विंडोज 7 डेस्कटॉप के लिए एक सामान्य यूएसबी केबल का उपयोग कर एक यूएसबी एम्बेडेड डिवाइस (mbed lpc1768) में प्लग किया है। डिवाइस पर चल रहे प्रोग्राम के साथ आए दस्तावेज़ों के मुताबिक यह एक यूएसबी वर्चुअल सीरियल पोर्ट पर होस्ट (डेस्कटॉप) के साथ संचार करता है।सी # का उपयोग कर "यूएसबी वर्चुअल सीरियल पोर्ट" पर एक यूएसबी डिवाइस के साथ संचार?

सी # का उपयोग कर डेटा पढ़ने/लिखने की आवश्यकता है तो मैं कहां से शुरू करूं? क्या मैं SerialPort .NET क्लास का उपयोग कर सकता हूं या क्या मुझे LibUsbDotNet लाइब्रेरी या शायद कुछ और उपयोग करने की आवश्यकता है?

उत्तर

10

यह उत्कृष्ट समाचार है जब मुझे पता चलता है कि यूएसबी डिवाइस यूएसबी-एचआईडी की बजाय वीसीपी में संचार करता है, क्योंकि सीरियल कनेक्शन समझने में आसान हैं।

यदि डिवाइस VCP (वर्चुअल कॉम पोर्ट) में परिचालन कर रहा है, तो यह System.IO.Ports.SerialPort प्रकार का उपयोग करने जितना आसान है। आपको डिवाइस के बारे में कुछ बुनियादी जानकारी जाननी होगी, जिनमें से अधिकांश विंडोज प्रबंधन (डिवाइस मैनेजर) से प्राप्त की जा सकती हैं। इसलिए तरह का निर्माण करने के बाद:

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

आप may or may not तो इस तरह के डाटा टर्मिनल रेडी (डीटीआर)

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

अनुरोध (आरटीएस) भेजने के लिए और के रूप में कुछ अतिरिक्त झंडे, की स्थापना की आवश्यकता, खुले बंदरगाह।

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 
}; 

भेजने के लिए उपयोग करते हैं, आप port.Write(byte[] buffer, int offset, int count)

+0

उपयोग कर सकते हैं मैं कहाँ PORTNO (बंदरगाह नाम देख पा रहे हैं)? SerialPort.GetPortNames 0 बंदरगाह देता है। – Karlth

+0

मेरे मामले में, मुझे पोर्ट नंबर नहीं पता है क्योंकि यह हमेशा एक जैसा नहीं हो सकता है। मैं उपकरण खोजने के लिए 'प्रबंधन ऑब्जेक्ट खोजकर्ता' का उपयोग करता हूं (क्योंकि मुझे नाम पता है), इसलिए मैं 'var searcher = new managementObjectSearcher (" SEIN *_SIN_S_SIALPORT "से चुनें *)' 'searcher.Get में 'प्रबंधनबेसऑब्जेक्ट' संग्रह पर पुन: प्रयास करें।) '। मैं इसे जवाब में काम करूंगा। –

+1

वैसे ऐसा लगता है कि मुझे विंडोज़ के लिए एक मैबेड सीरियल पोर्ट ड्राइवर स्थापित करने की आवश्यकता है (http://mbed.org/handbook/Windows-serial-configuration)। मैंने इसे चलाया और कम्प्यूटर ने कुछ मिनटों के लिए हफ़्ड और पफ किया, अंत में डिवाइस मैनेजर में एक अच्छा "मैबेड सीरियल पोर्ट (कॉम 3)" लाइन का उत्पादन किया! :) मैं कोशिश करूँगा। – Karlth

संबंधित मुद्दे