क्या एक निर्मित एसपीआई मॉड्यूल और बिट-बैंगिंग का उपयोग करने के बीच अंतर है?


25

क्या दोनों के बीच कोई अंतर है, या यह केवल अमूर्तता की बात है? मेरा अंतर्ज्ञान कहता है कि कोई अंतर नहीं है, लेकिन मैं गलत होना पसंद करूंगा।


1
निर्भर करता है कि आप बिट-बैंगिंग में कितने अच्छे हैं। Code.google.com/p/fastspi और waitforbigo.com :-) देखें
रॉबर्ट एटकिन्स

जवाबों:


33

एमसीयू में एक वास्तविक एसपीआई नियंत्रक परिधीय अक्सर बिट-बैंगिंग इंटरफ़ेस की तुलना में बहुत तेजी से चल सकता है। बेशक, यह MCU पर निर्भर करता है, लेकिन यह मुझे 30+ मेगाहर्ट्ज पर चलने वाले SPI कंट्रोलर को देखकर आश्चर्यचकित नहीं करेगा, जबकि बिट बैंगिंग लगभग 1 MHz (यदि आप भाग्यशाली हैं) तक सीमित हो सकते हैं।

लेकिन वहां उसकी अपेक्षा इससे अधिक है। जब बिट-बैंगिंग होती है, तो MCU इसे थोड़ा-बहुत पीटने में व्यस्त होता है। यह डेटा को बाहर स्थानांतरित कर रहा है और GPIO लाइनों को घुमा रहा है। मतलब, यह कुछ और नहीं कर सकता। एसपीआई नियंत्रक का उपयोग करते समय, नियंत्रक उस सभी सामान को करने में व्यस्त होता है और एमसीयू अन्य काम करने के लिए स्वतंत्र होता है।

तो एक वास्तविक एसपीआई नियंत्रक के साथ, वास्तविक एसपीआई हस्तांतरण बहुत तेज है और एमसीयू कुछ चक्रों को वापस प्राप्त करता है जिनका उपयोग अन्य चीजें करने के लिए कर सकते हैं।


11

इस बात में कोई अंतर नहीं है कि आप दोनों विधियों का उपयोग करके समान परिणाम प्राप्त कर सकते हैं, लेकिन कुछ कारण हैं कि आप दूसरे पर एक का चयन क्यों करेंगे।

एसपीआई परिधीय का उपयोग करने से प्रोसेसर को आई / ओ पिंस को पीटने के लिए समय उत्पन्न करने की परवाह करने से मुक्त किया जाएगा, यह अन्य कम्प्यूटेशनल कार्यों को करने और सीपीयू की आपकी प्रोग्रामिंग को सरल बनाने की अनुमति देगा। क्योंकि परिधीय को हार्डवेयर में लागू किया जाता है, यह तेजी से चलेगा और बिट बैंगिंग आई / ओ की तुलना में कम शक्ति का उपयोग करेगा। ऐसे मामले हो सकते हैं जहां आप SPI के साथ इंटरफ़ेस करने के लिए I / O को थोड़ा धमाका करना चाहते हैं यदि आपका एप्लिकेशन मांग करता है कि आप SPI परिधीय के बिना एक प्रोसेसर चुनते हैं। जब तक बिल्कुल आवश्यक न हो, तब तक मैं पवित्रता के कारणों से बचने की सलाह दूंगा।


पवित्रता का कारण बकवास है। अक्सर एसपीआई हार्डवेयर स्थापित करने के लिए आपको जिस कॉन्फ़िगरेशन की आवश्यकता होती है, उसे एसपीआई परिधीय डेटाशीट पढ़ने में अधिक समय लगता है, केवल एसपीआई मास्टर कोड लिखने से, और इस प्रकार केवल स्लेव डिवाइस डेटाशीट पढ़ना होता है।
ओलिन लेट्रोप

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

6

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

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

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

