एसपीआई या I2C: जो एक लंबे समय बस के लिए उपयोग करने के लिए


36

मैं एक ऐसे प्रोजेक्ट पर विचार कर रहा हूं जिसके लिए बस में एक-दूसरे से बात करने के लिए कई AVR की आवश्यकता होगी। उन्हें 6 फीट जितना अलग किया जाएगा।

ऐसा लगता है कि I2C और SPI दोनों एक बस पर माइक्रो की एक श्रृंखला को संवाद करने दे सकते हैं, लेकिन मैंने कुछ भी बात करते हुए नहीं देखा है कि यह कितना लंबा होगा। क्या किसी ने इन प्रोटोकॉल को कई फीट की दूरी से जोड़ने की कोशिश की है?


मैंने एक अवसर पर एक केबल के माध्यम से I2C बस चलाई है। हेंडसाइट में, मुझे इसके बजाय CAN या RS-485 का उपयोग करना चाहिए था (दोनों सिरों पर माइक्रोकंट्रोलर थे)।
निक एलेक्सीव

जवाबों:


19

जैसा कि दूसरों ने कहा है, SPI और I2C का उपयोग लंबी दूरी पर तब तक किया जा सकता है जब तक कि पुल-अप प्रतिरोध, घड़ी की आवृत्तियों और इतने पर।

मुख्य विकल्प (जो बेहतर शोर उन्मुक्ति देगा) RS485 और CAN हैं । इन दोनों में डिफरेंशियल लाइन्स का उपयोग किया जाता है ताकि शोर की समस्या कम हो सके और I2C या SPI की तुलना में डेटा ट्रांसमिशन की इस लंबाई के लिए बेहतर अनुकूल हो। हालाँकि, मुझे नहीं लगता कि कई (कोई भी?) AVR बिल्ट-इन कैन परफॉरमेंस के साथ आते हैं, जो कैन को बहुत आसान बना सकते हैं।

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


ऐसा लगता है कि या तो एक काम करेगा। मैं मुख्य रूप से इन दो विशेष प्रोटोकॉल के बारे में सोच रहा हूं क्योंकि अधिकांश एवीआर अतिरिक्त घटकों को जोड़ने के बिना, मूल रूप से उनका समर्थन करते हैं। अन्यथा, RS485 या CAN एक अच्छा विकल्प होगा।
edebill

यदि आप थ्रू-होल पैकेज तक सीमित नहीं हैं, तो एसटी के पास अपनी लागत प्रभावी और शक्तिशाली एसटीएम 32 और एसटीएम 8 के साथ माइक्रोकंट्रोलर हैं, एनएक्सपी में एलपीसी 17xx माइक्रोकंट्रोलर की एक सीमा है और कुछ अन्य भी हैं। बहुत सारे माइक्रोकंट्रोलर पर कैन तेजी से सामान्य (और सस्ती) होता जा रहा है।
DrAl

1
वास्तव में कुछ AVR कैन कैन रिसीवर्स में बनाए गए हैं, लेकिन अन्य विक्रेताओं की तरह, यह केवल उनके चिप्स के सीमित उपसमुच्चय में है।
davr

1
माइक्रोचिप में CAN के साथ कुछ PIC होते हैं। microchip.com/wwwproducts/Devices.aspx?dDocName=en010302 । मैं मानता हूँ, हालांकि, वे कार्यक्रम के लिए थोड़ा "कायरतापूर्ण" हैं, विशेष रूप से माइक्रोचिप C18 / C30 पुस्तकालयों में। कोड की समीक्षा में, हमने कुछ पुस्तकालय कोड देखे हैं जो कार्यान्वयन के विवरणों के कारण पढ़ना बहुत मुश्किल था - एक प्रेषित बफर जिसे प्राप्त बफर के रूप में उपयोग किया जाता है, ध्वज नाम जो वास्तव में उनके प्रतिनिधित्व के विपरीत हैं। निश्चित रूप से ऐसा कुछ नहीं जो मैं किसी नए माइक्रोकंट्रोलर विकास के लिए सुझाऊं।
जे। पॉलीफ

