इंटरनेट। कंप्यूटर। मदद करना। सलाह. मरम्मत

यूएसबी नियंत्रक प्रोग्रामिंग। प्रोग्रामिंग यूएसबी * डिवाइस। पोर्ट नंबर को डिवाइस से बांधें

लेकिन केवल डिवाइस को कंप्यूटर से भौतिक रूप से कनेक्ट करना ही पर्याप्त नहीं है, आपको उनके बीच डेटा विनिमय स्थापित करने की भी आवश्यकता है। पोर्ट कैसे चुनें और कनेक्शन कैसे व्यवस्थित करें? कुछ साल पहले, मानक समाधान COM पोर्ट का उपयोग करना था। वैसे, विभिन्न विशेषज्ञ अभी भी औद्योगिक कंप्यूटरों पर 8, 16, या यहां तक ​​कि 32 COM पोर्ट स्थापित करते हैं (सीरियल पोर्ट, नियंत्रक, आदि के लिए विभिन्न पीसीआई विस्तार कार्डों की एक पूरी श्रेणी है)। इस प्रकार, यदि आपको आरएस-232 इंटरफ़ेस के साथ कई बाहरी उपकरणों को कनेक्ट करने की आवश्यकता है, तो आपको महंगे एडेप्टर और विदेशी विस्तार बोर्ड की आवश्यकता हो सकती है, जो पुरानी परंपरा के अनुसार, स्टीमबोट पर हफ्तों तक रूस तक जाते हैं। वैसे, एक साधारण एडॉप्टर का नाम "DB9m / DB25f एडॉप्टर" केवल एक कंप्यूटर स्टोर मैनेजर के लिए जलन पैदा कर सकता है।

HID डिवाइस क्या है

अब लगभग सभी डिवाइस USB इंटरफ़ेस के माध्यम से कंप्यूटर से जुड़े हुए हैं। इसलिए, कई नए पीसी में COM पोर्ट बिल्कुल नहीं होता है।

USB इंटरफ़ेस - एक नए बाहरी डिवाइस को कंप्यूटर के साथ जोड़ने के लिए एक विशिष्ट समाधान, अधिक सटीक रूप से, यह USB 1.1 प्रोटोकॉल पर आधारित एक HID इंटरफ़ेस है।

हालाँकि बहुत से लोग सोचते हैं कि HID (ह्यूमन इंटरफ़ेस डिवाइस) इंटरफ़ेस विशेष रूप से कीबोर्ड, माउस और जॉयस्टिक के लिए है, यह बाहरी उपकरणों और कंप्यूटर के इंटरफ़ेस से संबंधित कई समाधानों के लिए उपयुक्त है।

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

HID डिवाइस गुण

HID डिवाइस के लिए सॉफ़्टवेयर समर्थन के आयोजन के दृष्टिकोण से, सब कुछ काफी आकर्षक लगता है: विंडोज़ के तहत काम करने के लिए, आप तैयार-सिद्ध एल्गोरिदम के आधार पर जल्दी से समझने योग्य कॉम्पैक्ट कोड बना सकते हैं। इस मामले में, डेवलपर के पास अपने स्वयं के शीर्ष-स्तरीय डेटा एक्सचेंज प्रोटोकॉल को लागू करने के लिए बहुत समय होगा, क्योंकि आवश्यक अमूर्त स्तर पहले से ही एचआईडी प्रोटोकॉल द्वारा व्यवस्थित किया गया है (तालिका देखें)। इसके अलावा, एक प्रोग्रामर के लिए एक लिखित एक्सचेंज प्रोटोकॉल को डीबग करना आसान है (बेशक, अगर कोई काम करने वाली एचआईडी डिवाइस है) - प्रोटोकॉल की सापेक्ष कठोरता के कारण, यह डिवाइस का समर्थन करने के लिए एक प्रोग्राम विकसित करने के लिए पर्याप्त है एक कंप्यूटर द्वारा. फिर भी होगा! HID डिवाइस के निर्माता द्वारा पहले ही बहुत सारा काम किया जा चुका है।

HID डिवाइस और कंप्यूटर के बीच डेटा विनिमय स्थापित करना

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

HID डिवाइस स्वयं मतदान आवृत्ति निर्धारित कर सकती है, जिसके दौरान किसी भी नए डेटा की उपस्थिति का पता लगाया जाता है। इसका मतलब यह है कि इतने निम्न स्तर पर भी, प्रोग्रामर सिस्टम पर भरोसा कर सकता है, क्योंकि मतदान दर और अन्य संचार पैरामीटर एचआईडी डिवाइस नियंत्रक प्रोग्राम में पूर्व-निर्धारित होने चाहिए। इसमें HID प्रोटोकॉल USB 1.1 या USB 2.0 के सामान्य विवरण से भिन्न होता है, जिसमें प्रोटोकॉल के संगठन के लिए सख्त आवश्यकताएं नहीं होती हैं। हालाँकि, विशिष्ट कार्यों के लिए जिनमें उच्च स्तर की सुरक्षा की आवश्यकता होती है, चक्रीय चुनावों से छुटकारा पाना काफी मुश्किल हो सकता है, जब डेटा के लगभग समान ब्लॉक लगातार प्रसारित होते हैं।

HID उपकरणों की प्रोग्रामिंग की विशेषताएं

HID उपकरणों में विशेष विवरणक होते हैं। जब होस्ट यह निर्धारित करता है कि डिवाइस HID वर्ग से संबंधित है, तो वह इसका नियंत्रण उपयुक्त ड्राइवर को स्थानांतरित कर देता है। माना जा रहा है कि आगे डेटा का आदान-प्रदान उन्हीं के नेतृत्व में किया जाएगा।

विंडोज़ पर, HidServ सिस्टम सेवा HID उपकरणों तक पहुँचने के लिए ज़िम्मेदार है। एचआईडी उपकरणों के लिए अनुरोधों के कार्यों और एचआईडी ड्राइवर के साथ काम करने की अन्य विशेषताओं के बारे में अधिक विवरण पी. वी. एगुरोव के काम "यूएसबी इंटरफ़ेस" में वर्णित हैं। उपयोग और प्रोग्रामिंग का अभ्यास” (सेंट पीटर्सबर्ग: बीएचवी-पीटर्सबर्ग, 2005)।

"शीर्ष स्तर" पर HID डिवाइसों की प्रोग्रामिंग

पास्कल पर काम करने वाले "एप्लाइड" प्रोग्रामर के कठिन जीवन को सिद्ध एचआईडी मॉड्यूल द्वारा सुविधाजनक बनाया गया है। पीएएस, छिपने के लिए खोल। dll (हिड यूजर लाइब्रेरी - जैसा कि फ़ाइल गुणों में निर्दिष्ट है)। फ़ाइल की टिप्पणियाँ कहती हैं कि यह Microsoft Corporation के hidsdi.h और hidpi.h मॉड्यूल पर आधारित है। और HID फ़ाइल स्वयं। पीएएस जेईडीआई() पैकेज का हिस्सा है।

Win32 वातावरण के लिए डेल्फ़ी में HID डिवाइस के साथ काम करने के लिए, TJvHidDeviceController घटक का उपयोग किया जाता है, जो HID डिवाइस तक पहुँचने के लिए एक सुविधाजनक वैश्विक प्रबंधक है। और पहले से ही इसके आधार पर, आप किसी विशिष्ट डिवाइस के साथ काम करने के लिए ऑब्जेक्ट इंस्टेंस प्राप्त कर सकते हैं।

TJvHidDeviceController घटक के मुख्य गुण और घटनाएँ

आइए TJvHidDeviceController घटक पर अधिक विस्तार से विचार करें। जब कोई HID डिवाइस सिस्टम में आता है (कनेक्ट होता है) तो OnArrival इवेंट सक्रिय हो जाता है, इस इवेंट के हैंडलर में TJvHidDevice क्लास के इंस्टेंस के माध्यम से डिवाइस तक पहुंच प्रदान की जाती है। साधारण घटना OnDeviceChange डिवाइस की स्थिति में बदलाव पर प्रतिक्रिया करती है, यह केवल सिस्टम में बदलाव का संकेत देती है। OnDeviceData ईवेंट तब सक्रिय होता है जब डेटा HID डिवाइसों में से किसी एक से आता है और हैंडलर को निम्नलिखित भेजता है: HidDev: TJvHidDevice; - वह उपकरण जिससे डेटा प्राप्त हुआ था;

OnDeviceDataError ईवेंट प्रसंस्करण प्रक्रिया में HidDev पैरामीटर पास करके डेटा ट्रांसफर त्रुटि की सूचना देता है: TJvHidDevice; - HID डिवाइस और त्रुटि: DWORD; - त्रुटि कोड। OnDeviceUnplug ईवेंट आपको सूचित करता है कि एक डिवाइस को सिस्टम पर स्थापित डिवाइसों की सूची से हटा दिया गया है। प्लग और अनप्लग पर ईवेंट हैंडलर के प्रकार समान हैं (स्रोत पाठ में: TJvHidUnplugEvent = TJvHidPlugEvent)। HID डिवाइस से संबंधित TJvHidDevice क्लास का एक ऑब्जेक्ट हैंडलर को पास कर दिया जाता है।

Enumerate विधि को कॉल करके सिस्टम में उपलब्ध HID डिवाइसों को क्रमिक रूप से गिनने के लिए, OnEnumerate इवेंट का इरादा है, यानी, इवेंट हैंडलर में, पाए गए डिवाइस क्रमिक रूप से ऑब्जेक्ट के रूप में प्रसारित होते हैं। इस घटना को एन्यूमरेट विधि द्वारा जबरन ट्रिगर किया जाता है, जिसका उपयोग मौजूदा एचआईडी उपकरणों को हैंडलर के माध्यम से "पास" करने के लिए किया जाता है, उदाहरण के लिए, होस्ट (कंप्यूटर) द्वारा शुरू किए गए एचआईडी उपकरणों की स्थिति का ऑडिट करते समय।

OnRemoval ईवेंट तब सक्रिय होता है जब डिवाइस को सिस्टम से भौतिक रूप से हटा दिया जाता है और इसमें OnDeviceUnplug के समान TJvHidUnplugEvent हैंडलर प्रकार होता है। काउंटबायप्रोडक्टनाम फ़ंक्शन तर्क में निर्दिष्ट उत्पाद नाम से मेल खाने वाले उपकरणों की संख्या लौटाता है, और काउंटबायवेंडरनाम तर्क में निर्दिष्ट विक्रेता नामों की संख्या लौटाता है।

TJvHidDevice वर्ग के मुख्य गुण और घटनाएँ

TJvHidDevice वर्ग एकल HID डिवाइस का आभासी प्रतिनिधित्व है। इस वर्ग का एक नया ऑब्जेक्ट, जैसा कि पहले ही उल्लेख किया गया है, OnArrival या OnEnumerate ईवेंट से प्राप्त किया जा सकता है। TJvHidDeviceController और TJvHidDevice कक्षाओं की कार्यक्षमता आंशिक रूप से दोहराई गई है, क्योंकि उनमें से पहला सिस्टम में उपलब्ध HID उपकरणों के एक सेट के साथ काम करने के लिए एक सामान्य टूलकिट और उनमें से एक तक पहुंचने के लिए एक तंत्र को एकीकृत करता है। किसी डिवाइस को उसके सीरियल नंबर, उत्पाद नाम और विक्रेता नाम गुणों द्वारा विशिष्ट रूप से पहचाना जा सकता है। आप ऐसी वस्तु का उपयोग करके डेटा के आगमन के बारे में जानकारी प्राप्त करने के लिए ऑनडाटा इवेंट का उपयोग कर सकते हैं। डेटा WriteFile विधि के माध्यम से भेजा जाता है (सख्त अर्थ में, एक फ़ंक्शन के माध्यम से)। WriteFile, WriteFile (kernel32) सिस्टम फ़ंक्शन के चारों ओर एक आवरण है।

इस तथ्य को नियंत्रित करने के लिए कि डिवाइस हटा दिया गया है, ऑनअनप्लग इवेंट में एक कस्टम हैंडलर असाइन करें। HID डिवाइस के साथ डेटा एक्सचेंज शुरू करने से पहले, आपको यह सुनिश्चित करना होगा कि ऐसा एक्सचेंज hasReadWriteAccess का उपयोग करके संभव है। डेटा विनिमय त्रुटि की घटना के लिए इस वर्ग में एक अलग OnDataError ईवेंट भी है।

और अब आइए एक "लाइव" प्रोजेक्ट के कोड अंशों को देखें जो एक गैर-मानक डिवाइस - HID-आधारित प्लास्टिक चिप कार्ड के साथ डेटा विनिमय के आयोजन के लिए एक परीक्षण क्लाइंट एप्लिकेशन को लागू करता है। यथार्थवाद के संघर्ष में, लेखक ने लिस्टिंग से "अतिरिक्त" तकनीकी कोड बाइंडिंग को बाहर न निकालने की स्वतंत्रता ली।

स्कैनडिवाइस विधि (लिस्टिंग 1) को आवश्यक एचआईडी डिवाइस के लिए सिस्टम में खोज की प्रक्रिया शुरू करने के लिए डिज़ाइन किया गया है। अधिकांश कोड, एन्यूमरेट विधि को कॉल के अपवाद के साथ, वैकल्पिक है और एप्लिकेशन को लचीलापन प्रदान करता है, उदाहरण के लिए, ताकि आप उसी परीक्षण कार्यक्रम में गैर-एचआईडी इंटरफ़ेस पर काम करने की क्षमता जोड़ सकें। प्रोग्राम चलने के दौरान AddError विधि डिबगिंग जानकारी को विंडो पर प्रिंट करती है।

लिस्टिंग 2 आवश्यक बाहरी डिवाइस ढूंढने के लिए OnEnumerate ईवेंट हैंडलर दिखाता है। सरलता के लिए, हम मान लेंगे कि प्रोग्राम अपनी आवश्यकता के अनुसार केवल एक ही डिवाइस के साथ काम कर सकता है।

