I2C दास का पता स्वीकार नहीं किया गया (कभी-कभी)


11

मैं I2C का उपयोग करके एक दूरस्थ रूप से जुड़े FRAM (Ramtron से FM24C04) के साथ संवाद करने की कोशिश कर रहा हूं। इस मेमोरी को एक बोर्ड पर एम्बेड किया जाता है जिसे सिस्टम से / पर किसी भी समय डाला और हटाया जा सकता है (संचार ठीक से समाप्त होने से पहले मेमोरी को हटा दिया जाता है)।

समस्या यह है: एफआरएएम युक्त कार्ड डालने के बाद, कभी-कभी , यह पते को स्वीकार नहीं करता है।

संकेत माप

मैंने यह देखने के लिए संकेतों को मापा कि क्या हो रहा है और ऐसा लगता है कि दोनों मामलों में समय ठीक है (काम नहीं कर रहा है)।

सही I2C संचार (3 बाइट्स पढ़ना): यहाँ छवि विवरण दर्ज करें

I2C FRAM पते को स्वीकार नहीं किया गया (दास पता सही तरीके से भेजा गया है): यहाँ छवि विवरण दर्ज करें

इस मुद्दे को हल करने के लिए पहले से ही किए गए कार्य (बिना सफलता के)

  • अंतर्निहित FRAM के साथ कार्ड के बाद विलंब जोड़ा गया ताकि यह सुनिश्चित हो सके कि बिजली अनुक्रम का सम्मान किया गया है।
  • I2C रोक पीढ़ी एक गुलाम पते का पता लगाने के बाद पावती नहीं