फर्मवेयर में एसपीआई मास्टर करने के लिए कुछ फायदे हैं। एसपीआई हार्डवेयर कभी-कभी थोड़ा सा हास्यास्पद होता है कि इसे कैसे कॉन्फ़िगर किया जा सकता है। हमेशा इस बात का मुद्दा होता है कि गुलाम का चयन करने के तुरंत बाद क्या होना चाहिए। क्या पहली बिट डेटा लाइनों के लिए लिखी गई है? क्या होगा अगर घड़ी कम शुरू होती है और माना जाता है कि डेटा लाइनें गिरने वाले किनारे पर रखी जानी चाहिए? कभी-कभी यह मायने रखता है, कभी-कभी ऐसा नहीं होता। फर्मवेयर SPI मास्टर के साथ, आप अधिक क्षमाशील हो सकते हैं और संभवतः विभिन्न दासों के साथ संवाद करने के लिए एक ही दिनचर्या का उपयोग कर सकते हैं। उदाहरण के लिए, आप यह सुनिश्चित कर सकते हैं कि MOSI (मास्टर आउट स्लेव इन) डेटा लाइन घड़ी के दोनों किनारों पर स्थिर है। एसपीआई हार्डवेयर आमतौर पर ऐसा नहीं करेगा, इसलिए इस तरह के हार्डवेयर को उस समय फिर से कॉन्फ़िगर करना होगा जिसके आधार पर यह उस समय के साथ संवाद कर रहा है।

फर्मवेयर SPI मास्टर का एक और लाभ यह है कि आप SPI अनुक्रम के अनुसार बिट्स की एक मनमानी संख्या चुन सकते हैं। हार्डवेयर आमतौर पर 8 बिट के गुणकों तक सीमित होता है। अधिकांश डिवाइस पूरे बाइट ट्रांसफर के लिए अनुमति देने के लिए डिज़ाइन किए गए हैं, लेकिन अक्सर उन्हें आवश्यकता नहीं होती है। उदाहरण के लिए, एक 10 बिट ए / डी संभवतः 10 डेटा बिट्स को पहले भेजेगा, फिर उसके बाद 0 या कचरा भेजें अगर आप इसे देखते रहें। यदि हार्डवेयर एसपीआई का उपयोग करते हैं, तो आप 16 बिट्स को स्थानांतरित करने और कचरे से बाहर निकलने के लिए मजबूर होंगे। सब कुछ ठीक काम करेगा, लेकिन एक फर्मवेयर एसपीआई मास्टर वास्तव में इस मामले में हार्डवेयर से तेज हो सकता है क्योंकि यह केवल आवश्यक न्यूनतम 10 बिट्स को स्थानांतरित कर रहा है।

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

वह सब गुरु की दृष्टि से था। संक्षेप में, मास्टर के रूप में एसपीआई हार्डवेयर का उपयोग करने के लिए अक्सर बहुत कम लाभ होता है, और कभी-कभी इसका उपयोग नहीं करने में कुछ फायदे भी। हालाँकि, दासों के लिए यह सब अलग है। चूंकि गुरु घड़ी को नियंत्रित करता है, दास को जब भी गुरु करता है, उसके लिए तैयार रहना पड़ता है। समय की आवश्यकताएं अक्सर अनुदेश के समय के सापेक्ष काफी कम होती हैं, इसलिए एसपीआई दास को लागू करने वाले हार्डवेयर आमतौर पर वही होते हैं जो आप चाहते हैं।

आप फर्मवेयर में एसपीआई दास कर सकते हैं, लेकिन यह मुश्किल है, आपको चक्र और विलंबता को ध्यान से गिनना होगा, और आप आमतौर पर प्रोटोकॉल के कुछ सबसेट को लागू करने को समाप्त करते हैं जो आप अपने विशेष मास्टर उपयोगों को जानते हैं। उदाहरण के लिए, एक बार मुझे एक पुराने एनालॉग कंट्रोलर बोर्ड के डिजिटल समतुल्य का डिज़ाइन तैयार करना था (वे अतिरिक्त सुविधाएँ चाहते थे जो यथोचित रूप से अनुरूप नहीं हो सकती थीं, और वे कुछ छोटे, उत्पादन के लिए सस्ता और अधिक स्थिर चाहते थे)। इस बोर्ड ने एक SPI बस के बाकी सिस्टम में हस्तक्षेप किया। पुराने एनालॉग बोर्ड में नियंत्रण मान निर्धारित करने के लिए एक दो-चैनल डी / ए था और मापा मूल्यों को पढ़ने के लिए एक दो चैनल ए / डी था। एक ही प्रोसेसर में उन दोनों को लागू करना मुश्किल था, और इसमें यह पता लगाना शामिल था कि हार्डवेयर डी / ए और ए / डी एसपीआई प्रोटोकॉल का सबसेट क्या है जो मौजूदा मास्टर वास्तव में उपयोग किया जाता है। इसमें एक प्रोसेसर भी लगाया गया है जो SPI क्लॉक रेट से काफी तेज चल सकता है। अंत में, मैंने तीन व्यवधानों का उपयोग किया, प्रत्येक दास चयन के लिए और एक घड़ी लाइन के बढ़ते किनारे के लिए। पिछले एक सिस्टम में सबसे अधिक प्राथमिकता वाले अवरोध होने की आवश्यकता है, और विलंबता आवश्यकता को पूरा नहीं किया जा सकता है।

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


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