परियोजना के आगे के कार्यान्वयन पर विचार करने से पहले, हमें स्वीकृत शीर्ष-स्तरीय डेटा विनिमय प्रारूप के बारे में थोड़ी बात करनी चाहिए, यानी डेटा प्राप्त करने और संचारित करने के तरीकों और हल किए जा रहे विशिष्ट लागू कार्य के बीच मध्यस्थ बनने के लिए डिज़ाइन की गई संरचना के बारे में . तथ्य यह है कि यहां डेवलपर को अपनी रचनात्मक क्षमताओं का एहसास करने का अवसर दिया जाता है। या यों कहें, डेवलपर्स, क्योंकि एक नया प्रोटोकॉल बनाने की प्रक्रिया अक्सर दो-तरफा होती है, और पहला वायलिन वह व्यक्ति बजाता है जिसे एक्सचेंज एल्गोरिदम को लागू करना अधिक कठिन लगता है। सामान्य तौर पर, विनिमय प्रोटोकॉल जो भी हो, प्रत्येक सॉफ़्टवेयर इकाई को यथासंभव दृश्यमान और आत्मनिर्भर बनाना हमेशा अच्छा होता है, भले ही कुछ आम तौर पर स्वीकृत परंपराओं की हानि हो। सर्वोत्तम समाधान वह है जिसे कम समय में सॉफ़्टवेयर वातावरण से न्यूनतम बंधन के साथ और आगे के विकास के लिए महान अवसरों के साथ लागू किया जाएगा। इन सिद्धांतों के आधार पर, एक शीर्ष-स्तरीय एक्सचेंज प्रोटोकॉल बनाया गया, जहां मुख्य अवधारणा "कमांड" है। सूची 3 से पता चलता है कि लेखक को स्ट्रिंग डेटा कितना पसंद है, जिसने प्रोग्राम मॉड्यूल को डीबग करते समय उसे एक से अधिक बार बचाया। यह कितना अद्भुत है कि हमारे पास एक स्ट्रिंग प्रकार भी है! सभी प्रोटोकॉल कमांड को श्रेणियों (वर्गों) में विभाजित किया गया है, जिसके भीतर एक कमांड कोड होता है जो विशिष्ट रूप से इसके उद्देश्य को दर्शाता है। edParam पैरामीटर का उपयोग डिवाइस पर डेटा भेजने के लिए किया जाता है, और edAnswerData पैरामीटर में डिवाइस से प्राप्त डेटा शामिल होता है। वर्णित रिकॉर्ड सदस्यों का स्ट्रिंग प्रकार आपको HEX स्ट्रिंग प्रारूप में डेटा को स्वतंत्र रूप से और दृश्य रूप से हेरफेर करने की अनुमति देता है। और सबसे सुखद बात यह है कि वर्णित रिकॉर्ड का प्रारूप वैचारिक रूप से इसके प्रत्यक्ष उद्देश्य और इसकी प्रस्तुति के विभिन्न रूपों (आईएनआई, एचईएक्स, एक्सएमएल, आदि) के बीच में कहीं खड़ा है।

कमांड निष्पादन, यानी डिवाइस पर डेटा भेजना, 8 बाइट्स (लिस्टिंग 4) की लंबाई के साथ डेटा पैकेट भेजने का उपयोग करके कार्यान्वित किया जाता है। यह लंबाई ही एकमात्र निर्णय नहीं है, यह विकल्प ऊपरी परत प्रोटोकॉल की आवश्यकताओं से तय होता है और प्रत्येक विशिष्ट मामले में भिन्न हो सकता है। इसे ही कहते हैं स्वाद का मामला. ExecuteCommand विधि (पीसी डिस्क वर्ल्ड में लिस्टिंग 5) में अजीब IsUSBMode ध्वज को एक अनुस्मारक के रूप में छोड़ा गया है कि USB के साथ काम करने के बजाय, हमें COM पोर्ट या किसी अन्य इंटरफ़ेस का उपयोग करने की आवश्यकता हो सकती है। भेजे गए डेटा समूह की शुरुआत में, मनमाने ढंग से चुने गए प्रारूप (उदाहरण के लिए, 3E3E3E2B) का एक सिंक अनुक्रम डिवाइस पर प्रसारित किया जाता है, जो डिवाइस को सूचित करता है कि उसके इनपुट पर पूरी तरह से वैध डेटा है। मैं आपको याद दिला दूं कि इस मामले में हम HID के बारे में ज्यादा बात नहीं कर रहे हैं, बल्कि एक विशिष्ट शीर्ष-स्तरीय प्रोटोकॉल के बारे में बात कर रहे हैं, जो वैचारिक रूप से हार्डवेयर से अलग है और विशेष लागू समस्याओं को हल करने के लिए डिज़ाइन किया गया है।

डिवाइस (8 बाइट्स के पैकेज) से प्राप्त डेटा के GetDataExecutor हैंडलर में, एक विशेष रूप से बनाए गए OnNewInputData ईवेंट का उपयोग प्रारंभिक रूप से संसाधित डेटा को आगे की प्रक्रिया के लिए स्थानांतरित करने के लिए किया गया था, जो उनके पुराने और नए मूल्यों को दर्शाता है (लिस्टिंग 6 "वर्ल्ड" पर) पीसी डिस्क का")। इस प्रकार, कच्चे डेटा के आगमन की घटनाओं और आगे की प्रक्रिया के संकेत को अलग कर दिया जाता है, जिससे गलत, बार-बार या अनावश्यक इनपुट जानकारी के लिए प्रारंभिक चरण में कुछ विशिष्ट चेतावनी एल्गोरिदम को जोड़ा जा सकता है।

यहां प्रस्तुत एचआईडी डिवाइस के साथ काम करने के उदाहरण लेख के सामान्य विचार को दर्शाते हैं - डेल्फ़ी टूल का उपयोग करके गैर-मानक एचआईडी उपकरणों की प्रोग्रामिंग की सापेक्ष सादगी।

आइए न्यूनतम से शुरू करें:
18f2455 शामिल करें - प्रयुक्त एमके के लिए लाइब्रेरी
--
Enable_digital_io() - सभी इनपुट को डिजिटल मोड पर स्विच करें
--
उपनामबटन हैपिन_बी7 -- चूँकि हमारे पास एक बटन जुड़ा हुआ है, इसे घोषित करें
पिन_बी7_दिशा = इनपुट - प्रवेश द्वार पर बटन हमारे लिए काम करता है
--
- एक पंक्ति - और हमारे पास यूएसबी सीडीसी के साथ काम करने के लिए आवश्यक सभी चीजें हैं
usb_serial--usb लाइब्रेरी शामिल करें
--
यूएसबी_सीरियल_इनिट() -- --यूएसबी सीडीसी प्रारंभ करें
हमेशा के लिए लूप- मुख्य लूप, लगातार चलता रहता है
यूएसबी_सीरियल_फ्लश() --यूएसबी अद्यतन. यह प्रक्रिया सभी आवश्यक कार्य करती है
- पीसी के साथ कनेक्शन बनाए रखने के लिए कार्रवाई
अंत पाश

इस कोड को संकलित करने के बाद, परिणामी HEX फ़ाइल को बूटलोडर का उपयोग करके एमके पर लिखना और डिवाइस शुरू करना, आप देख सकते हैं कि सिस्टम में एक नया डिवाइस कैसे परिभाषित किया गया है: वर्चुअल कॉम-पोर्ट।

अब जबकि उपकरण पहले से ही काम कर रहा है, आइए इसे संचार करना सिखाएं।

प्राप्त बाइट को पढ़ने के लिए एक फ़ंक्शन है यूएसबी_सीरियल_रीड(बाइट ) :बूलियन. यदि कोई प्राप्त बाइट है, तो यह उसे निर्दिष्ट वेरिएबल में संग्रहीत करता है और वापस कर देता है सत्य, अन्यथा वापस आ जाता है असत्य.

बाइट भेजने की एक प्रक्रिया होती है यूएसबी_सीरियल_डेटा. यह एक वेरिएबल के रूप में छिपा हुआ है, इसलिए एक बाइट भेजने के लिए, इसे भेजे जाने वाले बाइट का मान निर्दिष्ट करना पर्याप्त है।

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

18f2455 शामिल करें
--
Enable_digital_io()
--
उपनामबटन हैपिन_बी7
पिन_बी7_दिशा = इनपुट
--
--
यूएसबी_सीरियल शामिल करें
--
यूएसबी_सीरियल_इनिट()
वर बाइटचौधरी - एक वेरिएबल घोषित करें
हमेशा के लिए लूप-- मुख्य घेरा
यूएसबी_सीरियल_फ्लश()
अगर(usb_serial_read(ch)) तब-- यदि कोई बाइट प्राप्त होती है, तो उसे ch को लिखा जाएगा
usb_serial_data=ch - प्राप्त बाइट वापस भेजें
अगर अंत
अंत पाश

हम संकलन करते हैं, बटन दबाए रखते हैं, पावर विकृत करते हैं, बूटलोडर लॉन्च करते हैं, फ़र्मवेयर बदलते हैं, इसे लॉन्च करते हैं।
सिस्टम में डिवाइस का फिर से पता चला, अब हमें डिवाइस के संचालन का परीक्षण करने के लिए सॉफ़्टवेयर की आवश्यकता है।

जबकि हमारे पास अपना खुद का नहीं है, हम एक तैयार टर्मिनल का उपयोग करते हैं: मैंने रियलटर्म प्रोग्राम का उपयोग किया।
हम वांछित संख्या के साथ पोर्ट खोलते हैं और डेटा भेजते हैं।


और हमने जो भेजा था वह हमें वापस मिल जाता है। तो सब कुछ वैसे ही काम कर रहा है जैसे उसे करना चाहिए।

कोमल

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

हम एक नया प्रोजेक्ट बनाते हैं, आवश्यक घटकों को इस रूप में बिखेरते हैं:
स्पिनएडिट1 - पोर्ट नंबर निर्दिष्ट करने के लिए
बटन 1 - कनेक्शन स्थापित करने के लिए
बटन2 - कनेक्शन तोड़ने के लिए
स्पिनएडिट2 - एक बाइट को दशमलव रूप में दर्ज करने के लिए
बटन3 - एक बाइट भेजने के लिए
मेमो1 - प्राप्त जानकारी प्रदर्शित करने के लिए।

जैसा कि ऊपर बताया गया है, आपको कॉम पोर्ट के साथ उसी तरह काम करने की ज़रूरत है जैसे एक नियमित टेक्स्ट फ़ाइल के साथ: CreateFile, WriteFile और ReadFile फ़ंक्शंस का उपयोग करके।

विवरण में न जाने के लिए, आइए कॉम पोर्ट के साथ काम करने के लिए एक तैयार लाइब्रेरी लें: कॉमपोर्ट।

हम प्रत्येक बटन पर आवश्यक कार्य लटकाते हैं और अंतिम कोड प्राप्त करते हैं:

इकाई इकाई1;

इंटरफेस

उपयोग
विंडोज, संदेश, SysUtils, वेरिएंट, कक्षाएं, ग्राफिक्स, नियंत्रण, फॉर्म,
संवाद, StdCtrls, स्पिन,ComPort;

प्रकार
TForm1 = वर्ग(TForm)
स्पिनएडिट1: टीएसपिनएडिट;
बटन 1: टी बटन;
बटन2: टीबटन;
स्पिनएडिट2: टीएसपिनएडिट;
बटन3: टीबटन;
मेमो1:टीमेमो;
प्रक्रिया ऑनरीड (प्रेषक: टॉब्जेक्ट; रीडबाइट्स: बाइट की सरणी);
प्रक्रिया बटन1क्लिक(प्रेषक: टॉब्जेक्ट);
प्रक्रिया Button2Click (प्रेषक: TObject);
प्रक्रिया फॉर्मडिस्ट्रॉय (प्रेषक: टॉब्जेक्ट);
प्रक्रिया बटन3क्लिक(प्रेषक: टॉब्जेक्ट);
निजी
(निजी घोषणाएँ)
पोर्ट: टीकॉमपोर्ट;
जनता
(सार्वजनिक घोषणाएँ)
अंत;

वर
फॉर्म1: टीफॉर्म1;
संख्या: पूर्णांक;
कार्यान्वयन

प्रक्रिया TForm1.Button1Click (प्रेषक: TObject);
शुरू
पोर्ट:= TComPort.Create(SpinEdit1.Value, br115200); // एक कनेक्शन बनाएं
पोर्ट.ऑनरीड:= ऑनरीड; //प्राप्त डेटा को पढ़ने के लिए एक स्ट्रीम बनाएं
बटन2.सक्षम:= सत्य; // कनेक्शन बंद करें बटन सक्रिय करें
अंत;

प्रक्रिया TForm1.Button2Click (प्रेषक: TObject);
शुरू
पोर्ट फ्री; // कनेक्शन बंद करें
बटन2.सक्षम:=झूठा; //बटन को अक्षम करें
अंत;

प्रक्रिया TForm1.Button3Click (प्रेषक: TObject);
शुरू
यदि Button2.Enabled है तो Port.Write();
अंत;

प्रक्रिया TForm1.FormDestroy(प्रेषक: TObject);
शुरू
यदि बटन2.सक्षम है तो
पोर्ट फ्री;
अंत;

प्रक्रिया TForm1.OnRead (प्रेषक: TObject; ReadBytes: बाइट की सरणी);
वर
मैं:पूर्णांक;
शुरू
i के लिए:= निम्न(रीडबाइट्स) से उच्च(रीडबाइट्स) करें // प्राप्त बाइट्स की सरणी से गुजरें
शुरू
मेमो1.टेक्स्ट:= मेमो1.टेक्स्ट + "।" +InttoHex(रीडबाइट्स[i],2); //विंडो में इसका HEX मान जोड़ें
इंक(संख्या); //प्राप्त बाइट्स की संख्या गिनें
अंत;
यदि संख्या > 10 है तो प्रारंभ करें
Memo1.Lines.Add('' ); //ट्रांसफर लाइन
संख्या:=0;
अंत;
अंत;

