एसपीआई मोड में एसडी कार्ड सम्मान चिप का चयन करता है / गुलाम का चयन करता है? मेरे आवेदन में रीसेट होने लगता है


9

मेरे पास एक एप्लिकेशन है जहां मेरे पास एक माइक्रोकंट्रोलर (NXP LPC1343 ) है जो 16-बिट एसपीआई के माध्यम से एक FPGA से जुड़ा है । एक ही SPI पोर्ट (MISO / MOSI) का उपयोग करते हुए एक एसडी कार्ड भी है लेकिन एक अलग CS / SS पिन के साथ (दोनों SPI विनिर्देश के अनुसार सक्रिय कम हैं)। मुझे जिन चीज़ों की ज़रूरत है उनमें से एक है FAT32 का उपयोग करके एसडी कार्ड पर एक फ़ाइल पर FPGA से डेटा लिखना और यह माइक्रोकंट्रोलर का काम है। माइक्रोकंट्रोलर , एफटीएफएस चला रहा है, जिसे मैंने मज़बूती से काम करने के लिए तैयार किया है।

क्योंकि माइक्रोकंट्रोलर में केवल रैम की थोड़ी मात्रा होती है, केवल एक बार में थोड़ी मात्रा में डेटा को बफर किया जा सकता है। इसलिए, माइक्रो को FPGA से एक बफर पढ़ना है, SPI मोड को 8-बिट में बदलना है, और फिर उस डेटा को FATFS में लिखना है। याद रखें कि एसपीआई मोड के लिए एसडी कार्ड को कॉन्फ़िगर करने के लिए, एक कमांड भेजा जाना चाहिए, जबकि एसपीआई बस 400 किलोहर्ट्ज़ पर चल रही है, और एक निश्चित मात्रा में प्रतीक्षा करनी होगी। इसलिए, मैं केवल एक बार इनिशियलाइजेशन करना चाहूंगा।

हालाँकि, SD कार्ड पर CS को ऊंचा रखने पर भी FPGA पर लेनदेन करना SD कार्ड को एक अजीब स्थिति में डाल देता है, जैसे कि इसे फिर से आरंभीकरण से गुजरना पड़ता है। बेशक यह अवांछनीय है, क्योंकि आरंभीकरण में कई मिलीसेकंड लग सकते हैं, ताकि केवल 4 kB या डेटा (फिर से मेरे माइक्रो की छोटी रैम क्षमता द्वारा सीमित) लिखने के लिए। जैसा कि मुझे जल्द से जल्द कई मेगाबाइट लिखने की जरूरत है, इससे प्रदर्शन लगभग 500 kB / s से 100 kB / s से कम हो जाता है।

मुझे पता है कि SD कार्ड तकनीकी रूप से पूरी तरह से SPI के अनुरूप नहीं हैं, लेकिन इस समस्या को कैसे ठीक किया जा सकता है?


जहां तक ​​मुझे पता है, इसे इसका सम्मान करना चाहिए। शायद एक अलग एसडी कार्ड की कोशिश करो?
मार्को

यह एक बड़ा सवाल है। यह पूछने (और जवाब देने) के लिए धन्यवाद।
markrages

जवाबों:


7

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

एसपीआई बस में, प्रत्येक दास डिवाइस को अलग-अलग सीएस संकेतों के साथ चुना जाता है, और बहुवचन डिवाइस को एसपीआई बस में जोड़ा जा सकता है। सामान्य SPI स्लेव डिवाइस ड्राइव / CS सिग्नल को एसपीआई बस साझा करने के लिए एसिंक्रोनस रूप से अपना डीओ सिग्नल जारी करता है।

हालाँकि, MMC / SDC ड्राइव / SCLK को सिंक्रनाइज़ करने में DO सिग्नल जारी करता है। इसका मतलब यह है कि एमएमसी / एसडीसी और एसपीआई बस से जुड़ी किसी भी अन्य एसपीआई दास के साथ बस संघर्ष की संभावना है। सही छवि MMC / SDC के ड्राइव / रिलीज़ टाइम को दिखाती है ( बस को देखने के लिए DO सिग्नल को 1/2 V cc तक खींचा जाता है )। इसलिए MMC / SDC रिलीज़ DO सिग्नल बनाने के लिए, मास्टर डिवाइस को CS सिग्नल डीज़र करने के बाद एक बाइट भेजना होगा।

SD कार्ड और FPGA, शायद DO को चलाने की कोशिश कर रहे थे और SD कार्ड खो गया था, इसलिए यह रीसेट हो गया। एक अतिरिक्त बाइट भेजने से यह तय हो गया है।


यह आपको FPGA और कार्ड के बीच वैकल्पिक करने की अनुमति देता है, है ना? क्या आपको यह भी पता चला कि आप डेटा ट्रांसफर और रिज्यूमे के दौरान बाधित हो सकते हैं? एल्म-चान पर यह क्या कहता है, ऐसा लगता है कि यह संभव नहीं है, लेकिन मुझे यह जानने में दिलचस्पी होगी कि आपने इसकी पुष्टि की है या इसे अस्वीकृत किया है।
कृष्णा

1
हाँ, यह FPGA और SD के बीच प्रत्यावर्तन के लिए अपेक्षित रूप से काम करता है, लेकिन आप FatFS को कॉल के बीच स्थानांतरण को बाधित नहीं कर सकते। कम से कम मैं वह काम करने में सक्षम नहीं था। इसका मतलब है कि आप (उदाहरण के लिए) साझा SPI बस का उपयोग कर एक सेंसर से फाइल लिखने और पढ़ने के दौरान एक रुकावट का जवाब नहीं दे सकते।
ज़ूफ़ू
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.