@ चुप: हाँ, यह एक मुद्दा है। स्लेव एसपीआई हार्डवेयर आम तौर पर घड़ी और इनपुट डेटा को अनदेखा करता है और चिप चयन का दावा नहीं किए जाने पर आउटपुट डेटा लाइन को उच्च प्रतिबाधा पर रखता है, लेकिन यह आमतौर पर आपको यह नहीं बताता है कि चिप चयन सीमाएं कहां हैं। कम से कम PIC SPI हार्डवेयर का उपयोग करके मुझे याद है, आपको इसके लिए चिप चयन पर अपना स्वयं का व्यवधान स्थापित करना होगा।
ओलिन लेट्रोप

मैं सोच रहा था कि क्या आप किसी भी सभ्य कार्यान्वयन के बारे में जानते हैं। मुझे नहीं लगता। सेलेक्ट वायर पर हार्डवेयर इंटरप्ट का उपयोग करने में समस्या यह है कि यदि बाइट भेजे जाने के तुरंत बाद सेलेक्ट वायर पर कोई ट्रांज़ैक्शन होता है, तो स्लेव को हल करने में मुश्किल समय हो सकता है, चाहे वह बाइट से पहले हुआ हो या प्रश्न में। मुझे यह हैरान करने वाला लगता है कि लगभग हर चिप में एसपीआई स्लेव इम्प्लीमेंटेशन है, लेकिन ऐसा लगता है कि उनमें से कोई भी वास्तव में एक विशिष्ट एसपीआई हार्डवेयर स्लेव डिवाइस की तरह इस्तेमाल नहीं किया जा सकता है। स्थिति कुछ हद तक PIC पर प्रोसेसर गुलाम बंदरगाह की तरह है 8048 की तुलना में।
सुपरकैट

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

एक मास्टर (आसान) और एक दास (बहुत अधिक कठिन) को बिट-पीटने के अंतर को इंगित करने के लिए +1।
tcrosley

1

यह इस बात पर निर्भर करता है कि आप एसपीआई के लिए क्या कर रहे हैं। यदि आपकी रुचि इससे उच्चतम डेटा दर प्राप्त कर रही है, तो हार्डवेयर हमेशा बिटबैंगिंग से अधिक तेज़ होता है (जैसे कि किशोर 3 में आर्म कॉर्टेक्स चिप 22Mbps पर डेटा को धक्का दे सकता है हार्डवेयर SPI समर्थन का उपयोग करके, बनाम ~ 4.5Mbps बिटबैंगिंग के साथ) 3-16 से हस्तांतरण के प्रति बिट्स की मनमानी संख्या को भी संभाल सकते हैं - जब कुछ विशेष नियंत्रकों के लिए 12 बिट चंक्स में डेटा भेजना उपयोगी हो!))। 16 मेगाहर्ट्ज एवरस पर, अंतर थोड़ा कम चरम है, हार्डवेयर के साथ उच्चतम डेटा दर उच्च 4 / कम 5Mbps लगती है, जबकि बिटबैंगिंग 2.3Mbps के आसपास है)।

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

उपरोक्त सभी निर्भर करता है कि हार्डवेयर SPI एक विकल्प है या नहीं।


0

यदि आप SPI को बिट-बैंग करते हैं, तो आप संचार को संभालने के लिए SSP इंटरप्ट का उपयोग नहीं कर सकते। यह कई उपयोगों के लिए SPI के लिए महत्वपूर्ण नहीं है


1
किसी विशिष्ट प्रोसेसर का उल्लेख नहीं किया गया था, इसलिए "एसएसपी इंटरप्ट" इस संदर्भ में एक अर्थहीन शब्द है।
ओलिन लेट्रोप
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.