हम शुरू करते हैं, कनेक्शन स्थापित करते हैं, बाइट्स भेजते हैं:

तो हमारा सबसे सरल टर्मिनल सबसे सरल यूएसबी डिवाइस के साथ काम करने के लिए तैयार है।

जैसा कि आप देख सकते हैं, पढ़ना और लिखना बाइट्स की गतिशील सारणी हैं।

प्राप्त जानकारी को संसाधित करके, वर्तमान कार्य के लिए उपयुक्त आवश्यक विनिमय प्रोटोकॉल तैयार करना संभव है।

18f2455 शामिल करें
--
Enable_digital_io()
--
उपनामबटन हैपिन_बी7
पिन_बी7_दिशा = इनपुट
--
--
यूएसबी_सीरियल शामिल करें
--
यूएसबी_सीरियल_इनिट()
वर बाइटचौधरी
वर बाइटमैं - दूसरा वेरिएबल घोषित करें
हमेशा के लिए लूप-- मुख्य घेरा
यूएसबी_सीरियल_फ्लश()
अगर(usb_serial_read(ch)) तब--यदि बाइट प्राप्त हो तो आवश्यक कार्यवाही करें
मामलाच का -- बाइट संख्या पर पुनरावृति करें
0 : यूएसबी_सीरियल_डेटा = 0xff
1 : यूएसबी_सीरियल_डेटा = बटन - बटन स्थिति भेजें
अन्यथा अवरोध पैदा करना--यदि कुछ और प्राप्त हो
के लिए 16 का उपयोग करते हुएमैं कुंडली- डेटा के 10 बाइट्स भेजें
यूएसबी_सीरियल_डेटा = सीएच +आई - सीएच से सीएच+15
अंत पाश
अंत ब्लॉक
अंत मामला
अगर अंत
अंत पाश

अतिरिक्त सुविधाओं

यदि आप वहां रुकते हैं, तो आपको लाइब्रेरी का उपयोग करने के उदाहरण के विस्तृत विवरण के साथ एक नियमित लेख मिलता है, जो वेब पर पर्याप्त है। इसलिए, मैं थोड़ी और गहन जानकारी जोड़ूंगा।

डेटा भेजना सरल बनाएं

एक बार में एक बाइट जानकारी भेजना हमेशा सुविधाजनक नहीं होता है। पुस्तकालय बहुत उपयोगी हो सकता है छपाई. इसमें सभी संभावित प्रारूपों में सभी संभावित लंबाई के डेटा भेजने की प्रक्रियाएं शामिल हैं: बाइट, हेक्स, डीसी, बिन, बूलियन, जो प्रोग्राम में डेटा के आउटपुट को सरल बना सकती है।
>प्रिंट शामिल करें
...
वर्डवर्डडेटा
print_dword_hex (usb_serial_data, डेटा)

सभी कमांड का नाम लाइब्रेरी फ़ाइल में पाया जा सकता है।

पीसी से कनेक्शन की प्रतीक्षा की जा रही है

यदि माइक्रोकंट्रोलर का मुख्य चक्र शुरू करने से पहले पीसी के साथ कनेक्शन स्थापित करना आवश्यक है, तो आप इसके पहले लाइनें जोड़ सकते हैं
जबकि(usb_cdc_line_status() == 0x00) कुंडली
अंत पाश

पोर्ट नंबर को डिवाइस से बांधें

यदि आप सब कुछ वैसे ही छोड़ देते हैं, तो सिस्टम प्रत्येक नए कनेक्शन के लिए पहला निःशुल्क पोर्ट नंबर आवंटित करेगा। और इसका मतलब है कि आपको इस पर नज़र रखनी होगी।
ऐसा होने से रोकने के लिए, आपको यूएसबी लाइब्रेरी कनेक्ट करने से पहले डिवाइस को एक अद्वितीय सीरियल नंबर मान निर्दिष्ट करना होगा:
संख्या किसी भी लम्बाई की हो सकती है और इसमें विभिन्न वर्ण हो सकते हैं।
स्थिरांक बाइट USB_STRING3=
{
24 , -- सारणी की लंबाई
0x03 , --bDescriptorType
"0" , 0x00 ,
"1" , 0x00 ,
"2" , 0x00 ,
"3" , 0x00 ,
"4" , 0x00 ,
"5" , 0x00 ,
"6" , 0x00 ,
"7" , 0x00 ,
"8" , 0x00 ,
"9" , 0x00 ,
"एक्स" 0x00
}

डिवाइस का नाम बदलकर अपना रखें

आप ड्राइवरों को स्थापित करने से पहले सिस्टम में दिखाई देने वाले डिवाइस के नाम को सीरियल नंबर की तरह नाम के साथ एक सरणी घोषित करके बदल सकते हैं, यह यूएसबी लाइब्रेरी को कनेक्ट करने से पहले किया जाना चाहिए।
स्थिरांक बाइट USB_STRING2=
{
28 , --
0x03 , --bDescriptorType
"डी", 0x00 ,
"इ", 0x00 ,
"एम", 0x00 ,
"ओ", 0x00 ,
" " , 0x00 ,
"बी", 0x00 ,
"ओ", 0x00 ,
"ए", 0x00 ,
"आर", 0x00 ,
"डी", 0x00 ,
" " , 0x00 ,
"=" , 0x00 ,
")" 0x00
}

लेकिन अफसोस, ड्राइवरों को स्थापित करने के बाद, डिवाइस अपना नाम .inf फ़ाइल में निर्दिष्ट नाम में बदल देगा, इसलिए हम वहां भी नाम बदल देंगे


विवरण='डेमो सीडीसी'

हम डिवाइस का स्वचालित कनेक्शन व्यवस्थित करते हैं

अफ़सोस, इस कार्य को पूरा करने का कोई सीधा तरीका नहीं है, इसलिए आपको प्रयास करना होगा।

सबसे पहले, आपको अपने डिवाइस को सैकड़ों अन्य मानक सीडीसी फर्मवेयर के बीच आसानी से पहचानने के लिए एक अद्वितीय निर्माता और उत्पाद मूल्य निर्दिष्ट करने की आवश्यकता है।
वीआईडी ​​और पीआईडी ​​पैसे के लिए दिए जाते हैं, तो आइए चीनियों के रास्ते पर चलें: चुपचाप अपने लिए स्पष्ट रूप से मुक्त मूल्य लें।

फ़र्मवेयर:
USB लाइब्रेरी को कनेक्ट करने से पहले फ़र्मवेयर में दो वेरिएबल घोषित किए जाने चाहिए

स्थिरांक शब्द USB_SERIAL_PRODUCT_ID = 0xFF10
स्थिरांक शब्द USB_SERIAL_VENDOR_ID = 0xFF10

FF10 के स्थान पर आप कोई भी दो शब्द (2 बाइट्स) डाल सकते हैं। अंतिम परिणाम संलग्न संग्रह में निहित है।

ड्राइवर:
चूँकि ड्राइवर हमारे VID और PID के संयोजन के लिए डिज़ाइन नहीं किए गए हैं, हम अपने मानों को .inf फ़ाइल में मैन्युअल रूप से जोड़ देंगे:


%विवरण%=ड्राइवरइंस्टॉल, USB\VID_FF10&PID_FF10


%विवरण%=ड्राइवरइंस्टॉल, USB\VID_FF10&PID_FF10

कोमल:
डिवाइस कनेक्शन/डिस्कनेक्शन घटनाओं को पकड़ने के लिए, हम कंपोनेंटयूएसबी लाइब्रेरी को कनेक्ट करेंगे। मैं प्रत्येक पंक्ति की व्याख्या करना आवश्यक नहीं समझता: सभी परिवर्तन संलग्न परियोजना में देखे जा सकते हैं।

परिणाम

स्क्रीनशॉट में इसे देखना कठिन है, लेकिन सेंड बटन तभी सक्रिय होता है जब कोई कनेक्टेड डिवाइस हो, और हर 50ms पर प्रोग्राम बटन स्थिति प्राप्त करने के लिए एक अनुरोध भेजता है (जो, हालांकि, गलत है, क्योंकि बटन दबाने पर कार्रवाई की जानी चाहिए) एमके पर)।

जैसा कि आप देख सकते हैं, यूएसबी के माध्यम से एमके और पीसी के बीच डेटा एक्सचेंज को व्यवस्थित करना सबसे कठिन काम नहीं है। परिणामी कनेक्शन का उपयोग न केवल अंतिम उद्देश्यों के लिए किया जा सकता है: यह किसी प्रोग्राम को डीबग करने के लिए भी उपयुक्त है। आख़िरकार, गणना के परिणाम, रजिस्टरों और चरों की वर्तमान स्थिति को कंप्यूटर पर भेजना मोर्स कोड में एलईडी की एक जोड़ी को झपकाने से कहीं अधिक स्पष्ट है।

और अंत में: मैं आपको मूड लैंप के स्रोत कोड पर गौर करने की सलाह देता हूं। वहां आप एक सुविधाजनक विनिमय प्रोटोकॉल को व्यवस्थित करने के लिए प्राप्त डेटा को संसाधित करने का एक बहुत अच्छा विकल्प पा सकते हैं।

चित्र 1

USB इंटरफ़ेस एक पीसी से बाह्य उपकरणों को जोड़ने के लिए एक इंटरफ़ेस के रूप में तेजी से लोकप्रिय हो रहा है, और आधुनिक कंप्यूटरों में अक्सर सामान्य RS-232 इंटरफ़ेस नहीं होता है। USB की लोकप्रियता कई कारणों से है, यहां मुख्य हैं:

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

हालाँकि, MCU डेवलपर्स द्वारा USB के मुख्यधारा के उपयोग को रोकने वाले (अक्सर अनुचित) कारक हैं:

  • विंडोज़ के लिए ड्राइवरों को प्रोग्राम करने की आवश्यकता
  • अंतर्निर्मित यूएसबी इंटरफ़ेस वाले माइक्रोकंट्रोलर का प्रचलन अपेक्षाकृत कम है
  • पाठ 2: एक यूएसबी 2.0 अनुपालक एचआईडी जॉयस्टिक डिवाइस बनाएं।

लेखों की इस श्रृंखला का उद्देश्य यह दिखाना है कि इन कठिनाइयों को दूर करना काफी आसान है और हर कोई अपने डिवाइस को सामान्य आरएस-232 से यूएसबी में "अपग्रेड" कर सकता है या यूएसबी इंटरफ़ेस के साथ एक नया डिवाइस बना सकता है।

उदाहरणों में एक माइक्रोकंट्रोलर के रूप में, माइक्रोचिप द्वारा निर्मित एक माइक्रोकंट्रोलर पर विचार किया जाएगा। USB 2.0 इंटरफ़ेस के साथ PIC18F4550 (कम गति और पूर्ण गति का समर्थन करता है)।

पाठ 1. विंडोज़ प्रोग्रामिंग के बिना यूएसबी, वर्चुअल COM पोर्ट

USB उपकरणों को विकसित करते समय उत्पन्न होने वाले कार्यों में से एक RS-232 इंटरफ़ेस से USB में संक्रमण है, और यदि "पुराने" डिवाइस को संशोधित किया जा रहा है या डिवाइस को मौजूदा प्रोटोकॉल और पीसी सॉफ़्टवेयर के साथ संगत होना चाहिए, तो यह वांछनीय है कंप्यूटर पर किसी भी सॉफ़्टवेयर संशोधन से छुटकारा पाएं। सॉफ़्टवेयर। इस समस्या का एक समाधान USB इंटरफ़ेस को वर्चुअल COM पोर्ट के रूप में उपयोग करना है। इस पद्धति के उपयोग से कंप्यूटर सॉफ़्टवेयर को संशोधित करने की आवश्यकता समाप्त हो जाती है, क्योंकि। USB कनेक्शन को पर्सनल कंप्यूटर द्वारा एक अतिरिक्त COM पोर्ट के रूप में देखा जाता है। एक अन्य महत्वपूर्ण लाभ यह है कि मानक विंडोज ड्राइवरों का उपयोग किया जाता है और कोई कस्टम ड्राइवर बनाने की आवश्यकता नहीं होती है।

यूएसबी विनिर्देश संचार उपकरणों के एक वर्ग (संचार उपकरण वर्ग - सीडीसी) का वर्णन करता है, जो सीरियल पोर्ट इम्यूलेशन सहित दूरसंचार (मॉडेम, टर्मिनल, टेलीफोन) और नेटवर्क उपकरणों (ईथरनेट एडेप्टर और हब, एडीएसएल मोडेम) के लिए कनेक्शन मोड के एक सेट को परिभाषित करता है। .

आइए एक उदाहरण के रूप में एक उपकरण लें जो एक पोटेंशियोमीटर से वोल्टेज डेटा और TC77 डिजिटल सेंसर से तापमान को RS-232 के माध्यम से प्रसारित करता है, और दो एलईडी को चालू / बंद करने के आदेश भी प्राप्त करता है (सरलता के लिए, हम इस उदाहरण को PICDEM™ FS पर लागू करते हैं) यूएसबी प्रदर्शन बोर्ड बोर्ड, लेकिन आप एक सरल सर्किट को असेंबल कर सकते हैं - नीचे देखें)।

PICDEM FS-USB डिबग बोर्ड को USB2.0 बस के साथ PIC18F4550 माइक्रोकंट्रोलर पर आधारित उपकरणों के विकास और प्रदर्शन के लिए डिज़ाइन किया गया है। बोर्ड में TQFP44 पैकेज में PIC18F4550 नियंत्रक है, जिसमें निम्नलिखित विशेषताएं हैं:

  • अधिकतम ऑपरेटिंग आवृत्ति - 48 मेगाहर्ट्ज (12 एमआईपीएस);
  • 32 KB फ़्लैश प्रोग्राम मेमोरी (उन्नत फ़्लैश तकनीक);
  • 2 केबी डेटा मेमोरी (जिसमें से 1 केबी डुअल-पोर्ट रैम);
  • 256 बाइट्स EEPROM डेटा मेमोरी;
  • FS USB2.0 इंटरफ़ेस अंतर्निर्मित ट्रांसीवर और वोल्टेज रेगुलेटर के साथ 12Mbps गति का समर्थन करता है।

