मैं अप्रत्याशित बिजली विफलताओं के खिलाफ एसडी कार्ड की रक्षा कैसे करूं?


18

मैं एक ऐसे डिवाइस पर काम कर रहा हूं, जो एसडी कार्ड में डेटा स्टोर करने के लिए माइक्रोचिप एमडीडीएफएस लाइब्रेरी का उपयोग करता है। लकड़हारा हर मिनट में अधिकतम 1 प्रविष्टि (56bytes) की दर से डेटा लॉग करेगा। समस्या यह है कि डिवाइस किसी भी समय बिजली खो सकता है, संभवतः एक लेखन अनुक्रम के बीच में। मैं सोच रहा हूं कि भ्रष्टाचार के खिलाफ मेरे डेटा की रक्षा करने का सबसे अच्छा तरीका क्या है। मैंने पाया है कि अगर बिजली खो जाने पर फ़ाइल खुली होती है, तो अंतिम फ़ाइल-बंद होने के बाद फ़ाइल को लिखे गए सभी डेटा खो जाते हैं। मुझे नहीं पता कि अगर राइट राइट अनुक्रम के बीच में खो जाता है तो वही सही है।

चूंकि लेखन प्रक्रिया बहुत बार नहीं होती है इसलिए मैं फ़ाइल को खोल सकता हूं, डेटा लिख ​​सकता हूं, और फिर फ़ाइल को बंद कर सकता हूं, हर बार डेटा लॉग किया जाता है। क्या यह दृष्टिकोण समय के साथ एसडी कार्ड को नुकसान पहुंचाएगा?

एक और तरीका यह हो सकता है कि फाइल को खुला रखें लेकिन हर 10 या 50 लिखने के बाद मैं फाइल को बंद कर सकता हूं और फिर उसे खोल सकता हूं।

मैं डेटा को मेमोरी में बफर भी कर सकता था, फिर कभी-कभार या तो के बाद डेटा को फ्लश कर सकता था।

मेरे पास जो अंतिम विचार था, मेरे सर्किट में, मैं एक बड़े कैपेसिटर को जोड़ सकता था जो कि मेरे पिक्स / एसडी कार्ड को काफी पहले ही पावर प्रदान कर देगा, क्योंकि फाइल को जल्दी से बंद करने के लिए बिजली काट दी जाती है। इस दृष्टिकोण के साथ समस्या यह है कि फ़ाइल को बंद करने और / या डेटा को बचाने में लगने वाला समय बहुत असंगत है। मेरी समझ से, यह समय एक फ्लैश पेज में वर्तमान स्थान पर निर्भर करता है जो फ़ाइल में है।

वैसे भी, आप लोग क्या सुझाव देंगे?


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

जवाबों:


16

जब आप किसी फ़ाइल में डेटा लिखते हैं तो कुछ चीजें हो सकती हैं। मैं उस अनुक्रम का वर्णन करने जा रहा हूं जो डेटा के सुरक्षित होने के लिए होने की आवश्यकता है, जरूरी नहीं कि लाइब्रेरी कॉल।

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

अपना लेखन समय कम से कम करें

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

  • अपनी डेटा प्रविष्टियों का आकार ऐसा बनाएं कि प्रविष्टियों की एक पूर्णांक संख्या एक क्षेत्र में फिट हो। मैं आपकी प्रविष्टियों को 64 बाइट तक टक्कर दूंगा। हालांकि यह कम कुशल है, यह आपको दो क्षेत्रों को पढ़ने-संशोधित करने-लिखने की आवश्यकता से रोकेगा।

  • FSwrite फ़ंक्शन का एक प्रकार बनाएं जो आपको पूरे सेक्टर लिखने की अनुमति देता है। यदि आप पूरे क्षेत्र को SRAM में रखते हैं, तो आपका चक्र "रीड-मॉडिफाई-राइट" से "संशोधित-राइट" में चला जाता है

अपने PIC और SD पावर को यथासंभव लंबे समय तक रखें

  • बड़े कैपेसिटर अच्छे हैं। 470uF आपको एक लेखन चक्र को पूरा करने के लिए पर्याप्त शक्ति से अधिक देना चाहिए।

  • सुनिश्चित करें कि आपका पावर स्रोत आपके बैक-अप कैपेसिटर से बिजली नहीं सोखेगा! यदि आवश्यक हो तो एक डायोड जोड़ें।

जानिए कब आप सत्ता से बाहर हैं

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

जानकारी के लिए धन्यवाद। बहुत मददगार। मैं देखूंगा कि मैं इसके साथ क्या कर सकता हूं ...
PICyourBrain

कब तक आपको लगता है कि सभी शून्य को एक 4 जीबी कार्ड में लिखना होगा? एक लंबे समय की तरह लगता है। इसके अलावा, क्या आपके पास कोई ऐसा कोड उदाहरण है जिसे आप फ़ाइवसाइट फ़ंक्शन को संशोधित करने के लिए पूरे सेक्टरों को लिखने की अनुमति देने के लिए साझा कर सकते हैं?
PICyourBrain 13

इसके अलावा, यदि आप फ़ाइल पर सभी शून्य लिखते हैं। अपने वास्तविक डेटा का अंत कहां है, इस पर आप कैसे नज़र रखते हैं? क्या आप शुरुआत में सभी डेटा पढ़ते हैं और शून्य का तार पाते हैं?
PICyourBrain 12

