यदि मैं I2C लाइनों पर पुलअप प्रतिरोधों को छोड़ देता है तो क्या होगा?


33

बस अब मुझे एहसास हुआ कि I 2 C डेटा और क्लॉक लाइन्स (SDA और SCL) में पुलअप रेसिस्टर्स होने चाहिए।

खैर, मैंने नीचे योजनाबद्ध के अनुसार DS1307 RTC ( डेटाशीट देखें ) का उपयोग करके कुछ घड़ियों का निर्माण किया है । ध्यान दें कि मैंने दोनों पुलअप प्रतिरोधों को छोड़ दिया है।

I2C लाइनों पर पुलअप प्रतिरोधों के बिना मेरी घड़ी की योजनाबद्ध

दोनों घड़ियां ठीक काम करती हैं, उनमें से एक अब 3 महीने से ज्यादा काम कर रही है। वो कैसे संभव है? किसी भी मामले में, मैं जानना चाहता था:

  1. क्या होता है जब I 2 C पुलअप छूट जाते हैं?

  2. क्या मेरे बोर्ड में उन दो आईसी में से किसी के भी नुकसान की संभावना है?

मैं उन उत्तरों के बाद हूं जो मेरे द्वारा प्रदान किए गए योजनाबद्ध रूप में ATmega328P को DS1307 RTC से जोड़ने के मेरे विशिष्ट मामले को संबोधित करते हैं, लेकिन यदि प्रश्न बहुत व्यापक नहीं है, तो यह जानना उपयोगी होगा कि जब पुलअप सामान्य रूप से छूट जाता है तो क्या होता है? , यानी, I 2 C ऑपरेशन के अन्य परिदृश्यों में ।

पुनश्च। मैंने उत्तर खोजने के लिए नेट की खोज की, लेकिन बस पुलअप को आयाम देने के बारे में लेख पा सका।

अपडेट: मैं Arduino IDE 1.03 का उपयोग कर रहा हूं और मेरा फर्मवेयर DS1307RTC Arduino lib (अपने कार्यों के माध्यम से RTC.read()और RTC.write()) का उपयोग करके RTC को संभालता है । यह बदले Wire.hमें RTC से बात करने के लिए उपयोग करता है।

अद्यतन 2: नीचे दिए गए स्कोप शॉट्स की एक श्रृंखला है जो मैंने यह समझाने में मदद करने के लिए ली कि बाहरी पुलअप के बिना I 2 C कैसे काम कर रहा है।

घेरा गोली १ स्कोप शॉट २

अपडेट 3 (I 2 C पुलअप के बाद ) जोड़ा गया: नीचे दिए गए स्कोप शॉट्स की एक और श्रृंखला है, जो मैंने 2 C लाइनों (एक ही बोर्ड पर) में उचित (4K7) पुलअप रेसिस्टर्स को जोड़ने के बाद ली है । उदय का समय लगभग 5 5 से घटकर 290 ns हो गया। I 2 C अब बहुत खुश है।

स्कोप शॉट 3 स्कोप शॉट 4


2
क्या आपका कोड उन पिनों पर पुलअप को अक्षम करता है?
इग्नासियो वाज़केज़-अब्राम्स

@ इग्नेशियोवेज़ज़-एबर्स मेरे कोड में एसडीए और एससीडी पिन्स (18 और 19) का कोई प्रत्यक्ष उल्लेख नहीं है। मैं DS1307RTC लिबास Arduino lib और इसके फ़ंक्शन RTC.read () और RTC.write () का उपयोग करके RTC को संभालता हूं।
रिकार्डो

बदले में वह RTT से बात करने के लिए Wire.h का उपयोग करता है।
रिकार्डो

3
हाँ, आंतरिक पुलअप का उपयोग जरूर करें। तेज किनारों के बजाय वक्रों पर ध्यान दें।
इग्नासियो वाज़क्वेज़-अब्राम्स

जवाबों:


28

1) I2C पुलअप के छोड़े जाने पर क्या होता है?

I 2 C बस में कोई संचार नहीं होगा । बिलकुल। MCU I 2 C प्रारंभ स्थिति उत्पन्न नहीं कर सकेगा । MCU I 2 C पते को प्रेषित नहीं कर पाएगा ।

