SPI या I2C इंटरफ़ेस का उपयोग करने का निर्णय लेते समय मुझे क्या विचार करना चाहिए?
यह एक्सेलेरोमीटर / जाइरो ब्रेकआउट बोर्ड दो मॉडलों में उपलब्ध है, प्रत्येक इंटरफ़ेस के लिए एक। क्या किसी एक Arduino प्रोजेक्ट में एकीकृत करना आसान होगा?
SPI या I2C इंटरफ़ेस का उपयोग करने का निर्णय लेते समय मुझे क्या विचार करना चाहिए?
यह एक्सेलेरोमीटर / जाइरो ब्रेकआउट बोर्ड दो मॉडलों में उपलब्ध है, प्रत्येक इंटरफ़ेस के लिए एक। क्या किसी एक Arduino प्रोजेक्ट में एकीकृत करना आसान होगा?
जवाबों:
सारांश
I2C एसडीए लाइन पर द्विदिश डेटा के साथ एक बस प्रणाली है। SPI अलग-अलग लाइनों (MOSI और MISO) में डेटा के साथ एक पॉइंट-टू-पॉइंट कनेक्शन है।
अनिवार्य रूप से एसपीआई में शिफ्ट रजिस्टर की एक जोड़ी होती है, जहां आप एक शिफ्ट रजिस्टर में डेटा क्लॉक करते हैं जबकि दूसरे से डेटा क्लॉक करते हैं। आमतौर पर डेटा को बाइट में हर बार 8 घड़ी दालों को उत्तराधिकार में लिखा जाता है, लेकिन यह एक एसपीआई आवश्यकता नहीं है। आप चाहें तो शब्द की लंबाई 16 बिट या 13 बिट भी कर सकते हैं। जबकि I2C में सिंक्रोनाइज़ेशन एसपीआई में स्टार्ट सीक्वेंस द्वारा किया जाता है, यह एसएस द्वारा उच्च किया जाता है (एसएस सक्रिय कम है)। आप खुद तय करें कि यह कितनी घड़ी की दाल है। यदि आप 13 बिट शब्दों का उपयोग करते हैं, तो एसएस 13 घड़ी की दालों के बाद बिट्स में अंतिम घेरने का काम करेगा।
चूंकि द्विदिश डेटा दो अलग-अलग लाइनों पर है, इसलिए इसे इंटरफ़ेस करना आसान है।
जैसे tcrosley का कहना है कि SPI I2C की तुलना में बहुत अधिक आवृत्ति पर काम कर सकता है।
I2C थोड़ा अधिक जटिल है। चूंकि यह एक बस है जिसे आपको उपकरणों को संबोधित करने का एक तरीका चाहिए। आपका संचार एक अद्वितीय प्रारंभ अनुक्रम के साथ शुरू होता है: डेटा लाइन (एसडीए) कम खींची जाती है जबकि घड़ी (एससीएल) उच्च होती है, बाकी संचार डेटा केवल घड़ी के कम होने पर बदलने की अनुमति होती है। यह प्रारंभ अनुक्रम प्रत्येक संचार को सिंक्रनाइज़ करता है।
चूंकि संचार में शामिल है, किसी भी संख्या के उपकरणों के लिए (127 तक) केवल दो पंक्तियों की आवश्यकता होती है।
संपादित करें
यह स्पष्ट है कि डेटा लाइन द्विदिश है, लेकिन यह ध्यान देने योग्य है कि यह क्लॉक लाइन के लिए भी सही है। दास बस गति को नियंत्रित करने के लिए घड़ी को खींच सकते हैं । यह I2C को स्तर-स्थानांतरण या बफरिंग के लिए कम सुविधाजनक बनाता है। (मानक मोड में SPI लाइनें सभी यूनिडायरेक्शनल हैं।)
प्रत्येक बाइट (पता या डेटा) भेजे जाने के बाद रिसीवर को एसडीए पर एक पल्स पल्स रखकर रसीद स्वीकार करनी होती है। यदि आपके माइक्रोकंट्रोलर में I2C इंटरफ़ेस है तो यह स्वचालित रूप से ध्यान रखा जाएगा। यदि आपका माइक्रोकंट्रोलर इसका समर्थन नहीं करता है, तो आप इसे अभी भी बिट-बैंग कर सकते हैं, लेकिन आपको प्रत्येक स्वीकार या डेटा पढ़ने के लिए आउटपुट से I / O पिन को स्विच करना होगा, जब तक कि आप पढ़ने के लिए I / O पिन का उपयोग नहीं करते हैं लिखने के लिए एक।
400kHz मानक I2C में SPI की तुलना में बहुत धीमी है। उच्च गति वाले I2C उपकरण हैं जो 1MHz पर काम करते हैं, 20MHz SPI की तुलना में अभी भी बहुत कम हैं।
(संपादित करें: स्पष्ट होने के लिए, निम्नलिखित में से कई चिंताओं को I2C / SPI उपकरणों के बोर्ड-इन-बोर्ड उपयोग के कारण संकेत अखंडता के साथ करना है, क्योंकि ओलिन सही ढंग से इंगित करता है।)
जब तक आपके पास बाधाएं नहीं होती हैं, जो आपको कम तारों की ओर दृढ़ता से धकेलती हैं (हमारे पास एक प्रोजेक्ट था जिसमें एक सीरमयुक्त रूप से सील कनेक्टर था जो प्रत्येक अतिरिक्त संपर्क महंगा था), जब संभव हो तो I2C से बचें, और एसपीआई के साथ रहें।
SPI हार्डवेयर और सॉफ्टवेयर के आधार पर निपटने में काफी आसान है। हार्डवेयर में, दो साझा डेटा लाइनें हैं, मास्टर इन स्लेव आउट (MISO या SOMI) और मास्टर आउट स्लेव इन (MOSI या SIMO), मास्टर द्वारा साझा की गई एक साझा घड़ी, और प्रति डिवाइस एक चिप का चयन करें। CS लाइन कम हो जाती है, क्लॉक साइकिल और अनिवार्य रूप से इनपुट बिट्स में शिफ्ट हो जाती है और आउटपुट बिट्स को शिफ्ट कर देती है, जब तक ट्रांजैक्शन खत्म नहीं हो जाता, जिस समय CS लाइन हाई हो जाती है। जब उनकी CS लाइन उच्च होती है, तो गुलाम उपकरण संवाद नहीं करते हैं: वे CLK और MOSI लाइनों को अनदेखा करते हैं, और अपने MISO पिन को उच्च-प्रतिबाधा अवस्था में डाल देते हैं ताकि कोई दूसरा उसका उपयोग न कर सके।
यदि आपके पास कई एसपीआई उपकरणों का उपयोग करने वाला एक माइक्रोकंट्रोलर है, और इसमें एक अंतर्निहित एसपीआई परिधीय है, तो माइक्रोकंट्रोलर के सीएस आउटपुट को एक डीमुटीप्लेक्सर (जैसे 74HC138) पर भेजें और एसपीआई लेनदेन के लिए डिवाइस का चयन करने के लिए पता लाइनों को नियंत्रित करें; आप आउटपुट के लिए उन्हें पंक्तिबद्ध करने के लिए एक रजिस्टर में शब्दों को लिखते हैं, और सीएस पिन उच्च होने के बाद उन्हें वापस पढ़ते हैं।
क्योंकि SPI सिग्नल सभी यूनिडायरेक्शनल हैं, उन्हें बफर किया जा सकता है, डिजिटल आइसोलेटर्स के साथ एक आइसोलेशन बैरियर के पार इस्तेमाल किया जा सकता है, और LVDS जैसे लाइन ड्राइवरों का उपयोग करके बोर्ड से बोर्ड पर भेजा जा सकता है। केवल एक चीज जिसके बारे में आपको चिंता करने की ज़रूरत है वह है राउंड-ट्रिप प्रचार विलंब, जो आपकी अधिकतम आवृत्ति को सीमित करेगा।
I2C एक पूरी तरह से अलग कहानी है। हालांकि यह तारों के दृष्टिकोण से बहुत सरल है, केवल दो तारों एससीएल और एसडीए के साथ, इन दोनों लाइनों को द्विदिश लाइनों को साझा किया जाता है जो बाहरी पुलअप के साथ खुले-नाली उपकरणों का उपयोग करते हैं। I2C के लिए एक प्रोटोकॉल है जो एक उपकरण पते को संचारित करके शुरू होता है, ताकि यदि प्रत्येक का अपना पता हो तो कई उपकरणों का उपयोग किया जा सके।
एक हार्डवेयर दृष्टिकोण से, सिस्टम में I2C का उपयोग करना बहुत मुश्किल है, जिसमें कोई महत्वपूर्ण शोर है। I2C लाइनों को बफर या अलग करने के लिए, आपको विदेशी आईसी का सहारा लेना होगा - हां, वे मौजूद हैं, लेकिन कई नहीं हैं: हमने एक प्रोजेक्ट पर एक का उपयोग किया और महसूस किया कि आप एक आइसोलेटर का उपयोग कर सकते हैं, लेकिन आप नहीं कर सकते श्रृंखला में दो का उपयोग करें - यह छोटी वोल्टेज की बूंदों का उपयोग यह पता लगाने के लिए करता है कि किन चीजों का ड्राइविंग अंत था, और दो श्रृंखला की बूंदें दो बहुत थीं।
I2C के तर्क स्तर थ्रेसहोल्ड Vcc पर निर्भर करते हैं इसलिए आपको वास्तव में सावधान रहना होगा यदि आप एक ही सिस्टम में 3V / 3.3V और 5V उपकरणों का उपयोग करते हैं।
कोई भी संकेत जो एक या दो फुट से अधिक की केबल का उपयोग करता है, उसे केबल समाई के बारे में चिंता करना पड़ता है। 100pf / मीटर की क्षमता मल्टीस्टोरी केबल के लिए सामान्य से बाहर नहीं है। इसके कारण आपको बस को धीमा करना पड़ता है, या कम पुलअप प्रतिरोधों का उपयोग करना पड़ता है, जो अतिरिक्त समाई को ठीक से संभालने और समय की आवश्यकताओं को पूरा करने में सक्षम हो।
तो मान लें कि आपके पास एक प्रणाली है जो आपको लगता है कि आपने अच्छी तरह से डिज़ाइन की है, और आप अधिकांश सिग्नल अखंडता के मुद्दों से निपट सकते हैं, और शोर दुर्लभ है (लेकिन अभी भी मौजूद है)। आपको किस बात की चिंता है?
त्रुटि स्थितियों का एक गुच्छा है जिसे आपको संभालने के लिए तैयार रहना होगा:
दास डिवाइस किसी विशेष बाइट को स्वीकार नहीं करता है। आपको इसका पता लगाना होगा और संचार अनुक्रम को रोकना और पुनः आरंभ करना होगा। (एसपीआई के साथ, आप आमतौर पर आपके द्वारा भेजे गए डेटा को वापस पढ़ सकते हैं यदि आप यह सुनिश्चित करना चाहते हैं कि यह त्रुटि के बिना प्राप्त हुआ था।)
आप गुलाम डिवाइस से डेटा की एक बाइट पढ़ रहे हैं, और घड़ी लाइन पर शोर के कारण डिवाइस "सम्मोहित" है: आपने उस बाइट को पढ़ने के लिए अपेक्षित 8 घड़ियां भेजी हैं, लेकिन शोर के कारण, गुलाम डिवाइस यह सोचता है को 7 घड़ियां मिली हैं, और अभी भी डेटा लाइन पर 0 को प्रसारित कर रहा है। यदि डिवाइस को 8 वीं घड़ी प्राप्त हुई थी, तो उसने डेटा लाइन को उच्च जारी किया होगा ताकि मास्टर एसीके या एनएकेटी बिट को प्रसारित करने के लिए डेटा लाइन को बढ़ा या कम कर सके, या मास्टर एक स्टॉप (पी) स्थिति को प्रसारित कर सके। लेकिन दास अभी भी डेटा लाइन को कम पकड़े हुए है, एक और घड़ी के लिए व्यर्थ इंतजार कर रहा है। यदि एक मास्टर अतिरिक्त घड़ियों की कोशिश करने के लिए तैयार नहीं है, तो I2C बस गतिरोध में फंस जाएगी। जबकि मैंने कई माइक्रोकंट्रोलर्स का उपयोग किया है जो सामान्य ACK / NACK स्थितियों को संभालते हैं,
वास्तव में भयानक मामला तब होता है जब एक मास्टर एक दास डिवाइस को डेटा लिख रहा होता है, और दूसरा दास डिवाइस के पते की गलत व्याख्या करता है और सोचता है कि प्रेषित डेटा इसके लिए है। हमारे पास I2C डिवाइस (I / O विस्तारक) हैं जो कभी-कभी रजिस्टरों को इस वजह से गलत तरीके से सेट करते हैं। इस मामले का पता लगाना लगभग असंभव है, और शोर से मजबूत होने के लिए, आपको समय-समय पर सभी रजिस्टरों को सेट करना होगा, ताकि यदि आप इस त्रुटि में भाग लेते हैं, तो कम से कम समय की अवधि के बाद इसे ठीक किया जाएगा। (एसपीआई की यह समस्या कभी नहीं होती है - यदि आप सीएस लाइन पर गड़बड़ करते हैं, तो यह कभी भी लंबे समय तक नहीं रहेगा और आपको गलती से गलत स्लेव डिवाइस द्वारा डेटा नहीं मिलेगा।)
अगर त्रुटि का पता लगाया गया (CRC कोड) प्रोटोकॉल में इन स्थितियों में से बहुत कुछ ठीक से संभाला जा सकता है, लेकिन कुछ उपकरणों में यह है।
मुझे लगता है कि मुझे इन स्थितियों को संभालने के लिए अपने I2C मास्टर डिवाइस में जटिल सॉफ़्टवेयर का निर्माण करना होगा। मेरी राय में, यह सिर्फ तब तक इसके लायक नहीं है जब तक कि वायरिंग पर अड़चनें मुझे I2C का उपयोग करने के लिए मजबूर न करें और एसपीआई को नहीं।
स्पार्कफुन में डिवाइस के लिए ब्रेकआउट बोर्ड वास्तव में केवल I2C संस्करण (MPU-6500) के लिए है। MPU-6000 संस्करण में एक ही चिप पर SPI और I2C दोनों इंटरफेस हैं, और मुझे नहीं लगता कि SparkFun में उस चिप के साथ एक बोर्ड है। इसलिए मेरा मानना है कि यदि आप उस विशेष बोर्ड का उपयोग करना चाहते हैं तो आप I2C का उपयोग करने तक सीमित हैं। लेकिन मैं निम्नलिखित कारणों से आपकी स्थिति में वैसे भी I2C का उपयोग करने की सिफारिश करने जा रहा था।
सामान्य तौर पर, आप पाएंगे कि I2C बस SPI बस की तुलना में हार्डवेयर दृष्टिकोण से उपयोग करना आसान है। I2C एक 2 तार बस (SCL / SDA) है:
SCL – Serial clock.
SDA – Serial data (bidirectional).
SPI एक 4 वायर बस (SCLK / MOSI / MISO / CS) है:
SCLK– Serial clock.
MOSI – Master-out, Slave-in. Data from the CPU to the peripheral.
MISO – Master-in, Slave out. Data from the peripheral back to the CPU.
CS – Chip select.
आपके पास एक I2C बस से जुड़े कई उपकरण हो सकते हैं। प्रत्येक डिवाइस में चिप के लिए पता (एस) का अपना सेट होता है। पते को वास्तव में बस पर हर कमांड के पहले बाइट के रूप में प्रसारित किया जाता है (साथ में रीड / राइट बिट)। यह, कुछ अन्य ओवरहेड के साथ, समान कार्यक्षमता के लिए I2C बस बनाम SPI पर अधिक बिट्स भेजने की आवश्यकता होती है।
विभिन्न वर्गों के उपकरणों (मेमोरी, आई / ओ, एलसीडी, आदि) में अलग-अलग पता सीमाएं हैं। कुछ उपकरण, जो आमतौर पर एक सिस्टम में एक से अधिक बार उपयोग किए जाते हैं (जैसे कि PCF8574 I / O विस्तारक), एक या एक से अधिक पता लाइनों (PCF8574 के लिए AD0-2) का उपयोग करें, जो निम्न बिट्स को निर्दिष्ट करने के लिए उच्च या निम्न से बंधा जा सकता है पते की। MPU-6500 में एक ऐसी पता पंक्ति (AD0) है, इसलिए उनमें से दो का उपयोग एक ही प्रणाली में किया जा सकता है।
एक SPI बस में आपके पास कई डिवाइस हो सकते हैं, लेकिन प्रत्येक डिवाइस की अपनी चिप-चयन (CS) लाइन होनी चाहिए। इसलिए 4-तार वर्णन एक मिथ्या नाम है - यह वास्तव में एक तीन तार इंटरफ़ेस + प्रति उपकरण एक अतिरिक्त तार है। मैं बोर्डों के Arduino श्रृंखला के साथ अनुभवी नहीं हूं, लेकिन मेरा मानना है कि यह Arduino पर SPI को अधिक कठिनाई का उपयोग कर सकता है, क्योंकि अगर आपको बहुत अधिक चिप चयन लाइनों की आवश्यकता होती है, तो यह विभिन्न ढालों द्वारा उपयोग किए जाने वाले सामान्य पिन असाइनमेंट के साथ बोझिल होना शुरू हो जाएगा। ।
मेरा मानना है कि अधिकांश Arduino बोर्ड 5 वोल्ट पर चलते हैं, कुछ नए 3.3v पर चल रहे हैं। MPU-6500 3.3v पर चलता है। यदि 5v सीपीयू पर I2C बस के लिए न्यूनतम इनपुट "उच्च" वोल्टेज 3v या उससे कम है, तो आप SCL और SDA लाइनों पर 3.3v पर 10K पुलअप प्रतिरोधों को प्रदान करके स्तर रूपांतरण के मुद्दों से बच सकते हैं, क्योंकि बस खुली है। एकत्र करनेवाला। सुनिश्चित करें कि CPU पर कोई 5v इंटरनल पुलअप अक्षम हैं।
हालाँकि मैंने ATmega2560 (उदाहरण के रूप में ADK 5v Arduino का उपयोग करके) के लिए डेटाशीट की जाँच की, और इसका न्यूनतम इनपुट 'उच्च "वोल्टेज 0.7 * Vcc, या 3.5v है जो 3.3v से अधिक है। इसलिए आपको किसी प्रकार के सक्रिय स्तर की आवश्यकता है। रूपांतरण। TI PCA9306 , जिसमें चिप के 5v और 3.3v दोनों तरफ पुलअप प्रतिरोधों की आवश्यकता होती है, एकल मात्रा में सिर्फ 78 सेंट की लागत होती है।
फिर I2C पर SPI क्यों चुना? मुख्य रूप से इसलिए क्योंकि एसपीआई को कुछ मामलों में 10 मेगाहर्ट्ज तक बहुत तेजी से चलाया जा सकता है। I2C आम तौर पर 400 KHz तक सीमित है। लेकिन यह वास्तव में MPU-6050/6000 एक्सेलेरोमीटर के लिए एक मुद्दा नहीं है, क्योंकि यह I2C के लिए 400 KHz पर चलता है, और SPI के लिए केवल 1 MHz - इतना अंतर नहीं है।
सामान्य तौर पर, एसपीआई एक तेज बस है - घड़ी की आवृत्ति मेगाहर्ट्ज की एक सीमा में हो सकती है। हालांकि, एसपीआई को द्वि-दिशात्मक संचार के लिए कम से कम 3 लाइनों की आवश्यकता होती है और बस में प्रत्येक डिवाइस के लिए एक अतिरिक्त दास का चयन करना होता है।
I2C को केवल 2 लाइनों की आवश्यकता होती है, भले ही आपके पास कितने उपकरण हों (सीमा के भीतर, निश्चित रूप से)। गति, हालांकि, kHz की सीमा में है (100-400kHz विशिष्ट है)।
आजकल अधिकांश माइक्रोकंट्रोलर, दोनों बसों के लिए हार्डवेयर समर्थन रखते हैं, इसलिए दोनों का उपयोग करना समान रूप से सरल है।
I2C is designed for on-board applications.
- जाहिर तौर पर I2C डिवाइस निर्माता आपसे असहमत हैं। TMP100 को लें । उत्पाद पृष्ठ स्पष्ट रूप से बताता है: TMP75 केThe TMP100 and TMP101 are ideal for extended temperature measurement in a variety of communication, computer, consumer, environmental, industrial, and instrumentation applications.
लिए एक ही सही है
SPI को I2C की तुलना में बहुत तेज चलाया जा सकता है (कुछ SPI डिवाइस 60MHz से अधिक चलते हैं; मुझे नहीं पता कि "आधिकारिक" I2C कल्पना 1MHz से अधिक डिवाइस की अनुमति देता है)। या तो प्रोटोकॉल का उपयोग कर एक दास डिवाइस के कार्यान्वयन के लिए हार्डवेयर समर्थन की आवश्यकता होती है, जबकि दोनों "सॉफ़्टवेयर बिट-बैंग" मास्टर्स के आसान कार्यान्वयन की अनुमति देते हैं। अपेक्षाकृत न्यूनतम हार्डवेयर के साथ, एक I2C-अनुरूप दास का निर्माण कर सकता है, जो सही ढंग से काम करेगा, भले ही मेजबान मनमाने ढंग से अतिरिक्त हैंडशेकिंग तारों की आवश्यकता के बिना एक समय में 500us तक बस को अनदेखा करने का निर्णय ले सके। विश्वसनीय एसपीआई ऑपरेशन, हालांकि, हार्डवेयर समर्थन के साथ भी , आम तौर पर आवश्यकता होती है कि एक या तो एक हैंडशेक तार जोड़ें, या फिर यह कि मेजबान "मैन्युअल रूप से" प्रत्येक बाइट के बाद देरी को दास के सबसे खराब स्थिति वाले प्रतिक्रिया समय के बराबर जोड़ दे।
अगर मेरे पास मेरे शराबी, नियंत्रकों के SPI समर्थन में हैंडशेकिंग और वेक-अप क्षमताओं के साथ नियंत्रकों के बीच 8-पारदर्शी पारदर्शी द्विदिश डेटा हस्तांतरण प्रदान करने के लिए कुछ सरल अतिरिक्त विशेषताएं होंगी, तो कुल तीन यूनिडायरेक्शनल तारों (घड़ी और MOSI) का उपयोग करते हुए -गुरु से दास-दास्य]; मिस्सो [दास से दास-बाहर]। तुलनात्मक रूप से, "स्टॉक" एसपीआई पोर्ट के साथ माइक्रोकंट्रोलर्स के बीच कुशल और विश्वसनीय संचार, जब दोनों प्रोसेसर स्वतंत्र रूप से समय की मनमानी लंबाई के लिए देरी हो सकती है, शुरू करने के लिए बहुत अधिक तारों (चिप-चयन, घड़ी, एमआईएसओ, और एमओएसआई) के उपयोग की आवश्यकता होती है। इसके साथ ही, दास से किसी प्रकार के तार को स्वीकार करते हैं। यदि दास अतुल्यकालिक रूप से डेटा भेजना शुरू कर सकता है (जैसे कि किसी ने एक बटन को धक्का दिया), तो किसी को "वेकअप" के रूप में किसी अन्य तार का उपयोग करना चाहिए
I2C मेरी "बेहतर" SPI की सभी क्षमताओं को प्रदान नहीं करता है, लेकिन यह अंतर्निहित हैंडशेकिंग क्षमताओं की पेशकश करता है, जिसमें SPI की कमी होती है, और कई कार्यान्वयनों में इसे जागृत प्रदान करने के लिए kludged किया जा सकता है, भले ही मास्टर हो सॉफ्टवेयर बिट-बैंग। अंतर-प्रोसेसर संचार के लिए, इसलिए मैं एसपीआई पर I2C की दृढ़ता से सिफारिश करूंगा, सिवाय इसके कि जब एसपीआई आपूर्ति कर सकता है तो उच्च गति की आवश्यकता हो, और अतिरिक्त पिन का उपयोग स्वीकार्य हो। अंतर-प्रोसेसर संचार के लिए जहां कम पिन गणना की आवश्यकता होती है, UARTs के पास उनकी सिफारिश करने के लिए बहुत कुछ है।
इस सवाल का यहाँ के उत्कृष्ट उत्तरों में अच्छी तरह से पता लगाया गया है, लेकिन शायद आई 2 सी को देखने का एक और बिंदु है मैं एक चिप निर्माता के दृष्टिकोण से पेश कर सकता हूं।
I 2 C का इलेक्ट्रिकल इंटरफ़ेस एक ओपन कलेक्टर है । अब सांस लें और निहितार्थ के बारे में सोचें। I 2 C का उपयोग करते हुए , मैं एक चिप डिजाइन कर सकता हूं जो बस के ऑपरेटिंग वोल्टेज के लिए पूरी तरह से अज्ञेयवादी है। अगर मुझे ऐसा करने की आवश्यकता हो तो मुझे एसडीए लाइन को खींचने की जरूरत है, और एससीएल और एसडीए के वोल्टेज की तुलना कुछ जमीन से संदर्भित थ्रेशोल्ड वोल्टेज से करें, जिसे मैं चुन सकता हूं। और अगर मैं सामान्य उच्च पक्ष संरक्षण संरचनाओं को छोड़ देता हूं और उन्हें अन्य संरचनाओं के साथ बदल देता हूं, तो मैं एक चिप बना सकता हूं जो पूरी तरह से बाकी सिस्टम से खुद का जीवन जी सकता है - एससीएल, एसडीए कभी भी मेरी चिप को चालू नहीं करता है और मैं निश्चित रूप से उन पिंस के लिए किसी भी वर्तमान फ़ीड नहीं होगा। यही कारण है कि यह वास्तविक समय की घड़ियों और उस जैसे अन्य कम बिजली के सामान के लिए इतनी अच्छी बस है।
एक बात जो मैंने अन्य उत्तरों में नहीं देखी है वह यह है कि I2C एक ही बस में कई मास्टर्स का समर्थन करता है। यदि आपको द्विदिश संचार की आवश्यकता है और मतदान-आधारित पद्धति का उपयोग नहीं करना चाहते हैं, तो I2C को काम मिल जाएगा।
अधिक दूरी पर, CAN में समान क्षमता हो सकती है और अधिक मजबूत होती है। लेकिन CAN एक अतुल्यकालिक प्रोटोकॉल है जिसमें हार्डवेयर समर्थन और ट्रांसीवर की आवश्यकता होती है, इसलिए यह कम-लागत प्रणाली में एक विकल्प नहीं हो सकता है।
जब भी सिंक घड़ी बढ़ रही हो, SPI प्रोटोकॉल का उपयोग करें और अपने बिट्स को सीधे डिवाइस पर लिखें। एक्सनोर लॉजिक सर्किट का उपयोग मेमोरी से "होममेड" पते को मिलान करने के लिए किया जा सकता है ताकि वांछित डिवाइस का चयन किया जा सके जैसे कि यह i2 डिवाइस था।
I2c डिवाइस के प्रारूप के अंदर आधिकारिक सर्किट को एकीकृत कर रहा है, मानक ... आदि जटिल और अलग-अलग हैं, एक स्पाई के साथ आप स्क्रीन पर एक वीडियो प्रदर्शित करने के लिए एक स्पाई मेमोरी का उपयोग कर सकते हैं, लेकिन i2c नहीं।