1
यदि आप FAT16 का उपयोग कर रहे हैं, तो मेरा मानना ​​है कि आप 2GB तक सीमित हैं। मेरा मानना ​​है कि SD / MMC कार्ड में "मिटा ब्लॉक" फ़ंक्शन होता है, जो MDDFS लाइब्रेरी में लागू नहीं होता है। मैंने अपने SD कार्ड प्रोजेक्ट के लिए एक स्वामित्व कोड लाइब्रेरी का उपयोग किया, इसलिए मैं किसी भी कोड के उदाहरण साझा नहीं कर सकता। अंतिम डेटा खोजने के लिए, आपको तब तक पढ़ना होगा जब तक आपको डेटा रिकॉर्ड में सभी 0 नहीं मिल जाते। यदि आपका डेटा रिकॉर्ड सभी 0 हो सकता है, तो मैं कुछ गैर-शून्य डेटा, या कुछ प्रकार के सीमांकक में जोड़ने की सलाह दूंगा।
W5VO

6

एसडी कार्ड (या MMC, CompactFlash, आदि) के साथ अभी तक उल्लेख नहीं किया गया एक मुद्दा यह है कि जबकि एक एसडी कार्ड 512-बाइट क्षेत्रों के एक सरल संग्रह के रूप में मेजबान को दिखाई दे सकता है जिसे मनमाना क्रम में पढ़ा और लिखा जा सकता है, फ्लैश डिवाइस आमतौर पर 528-बाइट पृष्ठों को उन समूहों में संग्रहीत करें जो 32KB हैं यदि प्रत्येक बड़ा नहीं है, और समर्थित केवल संचालन या तो एक अन्यथा रिक्त पृष्ठ पर लिखना है, या पूरे समूह को मिटाना है। इस सीमा से निपटने के लिए, एक एसडी कार्ड पर नियंत्रक एक तालिका रखेगा जो किसी भी तार्किक क्षेत्र को किसी भी भौतिक पृष्ठ पर मैप करने की अनुमति देगा। जब किसी सेक्टर को लिखने का अनुरोध किया जाता है, तो नियंत्रक चिप पर कहीं न कहीं एक खाली पेज ढूंढेगा और प्रश्न में सेक्टर के नए पते के साथ मैपिंग को अपडेट करेगा। यदि रिक्त पृष्ठ दुर्लभ आपूर्ति में, या विभिन्न अन्य समयों में प्राप्त होते हैं,

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

यह सुनिश्चित करने के लिए, यहां तक ​​कि अगर एक एसडी कार्ड यह सुनिश्चित करने के दृष्टिकोण से बिल्कुल सही है कि प्रत्येक लेखन ऑपरेशन जिसे पूरा होने के रूप में सूचित किया गया था, वास्तव में, एक बिजली की विफलता से बचता है (यानी यह सुनिश्चित करना कि लेखन के सभी काम हैं या नहीं। कारण पूरा हो गया है, पर्याप्त है कि कार्ड पूरा हो जाएगा (जब बिजली फिर से लागू होता है) ऑपरेशन का मतलब है कि मेजबान ऑपरेटिंग सिस्टम को परेशानी नहीं होगी अगर यह कुछ करता है, लेकिन सभी डेटा नहीं लिखते हैं यह इरादा रखता है। बहरहाल, यह ध्यान रखना महत्वपूर्ण है कि यदि एसडी कार्ड "सौदेबाजी" के अपने अंत को बरकरार नहीं रख सकता है, तो ऐसा कुछ भी नहीं है जो बिजली की विफलता से डेटा हानि को रोकने के लिए होस्ट साइड सॉफ़्टवेयर पर किया जा सकता है।


यह एक बहुत ही व्यावहारिक टिप्पणी है।
बासेट

5

मैं डेटा को सत्यापित करने के लिए किसी प्रकार के चेकसम का उपयोग करने का भी सुझाव दूंगा SD जब भी इसे पढ़ने की आवश्यकता हो तो यह सही है


3

शायद इस supercapacitor Sparkfun पर समस्या का समाधान होगा।


2
यह पीआईसी की मेमोरी को होल्ड करेगा, लेकिन इसमें 10uA की अधिकतम वर्तमान रेटिंग है। मुझे नहीं लगता कि आप एसडी कार्ड पर लिख सकते हैं।
W5VO

1
हालांकि अवधारणा अच्छी है। इलिनोइस कैपेसिटर ( illinoiscapacitor.com ) को एक त्वरित खोज में 8 एफ तक सुपरकैपेसिटर है और 4 ए तक धाराओं का समर्थन करने में सक्षम है, या इनमें से एक को जोड़कर एक बैटरी को खत्म करने और चीजों को बंद करने का सूक्ष्म मौका मिलेगा। मुख्य शक्ति स्रोत विफल होने पर अच्छी तरह से।
फोटॉन

3

चूंकि लेखन प्रक्रिया बहुत बार नहीं होती है इसलिए मैं फ़ाइल को खोल सकता हूं, डेटा लिख ​​सकता हूं, और फिर फ़ाइल को बंद कर सकता हूं, हर बार डेटा लॉग किया जाता है। क्या यह दृष्टिकोण समय के साथ एसडी कार्ड को नुकसान पहुंचाएगा?

किसी भी इंजीनियरिंग समस्या के साथ, आपको यहां ट्रेडऑफ़ से निपटने की आवश्यकता होगी।

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


1

अगर आप सिर्फ डाटा स्टोर करना चाहते हैं तो फाइल सिस्टम की कोई जरूरत नहीं है। ब्लॉक ऑपरेशन का चयन करके सीधे SPI पर राइट ऑपरेशन किया जाएगा। ऐसा करने से आप लिखने का समय कम कर देते हैं और आप डेटा भ्रष्टाचार का जोखिम उठाते हैं।

यहां तक ​​कि बिजली के नुकसान और भाग्य के न होने की स्थिति में, आप सिर्फ एक प्रविष्टि (जो शायद किसी सिस्टम पर स्वीकार्य हो) खो देंगे।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.