आश्चर्य है कि इसने 3 महीने तक काम क्यों किया? पढ़ते रहिये।

2) मेरे बोर्ड में उन दो आईसी में से किसी के भी नुकसान की संभावना है?

शायद ऩही। इस विशेष मामले में (MCU, RTC, और कुछ नहीं), निश्चित रूप से नहीं।

3) MCU पहले स्थान पर I 2 C दास डिवाइस के साथ संचार करने में सक्षम क्यों था ? I 2 C को पुल-अप रेसिस्टर्स की आवश्यकता होती है। लेकिन वे योजनाबद्ध में शामिल नहीं थे।

संभवतः, आपके पास ATmega पर आंतरिक पुल-अप सक्षम है। मैंने जो 1 पढ़ा है , उसमें से ATmega में 20k pull आंतरिक पुल-अप हैं, जिन्हें फर्मवेयर से सक्षम या अक्षम किया जा सकता है। 20k 20 रास्ता I 2 C पुल-अप के लिए बहुत कमजोर है । लेकिन अगर बस में कम समाई (शारीरिक रूप से छोटी) है और संचार काफी धीमा है, तो 20kΩ अभी भी बस का काम कर सकता है। हालांकि, असतत पुल-अप प्रतिरोधों का उपयोग करने की तुलना में यह एक अच्छा विश्वसनीय डिज़ाइन नहीं है।

1 खुद ATmega आदमी नहीं।

अद्यतन: प्रतिक्रिया में I 2 C तरंग, जो ओपी में जोड़े गए थे ओपी
में waveforms में बहुत लंबे समय तक वृद्धि होती है। यहाँ मैं 2 सी तरंग क्या है आमतौर पर की तरह लग रहे हो

यहाँ छवि विवरण दर्ज करें

PIC18F4550, Vcc = + 5V, 2.2k ups पुल अप। वेवफॉर्म एससीएल को दिखाता है। एसडीए पर उदय का समय लगभग एक ही है। बस का भौतिक आकार मध्यम है: 2 दास उपकरण, पीसीबी लंबाई bus100 मिमी।


आपके उत्तर के लिए धन्यवाद! हां, ATmega में पुलअप है जो मेरे मामले में सक्षम होना चाहिए। मैं अपने द्वारा उपयोग किए जा रहे कोड और लिबास को दोबारा देखूंगा और बोर्ड को दायरे में लाऊंगा। मुझे उम्मीद है कि इससे चीजें थोड़ी साफ हो जाएंगी।
रिकार्डो

1
आप पहले अपने गुलाम डिवाइस की डेटशीट के साथ दोबारा जांच कर सकते हैं। अगर मुझे सही याद है, तो ATMega का पुलअप 30k-60k से कहीं भी हो सकता है (यह Vcc, तापमान और कई अन्य कारकों पर निर्भर करता है; आप वास्तव में विश्वसनीय प्रतिरोध के लिए उन पर निर्भर नहीं रह सकते हैं)। आप यह सुनिश्चित करना चाहते हैं कि आप एक उचित तर्क सुनिश्चित करने के लिए दास को पर्याप्त वर्तमान भेज रहे हैं। 1. यदि प्रतिरोध बहुत बड़ा है, तो आपके दास डिवाइस को पर्याप्त वर्तमान नहीं मिलेगा और आप उसी स्थान पर रहेंगे अभी व।
४atic बजे ऑडियोफ़ैनेटिक

4
@ औदीफैनेटिक +1। BTW, IMO, ब्रेकआउट बोर्डों में पुल-अप प्रतिरोधों सहित और डिफ़ॉल्ट रूप से उन्हें स्थापित करना एक त्रुटि है। सोचिए अगर किसी के पास एक I2C बस में कई ब्रेकआउट बोर्ड हों तो क्या होगा। प्रत्येक पुल-अप आमतौर पर 2.2kΩ या ऐसा होता है। ब्रेक आउट बोर्डों के सभी पर पुल-अप प्रतिरोध समानांतर में दिखाई देते हैं। I2C के लिए संयुक्त पुल-अप बहुत कठोर हो जाता है। [इस संभावित समस्या के बारे में अधिक यहाँ और यहाँ ।]
निक एलेक्सीव

