2011-04-01 10 views
7

हम एक एम्बेडेड डिवाइस USB के माध्यम से पीसी से कनेक्ट करता है, और यह कई आभासी सीरियल पोर्ट (सीडीसी-ACM) है।यूएसबी संचार उपकरण, सभी प्लेटफार्मों पर काम कर

हम विंडोज पर यह काम कर रहे है। एम्बेडेड डिवाइस पर, हमारे पास एकाधिक सीडीसी-एसीएम इंटरफेस हैं। यूएसबी डिस्क्रिप्टर इसे एक समग्र डिवाइस (कक्षा = 0xEF, उप-वर्ग = 2, प्रोटोकॉल = 1) के रूप में घोषित करते हैं, और इसमें प्रत्येक वर्चुअल सीरियल पोर्ट के लिए "इंटरफेस एसोसिएशन डिस्क्रिप्टर" है। विंडोज़ पर, हम एक आईएनएफ फ़ाइल का उपयोग करते हैं जो प्रत्येक सीडीसी-एसीएम नियंत्रण इंटरफ़ेस (MI_00, MI_02, आदि) के लिए usbser.sys इंस्टॉल करता है।

लेकिन, जैसा कि हमने पाया है, इस विधि मैक के लिए काम करने के लिए प्रतीत नहीं होता। मैंने पाया है कि मैं इसे "संचार" वर्ग (वर्ग = 2, उप-वर्ग = 0, प्रोटोकॉल = 0) में बदलकर, और आईएडी को हटाकर मैक और लिनक्स के लिए काम करने के लिए प्राप्त कर सकता हूं। (लिनक्स के लिए, Ubuntu के साथ परीक्षण, मैंने पाया कि इस उबंटू लिनक्स कर्नेल 2.6.35-28 या नए के साथ काम किया। पहले कर्नेल के साथ, केवल पहले सीरियल पोर्ट काम किया।) लेकिन फिर भी, इस विधि विंडोज के लिए काम नहीं करता।

क्या विधि एकाधिक आभासी सीरियल पोर्ट के साथ एक USB डिवाइस, उस पर विंडोज, मैक और लिनक्स काम करता है बनाने के लिए इस्तेमाल किया जा सकता? मुझे लगता है कि मैं एक समाधान पसंद करूंगा जो जितना संभव हो सके सीडीसी-एसीएम मानक का उपयोग करता है, और जितना संभव हो सके लिखने-अपने-अपने-ड्राइवर विकल्प से बचाता है।

उत्तर

3

एक तरह से मैं अपने सिर के ऊपर के बारे में सोच सकता हूं, यह डिवाइस स्वयं को एक यूएसबी हब के रूप में पेश करता है जिसमें कई अलग सिंगल-सीरियल-पोर्ट डिवाइस संलग्न होते हैं। यह सुंदर नहीं है लेकिन बहुत बुलेटप्रूफ है।

+0

"बॉक्स के बाहर" विकल्प के लिए धन्यवाद। यह एम्बेडेड डिवाइस पर एक बड़ा कार्यान्वयन बोझ है, लेकिन निश्चित रूप से पीसी पर आसानी से काम करेगा। –

2

चूंकि ऐप्पल के ड्राइवर समग्र सीडीसी उपकरणों का समर्थन नहीं करते हैं, तो मैं सुझाव दूंगा कि या तो आपके डिवाइस को किसी भी तरह से पुन: कॉन्फ़िगर करें और अपने वैकल्पिक वर्णनकर्ता सादा सीडीसी बनाएं, या समग्र के साथ चिपके रहें और किसी तृतीय पक्ष ड्राइवर का उपयोग करें (मेरी कंपनी CDC ACM ड्राइवर बनाता है ओएस एक्स के लिए जो शायद आपके डिवाइस का समर्थन करेगा)।

यह भी एक codeless kext के साथ इस मुद्दे के लिए मजबूर करने के लिए संभव हो सकता है।

+0