बोर्ड में है:

  • क्वार्ट्ज 20 मेगाहर्ट्ज;
  • USART से USB पर जाने की संभावना प्रदर्शित करने के लिए RS-232 इंटरफ़ेस;
  • इन-सर्किट प्रोग्रामिंग और डिबगिंग के लिए कनेक्टर
  • यूएसबी बस पावर पर स्विच करने की क्षमता के साथ वोल्टेज स्टेबलाइजर;
  • PICtail™ विस्तार कनेक्टर;
  • तापमान सेंसर TC77 I2C के माध्यम से जुड़ा हुआ है;
  • एडीसी इनपुट से जुड़ा परिवर्तनीय अवरोधक;
  • एलईडी, बटन।

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


चावल। 2

आइए अपने डिवाइस को USB से कनेक्ट करना शुरू करें।

माइक्रोचिप टेक्नोलॉजी इंक. एक तैयार एप्लिकेशन उदाहरण प्रस्तुत करता है AN956, जो PIC18F2550, PIC18F2455, PIC18F4455, PIC18F4550 माइक्रोकंट्रोलर के लिए USB CDC समर्थन लागू करता है। कार्यक्रम मॉड्यूलर आधार पर बनाया गया है, जो तैयार परियोजनाओं में आसान आधुनिकीकरण और एकीकरण की अनुमति देता है।

नियंत्रक के प्रारंभिक आरंभीकरण के बाद, प्रोग्राम कई तैयार कार्यों के माध्यम से यूएसबी इंटरफ़ेस के माध्यम से पीसी के साथ संचार कर सकता है:

आइए USB के माध्यम से डेटा भेजने और प्राप्त करने के लिए अपने प्रोग्राम को संशोधित करें।

डेटा तैयार करने और संचारित करने के लिए कार्यक्रम का अंश:

डेटा रिसेप्शन:

if(getsUSBUSART(input_buffer,1)) (स्विच (इनपुट_बफर) (केस "1": mLED_3_On(); ब्रेक; केस "2": mLED_3_Off(); ब्रेक; केस "3": mLED_4_On(); ब्रेक; केस " 4" : mLED_4_Off(); टूटना; डिफ़ॉल्ट: टूटना; ) )

डिवाइस को यूएसबी से कनेक्ट करने के बाद, सिस्टम नए डिवाइस को पहचान लेगा


चावल। 3

और नए उपकरण स्थापित करता है


चावल। 4

हम निर्दिष्ट स्थान से इंस्टॉलेशन का चयन करते हैं और प्रोग्राम के लिए स्रोत कोड के सेट से AN956 तक mcpusb.inf फ़ाइल के स्थान के लिए पथ निर्दिष्ट करते हैं। उसके बाद, सिस्टम में एक नया उपकरण स्थापित किया जाता है।


चावल। 5

तो, नया उपकरण उपयोग के लिए तैयार है। सिस्टम में एक नया वर्चुअल COM पोर्ट है।


चावल। 6

अब हमारे प्रोग्राम में हम डिवाइस के साथ संचार करने के लिए दिखाई देने वाले वर्चुअल COM पोर्ट का चयन कर सकते हैं...


चावल। 7

... और देखें कि डिवाइस वास्तव में COM पोर्ट के माध्यम से काम करना शुरू कर देता है जो USB कनेक्शन के माध्यम से सिस्टम में दिखाई देता है।

यह ध्यान दिया जाना चाहिए कि यूएसबी डेटा नियंत्रण और सुधार प्रदान करता है, इसलिए प्रवाह दर, समता बिट्स और प्रवाह नियंत्रण जैसी अवधारणाएं अमूर्त अवधारणाएं बन जाती हैं, और हमारे मामले में उन्हें कोई भी चुन सकता है, एकमात्र सूचनात्मक पैरामीटर वर्चुअल COM पोर्ट नंबर है।

PICDEM सीडीसी विंडो


चावल। 8

अंतर्निहित USB 2.0 मॉड्यूल के साथ PIC18Fxx5x माइक्रोकंट्रोलर का उपयोग करते समय, वर्चुअल COM पोर्ट 80Kbytes प्रति सेकंड (640Kbps) तक की डेटा ट्रांसफर दर प्रदान कर सकता है, जो RS-232 के माध्यम से संभावित ट्रांसफर दर से काफी अधिक है, जबकि, जैसा कि हम कर सकते हैं देखिए, इसमें लगने वाले कंप्यूटर सॉफ़्टवेयर को संशोधित करने की कोई आवश्यकता नहीं है!

पाठ 1 में प्रयुक्त नमूना कार्यक्रम, दस्तावेज़ीकरण और आरेख।

  1. PICDEM CDC + डेल्फ़ी स्रोत डाउनलोड करें
  2. COM पोर्ट के साथ काम करने के लिए डेल्फ़ी घटक डाउनलोड करें
  3. AN956+ मूल स्रोत कोड
  4. फ़ाइल user_uart.c (AN956 से मूल प्रोग्राम में सभी परिवर्तन केवल इस फ़ाइल में किए गए थे। पाठ 1 के लिए उदाहरण चलाने के लिए, आपको इस फ़ाइल को C:\MCHFFSUSB\fw\Cdc\user\ निर्देशिका में कॉपी करना होगा, प्रतिस्थापित करना होगा) प्रोजेक्ट में user_uart .c के साथ user.c फ़ाइल बनाएं, प्रोजेक्ट संकलित करें और माइक्रोकंट्रोलर को फ़्लैश करें)
  5. USB डिवाइस का सरलीकृत आरेख


चावल। 9

नोट: PICDEM FS USB बोर्ड की मूल सर्किटरी बोर्ड के पावर स्रोत (बाहरी या USB) की स्वचालित पहचान का उपयोग करती है। इसलिए, सरलीकृत योजना का उपयोग करते समय, आपको usbcfg.h फ़ाइल में #define USE_USB_BUSSENSE_IO लाइन पर टिप्पणी अवश्य करनी चाहिए

पाठ 2: USB 2.0 अनुपालक HID जॉयस्टिक डिवाइस बनाना

सबसे आम USB डिवाइस ह्यूमन इंटरफ़ेस डिवाइस (HID) हैं। इस वर्ग के विशिष्ट प्रतिनिधि यूएसबी कीबोर्ड, चूहे, जॉयस्टिक, मॉनिटर सेटिंग्स पैनल, बारकोड रीडर, कार्ड रीडर आदि हैं। HID उपकरणों के लाभ हैं:

  • कार्यान्वयन का आसानी;
  • कॉम्पैक्ट कोड;
  • विंडोज़ समर्थन (कोई अतिरिक्त ड्राइवर की आवश्यकता नहीं)।

माइक्रोचिप वेबसाइट में HID माउस का एक उदाहरण कार्यान्वयन है। इस उदाहरण के आधार पर सबसे सरल गेम कंट्रोलर के कार्यान्वयन पर विचार करें। हम इस परियोजना के लिए PICDEM FS-USB डेमो बोर्ड (DM163025) का उपयोग करेंगे। PICDEM FS-USB डिबग बोर्ड में एक वैरिएबल रेसिस्टर और 2 बटन हैं, इसलिए विकास के तहत जॉयस्टिक में न्यूनतम नियंत्रण (2 बटन और, उदाहरण के लिए, एक थ्रॉटल) होगा।

सबसे पहले, हमें निर्मित जॉयस्टिक के लिए डिवाइस डिस्क्रिप्टर को फिर से लिखना होगा। कार्य को सरल बनाने के लिए, आप HID डिस्क्रिप्टर टूल प्रोग्राम का उपयोग कर सकते हैं, जिसे साइट से डाउनलोड किया जा सकता है www.usb.org

प्रोग्राम में कुछ HID डिवाइसों के कॉन्फ़िगरेशन के उदाहरण शामिल हैं, जिन्हें आप अपने कार्य के लिए समायोजित कर सकते हैं या अपना स्वयं का HID डिवाइस बना सकते हैं।


चावल। 10

तो, हमारे मामले में, कई प्रकार के डेटा का उपयोग किया जाएगा - यह नियंत्रण का अनुकरण है - सिमुलेशन नियंत्रण, और विशेष रूप से यह थ्रॉटल (पैडल) (थ्रॉटल) और नियंत्रण बटन (बटन) है। ऑपरेटिंग सिस्टम को इन डेटा प्रकारों को संभालने का तरीका "जानने" के लिए, अधिकतम और न्यूनतम मान और डेटा के आकार का वर्णन करना आवश्यक है। हमारे मामले में, "गैस" एक 8-बिट मान है (रिपोर्ट_आकार = 8, रिपोर्ट_काउंट = 1), और बटन की स्थिति को एक-बिट मानों के क्षेत्र के रूप में परिभाषित किया गया है। उदाहरण में केवल 2 बटनों का उपयोग किया गया है, लेकिन फ़ील्ड को बाइट मान (रिपोर्ट_साइज़ = 1, रिपोर्ट_काउंट = 8) पर संरेखित करना आवश्यक है। कुल मिलाकर, माइक्रोकंट्रोलर, जब कंप्यूटर से डेटा का अनुरोध करता है, तो उसे 2 बाइट्स - गैस स्तर और उत्पन्न डिवाइस डिस्क्रिप्टर के अनुसार बटन की स्थिति संचारित करनी होगी (संभावित डिस्क्रिप्टर के विस्तृत विवरण के लिए, एचआईडी डिवाइस के लिए विनिर्देश देखें) www.usb.org). डिवाइस डिस्क्रिप्टर का बनाया गया विवरण हेडर फ़ाइल सहित विभिन्न स्वरूपों में सहेजा जा सकता है

इसके अतिरिक्त, आपको एचआईडी क्लास-विशिष्ट डिस्क्रिप्टर के विवरण में प्राप्त डिवाइस डिस्क्रिप्टर के आकार को समायोजित करने और एंडपॉइंट डिस्क्रिप्टर में एंडपॉइंट के माध्यम से प्रेषित डेटा के आकार को बदलने की आवश्यकता है (हमारे मामले में, हम 2 बाइट्स स्थानांतरित करते हैं, इसलिए) आकार HID_INT_IN_EP_SIZE=2 है)।

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

रीडपॉट(); // पोटेंशियोमीटर वोल्टेज माप बफर शुरू करें = ADRESH; // हैंडल बटन बताता है कि if(sw2==0) बफ़र |= 0x01; बफ़र &= ~0x01; यदि(sw3==0) बफ़र |= 0x02; बफ़र &= ~0x02; // डेटा ट्रांसफर एमुलेट_जॉयस्टिक();

प्रोजेक्ट को संकलित करने और माइक्रोकंट्रोलर को प्रोग्रामिंग करने के बाद, आप डिवाइस को यूएसबी पोर्ट से कनेक्ट कर सकते हैं। बोर्ड को एक HID गेमिंग डिवाइस के रूप में परिभाषित किया गया है, जो सिस्टम में स्थापित है और उपयोग के लिए तैयार है।


चावल। ग्यारह

विंडोज़ में कंट्रोल पैनल के माध्यम से हम उपलब्ध गेमिंग डिवाइस खोल सकते हैं, अपना जॉयस्टिक चुन सकते हैं, उसे कैलिब्रेट कर सकते हैं और कार्यक्षमता का परीक्षण कर सकते हैं।


चावल। 12

डिवाइस कॉन्फ़िगरेशन बदलते समय - नियंत्रण या बटन जोड़ते समय, न केवल डिवाइस डिस्क्रिप्टर के विवरण को बदलना आवश्यक है, बल्कि बनाए गए डिस्क्रिप्टर के अनुसार डेटा को सख्ती से प्रसारित करना भी आवश्यक है। इस प्रकार, USAGE_MAXIMUM (बटन 2) डिवाइस डिस्क्रिप्टर के विवरण में बटनों की अधिकतम संख्या को 2 से बदलकर 8 करने पर, हमें 8 बटनों वाला एक जॉयस्टिक मिलता है।


चावल। 13

जब डिस्क्रिप्टर अधिक जटिल हो जाता है, तो हम जॉयस्टिक का अधिक संपूर्ण कार्यान्वयन प्राप्त कर सकते हैं, जबकि आपको निम्नलिखित मापदंडों को बदलना याद रखना होगा: डिस्क्रिप्टर का आकार, समापन बिंदु का आकार, और आपको अधिक से अधिक सूचना डेटा भेजने की आवश्यकता है जैसा कि डिस्क्रिप्टर में घोषित किया गया है।


चावल। 14

पाठ 2 में प्रयुक्त नमूना कार्यक्रम, दस्तावेज़ीकरण और आरेख।

  1. HID माउस के कार्यान्वयन के लिए मूल स्रोत कोड।
  2. HID जॉयस्टिक कार्यान्वयन स्रोत कोड।

अध्याय 3

किसी भी USB डिवाइस में कई कॉन्फ़िगरेशन हो सकते हैं, और प्रत्येक कॉन्फ़िगरेशन में कई इंटरफ़ेस होते हैं। यह यूएसबी प्रॉपर्टी बनाए जा रहे डिवाइस को कंप्यूटर द्वारा विभिन्न इंटरफेस के साथ कई यूएसबी डिवाइस के रूप में पहचानने की अनुमति देती है। उदाहरण के लिए, एक माउस में एक अंतर्निर्मित कार्ड रीडर हो सकता है और वह दो स्वतंत्र उपकरणों के रूप में कंप्यूटर के साथ इंटरैक्ट कर सकता है।

डिवाइस डिस्क्रिप्टर संरचना:


चावल। 15

माउस और निर्मित जॉयस्टिक के मानक उदाहरण के आधार पर, हम एक समग्र यूएसबी डिवाइस बनाएंगे जिसे कंप्यूटर द्वारा दो स्वतंत्र एचआईडी डिवाइस के रूप में परिभाषित किया जाएगा।

1. एक डिस्क्रिप्टर बनाएं.

