I2C मेमोरी एक्सेस बनाम रजिस्टर एक्सेस

I2C प्रोटोकॉल के अनुसार, स्लेव डिवाइस से किसी रजिस्टर का डेटा पढ़ने से पहले, उस रजिस्टर के एड्रेस को लिखना आवश्यक होता है। बिना एड्रेस लिखे रजिस्टर को पढ़ने का प्रयास I2C प्रोटोकॉल का उल्लंघन है।

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

I2C प्रोटोकॉल में स्लेव डिवाइस पर किसी रजिस्टर के डेटा को पढ़ने के चरण इस प्रकार हैं:

START -> स्लेव का 7-बिट एड्रेस -> R/W=0 (राइट ऑपरेशन) -> ACK -> रजिस्टर एड्रेस (1 बाइट) -> ACK -> Sr (रीस्टार्ट) -> स्लेव का 7-बिट एड्रेस -> R/W=1 (रीड ऑपरेशन) -> ACK -> रजिस्टर से डेटा -> NACK (स्लेव से क्योंकि उसके पास भेजने के लिए और डेटा नहीं है) -> STOP.

I2C प्रोटोकॉल को बेहतर ढंग से समझने के लिए, टेक्सास इंस्ट्रूमेंट्स द्वारा “Understanding the I2C Bus” दस्तावेज़ देखें: Understanding the I2C Bus

readReg फ़ंक्शन स्लेव से 2 बाइट पढ़ने के लिए डिज़ाइन किया गया है। यदि आप केवल 1 बाइट पढ़ना चाहते हैं, तो सुनिश्चित करें कि आकार को 1 बाइट में बदल दिया गया है।

Reg0 रजिस्टर आमतौर पर EN/RESET रजिस्टर होता है। Reg0 को पढ़ने से पहले किए गए ऑपरेशंस की जांच करें, जैसे कि क्या इस रजिस्टर में कोई डेटा लिखा गया है या नहीं।

यह जांचने के लिए कि क्या आप लिखे गए डेटा को पढ़ सकते हैं, किसी अन्य रजिस्टर, जैसे Reg4, तक पहुँचने का प्रयास करें।

RA6M4 पर MCP9808 तापमान सेंसर से रॉ तापमान बाइट पढ़ने के लिए 0x05 पते वाले रजिस्टर तक पहुँचने का उदाहरण: पहले एक राइट ऑपरेशन करें, स्लेव को 0x05 लिखें जो पढ़े जाने वाले रजिस्टर का पता है, फिर लगभग 100ms (कुछ टाइमआउट जाँच लूप के कारण) के बाद, इस रजिस्टर से डेटा पढ़ने की प्रक्रिया होगी।

Comments

No comments yet. Why don’t you start the discussion?

प्रातिक्रिया दे

आपका ईमेल पता प्रकाशित नहीं किया जाएगा. आवश्यक फ़ील्ड चिह्नित हैं *