2
@ रिचर्डो आपके स्कोप शॉट्स [ओपी में स्कोप शॉट्स का पहला सेट] पर खुश I2C बस नहीं है। मैंने अपने जवाब में एक स्कोप शॉट भी जोड़ा है।
निक एलेक्सीव

3
इस लेख में अच्छे और बुरे i2c संकेतों के कुछ तरंग हैं: dsscircuits.com/index.php/articles/…
ford

16

आपके द्वारा उपयोग की जाने वाली लाइब्रेरी और लाइब्रेरी (वायर) पर निर्भर करता है, ATMega के आंतरिक पुल-अप को सक्षम करता है। ये कमजोर पुल-अप हैं, और सामान्य उपयोग में, किसी भी बाहरी पुल-अप (समानांतर में दो प्रतिरोधक) के पूरक हैं। 20k से 70k के अपेक्षाकृत उच्च प्रतिरोध के कारण, वे उपयोग में बाहरी लोगों के साथ कोई समस्या होने पर ज्यादा कारण नहीं देते हैं।

क्या होता है जब I2C पुलअप छोड़े जाते हैं?

अब बाहरी प्रतिरोधों के बिना, कमजोर आंतरिक पुल-अप केवल एक चीज है जो लाइन को उच्च ड्राइविंग करते हैं। आपके बोर्ड लेआउट के आधार पर, आपकी i2c लाइन की गति, आप इसे कितनी बार एक्सेस करते हैं, बाहरी हस्तक्षेप आदि, वे काम कर सकते हैं, वे नहीं हो सकते हैं। आपको नसीब हुआ। आपके पास पुल-अप्स हैं, बस वे नहीं जिनकी आपको उम्मीद थी।

मेरे बोर्ड में उन दो आईसी में से किसी को भी नुकसान पहुंचने की संभावना है?

आंतरिक पुल-अप के बिना भी, किसी भी पुल-अप की कमी आईसी को नुकसान नहीं पहुंचाएगी। I2c डिवाइस SCL और SDA लाइनों का आंतरिक निर्माण NPN ट्रांजिस्टर की तरह है। वे ओपन कलेक्टर हैं , अनिवार्य रूप से वर्तमान नियंत्रित / स्विच किए गए डायोड।

हालांकि ध्यान देने वाली आखिरी बात, जब आपके ATMega 5v पर है, और i2c डिवाइस 3.3v केवल डिवाइस है, पर समस्याएँ पैदा कर सकता है। या यदि आपके पास आंतरिक पुल-अप और 3.3v या अन्य वोल्टेज से जुड़े बाहरी प्रतिरोध हैं, तो भी समस्या हो सकती है। अनिवार्य रूप से, यह वायर लाइब्रेरी में जानबूझकर अनदेखा बग है।


4
+1 - You do have pull-ups, just not ones you expected.- मुझे लगता है कि आपने इसे रद्द कर दिया है। धन्यवाद!
रिकार्डो

बस आपको पता है कि मैंने अपने सेटअप के साथ क्या हो रहा है, यह स्पष्ट करने के लिए कुछ स्कोप शॉट्स जोड़े हैं।
रिकार्डो

2
@ रिकार्डो वेप, उन्हें देखकर, 33khz पर। सबसे कम i2c स्पेक की गति का एक तिहाई, और संकेत अभी भी बहुत खराब है। 100khz या 400khz में, आपके पास कार्य संचार नहीं होगा। महान बात हालांकि, कई i2c डिवाइस अधिकतम गति के एक अंश पर काम करते हैं। बस याद रखें, आंतरिक पुलअप 70k ओम तक हो सकता है, एक विशिष्ट i2c अवरोधक 4.7k है
राहगीर

8

आम तौर पर आपको I 2 C इंटरफ़ेस सर्किट के लिए पुलअप प्रतिरोधों की आवश्यकता होगी । यदि इंटरफ़ेस वास्तव में तारों के दोनों सिरों पर एक पूर्ण कल्पना I 2 C है तो प्रतिरोधों के बिना सिग्नल लाइनें कभी भी उच्च स्तर पर नहीं जा पाएंगी। वे कम रह सकते हैं या प्रत्येक छोर पर भागों में रिसाव चालू द्वारा निर्धारित कुछ मध्यवर्ती स्तर तक जा सकते हैं। इसका कारण यह है क्योंकि सच I 2 C एक खुली नाली वाली बस है।

