क्या SPI बाधित होना सुरक्षित है?


17

मैं अपने फर्मवेयर के भीतर से एक माइक्रोएसडी कार्ड लिख रहा हूं , लेकिन यह सबसे कम प्राथमिकता वाला कार्य है, इसलिए इसे पढ़ने / लिखने के बीच में होने पर इसे अन्य कार्यों से बाधित किया जा सकता है।

अब मान लीजिए कि मैंने UART का उपयोग करके इस माइक्रोएसडी कार्ड के साथ संचार किया। रीड के दौरान समस्या यह होगी कि हार्डवेयर RX FIFO ओवरफ्लो हो जाएगा, इसलिए मैं अधिकतम प्रयास में देरी कर सकता हूं (FIFO आकार × बाइट्स / सेकंड), और लिखने के दौरान कोई समस्या नहीं होगी, क्योंकि दूसरा छोर बस तब तक इंतजार करेगा जब तक कि मैं अगला चरित्र भेजें।

अब यह कैसे काम करता है मैं SPI का उपयोग कर रहा हूं? क्या स्थिति वही है कि लिखने के लिए यह कोई फर्क नहीं पड़ता, और पढ़ता है के लिए यह SPI फीफो आकार पर निर्भर करता है?

जवाबों:


22

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

इसके बारे में पता करने के लिए तीन मुख्य चेतावनी हैं:

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

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


3
+1 नाइस! आपकी सभी राय / कुंठाओं से पूरी तरह सहमत हैं। इसे भी कई बार देखा।
DrFriedParts

11

विनिर्देश की एक प्रति की जाँच करना (जो मैं कॉपीराइट / एनडीए कारणों से उद्धृत नहीं कर सकता) एसपीआई दर निर्दिष्ट है जो 0Hz पर शुरू होती है जो स्थैतिक संचालन को ठीक करती है। एसपीआई के तहत आपको डिवाइस को देखने के दौरान केवल डेटा वापस मिलता है, इसलिए यदि हार्डवेयर एसपीआई का उपयोग करते हैं तो आपको केवल डेटा के बाद भी कुछ प्राप्त होगा (भले ही 0 / परवाह न हो) भेजा गया है। तो इस संबंध में यह एक UART के लिए अलग है जहां आप किसी भी समय अवांछित डेटा वापस प्राप्त कर सकते हैं।


तो मेरी एकमात्र चिंता यह होनी चाहिए कि माइक्रोएसडी कार्ड में किसी प्रकार का टाइम-आउट बिल्ड-इन है, लेकिन एसपीआई ही नहीं?
Muis

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

1
+1, SPI को 0 हर्ट्ज तक चलाने में सक्षम होने के नाते डिबगिंग के लिए जानना उपयोगी है। धन्यवाद।
अनिन्डो घोष

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