अधीर के लिए, आप पृष्ठभूमि को छोड़ सकते हैं।
पृष्ठभूमि
मैं माइक्रोकंट्रोलर्स का एक सेट प्रोग्रामिंग कर रहा हूं जो एसपीआई के साथ संवाद करता है। एक मास्टर और n
दास हैं जो बस को साझा करते हैं। कोई चिप चयन नहीं है। (यह एक बुरा डिज़ाइन नहीं है, लेकिन n
बड़ा है और n
अतिरिक्त लाइनों के लिए पर्याप्त जगह नहीं है )।
इसलिए दासों की जिम्मेदारी है कि वे अपने MISO को उच्च प्रतिबाधा में रखें और उनमें से अधिकांश पर बोलें। यह केवल उनकी आईडी के प्रदूषित होने पर प्रतिक्रिया देकर किया जाता है।
अब हम एक प्रारंभिक खोज चरण रखना चाहते हैं जहां मास्टर दासों को पता चलता है कि इसमें कौन-सी आईडी जुड़ी हुई हैं। जीवन को आसान बनाने के लिए (कुछ पहलुओं पर), हम चाहते हैं कि आईडी अद्वितीय हो (और इसलिए 32 बिट्स)। इससे मास्टर के लिए बस एक-एक करके आईडी को प्रदूषित करना असंभव हो जाता है और देखते हैं कि कौन प्रतिक्रिया देता है (बहुत अधिक संभावनाएं हैं)।
इस समस्या को हल करने के लिए, मैंने बाइनरी खोज की एक विविधता तैयार की, जहां दास सामूहिक रूप से प्रतिक्रिया देते हैं और मास्टर न्यूनतम आईडी को जल्दी से ढूंढने में सक्षम है। उस आईडी के साथ दास को भाग नहीं लेने के लिए कहा जाता है और एल्गोरिथ्म दोहराता है। (विवरण महत्वहीन)।
हालांकि एक समस्या है। सामूहिक प्रतिक्रिया को सभी प्रतिक्रियाओं का तार्किक या (या तार्किक और) होना चाहिए। मुझे बताया गया है कि लाइन को इस तरह से कॉन्फ़िगर किया जा सकता है कि MISO बस तार्किक या के रूप में कार्य कर सके। मुझे बताया गया है:
- पुल-अप और के रूप में मास्टर पर MISO सेट करें
- हर गुलाम को ओपन-ड्रेन के रूप में MISO सेट करें।
मैंने यह कोशिश की है, लेकिन एक भी दास के साथ, यह कॉन्फ़िगरेशन काम नहीं करता है (आस्टसीलस्कप लाइन पर एक निरंतर शून्य दिखाता है)। अगर मैं उच्च-प्रतिबाधा इनपुट के रूप में मास्टर पर MISO को कॉन्फ़िगर करता हूं, तो मैं आस्टसीलस्कप के साथ देख सकता हूं कि वोल्टेज आधे पर गिरता है जहां दो दासों से आउटपुट के बिट्स भिन्न होते हैं (मूल रूप से शॉर्ट-सर्किट मैं अनुमान लगाता हूं)।
नोट: उच्च-प्रतिबाधा के रूप में मास्टर पर MISO को कॉन्फ़िगर करना और प्रत्येक को पुश-पुल के रूप में दास करना, मैं उनमें से प्रत्येक से व्यक्तिगत रूप से बात कर सकता हूं, भले ही उनमें से कई एक ही बस में हों। मेरा मतलब है, मुझे संदेह है कि यह लाइन की समस्या है।
सवाल
मेरा सवाल है, अगर यह बिल्कुल संभव है, और यदि ऐसा है, तो मैं मास्टर और दासों के इनपुट और आउटपुट पिन को कैसे कॉन्फ़िगर कर सकता हूं ताकि साझा MISO लाइन तार्किक या (या तार्किक और) के रूप में कार्य करे?
संपादित करें
यह नकारात्मक-सच्चे तर्क (मूल रूप से एक) के साथ एक हो जाता है।
मास्टर पर पुल-अप पिन 1 लिखने के साथ एकल दास के साथ समस्या का समाधान किया गया था। पहले इसमें 0 की प्रारंभिक अवस्था थी।
संपादित करें २
एसटी गुलाम ने एमआईएसओ के मेरे जीपीआई कॉन्फ़िगरेशन को ओपन-ड्रेन के रूप में ओवरराइड किया और जब इसे लिखा गया था तो यह उच्च बल दे रहा था। मैंने SPI को साइलेंट करने और इस विशेष मामले में MISO को मैन्युअल रूप से आउटपुट करने का संकल्प लिया।