2
CAN और RS-485 वास्तव में सेब और संतरे हैं। बिट स्तर प्रोटोकॉल के साथ-साथ भौतिक विद्युत परत (PHY) को परिभाषित कर सकता है। RS-485 सिर्फ एक भौतिक परत विनिर्देश है, यह प्रोटोकॉल के बारे में कुछ भी नहीं निर्दिष्ट करता है। यह RS-485 PHY के शीर्ष पर एक वास्तविक प्रोटोकॉल को खोजने या कार्यान्वित करने के लिए पूरी तरह से आपके ऊपर होगा। कैन को उच्च शोर वातावरण के लिए डिज़ाइन किया गया था, इसका उपयोग ज्यादातर ऑटोमोबाइल और विनिर्माण उद्योगों में किया गया था। इसका प्रोटोकॉल एक जटिल जटिल संदेश पारित प्रणाली है और इसमें बहुत अधिक ओवरहेड (कम वास्तविक डेटा दर) है, लेकिन उच्च डेटा अखंडता है।
मार्क

10

कई फीट समस्याग्रस्त नहीं होना चाहिए, यदि आप कर सकते हैं तो बस मुड़ तारों का उपयोग करें। एसपीआई संकेत के बिना बफर के लिए बहुत आसान है (यदि आपको ज़रूरत है) I2C की तुलना में क्योंकि एसपीआई सिग्नल सभी यूनिडायरेक्शनल हैं, जबकि I2C के सिग्नल साझा लाइनों पर हैं।

AVR माइक्रोकंट्रोलर I2C और SPI स्लेव मोड के साथ-साथ मास्टर मोड भी संभाल सकते हैं? (आपको दोनों की आवश्यकता होगी)


2
मुड़ तार ?? कभी I2C डेटा और घड़ी लाइनों मोड़! एसपीआई के साथ यह शायद एक समस्या से कम है, लेकिन मैं सिग्नल लाइनों को कभी नहीं मोड़ूंगा जब तक कि यह एक संतुलित जोड़ी नहीं है, इस मामले में घुमा एक बहुत अच्छा विचार है।
राउटर वैन ओइजेन

नेवर से नेवर; मैं मामूली कैपेसिटिव कपलिंग (क्योंकि घुमा के) डेटा के बीच ले जाऊँगा + घड़ी किसी भी दिन मामूली आगमनात्मक युग्मन के बजाय शोर पावर इलेक्ट्रॉनिक्स (क्योंकि घुमा नहीं)
जेसन एस

4
क्षमा करें, मैं निश्चित रूप से असहमत हूं। 1 राज्य में लाइनों में एक उच्च प्रतिबाधा है। यह किया देखा, यह असफल देखा। सबसे अच्छा विकल्प I2C लाइनों के दोनों किनारों पर कम-वर्तमान ज़मीनी रेखाओं के बीच या उससे भी बेहतर होना है।
राउटर वैन ओइजेन सेप

10

I2C के लिए लंबी दूरी पर आप कुछ "I2C बस पुनरावर्तक" समाधानों की तलाश कर सकते हैं। ध्यान रखें कि I2C या SPI संचार के लिए आपको जो भी अधिकतम दूरी मिल सकती है, वह ज्यादातर कुल बस की दूरी का उल्लेख करती है और बस में दो नोड्स के बीच की दूरी के लिए नहीं।

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


RS485 निश्चित रूप से ऐसी चीज़ के लिए जाने का एक अच्छा तरीका है।
स्कॉट मर्फी

ध्यान रखें कि RS485 में RS232 से भिन्न दो पहलू हैं जो कुछ हद तक स्वतंत्र हैं: भौतिक अंतर तर्क स्तर, और मल्टीमास्टर पहलू। आप इन्हें चुन सकते हैं + चुन सकते हैं, हमने LV4 और RS485 दोनों अनुवादक का उपयोग UART (RS232) के साथ पॉइंट-टू-पॉइंट w / o के लिए RS485 के मल्टीड्रॉप भागों में हो रहा है।
जेसन एस

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

8