I2C बस कॉन्फ़िगरेशन

  • एक मास्टर (STM32F205 ST से माइक्रोकंट्रोलर)
  • तीन दास (माइक्रोचिप से EEPROM 24AA1025, मैक्सिम आईसी से RTC DS1339C और रैमट्रॉन से दूरस्थ FRAM FM24C04
  • एक I2C स्तर का मज़दूर (मैक्सिम आईसी से MAX3373E) का उपयोग मास्टर और FRAM के बीच संचार की अनुमति देने के लिए किया जाता है
  • 100 kHz पर बस आवृत्ति सेट

EDITED (2013-04-17)

सबसे पहले, आप सभी को अपनी टिप्पणियों के लिए धन्यवाद।

चूंकि बहुत सारे सुझाव हैं, यहां उन जांचों का वर्णन है जो मैंने किया है।

schematics

निम्नलिखित चित्र I2C बस का एक सरलीकृत योजनाबद्ध दिखाता है:

I2C बस योजनाबद्ध

I2C_SDA और I2C_SCL सिग्नल सीधे माइक्रोकंट्रोलर से जुड़े हैं और FRAM_SDA और FRAM_SCL सिग्नल FRAM से जुड़े हैं। ध्यान दें कि एफआरएएम से जुड़े एसडीए और एससीएल सिग्नल को मुराता से बीएलएम 18 फेराइट का उपयोग करके फ़िल्टर किया जाता है।

FRAM निम्नानुसार जुड़ा हुआ है:

  • नेकां (पिन 1) -> जुड़ा नहीं
  • A1 (पिन 2) -> GND
  • ए 2 (पिन 3) -> जीएनडी
  • वीएसएस (पिन 4) -> जीएनडी
  • एसडीए (पिन 5) -> FRAM_SDA
  • SCL (पिन 6) -> FRAM_SCL
  • WP (पिन 7) -> GND (संरक्षित नहीं लिखें)
  • वीडीडी (पिन 8) -> + 5 वी

FRAM कार्ड विवरण

यह कार्ड एक "ISA जैसा" कार्ड है जो केवल FRAM को एम्बेड करता है।

जांच

आवृत्ति को धीमा करना

मैंने 50kHz और 10kHz के लिए SCL आवृत्ति सेट के साथ परीक्षण चलाए। मैंने यह सुनिश्चित करने के लिए एससीएल सिग्नल को आस्टसीलस्कप से मापा कि यह अपेक्षित आवृत्ति पर था।

इन संशोधनों से समस्या हल नहीं हुई। मैंने समय की जाँच की और वे FRAM डेटाशीट विनिर्देशों के भीतर हैं।

शक्ति क्रम सुनिश्चित करना

@jippie।

  1. I2C स्तर के शिफ्टर को तीन राज्य मोड में डाला जाता है, इससे पहले कि कार्ड FRAM को सम्मिलित करता है, डाला जाता है। FRAM_SDA और FRAM_SCL सिग्नल कम खींचे जाते हैं।
  2. "एफआरएएम कार्ड" डाले जाने के बाद, यह सुनिश्चित करने के लिए कि बिजली की आपूर्ति स्थिर है (डेटाशीट के अनुसार पहली शुरुआत की स्थिति से पहले कम से कम 11ms की आवश्यकता है) में 100ms की देरी जोड़ दी जाती है।
  3. I2C स्तर का मज़दूर सक्रिय होता है।
  4. I2C स्तर के शिफ्टर को सक्रिय करने के लिए 1ms की देरी को जोड़ा जाता है और यह कि लाइनें खींची जाती हैं (~ डेटाशीट द्वारा आवश्यक 4us)। FRAM_SDA और FRAM_SCL सिग्नल खींच लिए जाते हैं।
  5. एफआरएएम पहुँचा है।

FRAM_SDA और FRAM_SCL संकेतों को प्रत्येक चरण के बाद मापा गया है।

समस्या अभी भी होती है।

बार-बार शुरू होने के बजाय स्टॉप / स्टार्ट स्थिति

@gbarry।

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

दुर्भाग्य से, यह समाधान समस्या का समाधान नहीं करता है।

विचार

यह समस्या केवल तब होती है जब कार्ड एम्बेडिंग FRAM जुड़ा होता है। "FRAM कार्ड" डाले जाने और सही तरीके से संबोधित किए जाने के बाद मैंने कुछ हज़ारों सफल रीड एक्सेस (दास पता और पढ़ना) चलाए।

यह मेरे लिए अधिक से अधिक एक हार्डवेयर मुद्दे की तरह लगता है। लेकिन मुझे नहीं पता कि यह I2C स्तर-शिफ्टर या I2C बस में अन्य दासों से संबंधित हो सकता है या नहीं।

क्या आपके पास कोई अन्य विचार या सुझाव है?


EDITED (2013-04-18)

समस्या का समाधान होता दिख रहा है

मैंने FRAM मॉड्यूल कनेक्टर को बदल दिया और सीधे FRAM पर माप करने का एक तरीका खोजा। ऐसा लगता है कि सभी इस नए कनेक्टर के साथ अच्छी तरह से काम कर रहे हैं।

मैं यह सुनिश्चित करने के लिए अधिक परीक्षण करूंगा कि समस्या एक खराब संबंध से आई है।


क्या आप योजनाबद्ध पोस्ट कर सकते हैं? यह देखने के लिए कि क्या फर्क पड़ता है, एक धीमी बस आवृत्ति का प्रयास करें।
सुरिंदर

मुद्दा केवल डालने के बाद ही हुआ है और अन्य समय पर नहीं? कितनी जल्दी "बस के बाद" है?
काज

अन्य प्रयोगों के अलावा, आप अन्य दासों को हटाने की कोशिश कर सकते हैं और देख सकते हैं कि क्या व्यवहार को प्रभावित करता है।
बेन गार्टनर

क्या दो पता पिनों को ठीक से कम खींचा गया है, या तैरना छोड़ दिया गया है?
fm_andreas

@Suirnder मैंने अपने उत्तर में योजनाबद्ध पोस्ट किया है।
जॉसी

जवाबों:


6

यद्यपि आप कहते हैं कि सम्मिलन या हटाने से पहले आपके कॉम्स को ठीक से समाप्त कर दिया गया है, यह इस समाधान की कोशिश करने के लायक हो सकता है, क्योंकि ऐसी स्थिति है जहां बस पर उपकरणों में से एक के रीसेट के बाद I2C बस समस्या दे सकती है।

मास्टर I2C हार्डवेयर को शुरू करने से पहले, एसडीए को इनपुट के रूप में सेट करें और एसडीए कम के लिए परीक्षण करें।

अगर यह कम है तो SCL पिन को हाई सेट करें।

तब एससीएल पिन कम और उच्च टॉगल करें जब तक कि एसडीए उच्च नहीं हो जाता है (यानी किसी भी शेष बिट्स को बाहर करें जो बाह्य उपकरणों को अभी भी भेजने की कोशिश कर रहे हैं)। यह 8 से अधिक घड़ी चक्र नहीं ले सकता है - अगर यह होता है तो कुछ और मुद्दा है।

मैं गारंटी नहीं दे सकता कि यह आपकी समस्या को हल करेगा, लेकिन इसने मेरा हल किया!


मास्टर को इनिशियलाइज़ करने से पहले इस "बस रिकवरी एल्गोरिथ्म" को जोड़ना एक बुरा विचार नहीं है। मैं इसे लागू करूंगा। धन्यवाद।
जॉसी

2

FRAM के लिए:

  • पहले जीएनडी और वीसीसी कनेक्ट करें;
  • फिर सुनिश्चित करें कि A1, A2 और WP का सही स्तर है;
  • उसके बाद ही डेटा पिन कनेक्ट करें।

चिप चालू होने से पहले बिजली की आपूर्ति के अलावा अन्य पिनों को जोड़ने से समस्या हो सकती है।


2

10k आपके पुलअप के लिए थोड़ा बड़ा लगता है, और आपके प्रमुख किनारे धीमे दिखते हैं। प्रतिरोधकों को लगभग 3k तक कम करें और देखें कि क्या मदद करता है।

इसके अलावा, ऑफ वोल्टेज समय के साथ बहता क्यों है?


मैंने पुल-अप प्रतिरोधों को 3.3k तक कम कर दिया है और इससे मदद नहीं मिलती है। मुझे इस बहती के बारे में कोई जानकारी नहीं है।
जॉसी

यह स्क्रीन पर छोटा दिखता है, लेकिन इसके बारे में 250 mV है, मुझे लगता है। आपके पास 3.3 वी ओर बिजली आपूर्ति का मुद्दा हो सकता है
स्कॉट सेडमन

तुम सही हो, बहाव I2C स्तर के दोनों किनारों पर लगभग 300mV है। + 3.3V बिजली की आपूर्ति ठीक काम करती है (इसके उत्पादन में कोई बहाव नहीं जब SCL सिग्नल पर बहाव हो रहा है)। क्या यह I2C स्तर के मज़दूर से संबंधित हो सकता है?
जॉसी

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

3.3V SMPS (LM3103MH TI से) आ रहा है। मैं बिजली की आपूर्ति में विशेषज्ञ नहीं हूं, लेकिन जैसा कि मैंने समझा, इस उपकरण के साथ, कोई न्यूनतम आवश्यक वर्तमान नहीं है क्योंकि यह एक हल्के लोड पर असंतोषी चालन मोड में काम कर सकता है। यदि मैं संचार शुरू करने से पहले दो सेकंड प्रतीक्षा करता हूं तो भी यही समस्या होती है।
जोहसी

2

कोई भी मौका कुछ और है जो उस बोर्ड से बात करने की कोशिश कर रहा है? मुझे एक बार जैसी समस्या हुई; मुझे 60% समय मिल सकता है, लेकिन मुझे याद नहीं है कि कभी कोई टक्कर देख पाए। मुझे संदेह है कि i2c मुझे प्रदान किया गया था जो किसी भी तरह से वास्तविक आंतरिक बस से अलग था। मैं इसे लगातार चला सकता हूं, और यह सिर्फ 30% संदेश छोड़ देगा। समस्या उस क्षण से गायब हो गई जब हमने हस्तक्षेप करने वाले "बैकप्लेन" के बिना डिवाइस (एक बिजली की आपूर्ति) से सीधे बात करना शुरू कर दिया।

मुझे आपकी NAK त्रुटि के बाद स्टॉप अनुक्रम दिखाई नहीं देता है। मुझे लग रहा है कि आपके पास एक ब्रेकप्वाइंट है जो उस बिंदु पर कार्यक्रम को रोक देता है?

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

[टिप्पणी के जवाब में]: बहुत कुछ है जो आपने FRAM बोर्ड के बारे में नहीं कहा, जैसे कि यह सिर्फ स्मृति है या संपूर्ण उपतंत्र है। लेकिन अगर आप i2c डिवाइस के लीड पर 'स्कोप को सही तरीके से डाल सकते हैं जो आपको परेशानी दे रहा है, और आप अभी भी देखते हैं कि क्या चित्र है, तो मैं हस्तक्षेप से इंकार कर दूंगा। I2C काफी सरल है कि यदि आप इनपुट पर सही संकेत देखते हैं, तो चिप को ठीक से खेलने के लिए चाहिए जब तक कि इसमें कोई आंतरिक मुद्दा न हो।

विशेष रूप से, आप उस स्तर के मज़दूर के FRAM पक्ष पर जाना चाहते हैं। सिग्नल में एक ब्रेक कुछ होने की तुलना में अधिक संभावना है जो आमतौर पर टकराव के रूप में सोचा जाएगा।

मैं बताता हूं कि एक NAK चक्र एक चिप से अप्रभेद्य है जो बस वहां नहीं है। EEPROMs व्यस्त होने का संकेत देने के लिए ऐसा करेंगे। मैंने FRAM पर लिखने का समय देखा और यह एक एकल i2c डेटा बिट की तुलना में तेज़ है ... इसलिए यह कोई समस्या नहीं है।


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

FRAM बोर्ड बस FRAM एम्बेड करता है। यह एक "आईएसए की तरह" बोर्ड है। चूंकि यह कार्ड एक प्लास्टिक के टुकड़े में एम्बेडेड है, इसलिए एफआरएएम पिन पर सीधे संकेतों को मापना मुश्किल है। वैसे भी, मैं इन संकेतों को मापने के लिए एक तरीका खोजने की कोशिश करूंगा जितना संभव हो सके FRAM के करीब।
जॉसी

U13 का FRAM पक्ष प्राप्त करना एक बड़ा कदम होगा।
गब्ररी

2

इस मुद्दे के बाद से, जब यह पुन: पेश करता है, एक स्थायी विफलता है जो केवल डिवाइस को हटाने और फिर से डालने से साफ हो जाती है, तो यह दो चीजों में से एक है: डिवाइस एक खराब स्थिति में जा रहा है जिसमें से यह केवल एक बिजली चक्र पर ठीक हो जाता है, या खराब संपर्क है।

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

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

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


0

समस्या की छिटपुट प्रकृति से पता चलता है कि यह समय का मुद्दा हो सकता है।

डेटापत्रक सूचियों समय के दो सेट, "मानक मोड" के लिए एक और "फास्ट मोड" के लिए एक। आपके माप से ऐसा लगता है कि आप "स्टैंडर्ड मोड" की सीमा पर हैं। मैं डेटाशीट को स्किम करने से नहीं बता सकता कि चिप को कैसे मोड में डाला जाए।

मैं यह नहीं मानूंगा कि आपका डिवाइस फास्ट मोड में है। क्या आप 2-4 के कारक से समय को कम कर सकते हैं, सुनिश्चित करें कि आप मानक स्थिति समय, प्रारंभ उच्च अवधि, घड़ी की अवधि और घड़ी की कम अवधि के लिए मानक मोड के भीतर हैं और देखें कि क्या यह समस्या अभी भी होती है?


मेरा उपकरण "मानक मोड" (100kHz की SCL आवृत्ति) में है। वास्तव में, यह आवृत्ति इस मोड की सीमा पर है। मैं इसे दो के कारक से कम करने और कुछ परीक्षण करने की कोशिश करूंगा।
जॉसी

0

क्या आप एक 24c04a, b, या c hv करते हैं? यदि इसका c04a है, तो यह एक मजबूत डिजाइन था। बी भाग में बिजली आपूर्ति रैंप के प्रति संवेदनशीलता है। Pin8 पर gnd को u hv क्या डिकम्प्लिंग कर रहा है? मैं संकेत स्तरों के बारे में कुछ कहने जा रहा था, लेकिन मैं देख रहा हूं कि आप एक स्तर अनुवादक का उपयोग करते हैं। आप जांच कर सकते हैं कि u को SCL पर एक गड़बड़ नहीं मिली है कि चिप एक अतिरिक्त घड़ी के रूप में व्याख्या करेगी।


3
क्या आपने पुराने सेलफोन पर केवल नौ-बटन इंटरफ़ेस के साथ इसे टाइप किया था?

प्रयुक्त FRAM FM24C04B है । इस स्मृति की शक्ति संवेदनशीलता के बारे में आपको यह जानकारी कहाँ से मिली? क्या आप मुझे अधिक जानकारी दे सकते हैं? पिन पर कोई डिकॉउलिंग नहीं है। इस मॉड्यूल का डिज़ाइन कुछ साल पहले किया गया है और हमें पूरे उत्पादन का उपभोग करना है। आस्टसीलस्कप के साथ किए गए मापों के अनुसार, ऐसा लगता है कि एससीएल लाइन पर कोई गड़बड़ नहीं है जब एफआरएएम मॉड्यूल जुड़ा हुआ है और स्तर-शिफ्टर सक्रिय है।
जॉसी

1
मुझे लगता है कि इस प्रतिक्रिया में बहुत देर हो चुकी है, लेकिन Vcc संवेदनशीलता के बारे में मेरी जानकारी रामट्रोन के लिए वर्षों से ऐप्स के समर्थन से आती है। मुझे सटीक विवरण याद नहीं है, लेकिन कुछ रैंप दरों और तापमान के तहत, चिप अनिवार्य रूप से लॉक हो जाती है और I2C संचार की अनुमति नहीं देती है जब तक कि आप एक 'अच्छे' रैंप के साथ पावर नहीं करते हैं। चिप के पास डिकूपिंग कैप नहीं होना ठीक नहीं है। आप पा सकते हैं कि 0.1uF बनाम 10uF डिकम्प्लिंग का उपयोग करने से Vcc रैंप में बदलाव होता है, जहां एक काम करता है और दूसरा नहीं करता है। @angelatlarge, हाँ क्षमा करें मैंने एक फ़ोन से अपनी पहली प्रतिक्रिया टाइप की।
gman
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.