मैं 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_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।
- I2C स्तर के शिफ्टर को तीन राज्य मोड में डाला जाता है, इससे पहले कि कार्ड FRAM को सम्मिलित करता है, डाला जाता है। FRAM_SDA और FRAM_SCL सिग्नल कम खींचे जाते हैं।
- "एफआरएएम कार्ड" डाले जाने के बाद, यह सुनिश्चित करने के लिए कि बिजली की आपूर्ति स्थिर है (डेटाशीट के अनुसार पहली शुरुआत की स्थिति से पहले कम से कम 11ms की आवश्यकता है) में 100ms की देरी जोड़ दी जाती है।
- I2C स्तर का मज़दूर सक्रिय होता है।
- I2C स्तर के शिफ्टर को सक्रिय करने के लिए 1ms की देरी को जोड़ा जाता है और यह कि लाइनें खींची जाती हैं (~ डेटाशीट द्वारा आवश्यक 4us)। FRAM_SDA और FRAM_SCL सिग्नल खींच लिए जाते हैं।
- एफआरएएम पहुँचा है।
FRAM_SDA और FRAM_SCL संकेतों को प्रत्येक चरण के बाद मापा गया है।
समस्या अभी भी होती है।
बार-बार शुरू होने के बजाय स्टॉप / स्टार्ट स्थिति
@gbarry।
मैंने बाइट्स ट्रांसफर के दौरान बार-बार शुरू होने से पहले एक पड़ाव डालने की कोशिश की। मैंने आस्टसीलस्कप के साथ बाइट ट्रांसफर को मापा: स्टॉप स्थिति ठीक है उसके बाद STOP स्थिति ठीक है।
दुर्भाग्य से, यह समाधान समस्या का समाधान नहीं करता है।
विचार
यह समस्या केवल तब होती है जब कार्ड एम्बेडिंग FRAM जुड़ा होता है। "FRAM कार्ड" डाले जाने और सही तरीके से संबोधित किए जाने के बाद मैंने कुछ हज़ारों सफल रीड एक्सेस (दास पता और पढ़ना) चलाए।
यह मेरे लिए अधिक से अधिक एक हार्डवेयर मुद्दे की तरह लगता है। लेकिन मुझे नहीं पता कि यह I2C स्तर-शिफ्टर या I2C बस में अन्य दासों से संबंधित हो सकता है या नहीं।
क्या आपके पास कोई अन्य विचार या सुझाव है?
EDITED (2013-04-18)
समस्या का समाधान होता दिख रहा है
मैंने FRAM मॉड्यूल कनेक्टर को बदल दिया और सीधे FRAM पर माप करने का एक तरीका खोजा। ऐसा लगता है कि सभी इस नए कनेक्टर के साथ अच्छी तरह से काम कर रहे हैं।
मैं यह सुनिश्चित करने के लिए अधिक परीक्षण करूंगा कि समस्या एक खराब संबंध से आई है।