I2C पर एसपीआई का उल्लेख नहीं करने का एक फायदा यह है कि सभी एसपीआई तार यूनिडायरेक्शनल हैं और हमेशा उच्च या निम्न संचालित होते हैं। यह I2C के साथ जितना संभव हो उतना तेज़ संचार की अनुमति देता है, शोर के लिए संवेदनशीलता को कम करता है, और सरल द्वार को पुनरावर्तक के रूप में उपयोग करने की अनुमति देता है। एक अन्य उपयोगी विकल्प सरल async संचार (एक तार प्रत्येक दिशा) है। एकमात्र नकारात्मक पहलू जो मैं async संचार के लिए देख सकता हूं, वह यह है कि आम तौर पर दोनों पक्षों को "जाग" होने की आवश्यकता होती है, एक स्थिर घड़ी के साथ, डेटा का आदान-प्रदान करने के लिए।

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


यह एक बहुत पुराना उत्तर है, लेकिन क्या आप कहेंगे कि आप अपने संशोधित एसपीआई प्रोटोकॉल को किस दूरी पर भेज रहे हैं? (यह सवाल का मुद्दा है ...)
डैनियल ग्रिस्कॉम

@ डैनियलग्रिस्कॉम: लगभग 3 फीट आम तौर पर, बहुत प्रभावशाली नहीं, लेकिन कभी-कभी लंबा।
सुपरकैट

6

हालांकि I2C और SPI दोनों को कम दूरी के हल्स (कुछ इंच) के लिए डिज़ाइन किया गया है, दोनों का उपयोग उचित केबल के साथ लंबे समय तक ओलों पर किया जा सकता है और समग्र बस समाई पर ध्यान दिया जा सकता है।

जबकि मुझे SPI के साथ बहुत कम अनुभव है, I2C को बहुत मुश्किल नहीं दिया गया है क्योंकि आपको हमेशा अपने पुल-अप रोकनेवाला के लिए उचित आकार की गणना करने की आवश्यकता होती है। इसके अतिरिक्त, समर्पित और सस्ती I2C बफ़र हैं जो उपयोग करने में काफी आसान हैं। हालाँकि, आपको अभी भी अपने नेटवर्क के लिए एक उचित आकार के पुल-अप अवरोधक का उपयोग करना होगा।

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


आपको मल्टीस्टोरी केबल के साथ w / I2C को देखना होगा, समाई बस को काफी धीमा कर सकती है।
जेसन एस

6

जैसा कि कई ने सुझाव दिया है, I2C और एसपीआई कम दूरी के लिए सबसे अच्छा उपयोग किया जाता है। हालांकि इन इंटरफेस के साथ एक समाधान को लागू करना संभव हो सकता है, लेकिन मैं यह अनुशंसा करूंगा कि आप एक अलग, "अधिक मानक" समाधान (जैसे ईथरनेट, RS485, CAN, आदि) की तलाश करें। - खासकर यदि आप माइक्रोकंट्रोलर्स के बीच 6 फीट की दूरी तक पहुंचने के लिए केबल का उपयोग करने की योजना बना रहे हैं।


6

सिर्फ एक FYI करें, वायरलेस Nintendo Wii रिमोट और उसके Nunchuck साथी के बीच का इंटरफ़ेस I2C का उपयोग एक केबल पर होता है जो लगभग 3 फीट लंबा है। 3-फीट एक्सटेंशन केबल भी हैं जो कुल लंबाई को लगभग 6 फीट तक बढ़ाते हैं। आपके सेटअप के समान बिल्कुल नहीं (केवल दो डिवाइस एक साथ जुड़े हुए), लेकिन यह व्यापक रूप से उपयोग किए जाने वाले उपभोक्ता उत्पाद में एक केबल पर I2C का एक उदाहरण है।


4

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


1
I2C एसपीआई की तुलना में बहुत धीमा है ... यह भी हो सकता है कि टकराव के मामले में आपकी परियोजना ने मध्यस्थता कैसे प्रबंधित की ... या समाई उन सभी नोड्स के साथ काफी अधिक हो सकती है जिन्हें आपको बस एक धीमी घड़ी दर का उपयोग करना था।
जेसन एस

2

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


2

यदि आप घड़ी की गति को नियंत्रित कर सकते हैं और आपको उच्च गति वाले डेटा स्थानांतरण की आवश्यकता नहीं है, तो आपको घड़ी को धीमा करने का प्रयास करना चाहिए। यह इसे शोर के लिए कम संवेदनशील बना देगा।

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