2009-12-31 15 views
5

एक परियोजना के लिए मैं काम कर रहा हूं मुझे आई 2 सी के माध्यम से एक बहु-फ़ंक्शन चिप से बात करनी है। मैं इसे I2C/dev/i2c-1 इंटरफ़ेस के माध्यम से linux उपयोगकर्ता-स्थान से कर सकता हूं।आई 2 सी संचार को सुरक्षित कर रहा है?

हालांकि, ऐसा लगता है कि एक ड्राइवर एक ही समय में एक ही चिप से बात कर रहा है। इसके परिणामस्वरूप मेरी I2C_SLAVE पहुंच EBUSY के त्रुटि-मान के साथ विफल हो जाती है। खैर - मैं इसे ioctl I2C_SLAVE_FORCE के माध्यम से ओवरराइड कर सकता हूं। मैने इसे आजमाया और इसने कार्य किया। मेरे आदेश चिप तक पहुंचते हैं।

प्रश्न: क्या यह सुरक्षित है? मुझे यकीन है कि पता-श्रेणी जो मैं लिखता हूं उसे किसी भी कर्नेल-ड्राइवर द्वारा कभी भी एक्सेस नहीं किया जाता है। हालांकि, मुझे यकीन नहीं है कि I2C संचार को मजबूर करना इस तरह से कुछ आंतरिक राज्य-मशीन को भ्रमित कर सकता है। (मैं I2C में नहीं हूं, मैं बस इसका उपयोग करता हूं ...)

संदर्भ के लिए, हार्डवेयर तथ्य:

 
OS:   Linux 
Architecture: TI OMAP3 3530 
I2C-Chip:  TWL4030 (does power, audio, usb and lots of other things..) 
+0

क्या आपने http://chiphacker.com पर यह प्रश्न पूछने का प्रयास किया था? यह एक समान साइट है लेकिन इलेक्ट्रॉनिक्स के लिए (हालांकि लगभग एसओ के रूप में सक्रिय नहीं है)। – Wim

उत्तर

6

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

+0

अगर हम चिप ड्राइवर लिख रहे हैं तो हम इस समस्या से कैसे निपट सकते हैं। मेरी समझ से, मैं अपने चिप के ड्राइवर कोड में I2C_SLAVE और I2C_SLAVE_FORCE का उपयोग कर रहा हूं। तो क्या चिप के ड्राइवर कोड में I2C_SLAVE_FORCE का उपयोग करने की सलाह दी जाती है? –

2

मैं ज्यादातर @Wim से सहमत हूं। लेकिन मैं यह जोड़ना चाहता हूं कि यह निश्चित रूप से डिवाइस के आधार पर अपरिवर्तनीय समस्याओं या विनाश का कारण बन सकता है।

मुझे एक Gyroscope (L3GD20) पता है जिसके लिए आपको कुछ स्थानों पर लिखना नहीं है। जिस तरह से चिप स्थापित होता है, इन स्थानों में निर्माता की सेटिंग्स होती है जो यह निर्धारित करती है कि डिवाइस कैसे काम करता है और करता है।

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

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

संबंधित मुद्दे