लिनक्स से सीरियल USB पर परिधीय के साथ संवाद करने में असमर्थ


0

मैं अपने लिनक्स पर USB सीरियल पर एक पेरीफेरल (फेडोरा 20/64 बिट) के साथ संचार स्थापित करने के साथ संघर्ष कर रहा हूं, और मुझे शायद यह कदम याद नहीं है

मैं डिवाइस कनेक्ट करता हूं, एक / dev / ttyUSBx पोर्ट सही ढंग से दिखाता है। मैं इसे ड्राइव करने के लिए अजगर / pySerial का उपयोग करता हूं और उत्तर के बजाय डिवाइस मुझे देना चाहिए, सभी मैं सीरियल पोर्ट से पढ़ सकता हूं एक एकल शून्य बाइट ("\ x00") हर बार कनेक्शन रीसेट है।

मैंने अलग-अलग सीरियल-टू-यूएसबी एडेप्टर, अलग-अलग सीरियल केबल और यहां तक ​​कि अलग-अलग बाह्य उपकरणों (और मॉडल) की कोशिश की है। विंडोज आधारित क्लोज-सोर्स प्रोग्रामों के साथ जो परिधीय के साथ संवाद करते हैं, सब कुछ अच्छा लगता है।

यहाँ मैं क्या कर रहा हूँ की एक विशिष्ट सत्र है:

>>> import serial
>>> s = serial.Serial("/dev/ttyUSB0", timeout=.1)
>>> 
>>> s.flush()
>>> s.write("(&S)")
4
>>> s.read()
'\x00'
>>> 

(यहां "\ x00" के बजाय, मुझे प्रतिक्रिया के रूप में कई वर्ण लंबाई स्ट्रिंग मिलनी चाहिए। (डिवाइस टीसीपी / आईपी पर एक ही प्रोटोकॉल के लिए सही उत्तर देता है)।

क्या मुझे सीरियल पोर्ट पर कुछ विन्यास चरण याद आ रहे हैं? यहाँ इसके लिए मेरा सेटर्सियल आउटपुट है:

/dev/ttyUSB0, UART: unknown, Port: 0x0000, IRQ: 0, Flags: low_latency

और Pyserial कॉन्फ़िगरेशन:

Serial<id=0x7f525c5daf10, open=True>(port='/dev/ttyUSB0', baudrate=9600, bytesize=8, parity='N', stopbits=1, timeout=0.1, xonxoff=False, rtscts=False, dsrdtr=False)

(ये पैरामीटर वही हैं जो विंडोज पर कॉन्फ़िगर किए गए सीरियल पोर्ट पर दिखाए जाते हैं जहां डिवाइस काम करता है - लेकिन टाइमआउट के लिए)


USB से सीरियल की समस्या यह है कि USB 8-पिन है और सीरियल 9-पिन है। जब तक आपके पास डिवाइस ड्राइवर नहीं होता है, तो आप कॉन्फ़िगर करते हैं कि कौन सा पिन सीरियल के किस पिन के साथ मेल खाता है, हो सकता है कि आपके पास सभी पिन तक पहुंच न हो जो एक समस्या पैदा कर रहा है।
Sun

मेरे पास हार्डवेयर है जो मालिकाना सॉफ्टवेयर के साथ काम करता है जो बाहरी डिवाइस के साथ आता है (उसी सीरियल से यूएसबी कनेक्टर का उपयोग करके)। मेरे पास डिवाइस प्रोटोकॉल भी है, जो अधूरा हो सकता है - लेकिन मुझे लगता है कि पोर्ट कॉन्फ़िगरेशन समय में कुछ गायब है।
jsbueno

जवाबों:


1

ठीक कर दिया - मुझे उसके डिवाइस विक्रेता के साथ जांच करनी थी - और यह प्रोटोकॉल पर डिवाइस की सेटिंग का मामला है - एक को DTR सक्रिय के साथ सीरियल पोर्ट का उपयोग करना पड़ता है, और RTS निष्क्रिय - ये स्पष्ट रूप से हार्डवेयर पक्ष के साथ उपयोग किए जाने वाले एक के लिए कोशिश कर सकते हैं, लेकिन उच्च स्तर कोडिंग के लिए उपयोग किए गए डेवलपर्स के लिए ऐसा नहीं है।

तथ्य यह है कि मुझे बेवकूफ बनाया है कि क्या है पर थोड़ा प्रलेखन के साथ, मैं गलत समझा rtsdtr तथा rtscts वास्तविक DTR और RTS पिन सेटिंग के साथ पायथन के PySerial सीरियल ऑब्जेक्ट पर पैरामीटर - और इन दोनों को बदलने से कुछ भी हासिल नहीं हुआ।

तरीकों को बुला रहा है

serial_.setDTR(True)
serial_.setRTS(False)  

वास्तव में पोर्ट पर पिन सेट करता है, और इस उपकरण के साथ संचार संभव बनाता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.