वास्तव में USB युक्ति कहां है जो बताती है कि जब केबल पहले जुड़ा हो तो क्या करें?


15

तो मुझे पता है कि USB 2.0 युक्ति USB.org साइट पर स्थित है ।

मैं थोड़ा आलसी और अधीर हूं। क्या कोई मुझे बता सकता है कि यूएसबी केबल कनेक्ट होने पर मेरे परिधीय उपकरण से वास्तव में क्या पता लगाने की उम्मीद है?

उदाहरण के लिए, यदि मेरा परिधीय उपकरण एक प्रिंटर है, तो मैं दूसरे छोर पर कंप्यूटर को कैसे बताऊं कि एक प्रिंटर (एक विशिष्ट मॉडल विवरण, मुझे लगता है) सिर्फ जुड़ा हुआ है? कंप्यूटर में, प्रिंटर ड्राइवर को कैसे पता चलता है कि प्रिंटर किस USB पोर्ट से जुड़ा था?

मेरा आवेदन वास्तव में यूएसबी मिडी है। मैंने इस USB-MIDI डॉक को भी प्राप्त किया है , लेकिन मैं अधिक मूलभूत USB प्रोटोकॉल के साथ कमी कर रहा हूं।

बस लोगों की जानकारी के लिए, मैं जिस USB चिप का उपयोग कर रहा हूं वह FTDI FT220x है और यह ADSP-21479 SHArC के SPI तक झुका हुआ है। अब हम इसे केवल एक "कंसोल" के रूप में पीसी (टेराटर्म चलाने) का उपयोग करके पाठ संचार के लिए उपयोग करते हैं । मेरे पास उस कोड तक पहुंच है जो SPI पोर्ट सेट करता है और FTDI चिप से कनेक्ट होता है, लेकिन ऐसा कोई कोड नहीं है जो कोई भी प्रारंभिक संचार करता हो। मुझे नहीं पता कि FT220x क्या करता है जब यह पहली बार पीसी से जुड़ा होता है।

मैं पढ़ने और जानने के लिए दुखी नहीं हूं, लेकिन मैं यह जानना चाहूंगा कि कहां से पढ़ना शुरू करना है, और एक 100 एमबी USB युक्ति शूट करने के लिए बहुत बड़ा लक्ष्य है। कार्रवाई में मदद के लिए किसी को भी धन्यवाद।


1
तो आप बस उत्सुक हैं कि FTDI FT220x पर्दे के पीछे क्या कर रहा है, है ना? चूँकि FTDI आपके लिए बहुत सारे USB सामानों की देखभाल करता है, इसलिए इसकी कुछ सीमाएँ भी हैं जो आपको ऐसा करने देंगी। मैंने थोड़ी देर के लिए FT2232H परिवार का उपयोग किया है, जो मुझे पता है उसे समझाने की कोशिश करेंगे ...
MarkU

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

जवाबों:


21

USB में कई परतें हैं, जो USB 2.0 विनिर्देश में वर्णित हैं । यदि आप OSI स्तरित नेटवर्क मॉडल से परिचित हैं, तो आप इस तरह से सोच सकते हैं:

  • सत्र परत = अध्याय 10 USB होस्ट हार्डवेयर और सॉफ़्टवेयर (डिवाइस ड्राइवर)
  • ट्रांसपोर्ट लेयर = चैप्टर 9 यूएसबी डिवाइस फ्रेमवर्क
  • नेटवर्क परत = अध्याय 8 प्रोटोकॉल परत (बिटस्ट्रीम)
  • डेटा लिंक परत = अध्याय 7 इलेक्ट्रिकल (सर्किट)
  • भौतिक परत = अध्याय 6 मैकेनिकल (केबल और कनेक्टर)

वैचारिक रूप से USB डेटा की धाराओं पर आधारित है, जिसे एंडपॉइंट्स कहा जाता है , जो या तो IN (होस्ट को) या OUT (होस्ट से) हो सकता है। प्रत्येक डिवाइस में एंडपॉइंट 0 होता है, जिसका उपयोग नियंत्रण और स्थिति के लिए किया जाता है। डिवाइस में एप्लिकेशन डेटा के लिए अतिरिक्त समापन बिंदु हो सकते हैं। प्रत्येक समापन बिंदु एक FIFO बफर की तरह व्यवहार करता है।