डिस्क्रिप्टर की संरचना बदलें (फ़ाइल usbdsc.h)

डिवाइस में 2 इंटरफ़ेस होंगे, प्रत्येक में एक समापन बिंदु होगा।

#CFG01 रोम संरचना को परिभाषित करें \(USB_CFG_DSC cd01;\USB_INTF_DSC i00a00;\USB_HID_DSC hid_i00a00;\USB_EP_DSC ep01i_i00a00;\USB_INTF_DSC i01a00;\USB_HID_DSC hid_i01a00;\USB_ EP_DSC ep0 2i_i01a00; \ ) cfg01
  1. परिवर्तित संरचना के अनुसार, आपको usbdsc.c फ़ाइल में डिस्क्रिप्टर को बदलने की आवश्यकता है।
  2. Usbcfg.h फ़ाइल में, इंटरफ़ेस पहचानकर्ता, प्रयुक्त समापन बिंदु, रिपोर्ट डिस्क्रिप्टर आकार परिभाषित करें।
  3. hid.c फ़ाइल में, आपको अतिरिक्त एंडपॉइंट्स (HIDInitEP फ़ंक्शन में) प्रारंभ करने और HID अनुरोध प्रोसेसिंग फ़ंक्शन (USBCheckHIDRequest फ़ंक्शन) को बदलने की आवश्यकता है।
  4. प्रत्येक उपकरण, माउस और जॉयस्टिक, प्रत्येक को अपने स्वयं के समापन बिंदु पर डेटा संचारित करना होगा। इसलिए, हमें डेटा को विशिष्ट एंडपॉइंट पर स्थानांतरित करने और यह जांचने के लिए फ़ंक्शन जोड़ने की आवश्यकता है कि वांछित एंडपॉइंट मुफ़्त है (hid.c फ़ाइल में mHIDTxIsBusy और HIDTxReport के समान फ़ंक्शन जोड़ें)।

फिर माउस के लिए डेटा ट्रांसफर जैसा दिखेगा

प्रोजेक्ट को संकलित करने, कंट्रोलर को फ्लैश करने और डिवाइस को यूएसबी से कनेक्ट करने के बाद, कंप्यूटर द्वारा एक नए कंपोजिट डिवाइस का पता लगाया जाएगा और एक माउस और जॉयस्टिक जोड़ा जाएगा।


चावल। 16


चावल। 17

समग्र छिपाई डिवाइस स्रोत कोड।

टिप्पणी।नया डिवाइस बनाते समय पीआईडी ​​बदलना न भूलें, या सिस्टम से उसी पीआईडी ​​वाले पिछले डिवाइस को हटा दें।

पाठ 4

माइक्रोचिप टेक्नोलॉजी इंक. सस्ते डेवलपर प्रोग्रामर जारी करता है PICkit2, जिसका उपयोग मुख्य रूप से फ़्लैश नियंत्रकों की प्रोग्रामिंग के लिए किया जाता है। इस प्रोग्रामर की एक विशिष्ट विशेषता माइक्रोकंट्रोलर के लिए पूर्ण दस्तावेज़ीकरण और फ़र्मवेयर स्रोत कोड और कंप्यूटर के लिए एक शेल प्रोग्राम की उपलब्धता है। PICkit2 USB द्वारा संचालित है, समायोज्य प्रोग्रामिंग और पावर वोल्टेज उत्पन्न करता है, और प्रोग्राम करने योग्य डिवाइस से कनेक्ट करने के लिए 3 इनपुट-आउटपुट लाइनें भी हैं। PICkit2 में प्रोग्रामर के फर्मवेयर को अपडेट करने में सक्षम होने के लिए, एक बूटलोडर प्रोग्राम लागू किया गया है।


चावल। 18