कुछ डिवाइस वास्तव में 20K से 100K ओम रेंज में ऑन-चिप पुलअप रेसिस्टर्स हो सकते हैं, जो कि उच्च निष्क्रिय स्तर पर इंटरफेस पिंस को धारण करने के लिए होता है जब भाग पर I 2 C इंटरफ़ेस उपयोग में नहीं होता है। सरल और लघु इंटरफेस के लिए ये पुलअप प्रतिरोधक केवल इतना हो सकता है कि घड़ियों और / या डेटा को संकेतित करते समय लाइनों को खींचने के लिए आवश्यक वर्तमान प्रदान करें।

अपने योजनाबद्ध से यह बताना कठिन है, लेकिन कुछ उदाहरणों में I 2 C इंटरफेस को सामान्य प्रयोजन I / O पोर्ट पिन का उपयोग करके कार्यान्वित किया जाता है और फिर सॉफ्टवेयर में थोड़ा धमाका किया जाता है। कभी-कभी कार्यान्वयनकर्ता एक खुली नाली पद्धति का उपयोग करके इस कॉन्फ़िगरेशन में I / O पिंस को संचालित नहीं कर सकता है और यह एक कारक हो सकता है कि क्यों पुलअप प्रतिरोधों के बिना एक इंटरफ़ेस काम करने लगता है।

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


4

क्या होता है जब I2C पुचअप्स को ommited किया जाता है?

सबसे अधिक संभावना है, I2C बस काम नहीं करेगा।

मेरे बोर्ड में उन दो आईसी में से किसी को भी नुकसान पहुंचने की संभावना है?

न होने की सम्भावना अधिक।


3

आपकी I2C लाइनें बिल्कुल काम नहीं करेंगी। अगर मैं गलत नहीं हूं, तो I2C कम संकेतों को बताता है, लेकिन उन्हें उच्च राज्य में वापस नहीं लौटाता है, यही कारण है कि आपको उन प्रतिरोधों की आवश्यकता होती है।

पुल-अप की कमी से किसी भी आईसी को नुकसान नहीं होना चाहिए।


I2C पिन खुले नाले हैं।
मैट यंग

1

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

ढांच के रूप में

इस सर्किट का अनुकरण करें - सर्किटलैब का उपयोग करके बनाई गई योजनाबद्ध


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

अब, यदि आप एक माइक्रोकंट्रोलर के साथ सॉफ्टवेयर में I2C को लागू करने के लिए थे, तो यह संभवतः एक मुद्दे का बहुत अधिक नहीं होगा क्योंकि यह सबसे अधिक संभावना CMOS तर्क का उपयोग करेगा, जो आउटपुट को उच्च या निम्न दोनों ड्राइव कर सकता है।


1
खुशी है कि यह मदद की।
ऑडियोफैनेटिक

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

3
-1 जैसा कि पीटर बेनेट ने कहा, इस जवाब का बहुत कुछ गलत है। TTL सिग्नल को "ओपन-ड्रेन" कहा जाना सस्ता है।
जो हस

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

@BenVoigt: नहीं - "कॉल करने के लिए" पुल-अप रेसिस्टर्स की आवश्यकता होती है "कॉन्फ़िगरेशन" TTL "गलत है, क्योंकि यह व्यवस्था CMOS या TTL के साथ की जा सकती है, और DS1307 एक CMOS हिस्सा है। मैक्सिम डेटाशीट में स्पष्ट रूप से कहा गया है कि आउटपुट ओपन ड्रेन हैं, और ब्लॉक डायग्राम एक आउटपुट के लिए FET दिखाता है।
पीटर बेनेट

0

जब मैं मास्टर के रूप में एक माइक्रो के साथ I2C को धमाका करता हूं जो घड़ी की आपूर्ति करता है तो मैं बिना खींच के SCL ड्राइव करने में सक्षम हूं।

हालांकि, SDA को पुलअप के साथ OC होने की आवश्यकता होती है ताकि दास डिवाइस नीचे खींच सके और ठीक से प्रतिक्रिया दे सके।

सादर

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