डेटा को एक समापन बिंदु पर या तो बल्क (जैसे टीसीपी / आईपी, हर बाइट आता है और सही क्रम में), या Isochronous (जैसे UDP / IP, ताजा होने की गारंटी देता है, लेकिन पैकेट गिरा सकते हैं) के रूप में स्थानांतरित किया जाता है। " इंटरप्ट " स्थानांतरण प्रकार का एक भ्रामक नाम है , जो वास्तव में केवल मेजबान द्वारा प्रदूषित है।

USB 2.0 datalink के लिए एक अंतर जोड़ी का उपयोग करता है। मैं ज्यादा विस्तार में नहीं जाऊँगा क्योंकि यह USB 2.0 युक्ति अध्याय 7 से आच्छादित है। आम तौर पर पीसीबी लेआउट पर हम इसे एक मैच्योर-लेंथ, डिफरेंशियल पेयर के रूप में मानते हैं, और जो भी USB PHY (भौतिक) आवश्यक श्रृंखला प्रतिरोधों में डालते हैं इंटरफ़ेस) का उपयोग किया जा रहा है। USB परिधीय D + या D- लाइनों में से एक पर उच्च मान अवरोधक का उपयोग करता है ताकि मेजबान को सूचित किया जा सके कि यह एक उच्च गति या कम गति वाला परिधीय है।

जैसे ही USB होस्ट को पता चलता है कि डिवाइस मौजूद है, होस्ट डिवाइस से डिस्क्रिप्टर के एक गुच्छा का अनुरोध करता है। FTDI चिप द्वारा पर्दे के पीछे का ध्यान रखा जाता है। वर्णन 9.5 अध्याय में वर्णित हैं । इनमें डिवाइस डिस्क्रिप्टर , कॉन्फिगरेशन डिस्क्रिप्टर , इंटरफेस डिस्क्रिप्टर्स , एंडपॉइंट डिस्क्रिप्टर्स , स्ट्रिंग डिस्क्रिप्टर्स शामिल हैं , शायद रिपोर्ट डिस्क्रिप्टर्स भी छिपा सकते हैं

डिवाइस डिस्क्रिप्टर यूएसबी शामिल VID (विक्रेता पहचान) और पीआईडी (उत्पाद पहचान) नंबर। ऑपरेटिंग सिस्टम VID_PID संख्याओं के इस जोड़े का उपयोग करता है, यह निर्धारित करने के लिए कि इस डिवाइस के लिए किस डिवाइस ड्राइवर का उपयोग किया जाएगा। ध्यान दें कि VID संख्या USB कार्यान्वयन फोरम में सदस्यता के द्वारा जारी की जाती है, इसलिए यदि आप एक व्यक्तिगत आविष्कारक हैं तो यह एक समस्या है।

इसके अतिरिक्त, HID (ह्यूमन इंटरफेस डिवाइस) क्लास ड्राइवर है, जो कीबोर्ड / माउस / आदि के लिए कुछ सामान्य इनपुट प्रदान करता है, साथ ही साथ कोई भी जेनेरिक इनपुट / आउटपुट। HID का एक फायदा यह है कि इसे कस्टम डिवाइस ड्राइवर प्रदान करने की आवश्यकता नहीं होती है, लेकिन कस्टम बल्क ड्राइवर की तुलना में इसका थ्रूपुट कुछ हद तक सीमित होता है। छिपाई के वर्णनकर्ताओं के बारे में एक पूरी अन्य विनिर्देश दस्तावेज है ; और एक छिपाई उपयोग तालिका दस्तावेज़ जो सभी कोड संख्याओं का विवरण देता है जो किसी दिए गए मानव इंटरफेस डिवाइस पर उपलब्ध विभिन्न विशेषताओं का वर्णन करता है।

FTDI चिप जैसे FT220X डेटाशीट USB "सीरियल इंटरफ़ेस इंजन" (SPI धारावाहिक या RS220 सीरियल के साथ भ्रमित नहीं होना) प्रदान करता है। यह अध्याय 6, 7, और 8 में वर्णित निम्न-स्तर के अधिकांश सामान की देखभाल करता है।