पुन: कॉन्फ़िगर करना उपयोगकर्ताओं के लिए एक अच्छा समाधान नहीं है। इसे सभी होस्ट ओएस के साथ "बस काम" करना चाहिए। लेकिन ओएस एक्स ड्राइवरों के सूचक के लिए धन्यवाद। इसमें देखेंगे। –

+0

"ड्राइवर रहित केक्स्ट" क्या है? –

+0

@ क्रेग मैकक्वीन: "कोडलेस केक्स्ट" होना चाहिए था। एक केक्स्ट में आम तौर पर विभिन्न चालक व्यक्तित्व और एक बाइनरी युक्त एक प्लेस्ट होता है। पूर्वस्थापित ड्राइवरों के लिए व्यक्तित्व के साथ, केवल एक Info.plist फ़ाइल वाला एक केक्स्ट बनाना संभव है – Hasturkun

2

एक समाधान है कि मैं मिल गया है, जो मुझे लगता है कि (Windows पर आगे की जांच के अधीन) काम कर सकता था:

  • मेक:

    तरीका है कि मैक के काम करता है में डिवाइस की गणना बनाओ यह "संचार" वर्ग (वर्ग = 2, उप-वर्ग = 0, प्रोटोकॉल = 0), समग्र डिवाइस नहीं है।

  • आईएडी हटाएं।

उपकरण मैक और लिनक्स पर हाल ही में "बस काम" चाहिए, इस विन्यास में। ,, (लिनक्स के लिए, Ubuntu के साथ परीक्षण, मैंने पाया कि इस उबंटू लिनक्स कर्नेल 2.6.35-28 या नए के साथ काम किया। पहले कर्नेल के साथ, केवल पहले सीरियल पोर्ट काम किया।)

तब विंडोज के लिए INF संशोधित डिवाइस के लिए फ़ाइल, समग्र डिवाइस ड्राइवर usbccgp.sys स्पष्ट रूप से लोड करने के लिए। मैं Windows INF फाइलों के साथ एक नौसिखिया हूँ, लेकिन यहाँ क्या मैं अब तक यह पता लगाने सकता से प्रासंगिक के टुकड़े कर रहे हैं:

[CCGPDriverInstall.NT] 
Include=usb.inf 
Needs=Composite.Dev.NT 
AddReg=CCGPDriverInstall.AddReg 

[CCGPDriverInstall.NT.Services] 
Include=usb.inf 
Needs=Composite.Dev.NT.Services 

[CCGPDriverInstall.AddReg] 
HKR,,EnumeratorClass, 0x00000001,02,00,00 

... INF साथ

[DeviceList] 
%DESCRIPTION_DEVICE%=CCGPDriverInstall, USB\VID_FFFF&PID_0001 
%DESCRIPTION_AT%=DriverInstall, USB\VID_FFFF&PID_0001&MI_00 
%DESCRIPTION_MENU%=DriverInstall, USB\VID_FFFF&PID_0001&MI_02 

[DeviceList.NTamd64] 
%DESCRIPTION_DEVICE%=CCGPDriverInstall, USB\VID_FFFF&PID_0001 
%DESCRIPTION_AT%=DriverInstall, USB\VID_FFFF&PID_0001&MI_00 
%DESCRIPTION_MENU%=DriverInstall, USB\VID_FFFF&PID_0001&MI_02 

[DeviceList.NTx86...1] 
%DESCRIPTION_DEVICE%=CCGPDriverInstall, USB\VID_FFFF&PID_0001 
%DESCRIPTION_AT%=DriverInstall, USB\VID_FFFF&PID_0001&MI_00 
%DESCRIPTION_MENU%=DriverInstall, USB\VID_FFFF&PID_0001&MI_02 

फ़ाइल स्पष्ट usbccgp.sys लोड हो रहा है ड्राइवर, दोनों यूएसबी धारावाहिक बंदरगाहों ने मेरे लिए विंडोज एक्सपी एसपी 3 32-बिट पर काम किया।

मैंने अभी तक केवल सीमित परीक्षण किया है, इसलिए मुझे यह जानने में दिलचस्पी होगी कि यह कितना अच्छा काम करता है, या नहीं, दूसरों के लिए।

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