PICkit2 पर आधारित CDC डिवाइस

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

  1. Main.c फ़ाइल में, हम फ़र्मवेयर स्थान का पता बदलते हैं (PICkit2 बूटलोडर उपयोगकर्ता प्रोग्राम के नियंत्रण को 0x002000 पते पर स्थानांतरित करता है।
    #प्राग्मा कोड _RESET_INTERRUPT_VECTOR = 0x002000
  2. io_cfg.h फ़ाइल में, हम पोर्ट D के बारे में सब कुछ हटा देते हैं (आप PORTC0 पर LED को ब्लिंक करने के लिए सेट कर सकते हैं)।

    चूँकि PICKIT2 हमेशा USB द्वारा संचालित होता है, हम सेट करते हैं

    #define usb_bus_sense 1 // डिवाइस हमेशा प्लग इन रहता है #define self_power 0 // डिवाइस USB से संचालित होता है

  3. usbcfg.h फ़ाइल में हम 2 पंक्तियों में टिप्पणियाँ डालते हैं
    //#USE_SELF_POWER_SENSE_IO को परिभाषित करें //#USE_USB_BUS_SENSE_IO को परिभाषित करें
  4. User.c फ़ाइल में, हम उस डेटा को USB पर आउटपुट करते हैं जिसकी हमें आवश्यकता होती है
  5. लिंकर फ़ाइलpicit2.lkr शामिल करें

उसके बाद, आप प्रोजेक्ट को संकलित कर सकते हैं और PICkit2 शेल के माध्यम से नया फर्मवेयर लोड कर सकते हैं।

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

इस उदाहरण के लिए स्रोत कोड यहां उपलब्ध है जोड़ना।

इस उदाहरण के आधार पर, और PICkit2 प्रोग्रामर के बाहरी पिन का उपयोग करके, आप बाहरी उपकरणों से डेटा प्राप्त कर सकते हैं और इसे USB के माध्यम से कंप्यूटर में स्थानांतरित कर सकते हैं। इस प्रकार, PICkit2 का उपयोग करके, आप COG LCD संकेतक, I2C रीडर, SPI और 1-वायर डिवाइस, जैसे तापमान सेंसर, आदि डिवाइस पर डेटा आउटपुट कर सकते हैं।

PICkit2 पर आधारित रेडियो HID कीबोर्ड


चावल। 19

आइए PICkit2 प्रोग्रामर के "अनुचित" उपयोग के एक और उदाहरण पर विचार करें - एक एयर इंटरफ़ेस वाला एक कीबोर्ड एमुलेटर। इस तरह के उपकरण का उपयोग, उदाहरण के लिए, प्रस्तुतियों के लिए - कंप्यूटर से दूर स्लाइडों को पलटने के लिए किया जा सकता है।

ऐसे उपकरण को लागू करने के लिए, हमें चाहिए:

  • PICkit2
  • PICkit2 डेमो बोर्ड (DV164120)
  • रेडियो रिसीवर (rfRXD0420) और रेडियो ट्रांसमीटर (rfPIC12F675) rfPICkit से।

हम रेडियो रिसीवर को डेमो बोर्ड से जोड़ते हैं। बोर्ड पर माइक्रोकंट्रोलर रिसीवर से डेटा प्राप्त करेगा, उन्हें संसाधित करेगा और, जब रिमोट कंट्रोल पर दो बटनों में से एक दबाया जाएगा, तो PICkit2 से जुड़े 2 आउटपुट में से एक पर लॉग.1 स्तर सेट करेगा।

PICkit2 निम्नलिखित कार्य करेगा:

  • जब USB के माध्यम से कंप्यूटर से कनेक्ट किया जाता है, तो इसे HID कीबोर्ड के रूप में परिभाषित किया जाता है
  • एक रिसीवर के साथ डेमो बोर्ड के लिए +5V आपूर्ति वोल्टेज उत्पन्न करें
  • रिसीवर नियंत्रक के 2 बाहरी आउटपुट और, यदि उपलब्ध हो, एक लॉग से पूछताछ करें। 1 कंप्यूटर पर पेजअप या पेजडाउन बटन दबाने के लिए कोड भेजें।

PICKit2 पर आधारित दो वर्चुअल COM पोर्ट (FTDI2232 चिप इम्यूलेशन)।

यह उदाहरण केवल यह सीखने के लिए है कि USB कैसे काम करता है। उपयोग से पहले FTDI ड्राइवर लाइसेंस आवश्यकता की समीक्षा करें!

उदाहरण दिखाता है कि यूएसबी पोर्ट के साथ माइक्रोकंट्रोलर पर आधारित 2 वर्चुअल COM पोर्ट कैसे बनाएं। सबसे पहले आपको FTDI2232 चिप के लिए ड्राइवर स्थापित करने की आवश्यकता है। फिर, PICkit2 में बूट करने के लिए, आपको PICkit2 शेल में फर्मवेयर अपडेट आइटम का चयन करना होगा और TestVCP2.hex फ़ाइल को इंगित करना होगा पुरालेख। PICkit2 को रीप्रोग्राम करने के बाद, आपके सिस्टम में 2 स्वतंत्र सीरियल COM पोर्ट होंगे।

उदाहरण वेबसाइट से लिया गया है http://forum.microchip.com/tm.aspx?m=261649

एक प्रोग्रामर के रूप में PICkit2 को रिवर्स रिस्टोर करने के लिए, आपको PICkit2 को USB से डिस्कनेक्ट करना होगा और, बटन दबाते समय, USB केबल को फिर से कनेक्ट करना होगा, और फिर प्रोग्रामर के मानक फर्मवेयर को लोड करना चुनना होगा।

उपरोक्त सभी उदाहरण MCHFFSUSB फ्रेमवर्क v1.3 पर आधारित हैं। USB OTG के साथ PIC24 और PIC32 नियंत्रकों के आगमन के साथ, माइक्रोचिप ने स्टैक का एक नया संस्करण - USB स्टैक v जारी किया है। 2. x

USB स्टैक के नए संस्करण में v. 2.3, यूएसबी क्लाइंट की कार्यक्षमता को लागू करने वाले यूएसबी डिवाइस स्टैक के अलावा, यूएसबी एंबेडेड होस्ट जो होस्ट कार्यक्षमता को लागू करता है, एक यूएसबी दोहरी भूमिका स्टैक जो होस्ट और क्लाइंट दोनों के कार्यों को लागू करता है, भी प्राप्त किया गया है; और यूएसबी ओटीजी होस्ट रोल नेगोशिएशन प्रोटोकॉल (एचएनपी), सेशन रिक्वेस्ट प्रोटोकॉल (एसआरपी) का समर्थन करता है, और यूएसबी ओटीजी विनिर्देश के साथ पूरी तरह से अनुपालन करता है। एप्लिकेशन उदाहरणों में कार्यान्वित:

  • एंबेडेड होस्ट
    • प्रिंटर क्लास होस्ट - ESC/POS, PostScript® और PCL5 प्रिंटर के लिए समर्थन
    • सीडीसी क्लास होस्ट - एसीएम उपकरणों के लिए समर्थन (सार नियंत्रण मॉडल)
    • छिपाई कीबोर्ड
  • उपकरण
    • HID बूटलोडर - PIC32MX460F512L और PIC18F14K50 परिवारों के लिए अतिरिक्त समर्थन
    • HID कीबोर्ड, माउस
    • एमएसडी आंतरिक फ्लैश डेमो - फ़ाइलों को संग्रहीत करने के लिए आंतरिक फ्लैश का उपयोग करना
    • एमएसडी + एचआईडी समग्र उदाहरण - एमएसडी और एचआईडी समग्र उपकरण उदाहरण
    • सीडीसी - COM पोर्ट अनुकरण
    • सभी पीसी डेमो परियोजनाओं के लिए PIC32MX460F512L परिवार का समर्थन
    • HID, MCHPUSB और WinUSB उदाहरण अब ऑटो-डिटेक्शन के लिए Microsoft प्लग-एंड-प्ले (PnP) सुविधा का समर्थन करते हैं।
  • प्रलेखन
    • सभी API का संपूर्ण विवरण "\Microchip\Help" फ़ोल्डर में स्थित है

माइक्रोचिप सबसे लोकप्रिय USB कक्षाओं के लिए निःशुल्क ड्राइवर प्रदान करता है:

  1. यूजर इंटरफ़ेस (HID). इस एक्सचेंज मोड का उपयोग लगभग सभी कीबोर्ड, चूहों और अन्य इनपुट/आउटपुट डिवाइस में किया जाता है।
  2. संचार उपकरण (सीडीसी)। यह मोड सीरियल RS-232 से USB पर स्विच करने के लिए सबसे आसान है। WinXP/2K कंप्यूटर पर, एक माइक्रोकंट्रोलर कनेक्ट होने पर एक वर्चुअल COM पोर्ट बनाया और अनुकरण किया जाता है। प्रोग्राम जो COM1 के साथ काम करते हैं... 4 पोर्ट वर्चुअल पोर्ट के साथ बिना बदलाव के काम करेंगे, लेकिन उच्च गति (लगभग 1 एमबीपीएस) पर
  3. मास स्टोरेज डिवाइस (एमएसडी)। ये ऐसे उपकरण हैं जो स्टोरेज मीडिया के रूप में काम करते हैं - फ्लैश ड्राइव, एसडी/एमएमसी कार्ड, डिस्क आदि।
  4. प्रिंटर वर्ग के उपकरण। यह मोड यूएसबी प्रिंटर के साथ उपयोग के लिए डिज़ाइन किया गया है, जो यूएसबी मॉड्यूल के साथ पीआईसी माइक्रोकंट्रोलर पर अंतिम डिवाइस को आवश्यक जानकारी सीधे यूएसबी प्रिंटर पर आउटपुट करने की अनुमति देता है।
  5. माइक्रोचिप निवासी बूटलोडर. सबसे सरल मोड, जिसका उपयोग केवल USB के माध्यम से माइक्रोकंट्रोलर सॉफ़्टवेयर को अपडेट करने के लिए किया जाता है। पीसी की ओर से, एक छोटा प्रोग्राम स्थापित किया गया है, जो ड्राइवर का एक एनालॉग है
  6. स्वयं का ड्राइवर (कस्टम)। उन्नत उपयोगकर्ताओं के लिए USB2.0 संसाधनों का सबसे पूर्ण उपयोग: बस संचालन मोड (आइसोक्रोनस, इंटरप्ट, सराउंड, कंट्रोल), उच्च स्थानांतरण गति का चयन करने की क्षमता। गहन बस ज्ञान और विंडोज़ सॉफ़्टवेयर विकास कौशल की आवश्यकता है

यूएसबी फ्लैश ड्राइव के साथ बूटलोडर

नियमित फ्लैश ड्राइव से फर्मवेयर अपडेट करना।

USB-OTG मॉड्यूल (PIC24 या PIC32) के साथ माइक्रोकंट्रोलर के फर्मवेयर को अपडेट करने के लिए, विशेष सॉफ़्टवेयर का उपयोग करना आवश्यक नहीं है। होस्ट मोड की उपस्थिति आपको साधारण यूएसबी-डेटा ड्राइव (फ्लैश ड्राइव) को माइक्रोकंट्रोलर से कनेक्ट करने की अनुमति देती है। माइक्रोचिप वेबसाइट पर एक उदाहरण पोस्ट किया गया है ( बीटा संस्करण) जो आपको कनेक्टेड यूएसबी ड्राइव से माइक्रोकंट्रोलर सॉफ़्टवेयर को अपडेट करने की अनुमति देता है।

उदाहरण को चलाने के लिए, आपको बूटलोडर फ़र्मवेयर को PIC32 USB बोर्ड या एक्सप्लोरर 16 (PIC32 USB PIM प्रोसेसर मॉड्यूल और PICtail Plus USB डॉटर बोर्ड स्थापित के साथ) में लोड करना होगा। यदि बटन दबाए जाने पर बोर्ड पर बिजली लागू होती है, तो नियंत्रक फर्मवेयर अपडेट मोड में प्रवेश करेगा। यदि आप अब फ्लैश ड्राइव को रिकॉर्ड की गई फर्मवेयर अपडेट फ़ाइल से कनेक्ट करते हैं, तो माइक्रोकंट्रोलर इस फ़ाइल को पढ़ता है और इसे अपनी प्रोग्राम मेमोरी में ओवरराइट कर देता है।

यूएसबी के लिए विकास बोर्ड और विकास उपकरण

PICkit2 डिबगर प्रोग्रामर (P/N PG164120)

बूटलोडर की उपस्थिति आपको यूएसबी के साथ काम करने के कौशल में महारत हासिल करने के लिए अपना सॉफ़्टवेयर अपलोड करने की अनुमति देती है


चावल। 20

PICDEM FS-USB डेवलपमेंट बोर्ड (ऑर्डर संख्या DM163025)

USB2.0 बस के साथ PIC18F4550 माइक्रोकंट्रोलर पर आधारित उपकरणों के विकास और प्रदर्शन के लिए डिज़ाइन किया गया। बोर्ड में TQFP44 पैकेज में PIC18F4550 नियंत्रक है।


चावल। 21

लो पिन काउंट यूएसबी डेवलपमेंट किट (ऑर्डर नंबर DM164127)

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


चावल। 22

PIC18F87J50 फुल स्पीड USB PIC18F87J50 FS USB डेमो बोर्ड (ऑर्डर नंबर MA180021)

PIC18F87J50 FS USB डेमो बोर्ड का उपयोग PIC18F87J50 परिवार के फुल स्पीड USB 2.0 माइक्रोकंट्रोलर को डीबग करने के लिए किया जाता है। स्वायत्त संचालन के अलावा, बोर्ड का उपयोग PIC18 एक्सप्लोरर बोर्ड के लिए प्रोसेसर मॉड्यूल के रूप में भी किया जा सकता है।


चावल। 23

PIC24 स्टार्टर किट (ऑर्डर संख्या DM240011)

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


चावल। 24

PIC32 USB बोर्ड (ऑर्डर संख्या DM320003)

आपको PIC32 नियंत्रकों में USB-OTG मॉड्यूल में महारत हासिल करने की अनुमति देता है


चावल। 25

विकास बोर्ड "एक्सप्लोरर 16 डेवलपमेंट बोर्ड" (आदेश संख्या DM240001)

उच्च प्रदर्शन PIC24 16-बिट माइक्रोकंट्रोलर परिवारों और dsPIC33F डिजिटल सिग्नल प्रोसेसिंग नियंत्रकों के साथ शुरुआत करने के लिए यह एक कम लागत वाला डिबगिंग टूल है।


चावल। 26

डॉटर बोर्ड "USB PICtali Plus" (ऑर्डर संख्या AC164131)

यूएसबी प्रोसेसर प्लग-इन मॉड्यूल के साथ, यह आपको यूएसबी डिवाइस होस्ट, डिवाइस, यूएसबी-ओटीजी विकसित और डीबग करने की अनुमति देता है।


चावल। 27

इल्या अफ़ानासिव,
कंपनी

परिचय
यह पुस्तक किसके लिए है?
आपको किताब में क्या मिलेगा
सॉफ़्टवेयर आवश्यकताएं
हार्डवेयर आवश्यकताएँ
कोड के बारे में
अध्यायों का संक्षिप्त विवरण
नोटेशन
धन्यवाद
प्रतिक्रिया
भाग I. यूएसबी को समझना
अध्याय 1 यूएसबी विशिष्टता
1.1. USB क्या है और इसकी आवश्यकता क्यों है?
1.1.1. सामान्य USB आर्किटेक्चर
1.1.2. USB भौतिक और तार्किक वास्तुकला
1.1.3. यूएसबी घटक
1.1.4. USB डिवाइस गुण
1.1.5. संचार सिद्धांत
1.1.6. व्यवधान तंत्र
1.1.7. संचार के तरीके
1.1.8. संचार का तार्किक स्तर
1.1.8.1. क्लाइंट सॉफ़्टवेयर स्तर
1.1.8.2. USB सिस्टम ड्राइवर स्तर
1.1.8.3. इंटरफ़ेस होस्ट नियंत्रक परत
1.1.8.4. यूएसबी परिधीय बस स्तर
1.1.8.5. USB तार्किक उपकरण स्तर
1.1.8.6. USB डिवाइस का कार्यात्मक स्तर
1.1.9. स्तरों द्वारा डेटा स्थानांतरण
1.1.10. डेटा ट्रांसफर के प्रकार
1.1.11. कार्मिक
1.1.12. अंतिमबिंदुओं
1.1.13. चैनल
1.1.14. संकुल
1.1.14.1. IN, OUT, SETUP और PING टोकन पैकेट का प्रारूप
1.1.14.2. एसओएफ पैकेट प्रारूप
1.1.14.3. डेटा पैकेट प्रारूप
1.1.14.4. पावती पैकेट प्रारूप
1.1.14.5. स्प्लिट पैकेट प्रारूप
1.1.15. योग की जाँच करें
1.1.15.1. सीआरसी गणना एल्गोरिदम
1.1.15.2. सॉफ्टवेयर सीआरसी गणना
1.1.16. लेनदेन
1.1.16.1. लेन-देन के प्रकार
1.1.16.2. लेनदेन की पुष्टि और प्रवाह नियंत्रण
1.1.16.3. लेन-देन प्रोटोकॉल
1.2. USB उपकरणों के लिए अनुरोध
1.2.1. कॉन्फ़िगरेशन पैकेज
1.2.2. USB उपकरणों के लिए मानक अनुरोध
1.2.2.1. GET_STATUS स्थिति प्राप्त करना
1.2.2.2. CLEAR_FEATURE संपत्ति को रीसेट करना
1.2.2.3. SET_FEATURE संपत्ति संकल्प
1.2.2.4. SET_ADDRESS बस पर पता सेट करना
1.2.2.5. GET_DESCRIPTOR हैंडल प्राप्त करना
1.2.2.6. SET_DESCRIPTOR डिस्क्रिप्टर पास करना
1.2.2.7. कॉन्फ़िगरेशन कोड GET_CONFIGURATION प्राप्त करें
1.2.2.8. SET_CONFIGURATION कॉन्फ़िगरेशन कोड सेट करना
1.2.2.9. इंटरफ़ेस कॉन्फ़िगरेशन कोड GET_INTERFACE प्राप्त करना
1.2.2.10. SET_INTERFACE इंटरफ़ेस सेटअप कोड सेट करना
1.2.2.11. SYNC_FRAME सिंक फ़्रेम नंबर सेट करना
1.2.2.12. मानक अनुरोधों को संभालना
1.2.3. डिवाइस हैंडल
1.2.3.1. डिवाइस हैंडल
1.2.3.2. क्वालीफाइंग डिवाइस डिस्क्रिप्टर
1.2.3.3. कॉन्फ़िगरेशन डिस्क्रिप्टर
1.2.3.4. इंटरफ़ेस विवरणक
1.2.3.5. समापन बिंदु हैंडल
1.2.3.6. लाइन हैंडल
1.2.3.7. विशिष्ट वर्णनकर्ता
1.2.3.8. विवरणकर्ता आदेश प्राप्त कर रहा है
1.3. प्लग एंड प्ले (पीएनपी) प्रणाली
1.3.1. USB डिवाइस कॉन्फ़िगर करना
1.3.2. USB डिवाइस क्रमांकन
1.3.3. पीएनपी यूएसबी आईडी
1.3.4. प्रतीकात्मक उपकरण नाम
1.4. डब्लूडीएम मॉडल
अध्याय 2 माइक्रोकंट्रोलर सी प्रोग्रामिंग
2.1. माइक्रोकंट्रोलर्स के लिए सी भाषा के बारे में सामान्य जानकारी
2.2. मानक पुस्तकालयों का उपयोग करना
2.3. AT89C5131 के लिए प्रोग्रामिंग
2.3.1. आरंभीकरण फ़ाइल
2.3.2. वर्णनकर्ता संरचनाएँ
2.3.3. परियोजना संरचना
अध्याय 3 उपकरण
3.1. प्रोग्रामर
3.1.1. फ्लिप प्रोग्रामर
3.1.2. प्रोग्रामर ईआर-ट्रॉनिक
3.2. ड्राइवर निर्माण उपकरण
3.2.1. न्यूमेगा ड्राइवर स्टूडियो
3.2.2. जुंगो विनड्राइवर
3.2.3. जुंगो कर्नेलड्राइवर
3.3. माइक्रोसॉफ्ट विज़ुअल स्टूडियो टूल्स
3.3.1. निर्भर करता है (निर्भरता वॉकर)
3.3.2. त्रुटि खोज
3.3.3. गाइडजेन
3.4. माइक्रोसॉफ्ट डीडीके उपकरण
3.4.1. उपकरण वृक्ष
3.4.2. डेवकॉन
3.4.2.1. कक्षा कुंजी
3.4.2.2. ड्राइवरफ़ाइलें कुंजी
3.4.2.3. हविड्स कुंजी
3.4.2.4. कुंजी पुनः स्कैन करें
3.4.2.5. स्टैक कुंजी
3.4.2.6. स्थिति कुंजी
3.4.3. Chklnf और Genlnf
3.5. कंप्यूवेयर कॉर्पोरेशन टूल्स
3.5.1. निगरानी करना
3.5.2. सिमलिंक
3.5.3. EzDriverइंस्टॉलर
3.5.4. Wdmसूँघ
3.6. SysInternals उपकरण
3.6.1. WinObj
3.7. यूएसबी फोरम उपकरण
3.7.1. HID डिस्क्रिप्टर टूल
3.8. यूएसबी कमांड सत्यापनकर्ता
3.9. एचडीडी सॉफ्टवेयर उपकरण
3.10. सोर्सफोर्ज टूल्स
3.11. बस हाउंड निगरानी सॉफ्टवेयर
अध्याय 4 .NET में Win32 फ़ंक्शंस को समझना
4.1. सामान्य जानकारी
4.2. Win32 फ़ंक्शंस आयात करना
4.3. संरचनाएं
4.3.1. स्ट्रक्चरलेआउट विशेषता
4.3.2. मार्शलविशेषता के रूप में
4.4. डेटा तक सीधी पहुंच
4.5. विंडोज़ संदेशों को संभालना
4.6. WMI के बारे में सामान्य जानकारी
4.7. इस अध्याय के लिए ऑनलाइन संसाधन
भाग द्वितीय। यूएसबी कक्षाएं
अध्याय 5
5.1. USB/RS-232 इंटरफ़ेस रूपांतरण विधियाँ
5.2. आरएस-232 इंटरफ़ेस के बारे में सामान्य जानकारी
5.2.1. एक्सचेंज लाइनें
5.2.1.1. प्रेषित डेटा (बीए/टीएक्सडी/टीडी)
5.2.1.2. प्राप्त डेटा (बीबी/आरएक्सडी/आरडी)
5.2.1.3. स्थानांतरण अनुरोध (सीए/आरटीएस)
5.2.1.4. स्थानांतरण के लिए तैयार (सीबी/सीटीएस)
5.2.1.5. डीसीई तैयार (सीसी/डीएसआर)
5.2.1.6. डीटीई तैयार (सीडी/डीटीआर)
5.2.1.7. कॉल सूचक (सीई/आरआई)
5.2.1.8. कैरियर डिटेक्ट (CF/DCD)
5.2.1.9. प्राप्त करने के लिए तैयार (सीजे)
5.3. सीडीसी विशिष्टता
5.3.1. मानक वर्णनकर्ता
5.3.2. फ़ंक्शन विवरणकर्ता
5.3.2.1. हेडर फ़ंक्शन डिस्क्रिप्टर
5.3.2.2. कमांड मोड डिस्क्रिप्टर
5.3.2.3. सार डिवाइस डिस्क्रिप्टर
5.3.2.4. समूहीकरण वर्णनकर्ता
5.3.3. विशेष आग्रह
5.3.3.1. SET_LINE_CODING अनुरोध
5.3.3.2. GET_LINE_CODING अनुरोध
5.3.3.3. SET_CONTROL_LINE_STATE क्वेरी
5.3.3.4. SEND_BREAK अनुरोध
5.3.4. सूचनाएं
5.3.4.1. रिंग^डिटेक्ट अधिसूचना
5.3.4.2. SERIAL_STATE अधिसूचना
5.4. विंडोज़ पर सीडीसी समर्थन
5.4.1. सीरियल पोर्ट के साथ काम करने के लिए विंडोज़ सुविधाओं का अवलोकन
5.4.1.1. बुनियादी बंदरगाह संचालन
5.4.1.2. पोर्ट सेटिंग फ़ंक्शन
5.4.1.3. कस्टम पोर्ट सेटिंग
5.4.1.4. मॉडेम लाइनों की स्थिति प्राप्त करना
5.4.1.5. प्लेटफ़ॉर्म पर सीडीसी के साथ काम करना। जाल
5.4.2. विंडोज़ सुविधाओं और यूएसबी अनुरोधों का मिलान
अध्याय 6 छिपाई वर्ग
6.1. HID डिवाइस विशिष्टता
6.2. HID डिवाइस के साथ संचार कैसे करें
6.3. HID डिवाइस ड्राइवर स्थापित करना
6.4. HID डिवाइस पहचान
6.4.1. बूट डिवाइस की पहचान
6.4.2. HID डिवाइस कॉन्फ़िगरेशन डिस्क्रिप्टर
6.4.3. छिपा हुआ वर्णनकर्ता
6.4.4. रिपोर्ट विवरणकर्ता
6.5. रिपोर्ट विवरणक संरचना
6.5.1. तत्वों की रिपोर्ट करें
6.5.1.1. लघु प्रकार के तत्व
6.5.1.2. लंबे प्रकार के तत्व
6.5.2. तत्व प्रकार की रिपोर्ट करें
6.5.2.1. आवश्यक तत्व
6.5.2.2. वैश्विक तत्व
6.5.2.3. स्थानीय तत्व
6.5.3. वर्णनकर्ता उदाहरण
6.6. HID डिवाइस के लिए अनुरोध
6.6.1. GET_REPORT अनुरोध
6.6.2. SET_REPORT अनुरोध
6.6.3. GET_IDLE अनुरोध
6.6.4. SET_IDLE अनुरोध
6.6.5. GET_PROTOCOL अनुरोध
6.6.6. SET_PROTOCOL अनुरोध
6.7. औजार
6.8. विंडोज़ में एचआईडी डिवाइस के लिए ड्राइवर
अध्याय 7 अन्य यूएसबी कक्षाएं
भाग III. यूएसबी प्रोग्रामिंग अभ्यास
अध्याय 8. AT89C5131 पर आधारित एक USB डिवाइस बनाना
8.1. AT89C5131 के बारे में सामान्य जानकारी
8.2. AT89S5131 का संरचनात्मक आरेख
8.3. USB AT89C5131 पंजीकृत करता है
8.3.1. USBCON रजिस्टर
8.3.2. USBADDR पंजीकृत करें
8.3.3. USBINT रजिस्टर
8.3.4. USBIEN रजिस्टर
8.3.5. यूईपीएनयूएम रजिस्टर
8.3.6. UEPCONX रजिस्टर
8.3.7. यूईपीएसटैक्स रजिस्टर
8.3.8. यूपीआरएसटी पंजीकृत करें
8.3.9. यूईपीआईएनटी रजिस्टर
8.3.10. UEPIEN पंजीकृत करें
8.3.11. UEPDATX रजिस्टर
8.3.12. UBYCTLX पंजीकृत करें
8.3.13. यूएफएनयूएमएल रजिस्टर
8.3.14. UFNUMH पंजीकृत करें
8.4. सर्किटरी AT89S5131
8.5. AT89C5131 के लिए मूल डिज़ाइन
8.5.1. АТ89С5131 के लिए कार्यक्रम का पहला संस्करण
8.5.2. स्ट्रिंग डिस्क्रिप्टर जोड़ना
8.5.3. समापनबिंदु जोड़ना
8.6. प्रोग्राम डाउनलोड
अध्याय 9 सीडीसी कक्षा को लागू करना
9.1. सीडीसी कार्यान्वयन
9.2. डिवाइस हैंडल
9.2.1. समापन बिंदु आरंभीकरण
9.2.2. सीडीसी अनुरोधों को संसाधित करना
9.2.3. आरएस पोर्ट और सीडीसी लाइन कॉन्फ़िगरेशन
9.2.4. डेटा प्राप्त करना और संचारित करना
9.3. ड्राइवर स्थापना
9.4. डेल्फ़ी में सीडीसी डिवाइस के साथ प्रोग्रामिंग डेटा एक्सचेंज
9.5. C# में CDC डिवाइस के साथ एक्सचेंज प्रोग्रामिंग करना
9.5.1. MSCOMM घटक का उपयोग करना
9.5.2. Win32 फ़ंक्शंस का उपयोग करना
9.6. सीडीसी मुद्दे
अध्याय 10 एचआईडी क्लास का कार्यान्वयन
10.1. AT89C5131 पर HID का कार्यान्वयन
10.2. एकाधिक बाइट्स स्थानांतरित करना
10.3. फ़ीचर रिपोर्ट
10.4. होस्ट से डेटा भेजना (SET_REPORT)
10.5. छिपाई डिवाइस स्थापना
10.6. HID डिवाइस के साथ संचार
10.6.1. HID डिवाइस का नाम प्राप्त करना
10.6.2. डिवाइस विशेषताएँ प्राप्त करना और रिपोर्ट पढ़ना
10.6.3. होस्ट से HID डिवाइस में डेटा ट्रांसफर
10.7. HID डिवाइस उदाहरण
10.7.1. माउस डिवाइस का कार्यान्वयन
10.7.2. "कीबोर्ड" डिवाइस का कार्यान्वयन
10.8. HID प्रोटोकॉल का उपयोग करना
10.8.1. डेटा व्याख्या
10.8.2. संग्रह
10.8.3. सारणियाँ और बटन
10.9. एकाधिक रिपोर्ट के साथ HID डिवाइस
अध्याय 11 विशेष विंडोज़ सुविधाएँ
11.1. सेटअप एपीआई फ़ंक्शंस
11.1.1. USB डिवाइसों की गणना
11.1.2. USB डिवाइस की स्थिति प्राप्त करना
11.2. WMI के साथ USB उपकरणों की गणना
11.3. विंडोज़ एक्सपी विशेष सुविधाएँ
11.3.1. HidD_GetInputReport - HID रिपोर्ट पढ़ें
11.3.2. कच्चा इनपुट डेटा प्राप्त करना
11.4. डायरेक्टएक्स सुविधाएँ
11.5. नए उपकरण जोड़ने के लिए संवाद
11.6. प्रतीकात्मक डिवाइस नामों के साथ कार्य करना
11.7. फ़्लैश ड्राइव का सुरक्षित निष्कासन
11.8. डिवाइस जोड़ने और हटाने का पता लगाना
11.9. इंटरनेट संसाधन
अध्याय 12 चालक विकास
12.1. WDM ड्राइवर की बुनियादी प्रक्रियाएँ
12.1.1. प्रक्रिया ड्राइवरप्रवेश
12.1.2. प्रक्रिया ऐडडिवाइस
12.1.3. प्रक्रिया अनलोड
12.1.4. ड्राइवर संचालन प्रक्रियाएँ
12.1.4.1. पैकेट हेडर
12.1.4.2. I/O स्टैक सेल
12.4.1.3. ड्राइवर संचालन प्रक्रियाएँ
12.1.5. आईओसीटीएल अनुरोधों की सेवा
12.2. ड्राइवर को लोड करना और ड्राइवर को कॉल करने की प्रक्रिया
12.2.1. चालक प्रक्रिया
12.2.2. चालक पंजीकरण
12.2.2.1. एससीएम के साथ पंजीकरण
12.2.2.2. रजिस्ट्री में ड्राइवर सेटिंग्स
12.2.3. कार्य प्रक्रियाओं का जिक्र
12.2.4. ड्राइवर को निष्पादन योग्य फ़ाइल के अंदर संग्रहीत करना
12.3. ड्राइवर स्टूडियो के साथ ड्राइवर बनाना
12.3.1. ड्राइवर स्टूडियो लाइब्रेरी के बारे में कुछ शब्द
12.3.1.1. केड्राइवर क्लास
12.3.1.2. केडिवाइस क्लास
12.3.1.3. केएलआरपी क्लास
12.3.1.4. KRegistryKey वर्ग
12.3.1.5. KLowerDevice क्लास
12.3.1.6. यूएसबी कक्षाएं
12.3.2. अन्य ड्राइवर स्टूडियो कक्षाएं
12.3.3. ड्राइवर स्टूडियो का उपयोग करके ड्राइवर टेम्पलेट बनाना
12.3.3.1. चरण 1. प्रोजेक्ट का नाम और पथ सेट करें
12.3.3.2. चरण 2: ड्राइवर आर्किटेक्चर चुनना
12.3.3.3. चरण 3. टायर चयन
12.3.3.4. चरण 4 - समापन बिंदुओं का एक सेट परिभाषित करें
12.3.3.5. चरण 5. वर्ग और फ़ाइल नाम निर्दिष्ट करना
12.3.3.6. चरण 6 ड्राइवर सुविधाएँ चुनना
12.3.3.7. चरण 7. अनुरोधों को संसाधित करने का तरीका चुनना
12.3.3.8. चरण 8: पर्सिस्टेंट ड्राइवर सेटिंग्स बनाएं
12.3.3.9. चरण 9 ड्राइवर गुण
12.3.3.10. चरण 10. IOCTL कोड निर्दिष्ट करना
12.3.3.11. चरण 11 उन्नत सेटिंग्स
12.3.4. ड्राइवर टेम्पलेट का परिशोधन
12.3.5. डिवाइस क्लास बेस तरीके
12.3.6. डेटा रीडिंग का कार्यान्वयन
12.3.7. ड्राइवर स्थापना
12.3.8. डेटा रीडर
12.3.9. अन्य प्रकार के समापन बिंदुओं से डेटा पढ़ना
12.3.10. USB डिवाइस ड्राइवर को "साफ़ करें"।
भाग IV. निर्देशिका
अध्याय 13. INF फ़ाइल स्वरूप
13.1. INF फ़ाइल संरचना
13.1.1. संस्करण अनुभाग
13.1.2. निर्माता अनुभाग
13.1.3. गंतव्य डायर अनुभाग
13.1.3.1. DefaultDescDir कुंजी
13.1.3.2. फ़ाइल-सूची-अनुभाग कुंजियाँ
13.1.3.3. डरिड कुंजी
13.1.3.4. उपदिर कुंजी
13.1.4. मॉडल विवरण अनुभाग
13.1.5. धारा xxx. AddRegw xxx. डेलरेग
13.1.6. धारा xxx. logconfig
13.1.7. धारा xxx. प्रतिलिपिफ़ाइलें
13.1.8. अनुभाग स्ट्रिंग्स
13.1.9. अनुभाग लिंक
13.2. INF फ़ाइलें बनाना और उनका परीक्षण करना
13.3. INF फ़ाइल का उपयोग करके डिवाइस इंस्टॉल करना
13.4. USB के लिए रजिस्ट्री शाखाएँ
अध्याय 14 बुनियादी विंडोज़ फ़ंक्शंस
14.1. क्रिएटफ़ाइल और क्लोज़हैंडल फ़ंक्शंस: किसी ऑब्जेक्ट को खोलना और बंद करना
14.1.1. अतिरिक्त जानकारी
14.1.2. प्रतिलाभ की मात्रा
14.1.3. उदाहरण कॉल करें
14.2. रीडफ़ाइल फ़ंक्शन: डेटा पढ़ना
14.2.1. अतिरिक्त जानकारी
14.2.2. प्रतिलाभ की मात्रा
14.2.3. उदाहरण कॉल करें
14.3. फ़ाइल फ़ंक्शन लिखें: डेटा स्थानांतरण
14.3.1. अतिरिक्त जानकारी
14.3.2. प्रतिलाभ की मात्रा
14.3.3. उदाहरण कॉल करें
14.4. ReadFileEx फ़ंक्शन। एपीसी डेटा पढ़ना
14.4.1. प्रतिलाभ की मात्रा
14.4.2. अतिरिक्त जानकारी
14.4.3. उदाहरण कॉल करें
14.5. WriteFiieEx फ़ंक्शन: एपीसी डेटा ट्रांसफर
14.5.1. प्रतिलाभ की मात्रा
14.5.2. उदाहरण कॉल करें
14.6. waitForSingieObject फ़ंक्शन किसी ऑब्जेक्ट की संकेतित स्थिति की प्रतीक्षा कर रहा है
14.6.1. प्रतिलाभ की मात्रा
14.7. waitForMultipleObjects फ़ंक्शन: वस्तुओं की संकेतित स्थिति की प्रतीक्षा करना
14.7.1. प्रतिलाभ की मात्रा
14.8. GetOverlapped परिणाम फ़ंक्शन: एक अतुल्यकालिक ऑपरेशन का परिणाम
14.8.1. प्रतिलाभ की मात्रा
14.9. डिवाइसलोकंट्रोल फ़ंक्शन: प्रत्यक्ष ड्राइवर नियंत्रण
14.9.1. प्रतिलाभ की मात्रा
14.10. कैंसल/ओ फ़ंक्शन: किसी ऑपरेशन को निरस्त करना
14.10.1. प्रतिलाभ की मात्रा
14.11. डॉस डिवाइस फ़ंक्शन को क्वेरी करना, डिवाइस का नाम उसके डॉस नाम से प्राप्त करना
14.11.1. प्रतिलाभ की मात्रा
14.11.2. उदाहरण कॉल करें
14.12. डॉस डिवाइस फ़ंक्शन को परिभाषित करें: डॉस डिवाइस नाम के साथ संचालन
14.12.1. प्रतिलाभ की मात्रा
14.12.2. उदाहरण कॉल करें
अध्याय 15 सीरियल पोर्ट के लिए विंडोज संरचनाएं और कार्य
15.1. COMMCONFIG पोर्ट सेटिंग्स संरचना
15.2. पोर्ट गुण संरचना COMPROP
15.3. COMTIMEOUTS टाइमआउट की संरचना
15.4. COMSTAT पोर्ट स्थिति संरचना
15.5. डीसीबी संरचना
15.6. BuildCommDCB फ़ंक्शन: एक स्ट्रिंग से DCB संरचना बनाएं
15.6.1. अतिरिक्त जानकारी
15.6.2. प्रतिलाभ की मात्रा
15.6.3. उदाहरण कॉल करें
15.7. BuildCommDCBAndTimeouts फ़ंक्शन: स्ट्रिंग से DCB संरचना और टाइमआउट बनाएं
15.8. SetCommBreak और ClearCommBreak फ़ंक्शंस: आउटपुट नियंत्रण
15.8.1. प्रतिलाभ की मात्रा
15.9. ClearCommError फ़ंक्शन: पोर्ट त्रुटियाँ प्राप्त करना और साफ़ करना
15.9.1. प्रतिलाभ की मात्रा
15.10. EscapeCommFunction: पोर्ट नियंत्रण
15.10.1. प्रतिलाभ की मात्रा
15.11. GetCommMask और SetCommMask फ़ंक्शंस: इवेंट कॉल मास्क
15.11.1. प्रतिलाभ की मात्रा
15.12. waitCommEvent फ़ंक्शन COM पोर्ट इवेंट की प्रतीक्षा कर रहा है
15.12.1. प्रतिलाभ की मात्रा
15.12.2. अतिरिक्त जानकारी
15.12.3. उदाहरण कॉल करें
15.13. GetCommConfig और SetCommConfig फ़ंक्शंस: पोर्ट सेटिंग्स कॉन्फ़िगर करना
15.13.1. प्रतिलाभ की मात्रा
15.13.2. उदाहरण कॉल करें
15.14. CommConfigDialog फ़ंक्शन: पोर्ट कॉन्फ़िगरेशन डायलॉग
15.14.1. प्रतिलाभ की मात्रा
15.14.2. अतिरिक्त जानकारी
15.14.3. उदाहरण कॉल करें
15.15. GetCommProperties फ़ंक्शन: पोर्ट गुण पढ़ें
15.15.1. प्रतिलाभ की मात्रा
15.15.2. उदाहरण कॉल करें
15.16. GetCommState और SetCommState फ़ंक्शंस: पोर्ट स्टेट
15.16.1. प्रतिलाभ की मात्रा
15.16.2. उदाहरण कॉल करें
15.17. GetCommTimeouts और SetComniTimeouts फ़ंक्शन: पोर्ट टाइमआउट
15.17.1. प्रतिलाभ की मात्रा
15.17.2. उदाहरण कॉल करें
15.18. पर्जकॉम फ़ंक्शन: फ्लश पोर्ट बफ़र्स
15.18.1. प्रतिलाभ की मात्रा
15.18.2. उदाहरण कॉल करें
15.19. SetupComm फ़ंक्शन: बफ़र आकार कॉन्फ़िगर करना
15.19.1. प्रतिलाभ की मात्रा
15.20. GetDefaultCommConfig और SetDefaitltCommConfig फ़ंक्शंस: डिफ़ॉल्ट पोर्ट सेटिंग्स
15.20.1. प्रतिलाभ की मात्रा
15.21. ट्रांसमिटकॉमचर फ़ंक्शन। विशेष वर्ण पारित करना
15.21.1. प्रतिलाभ की मात्रा
15.22. GetCommModemStatus फ़ंक्शन: मॉडेम स्थिति
15.22.1. प्रतिलाभ की मात्रा
15.22.2. उदाहरण कॉल करें
15.23. एनमपोर्ट्स फ़ंक्शन: बंदरगाहों की गणना
15.23.1. अतिरिक्त जानकारी
15.23.2. प्रतिलाभ की मात्रा
15.23.3. उदाहरण कॉल करें
अध्याय 16. विंडोज़ सेटअप एपीआई संरचनाएं और कार्य
16.1. सेटअप फ़ंक्शन DiGetCiassDevs: डिवाइस गणना
16.1.1. प्रतिलाभ की मात्रा
16.2. SetupDiDestroyDevicelnfoList फ़ंक्शन डिवाइस विवरण ब्लॉक को मुक्त कर रहा है
16.2.1. प्रतिलाभ की मात्रा
16.3. SetupDiEnumDevicenterfaces फ़ंक्शन: डिवाइस जानकारी
16.3.1. प्रतिलाभ की मात्रा
16.4. SetupDiGetDevicelnterfaceDetaii फ़ंक्शन: विस्तृत डिवाइस जानकारी
16.5. SetupDiEnumDevicelInfo फ़ंक्शन: डिवाइस जानकारी
16.6. SetupDiGetDeviceRegistryProperty फ़ंक्शन: प्लग एंड प्ले डिवाइस गुण प्राप्त करना
16.7. CM_Get_DevNode_Status फ़ंक्शन: डिवाइस स्थिति
16.8. CM_Request_Device_Eject फ़ंक्शन सुरक्षित डिवाइस इजेक्शन
अध्याय 17 विंडोज़ एचआईडी एपीआई संरचनाएं और कार्य
17.1. HidD_Hello फ़ंक्शन: लाइब्रेरी चेक
17.2. HidD_JetHidGuid फ़ंक्शन: एक GUID प्राप्त करना
17.3. HidD_GetPreparsedData फ़ंक्शन: डिवाइस हैंडल बनाएं
17.4. HidD_EreePreparsedData फ़ंक्शन: रिलीज़ डिवाइस हैंडल
17.5. HidD_Get फ़ीचर फ़ंक्शन: फ़ीचर रिपोर्ट प्राप्त करना
17.6. HidD_SetFeature फ़ंक्शन: फ़ीचर रिपोर्ट पास करना
17.7. फ़ंक्शन HidD_GetNumlnputBuffers: बफ़र्स की संख्या प्राप्त करना
17.8. फ़ंक्शन HidD_SetNumlnputBuffers: बफ़र्स की संख्या निर्धारित करें
17.9. HidD_GetAttributes फ़ंक्शन: डिवाइस विशेषताएँ प्राप्त करें
17.10. फ़ंक्शन HidD_GetManufacturerString. निर्माता स्ट्रिंग प्राप्त करें
17.11. HidD_GetProductString फ़ंक्शन एक उत्पाद स्ट्रिंग प्राप्त कर रहा है
17.12. फ़ंक्शन HidD_GetSerialNumberString. सीरियल नंबर स्ट्रिंग प्राप्त करना
17.13. HidD_GetIndexedString फ़ंक्शन। अनुक्रमणिका द्वारा पंक्ति प्राप्त करें
17.14. फ़ंक्शन HidD_Jetlnput रिपोर्ट एक इनपुट रिपोर्ट प्राप्त कर रही है
17.15. फ़ंक्शन HidD_SetOutputReport. आउटपुट रिपोर्ट भेजना
17.16. HidP_GetCaps फ़ंक्शन: डिवाइस गुण प्राप्त करना
17.17. HidP_MaxDataListLength फ़ंक्शन: रिपोर्ट आकार प्राप्त करना
17.18. HidD_FIushQueue फ़ंक्शन: फ्लशिंग बफ़र्स
17.19. HidP_GetLinkColiectionNodes फ़ंक्शन: संग्रह वृक्ष
17.20. कार्य HidP_GetScaledUsageValue और HidP_SetScaledUsage मान: परिवर्तित मान प्राप्त करें और सेट करें
17.21. फ़ंक्शन HidF_MaxUsageListLength: कीकोड के लिए बफर आकार
17.22. फ़ंक्शन HidP_UsageListDifference: सरणियों के बीच अंतर
अनुप्रयोग
परिशिष्ट 1. अतिरिक्त सुविधाएँ
परिशिष्ट 2. डेल्फ़ी के अन्य संस्करणों में उदाहरण संकलित करना
परिशिष्ट 3. भाषा पहचानकर्ताओं की तालिका (LangID)
परिशिष्ट 4. विक्रेता कोड की तालिका (विक्रेता आईडी, डिवाइस आईडी)
परिशिष्ट 5. डिवाइस मैनेजर शॉर्टकट कैसे बनाएं
परिशिष्ट 6. अक्सर पूछे जाने वाले प्रश्न
परिशिष्ट 7 सीडी विवरण
साहित्य
विषय सूचकांक

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

यदि आपको USB डिवाइस के लिए सॉफ़्टवेयर लिखने की ज़रूरत है जो इसकी डेटा प्रोसेसिंग क्षमताओं को बढ़ाता है, तो आप तीन संभावित तरीकों में से एक चुन सकते हैं:

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

एक फ़िल्टर ड्राइवर लिखें जो आवश्यक कार्यक्षमता प्रदान करता है, लेकिन सिस्टम ड्राइवरों के ऊपर ड्राइवर स्टैक में बैठता है। इस प्रकार, सभी मानक प्रसंस्करण कार्य सिस्टम द्वारा स्थापित यूएसबी ड्राइवरों द्वारा किए जाएंगे, और अतिरिक्त कार्य आपके फ़िल्टर ड्राइवर द्वारा प्रदान किए जाएंगे, जिसके साथ उपयोगकर्ता प्रोग्राम इंटरैक्ट करेगा;

स्वतंत्र रूप से वितरित फ़ंक्शन और ड्राइवर लाइब्रेरी का उपयोग करें

USB डिवाइस तक पहुँचने के लिए।

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

इसके अलावा, अधिकांश उपयोगकर्ता ड्राइवर विकास तकनीकों से परिचित नहीं हैं,

और यह प्रोग्रामिंग का एक बहुत ही जटिल क्षेत्र है, इसलिए ऐसे मुफ्त सॉफ़्टवेयर की उपलब्धता उपयोगकर्ताओं की एक विस्तृत श्रृंखला के लिए अमूल्य मदद होगी। LibUsb प्रोजेक्ट के आधार पर, विज़ुअल बेसिक .NET और C# .NET के साथ काम करने के लिए रैपर विकसित किए गए हैं, जिनमें से सबसे लोकप्रिय LibUsbDotNet है, जिसे मुफ्त सॉफ्टवेयर के तत्वावधान में भी विकसित किया गया है। यूएसबी उपकरणों की प्रोग्रामिंग की स्पष्ट जटिलता के बावजूद, सूचीबद्ध सॉफ़्टवेयर इस कार्य को इतना सरल बनाता है कि शुरुआती भी इसे कर सकते हैं। आइए अपने USB उपकरणों के साथ काम करने के व्यावहारिक उदाहरण देखें और LibUsb सॉफ़्टवेयर पैकेज से शुरुआत करें। वैसे, उपरोक्त सॉफ्टवेयर www.sourceforge.net या कई डुप्लिकेट साइटों से मुफ्त में डाउनलोड किया जा सकता है।

LibUsb USB फ़ंक्शन लाइब्रेरीज़ के साथ कैसे काम करें? पुस्तकालय इस प्रकार बनाया गया है।

ज़ोम ताकि आप यूएसबी डिवाइस से संबंधित बुनियादी संचालन कर सकें:

पहचान या, दूसरे तरीके से, गणना। यह ऑपरेशन यूएसबी बस से जुड़े उपकरणों का पता लगाता है, जो लिबसब लाइब्रेरी के उपयुक्त कार्यों का उपयोग करके किया जाता है;

डिवाइस पैरामीटर प्राप्त करना (डिवाइस पहचानकर्ता, निर्माता और डिवाइस की विशेषताओं के बारे में डेटा), जिसके लिए लाइब्रेरी में कई कार्य हैं;

डेटा खोलना, बंद करना, पढ़ना और लिखना, कमांड भेजना। यूएसबी डिवाइस, साथ ही फ़ाइल सिस्टम की अन्य वस्तुओं को लिखने से लेकर पढ़ने तक पहुँचा जा सकता है, जो संबंधित लाइब्रेरी फ़ंक्शंस का उपयोग करके किया जाता है।

सूचीबद्ध सभी सुविधाओं को उचित libusb फ़ंक्शंस को कॉल करके कार्यान्वित किया जा सकता है, लेकिन उन्हें यहां सूचीबद्ध नहीं किया जाएगा क्योंकि यह बहुत अधिक स्थान लेगा; हम देखेंगे कि इनमें से कुछ फ़ंक्शन का उपयोग कैसे करें

चावल। 6.10

डिवाइस ड्राइवर स्टैक में libusb0.sys ड्राइवर का स्थान

व्यावहारिक उदाहरणों पर विचार करें. पाठक संबंधित दस्तावेज़ में सभी कार्यों का विवरण पा सकते हैं। मैं आपको याद दिला दूं कि हम विंडोज़ ऑपरेटिंग सिस्टम में libusb लाइब्रेरी फ़ंक्शंस के उपयोग पर विचार कर रहे हैं।

विंडोज़ ऑपरेटिंग सिस्टम पर libusb के साथ वितरण किट स्थापित करते समय, सिस्टम में libusb0.sys फ़िल्टर ड्राइवर स्थापित किया जाता है। यह ड्राइवर सिस्टम के ड्राइवर स्टैक के शीर्ष पर होगा, जिसे देखना आसान है, उदाहरण के लिए, किसी भी यूएसबी डिवाइस के लिए ड्राइवर की जानकारी देखकर (चित्र 6.10)।

इसके अलावा, उपयोगकर्ता प्रोग्राम से ड्राइवर तक पहुंचने के लिए, libusb0.dll लाइब्रेरी सिस्टम में स्थापित की जाती है, जिसका उपयोग करके आप उपयोगकर्ता प्रोग्राम विकसित कर सकते हैं।

चावल। 6.17

अनइंस्टॉल करते समय एप्लिकेशन विंडो का दृश्य

सिस्टम से USB डिवाइस

लेख पसंद आया? दोस्तों के साथ बांटें!
क्या यह लेख सहायक था?
हाँ
नहीं
आपकी प्रतिक्रिया के लिए धन्यवाद!
कुछ ग़लत हो गया और आपका वोट नहीं गिना गया.
धन्यवाद। आपका संदेश भेज दिया गया है
क्या आपको पाठ में कोई त्रुटि मिली?
इसे चुनें, क्लिक करें Ctrl+Enterऔर हम इसे ठीक कर देंगे!