एफटीडीआई एक EEPROM (FT2232H पर ऑफचिप, FT22032 पर ऑन-चिप) का उपयोग करता है जिसमें विवरणकर्ताओं में जाने वाली थोड़ी जानकारी होती है। आप VID / PID मानों को कस्टमाइज़ कर सकते हैं, और कस्टम विवरण स्ट्रिंग्स प्रदान कर सकते हैं।


6
मुझे सारांश पसंद आया। मुझे कई सप्ताह की अवधि में ENTIRE 2.0 युक्ति (1000 से अधिक पृष्ठों को याद करते हुए) पढ़ना पड़ा क्योंकि मुझे यह सब बकवास खुद ही समझ लेना था। यह एक सुखद अनुभव नहीं था, मुझे कहना होगा। (मेरे मामले में छिपाई का उपयोग नहीं किया जा सकता है।) विषय पर कोई अच्छी किताबें, या तो। मुझे USB पर Jan Axelson की किताब से नफरत थी और किसी को इस काम को जमीन से एम्बेडेड माइक्रो के रूप में करने के लिए उसकी पुस्तक "लगभग पूरी तरह से बेकार" पर विचार करें। यह वास्तव में ज्यादातर बेकार है, लम्बा है। यदि आप एक कार्यान्वयनकर्ता (कस्टम हार्डवेयर) के लिए एक अच्छी पुस्तक के बारे में जानते हैं, तो मुझे एक शीर्षक सुनकर खुशी होगी !! +1
जोंक

1
Op के संभावित बाजार के आधार पर VID / PID सबसे बड़ी चुनौती है। Axelsons कार्यप्रणाली का उपयोग करना इस अर्थ में काम करता है कि आप उसके VID का उपयोग कर सकते हैं (जिसकी कीमत आपके लिए $ 3.5k है) और उसके PID के एक या अधिक निशुल्क अनुरोध करें। आप माइक्रोचिप / Atmel, FTDI और TI (उनके VID के आधार पर) जैसे संगठनों से PID का अनुरोध कर सकते हैं। IMO की सबसे अच्छी पुस्तक है "उदाहरण के लिए USB डिज़ाइन", यह दाँत में थोड़ा लंबा है, लेकिन USB 2.x के लिए अच्छा है। दुर्भाग्य से कोड के कई उदाहरण इसके संशोधनों के माध्यम से विज़ुअल स्टूडियो में बदलाव के कारण टूट जाते हैं।
जैक क्रीज

1
हॉबीस्ट के लिए VID / PID तक पहुंचने का सबसे अच्छा तरीका है LUFA (जो कि निशुल्क है) का उपयोग करें: Fourwalledcubicle.com/files/LUFA/Doc/130303/html/… ..... ये वाणिज्यिक उत्पाद में उपयोग नहीं किए जा सकते हैं लेकिन घर / डेमो उपयोग के लिए अच्छे हैं जहाँ आप काफी हद तक टकराव को नियंत्रित कर सकते हैं।
जैक क्रीज

1
पुनश्च। एक महान परिचय उदाहरण के लिए "एंबेडेड यूएसबी डिजाइन का उपयोग करना है: कि एफडीडीआई जारी: ftdichip.com/Support/Documents/TechnicalPublications/… ... यह कई उपयोगी उदाहरण हैं (बेशक एफडीडीआई उपकरणों के आधार पर) और सभी संबद्ध
पीएसओसी

1
ध्यान दें कि यदि USB डिवाइस स्व-चालित है, तो इसे D + या D- पुल-अप रोकनेवाला लगाने से पहले VBUS वोल्टेज का पता चलने तक इंतजार करना होगा। मैंने इस पर प्रमाणीकरण विफल कर दिया है।
एडम हुन

4

