एंबेडेड लिनक्स कॉन्फ्रेंस में मैंने दिया यह ट्यूटोरियल सवालों के जवाब देने की कोशिश करता है, जिसमें संबोधित किए गए विषयों के अधिक विस्तृत विवरण के लिंक प्रदान करता है और 4WD ड्रोन ड्राइविंग के व्यावहारिक उदाहरण का उपयोग करता है, जहां एक Arduino मिनी प्रो दास के रूप में कार्य करता है और 4 स्वतंत्र पहियों को नियंत्रित करता है। । मूल दस्तावेज यहां पाया जा सकता है ।
नोट: यह उत्तर वर्तमान में प्रगति पर है, क्योंकि मैं लिंक से हाइलाइट्स को अनुकूलित करता हूं।
I2C बस के विशिष्ट अनुप्रयोग
- अपेक्षाकृत धीमी परिधियों के साथ हस्तक्षेप करना। Ex: सेंसर, मैकेनिकल एक्ट्यूएटर्स।
"तेज" बाह्य उपकरणों को नियंत्रित करना, जो डेटा के आदान-प्रदान के लिए अन्य चैनलों का उपयोग करते हैं। Ex: कोडेक्स।
एक पीसी में, ऑपरेटिंग सिस्टम आमतौर पर I2C पर बातचीत करता है:
- तापमान और बैटरी वोल्टेज मीटर;
- प्रशंसक गति नियंत्रक;
- ऑडियो कोडेक्स।
यदि कई बस नियंत्रक उपलब्ध हैं, तो बाह्य उपकरणों को गति द्वारा समूहीकृत किया जाता है, ताकि तेज चलने वालों को दंडित न किया जाए।
I2C बस का एक त्वरित परिचय - प्रमुख विशेषताएं
- सीरियल की बस।
- केवल 2 लाइनें: सीरियल क्लॉक और सीरियल दाता (प्लस ग्राउंड)।
- 4 गति: 100kHz, 400kHz, 1MHz, 3.2MHz।
- आमतौर पर, 1 मास्टर डिवाइस और 1 या अधिक दास।
- संचार हमेशा एक मास्टर डिवाइस द्वारा शुरू किया जाता है।
- मल्टीपल मास्टर्स एक ही बस (मल्टी-मास्टर) पर सह-अस्तित्व में हो सकते हैं।
- ओपन-ड्रेन: एसडीए और एससीएल दोनों को पुल-अप प्रतिरोधों की आवश्यकता होती है।
- "क्लॉक स्ट्रेचिंग"
- मास्टर SCL को नियंत्रित करता है, लेकिन एक गुलाम इसे पकड़ सकता है (क्योंकि खुली नाली), अगर इसे गति को समायोजित करने की आवश्यकता है।
- मास्टर को इस परिदृश्य के लिए जाँच करनी चाहिए।
- एक गुलाम फंस सकता है और बस को जाम कर सकता है: मास्टर से दास के लिए रीसेट लाइनों की आवश्यकता होती है।
- आमतौर पर 7-बिट एड्रेसिंग, लेकिन 10 बिट भी समर्थित है।
- तार्किक प्रोटोकॉल: वास्तविक वोल्टेज का स्तर निर्दिष्ट नहीं है और व्यक्तिगत कार्यान्वयन पर निर्भर करता है। Ex: 1.8V / 3.3V / 5.0V
संदर्भ URL:
बस विन्यास का उदाहरण
प्रोटोकॉल के लक्षण (सरलीकृत)
- 2 संदेश प्रकार: पढ़ें और लिखें
- प्रारंभ / स्टॉप बिट - शेष उत्तर में "[" और "]" के रूप में दर्शाया गया है
- पता: 7 या 10 बिट्स
- R / W bit: R = 1 / W = 0 भेजे गए संदेश के प्रकार में भेदभाव करने के लिए उपयोग किया जाता है।
- बस में डेटा: (पता << 1 | R / W)
- चयनित डिवाइस के भीतर सूचना संचालकों के रूप में पंजीकृत करता है।
बस यातायात का उदाहरण
कस्टम गुलाम
एक कस्टम I2C दास क्यों बनाएं?
- वांछित सेंसर / एक्ट्यूएटर I2C इंटरफ़ेस के साथ उपलब्ध नहीं है।
- गुलामों की तुलना में कम अद्वितीय पते उपलब्ध हैं।
- दास पर वांछित कस्टम कार्यक्षमता:
- उत्तेजना के लिए अर्ध-स्वायत्त प्रतिक्रियाएं।
- फ़िल्टरिंग / प्रीप्रोसेसिंग इनपुट डेटा।
- पावर ऑप्टिमाइज़ेशन: कस्टम "सेंसर हब" हाउसकीपिंग करता है, जबकि मुख्य प्रोसेसर निष्क्रिय है।
- आदानों के लिए रीयलटाइम प्रतिक्रिया।
- [अपनी कल्पना यहाँ]
कैसे एक कस्टम I2C दास डिजाइन करने के लिए?
- आवश्यकताओं को परिभाषित करें (पिछली स्लाइड देखें)।
- माइक्रोकंट्रोलर या माइक्रोप्रोसेसर चुनें।
- शेड्यूलर या ऑपरेटिंग सिस्टम (यदि कोई हो) चुनें।
- संचार उप-प्रोटोकॉल को परिभाषित करें:
- एक्सचेंज किए जाने वाले मापदंडों और आदेशों को परिभाषित करें।
- उन्हें "रजिस्टर" में व्यवस्थित करें और एक मुफ्त पता चुनें।
I2C मास्टर का डिज़ाइन
मुख्य डिजाइन मानदंड:
- वजन / आयाम।
- आवश्यक कम्प्यूटेशनल शक्ति और औसत विलंबता।
- पीसी जैसी डिवाइस
- एंबेडेड डिवाइस, आमतौर पर हेडलेस।
- पसंदीदा प्रोग्रामिंग भाषा: संकलित बनाम संकलित।
- दास / वाहन चलाने के लिए बस्स / gpios की उपलब्धता:
- GPIO केवल: प्रोटोकॉल को बिटबैंग करते हैं
- I2C: उपयोगकर्ता-अंतरिक्ष अनुप्रयोग बनाम कर्नेल ड्राइवर।
- कोई GPIO / I2C इंटरफेस उपलब्ध नहीं: USB से I2C एडेप्टर।
डिबगिंग: विभाजित और जीतना
एड-हॉक डिवाइस के साथ बस का प्रत्यक्ष नियंत्रण लें। उदाहरण:
बस समुद्री डाकू
- मुख्य रूप से विकास के उद्देश्यों के लिए।
- क्या दोनों बस को सूँघ सकते हैं और उसे चला सकते हैं।
- धारावाहिक (ttyACM) पोर्ट पर कंसोल इंटरफ़ेस, मैक्रोज़ सहित, या कई प्रोग्रामिंग भाषाओं के लिए प्रोग्रामेटिक एक्सेस।
- निर्मित पुलअप प्रतिरोधों और वोल्टेज स्रोतों (5V / 3.3V)
- कई अन्य प्रोटोकॉल का समर्थन करता है।
- संदर्भ: विकिपीडिया , मुख्य पृष्ठ
यूएसबी I2C एडाप्टर के लिए
- छोटे पदचिह्न।
- स्थायी प्रतिष्ठानों के लिए उपयुक्त।
- मेजबान पर विशेष कनेक्शन की आवश्यकता नहीं है: इसका उपयोग एक विशिष्ट पीसी के साथ इंटरफेस करने के लिए किया जा सकता है।
- वेरिएंट उपलब्ध है जो एसपीआई-सक्षम भी है।
- कोई कंसोल इंटरफ़ेस, केवल सीरियल बाइनरी प्रोटोकॉल।
- प्रोटोकॉल आवरण की आवश्यकता है ।
- संदर्भ: प्रोटोकॉल
सिगरोक और पल्सव्यू
सिगरोक (बाकेंड घटक) लोगो
पल्सव्यू (विज़ुअलाइज़र) उदाहरण
कम अंत तर्क विश्लेषक का उदाहरण
- लिनक्स पर पीसी-चालित माप के लिए डी-फैक्टो मानक (लेकिन अन्य ओएस पर भी उपलब्ध है)।
- तर्क विश्लेषक, स्कोप और मीटर की विशाल रेंज के लिए समर्थन।
- I2C सहित विभिन्न प्रोटोकॉल डिकोडर।
- तार्किक संकेतों को दर्शाने और प्रोटोकॉल त्रुटियों को डीबग करने के लिए उपयोगी है।
- यहां तक कि बहुत कम अंत, सस्ती एचडब्ल्यू डिबगिंग के लिए एक नया आयाम प्रदान कर सकता है।
- संदर्भ: सिगारोक , पल्सव्यू , समर्थित हार्डवेयर
उदाहरण: स्टीयरिंग 4WD ड्रोन
2 Arduino Mini Pro का उपयोग करके बनाया गया प्रोटोटाइप।
उदाहरण में दास क्या करता है?
I2C गुलाम:
- प्रत्येक पहिया पर लागू टॉर्क की मात्रा को नियंत्रित करता है।
- दिशा को नियंत्रित करता है प्रत्येक पहिया घूमता है।
- एक ऑप्टिकल एनकोडर (ओडोमीटर) के माध्यम से प्रत्येक पहिया की रोटेशन गति को मापता है।
- I2C मास्टर के ऊपर दिए गए मापदंडों का विस्तार करता है।
I2C गुलाम का उच्च स्तरीय ब्लॉक आरेख।
- प्रत्येक पहिया के लिए पर्याप्त पिन / कार्य:
- 1 कर्तव्य चक्र के स्वतंत्र विन्यास के साथ PWM आउटपुट।
- 1 GPIO IRQ के रूप में ओडोमीटर इनपुट दर्ज करने के लिए।
- चयन के लिए 2 GPIO:
- I2C एचडब्ल्यू ब्लॉक के लिए बाधित-संचालित i2c एक्सचेंज।
- SPI- आधारित प्रोग्रामिंग के लिए समर्पित पिन।
- छोटे पदचिह्न।
- कम लागत।
- चित्र में दर्शाए गए क्लोन का बोर्ड लेआउट एक डीआईएल सॉकेट पर बढ़ते के लिए अनुकूलित है।
- आरटीओएस: प्रीमेशन, टास्क, सेमाफोर्स, डायनेमिक सिस्टम टिक आदि।
- छोटा पदचिह्न: लिंक केवल प्रयुक्त कोड / डेटा।
- HAL के माध्यम से RTOS और BSP के बीच अंतर।
- गैर-व्यावसायिक उपयोग के लिए GPLv3।
- सक्रिय रूप से विकसित, लेकिन पहले से ही परिपक्व।
- 8bit AVR का समर्थन करता है।
हालाँकि इसमें AVR के लिए BSP समर्थन सीमित था, कमी: - AVR GPIOs (जोड़ा) के लिए ड्राइवर को बाधित करता है। - AVR दास मोड (कस्टम) के लिए I2C समर्थन। जिसे AVR के लिए ड्रोन SW के भाग के रूप में अलग से विकसित किया जाना था ।
संचार पैरामीटर को परिभाषित करना
प्रत्येक पहिया के लिए:
पीडब्लूएम सिग्नल के ड्यूटी साइकल ने इसे चलाया - 1 बाइट। 0xFF = अधिकतम टोक़ / 0x00 = कोई टोक़ नहीं।
रोटेशन की दिशा - 1 बाइट।
- 0x00 = निष्क्रिय
- 0x01 = उल्टा
- 0x02 = आगे
- 0x03 = बंद
ऑप्टिकल एनकोडर के स्लॉट्स के बीच औसत अवधि - 2 बाइट्स।
- कुछ भी लिखना माप को रीसेट करता है।
पैरामीटर सूचकांक - 1 कुतरना:
- ० = कर्तव्य चक्र
- 1 = दिशा
- 2 = औसत अवधि
पहिया सूचकांक - 1 कुतरना:
- 0 = लेफ्ट रियर
- 1 = राइट रियर
- 2 = अधिकार मोर्चा
- 3 = वाम मोर्चा
- 4 = सभी
उप प्रोटोकॉल: रजिस्टरों को परिभाषित करना
रजिस्टर प्रारूप: 0xαβ
- α = पैरामीटर सूचकांक - Index = पहिया सूचकांक
पता (मनमाने ढंग से चुना गया): 0x10
बस समुद्री डाकू प्रारूप:
- [= start bit -] = अंत सा - r = पढ़ें बाइट - पता समय 2 (बाएं पारी 1), आर / डब्ल्यू बिट के लिए
उदाहरण - बस समुद्री डाकू प्रारूप में
[i2c_addr reg_addr = (parm, wheel) reg_value]
[0x20 0x20 0x02] Left Rear Forward
[0x20 0x21 0x01] Right Rear Backward
[0x20 0x22 0x01] Right Front Backward
[0x20 0x23 0x02] Left Front Forward
[0x20 0x14 0xFF] Wheels set to max torque
कार दक्षिणावर्त घूमती है।