जवाबों:
एमसीयू में एक वास्तविक एसपीआई नियंत्रक परिधीय अक्सर बिट-बैंगिंग इंटरफ़ेस की तुलना में बहुत तेजी से चल सकता है। बेशक, यह MCU पर निर्भर करता है, लेकिन यह मुझे 30+ मेगाहर्ट्ज पर चलने वाले SPI कंट्रोलर को देखकर आश्चर्यचकित नहीं करेगा, जबकि बिट बैंगिंग लगभग 1 MHz (यदि आप भाग्यशाली हैं) तक सीमित हो सकते हैं।
लेकिन वहां उसकी अपेक्षा इससे अधिक है। जब बिट-बैंगिंग होती है, तो MCU इसे थोड़ा-बहुत पीटने में व्यस्त होता है। यह डेटा को बाहर स्थानांतरित कर रहा है और GPIO लाइनों को घुमा रहा है। मतलब, यह कुछ और नहीं कर सकता। एसपीआई नियंत्रक का उपयोग करते समय, नियंत्रक उस सभी सामान को करने में व्यस्त होता है और एमसीयू अन्य काम करने के लिए स्वतंत्र होता है।
तो एक वास्तविक एसपीआई नियंत्रक के साथ, वास्तविक एसपीआई हस्तांतरण बहुत तेज है और एमसीयू कुछ चक्रों को वापस प्राप्त करता है जिनका उपयोग अन्य चीजें करने के लिए कर सकते हैं।
इस बात में कोई अंतर नहीं है कि आप दोनों विधियों का उपयोग करके समान परिणाम प्राप्त कर सकते हैं, लेकिन कुछ कारण हैं कि आप दूसरे पर एक का चयन क्यों करेंगे।
एसपीआई परिधीय का उपयोग करने से प्रोसेसर को आई / ओ पिंस को पीटने के लिए समय उत्पन्न करने की परवाह करने से मुक्त किया जाएगा, यह अन्य कम्प्यूटेशनल कार्यों को करने और सीपीयू की आपकी प्रोग्रामिंग को सरल बनाने की अनुमति देगा। क्योंकि परिधीय को हार्डवेयर में लागू किया जाता है, यह तेजी से चलेगा और बिट बैंगिंग आई / ओ की तुलना में कम शक्ति का उपयोग करेगा। ऐसे मामले हो सकते हैं जहां आप SPI के साथ इंटरफ़ेस करने के लिए I / O को थोड़ा धमाका करना चाहते हैं यदि आपका एप्लिकेशन मांग करता है कि आप SPI परिधीय के बिना एक प्रोसेसर चुनते हैं। जब तक बिल्कुल आवश्यक न हो, तब तक मैं पवित्रता के कारणों से बचने की सलाह दूंगा।
एसपीआई एक तुल्यकालिक इंटरफ़ेस है, जिसमें मास्टर घड़ी को नियंत्रित करता है। इसका मतलब है कि यदि आप मास्टर हैं, तो आपको घड़ी की गति और समय लेने के लिए मिलता है। दास उपकरणों की घड़ी की आवृत्ति पर कुछ ऊपरी सीमा हो सकती है जिसे वे संभाल सकते हैं, लेकिन आमतौर पर यह परवाह नहीं करते हैं कि घड़ी कितनी धीमी है। अधिक विशेष रूप से, आमतौर पर एक न्यूनतम समय होता है जब प्रत्येक दास को उच्च और निम्न स्थिति में घड़ी को देखने की जरूरत होती है, इससे पहले कि वह फिर से स्विच कर सके, और घड़ी के किनारे के आसपास डेटा लाइन पर कुछ न्यूनतम डेटा सेटअप और होल्ड सीमाएं होंगी, जिस पर दास डेटा लाइन पढ़ता है।
इस वजह से, फर्मवेयर में एक एसपीआई मास्टर को निहित करना वास्तव में काफी आसान है। मैंने इसे कुछ पिंस का उपयोग करने की सुविधा के रूप में अक्सर किया है, जब कोई अंतर्निहित एसपीआई हार्डवेयर नहीं था, या जो भी कारण से उस उद्देश्य के लिए उपलब्ध नहीं था। फर्मवेयर में एक SPI मास्टर करना जितना आसान हो जाता है।
कई एसपीआई गुलाम उपकरण काफी तेज होते हैं, इसलिए अक्सर न्यूनतम घड़ी और सेटअप समय को पूरा करके यह सुनिश्चित किया जाता है कि प्रत्येक कम से कम एक निर्देश चक्र चौड़ा हो। उस स्थिति में, कोड बहुत छोटा और तेज है। कुछ मामलों में एक गुलाम डिवाइस को प्रति घड़ी चरण में दो या तीन निर्देश चक्रों की आवश्यकता हो सकती है, लेकिन यह वास्तव में गारंटी देने के लिए कठिन नहीं है। निम्न स्तर के SPI बिट लूप को स्थिति में अगले आउटपुट बिट की कुछ शिफ्टिंग करने, इनपुट बिट को हथियाने और लूप काउंटर की जांच करने की आवश्यकता होती है। आप आमतौर पर दो या तीन चक्र न्यूनतम समय की आवश्यकताओं को पूरा कर सकते हैं जब आप ड्राइव करते हैं और सही स्थानों पर डाले गए कुछ अन्य ओवरहेड के साथ लाइनों का नमूना लेते हैं। यदि गति महत्वपूर्ण है, तो आप अनियंत्रित लूप लिखने के लिए कोडांतरक प्रीप्रोसेसर का उपयोग कर सकते हैं। इस तरह की तकनीकों के साथ,
फर्मवेयर में एसपीआई मास्टर करने के लिए कुछ फायदे हैं। एसपीआई हार्डवेयर कभी-कभी थोड़ा सा हास्यास्पद होता है कि इसे कैसे कॉन्फ़िगर किया जा सकता है। हमेशा इस बात का मुद्दा होता है कि गुलाम का चयन करने के तुरंत बाद क्या होना चाहिए। क्या पहली बिट डेटा लाइनों के लिए लिखी गई है? क्या होगा अगर घड़ी कम शुरू होती है और माना जाता है कि डेटा लाइनें गिरने वाले किनारे पर रखी जानी चाहिए? कभी-कभी यह मायने रखता है, कभी-कभी ऐसा नहीं होता। फर्मवेयर SPI मास्टर के साथ, आप अधिक क्षमाशील हो सकते हैं और संभवतः विभिन्न दासों के साथ संवाद करने के लिए एक ही दिनचर्या का उपयोग कर सकते हैं। उदाहरण के लिए, आप यह सुनिश्चित कर सकते हैं कि MOSI (मास्टर आउट स्लेव इन) डेटा लाइन घड़ी के दोनों किनारों पर स्थिर है। एसपीआई हार्डवेयर आमतौर पर ऐसा नहीं करेगा, इसलिए इस तरह के हार्डवेयर को उस समय फिर से कॉन्फ़िगर करना होगा जिसके आधार पर यह उस समय के साथ संवाद कर रहा है।
फर्मवेयर SPI मास्टर का एक और लाभ यह है कि आप SPI अनुक्रम के अनुसार बिट्स की एक मनमानी संख्या चुन सकते हैं। हार्डवेयर आमतौर पर 8 बिट के गुणकों तक सीमित होता है। अधिकांश डिवाइस पूरे बाइट ट्रांसफर के लिए अनुमति देने के लिए डिज़ाइन किए गए हैं, लेकिन अक्सर उन्हें आवश्यकता नहीं होती है। उदाहरण के लिए, एक 10 बिट ए / डी संभवतः 10 डेटा बिट्स को पहले भेजेगा, फिर उसके बाद 0 या कचरा भेजें अगर आप इसे देखते रहें। यदि हार्डवेयर एसपीआई का उपयोग करते हैं, तो आप 16 बिट्स को स्थानांतरित करने और कचरे से बाहर निकलने के लिए मजबूर होंगे। सब कुछ ठीक काम करेगा, लेकिन एक फर्मवेयर एसपीआई मास्टर वास्तव में इस मामले में हार्डवेयर से तेज हो सकता है क्योंकि यह केवल आवश्यक न्यूनतम 10 बिट्स को स्थानांतरित कर रहा है।
हार्डवेयर एसपीआई मास्टर्स का मुख्य लाभ यह है कि फर्मवेयर बाइट ट्रांसफर शुरू कर सकता है, फिर कुछ और कर सकता है। क्लॉकिंग भी आमतौर पर तेजी से हो सकता है यहां तक कि एक अनियंत्रित फर्मवेयर लूप प्राप्त कर सकता है। ध्यान दें कि जबकि ये दोनों फायदे कुछ विशेष परिस्थितियों में महत्वपूर्ण हो सकते हैं, वे अक्सर अप्रासंगिक होते हैं। अधिकांश SPI कोड जो बाइट को स्थानांतरित करने के लिए हार्डवेयर का उपयोग करता है, तो तुरंत ट्रांसफर खत्म करने के लिए हार्डवेयर के लिए प्रतीक्षा पाश में चला जाता है। इसके अलावा गुलाम समय की आवश्यकताओं को ध्यान से देखें। एसपीआई डिवाइस आम तौर पर एक पूरे के रूप में तेजी से होते हैं, लेकिन ऐसे मामले हैं जहां आपको हार्डवेयर को धीमा करने की आवश्यकता होती है, हालांकि दास को संभालने के लिए अधिकतम गति से मेल खाने के लिए।
वह सब गुरु की दृष्टि से था। संक्षेप में, मास्टर के रूप में एसपीआई हार्डवेयर का उपयोग करने के लिए अक्सर बहुत कम लाभ होता है, और कभी-कभी इसका उपयोग नहीं करने में कुछ फायदे भी। हालाँकि, दासों के लिए यह सब अलग है। चूंकि गुरु घड़ी को नियंत्रित करता है, दास को जब भी गुरु करता है, उसके लिए तैयार रहना पड़ता है। समय की आवश्यकताएं अक्सर अनुदेश के समय के सापेक्ष काफी कम होती हैं, इसलिए एसपीआई दास को लागू करने वाले हार्डवेयर आमतौर पर वही होते हैं जो आप चाहते हैं।
आप फर्मवेयर में एसपीआई दास कर सकते हैं, लेकिन यह मुश्किल है, आपको चक्र और विलंबता को ध्यान से गिनना होगा, और आप आमतौर पर प्रोटोकॉल के कुछ सबसेट को लागू करने को समाप्त करते हैं जो आप अपने विशेष मास्टर उपयोगों को जानते हैं। उदाहरण के लिए, एक बार मुझे एक पुराने एनालॉग कंट्रोलर बोर्ड के डिजिटल समतुल्य का डिज़ाइन तैयार करना था (वे अतिरिक्त सुविधाएँ चाहते थे जो यथोचित रूप से अनुरूप नहीं हो सकती थीं, और वे कुछ छोटे, उत्पादन के लिए सस्ता और अधिक स्थिर चाहते थे)। इस बोर्ड ने एक SPI बस के बाकी सिस्टम में हस्तक्षेप किया। पुराने एनालॉग बोर्ड में नियंत्रण मान निर्धारित करने के लिए एक दो-चैनल डी / ए था और मापा मूल्यों को पढ़ने के लिए एक दो चैनल ए / डी था। एक ही प्रोसेसर में उन दोनों को लागू करना मुश्किल था, और इसमें यह पता लगाना शामिल था कि हार्डवेयर डी / ए और ए / डी एसपीआई प्रोटोकॉल का सबसेट क्या है जो मौजूदा मास्टर वास्तव में उपयोग किया जाता है। इसमें एक प्रोसेसर भी लगाया गया है जो SPI क्लॉक रेट से काफी तेज चल सकता है। अंत में, मैंने तीन व्यवधानों का उपयोग किया, प्रत्येक दास चयन के लिए और एक घड़ी लाइन के बढ़ते किनारे के लिए। पिछले एक सिस्टम में सबसे अधिक प्राथमिकता वाले अवरोध होने की आवश्यकता है, और विलंबता आवश्यकता को पूरा नहीं किया जा सकता है।
वैसे भी, समग्र बिंदु यह है कि एक फर्मवेयर एसपीआई मास्टर आसान, छोटा, तेज और लचीला है, और एक को करने से शर्माते हुए बहुत कम कारण है। दूसरी ओर, एक गुलाम के लिए आप वास्तव में हार्डवेयर चाहते हैं, या आपको जागना होगा और समय, विलंबता और पसंद के बारे में बहुत सावधानी से सोचना होगा।
यह इस बात पर निर्भर करता है कि आप एसपीआई के लिए क्या कर रहे हैं। यदि आपकी रुचि इससे उच्चतम डेटा दर प्राप्त कर रही है, तो हार्डवेयर हमेशा बिटबैंगिंग से अधिक तेज़ होता है (जैसे कि किशोर 3 में आर्म कॉर्टेक्स चिप 22Mbps पर डेटा को धक्का दे सकता है हार्डवेयर SPI समर्थन का उपयोग करके, बनाम ~ 4.5Mbps बिटबैंगिंग के साथ) 3-16 से हस्तांतरण के प्रति बिट्स की मनमानी संख्या को भी संभाल सकते हैं - जब कुछ विशेष नियंत्रकों के लिए 12 बिट चंक्स में डेटा भेजना उपयोगी हो!))। 16 मेगाहर्ट्ज एवरस पर, अंतर थोड़ा कम चरम है, हार्डवेयर के साथ उच्चतम डेटा दर उच्च 4 / कम 5Mbps लगती है, जबकि बिटबैंगिंग 2.3Mbps के आसपास है)।
इसके अलावा, यदि आप हार्डवेयर समर्थन का उपयोग करते हैं, तो फिर से, प्रश्न में माइक्रोकंट्रोलर पर निर्भर करता है, आपके पास आपके डेटा को शिफ्ट करने के लिए डीएमए नियंत्रकों का उपयोग करने के लिए आपके पास विकल्प उपलब्ध हैं, जिससे आपका कोड दूसरे पर वापस जा सकता है, संभवतः डेटा को बेबीसिट करने की तुलना में अधिक दिलचस्प चीजें। लिखो।
उपरोक्त सभी निर्भर करता है कि हार्डवेयर SPI एक विकल्प है या नहीं।
यदि आप SPI को बिट-बैंग करते हैं, तो आप संचार को संभालने के लिए SSP इंटरप्ट का उपयोग नहीं कर सकते। यह कई उपयोगों के लिए SPI के लिए महत्वपूर्ण नहीं है