USB "साझेदार" (एक मेजबान और एक उपकरण) का व्यवहार और इंटरैक्शन USB विनिर्देशन में बिखरा हुआ है। कुछ आधार प्राप्त करने का सबसे अच्छा तरीका "डिवाइस फ्रेमवर्क", अध्याय 9 को देखना है, जो अध्याय 10 और 11 में संभव (अनिवार्य) डिवाइस स्टेट्स (चित्र 9-1), और होस्ट (और हब) ढांचे का वर्णन करता है। प्रोटोकॉल विवरण (पाइप / लेन-देन प्रकार / सार OSI प्रोटोकॉल परतें, पीसीबी लेआउट, आदि), प्रारंभिक बातचीत पर एक बेहतर पकड़ पोर्ट राज्य आरेख (चित्रा 11-10) का अध्ययन करके प्राप्त किया जा सकता है।

संक्षेप में, यदि केबल होस्ट और डिवाइस के बीच कनेक्ट नहीं है, तो होस्ट पोर्ट "संचालित राज्य" (VBUS ON है) में हैं, लेकिन "डिस्कनेक्टेड"। D + और D- तारों को 15k पुल-डाउन के साथ कम आयोजित किया जाता है।

जब केबल कनेक्ट होता है, तो VBUS डिवाइस में चला जाता है। डिवाइस पहचानता है कि यह कनेक्ट किया जा रहा है, और डीएस तारों के उच्च एक को खींचकर एक "कनेक्ट" घटना का संकेत देता है, अगर यह एफएस / एचएस डिवाइस है, और डीएस- तो यह एलएस डिवाइस है।

D +/- पर तारों को एक निश्चित पोर्ट पर खींचना मेजबान सॉफ्टवेयर को एक बाधा देता है, जिससे "पोर्ट स्टेटस चेंज" की सूचना मिलती है। होस्ट सॉफ़्टवेयर (आमतौर पर ehci.sys) तब उस विशेष पोर्ट पर "पोर्ट रीसेट" अनुक्रमण शुरू करता है । "यूएसबी पोर्ट रीसेट" के सफल समापन पर, होस्ट पोर्ट यूएसबी संचार के लिए सक्षम है। पोर्ट सक्रिय हो जाता है (फ्रेम पैकेट बाहर बहना शुरू हो जाता है)।

USB प्रोटोकॉल का उपयोग करते हुए, होस्ट इस डिवाइस को अद्वितीय पता प्रदान करता है, और "डिवाइस डिस्क्रिप्टर" पढ़ता है। यह "डिवाइस एन्यूमरेशन" प्रक्रिया शुरू करता है। डिवाइस डिस्क्रिप्टर में यह जानकारी होती है कि वह किस डिवाइस वर्ग से संबंधित है (HID, COM, MIDI, प्रिंटर, आदि), और उस विशेष डिवाइस के VID / PID, साथ ही अन्य जानकारी का एक गुच्छा, तालिका 9-8 देखें।

डिवाइस वर्ग और VID / PID प्राप्त करने के बाद, होस्ट सॉफ़्टवेयर डिवाइस रजिस्ट्री में इस जानकारी से मेल खाने की कोशिश करता है, और संबंधित DEVICE ड्राइवर को लोड करता है, या तो एक सामान्य, या विक्रेता-विशिष्ट (यदि यह मौजूद है)। डिवाइस ड्राइवर तब "डिवाइस कॉन्फ़िगरेशन" सेट करने के साथ समाप्त होने वाले डिवाइस इंटरफ़ेस का चयन करके गणना प्रक्रिया को पूरा करता है। जाहिर है कि संपूर्ण USB संचार केवल इस विशेष पोर्ट के पीछे पहचाना जाता है , भले ही सभी पैकेट सभी सक्षम पोर्ट पर प्रसारित किए गए हों।

ऊपर USB कनेक्ट प्रोटोकॉल का सामान्य ढांचा है। किसी विशेष उद्देश्य के लिए डेटा पैकेटिंग (जैसे मिडी) एक अलग कहानी है, और यह सिस्टम स्तर पर उचित डिवाइस वर्ग प्राप्त होने पर, या तो आवेदन स्तर पर, या डिवाइस ड्राइवर स्तर पर नियंत्रित किया जाता है। देशी मिडी संचार प्राप्त करने के लिए, डिवाइस में यह वर्ग अपने विवरणक में होना चाहिए और सभी मिडी वर्ग परिभाषाओं का पालन करना चाहिए ।

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