फ्लैश मेमोरी: क्या सिर्फ कुछ बाइट्स लिखने से पहले पूरे पेज को मिटाने की जरूरत है?


16

एक आसान सवाल है, मुझे उम्मीद है! मुझे कोई निश्चित उत्तर नहीं मिल रहा है ...

मैं SST25VF064C फ्लैश मेमोरी चिप के लिए ड्राइवर लिख रहा हूं । यह SPI के माध्यम से संचार करता है।

सभी फ्लैश मेमोरी (जैसे कि मुझे पता है) की तरह, इसे लिखे जाने से पहले इसे मिटाना होगा (सभी बिट्स = 1)। इस चिप के लिए, सबसे छोटा क्षेत्र जो मिटाया जा सकता है वह 4kB है।

इसकी मेमोरी को 256-बाइट पृष्ठों में विभाजित किया गया है। एक निर्देश के साथ, मैं एक बाइट से लेकर 256 बाइट तक एक निर्दिष्ट पृष्ठ में कहीं भी लिख सकता हूं। मुझे पृष्ठ सीमा पर शुरू करने की आवश्यकता नहीं है: प्रोग्राम किए जाने वाला पहला स्थान पृष्ठ के भीतर कहीं भी हो सकता है।

सामान्य नियम यह सुनिश्चित करने के लिए है कि पृष्ठ को उसमें लिखने से पहले मिटा दिया जाए। लेकिन, क्या मैं पहले से लिखे गए पृष्ठ में लिख सकता हूं, अगर मैं पहले से लिखे गए क्षेत्रों से बचता हूं? उदाहरण के लिए, कहें कि मैं डेटा को बाइट्स 0-127 में संग्रहीत करता हूं। क्या मैं बाद में उसी पृष्ठ पर एक और 128 बाइट लिख सकता हूं, अगर मैं बाइट 128 पर शुरू करता हूं?

जवाबों:


13

हां, किसी भी मिटाए जाने के बाद, आप अगले मिटाए गए ऑपरेशन से पहले डेटा को लिखने के लिए किसी भी संख्या में (1 से 0 से बदलकर बिट्स) ऑपरेशन का उपयोग कर सकते हैं।

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


उत्कृष्ट धन्यवाद! ये वही है जिसे मैं ढूंढ रहा था।
बिटसमैक

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

1
@Vality: क्या आप इसका एक उदाहरण दे सकते हैं?
डेव ट्वीड

3
@DaveTweed NXP LPC21xx और LPC23xx MCUs में मेमोरी के प्रत्येक 16 बाइट्स के लिए एक चेकसम बाइट है; आपको सभी 16 बाइट्स एक साथ लिखना होगा क्योंकि चेकसम उस ऑपरेशन में लिखा गया है। यदि आप बाद में आते हैं और उसी "लाइन" में शून्य लिखने का प्रयास करते हैं, तो शून्य लिखा जाता है, लेकिन एक नया चेकसम पिछले के रूप में भी लिखा जाता है; संभावना है कि यह कुछ 1 है जहां पिछले में 0 था, इसलिए चेकसम अमान्य हो गया है। मुझे याद नहीं है कि अगर MCU आपको खराब चेकसम वाली लाइन पढ़ने की अनुमति देता है। वैसे भी, यह "उपकरणों में भिन्नता" का एक उदाहरण होगा।
गुइलेर्मो प्रांडी

1
"लिखने के लिए किसी भी अलग ऑपरेशन की संख्या ... अगला इरेज ऑपरेशन।" ध्यान दें कि कुछ हिस्से, विशेष रूप से एमसीयू में फ्लैश की गई यादें, मिटाए जाने से पहले अधिकतम संख्या में राइट्स लिखेंगे। संभवतः इस सीमा का उल्लंघन करने से स्मृति के अन्य क्षेत्रों को दूषित करने का जोखिम होगा, इसलिए ऐसी सीमाओं के लिए बाहर देखना महत्वपूर्ण है।
अजब

5

यदि मैं पहले से लिखे गए क्षेत्रों से बचता हूं तो क्या मैं पहले से लिखे गए पृष्ठ में लिख सकता हूं?

अगर म P समझूं। 16 डेटशीट सही ढंग से, यह कह रही है: इस विशेष चिप के साथ, आपको पहले से लिखे गए पृष्ठ में नहीं लिखना चाहिए, भले ही आप पहले से लिखे गए क्षेत्रों से बचें।

विवरण

SST25VF064C फ्लैश मेमोरी चिप डेटापत्रक पी पर। 16 का कहना है "पेज-प्रोग्राम इंस्ट्रक्शन प्रोग्राम मेमोरी में डेटा के 256 बाइट तक करता है। पेज-प्रोग्राम ऑपरेशन शुरू करने से पहले चयनित पेज का पता मिटा राज्य (FFH) में होना चाहिए।"

मुझे लगता है कि इसलिए "पूरे चयनित पृष्ठ को पृष्ठ-प्रोग्राम संचालन शुरू करने से पहले मिटाए गए राज्य (पृष्ठ FFh पर प्रत्येक बाइट) में होना चाहिए।" क्या एसएसटी या माइक्रोचिप ने किसी भी दस्तावेज को जारी किया है जो इस अस्पष्ट अस्पष्ट वाक्य को स्पष्ट करता है?

मेरे अनुभव में, सभी MLC फ़्लैश चिप्स और कुछ नए SLC फ़्लैश चिप्स बनाने वाले निर्माता कहते हैं कि एक बार पृष्ठ लिखे जाने के बाद, पृष्ठ को फिर से लिखे जाने से पहले पृष्ठ को मिटा दिया जाना चाहिए, भले ही आप केवल कुछ 1 बिट को बदलना चाहते हों 0 बिट। (इसे YAFFS लेख में "राइट- वन्स रूल" कहा जाता है ।)

मेरे अनुभव में, सभी पुराने फ़्लैश चिप्स आपको किसी भी 1 बिट को एक 0 बिट में बिना मिटाए चक्र में बदलने की अनुमति देते हैं, भले ही वह बिट एक पृष्ठ में हो या यहां तक ​​कि एक बाइट जो पहले से ही अन्य बिट्स को शून्य पर क्रमादेशित कर चुका हो - एक मिटाए जाने के बीच फ्लैश के पेज को कई बार प्रोग्राम किया जा सकता है। (इसे YAFFS लेख में "मल्टीपल-राइट" कहा गया है)।

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

"मेमोरी उपयोग योजना बिट त्रुटि दर को प्रभावित करती है। आंशिक-पृष्ठ प्रोग्रामिंग, ब्लॉक के भीतर गैर-अनुक्रमिक पृष्ठों की प्रोग्रामिंग, बिना मिटाए प्रति ब्लॉक की अत्यधिक रीडिंग के साथ-साथ पढ़ने के एकल ब्लॉक वृद्धि संख्या के भीतर गैर-बराबर संख्या में रीड ऑपरेशन। गड़बड़ी त्रुटियों। " - मिशाल जेद्रक। "एम्बेडेड सिस्टम में नंद फ्लैश मेमोरी"।

"प्रोग्राम की गड़बड़ी तब होती है जब एक पेज-प्रोग्रामिंग ईवेंट के दौरान" 1 "से" 0 "तक अनजाने में प्रोग्राम किया जाता है। यह बिट एरर प्रोग्राम में पेज पर या ब्लॉक में किसी अन्य पेज पर या तो बायस वोल्टेज की स्थिति में हो सकता है। पृष्ठ प्रोग्रामिंग के दौरान ब्लॉक, पास की मेमोरी कोशिकाओं में सुरंग की धारा की एक छोटी मात्रा का कारण बन सकता है। दोहराया आंशिक पेज प्रोग्रामिंग प्रयास इस स्थिति को बढ़ाना जारी रखेंगे। " - डगलस शेल्डन और माइकल फ्रे। "फ्लैश मेमोरीज़ में डिस्टर्ब टेस्टिंग" । पी। 9, ९।

"प्रोग्राम की गड़बड़ी तब होती है जब एक प्रोग्रामिंग ऑपरेशन के दौरान अनायास ही (1 से 0) प्रोग्राम किया जाता है ... ब्लॉक में रैंडम प्रोग्रामिंग से और पेजों पर कई आंशिक राइट्स लगाने से यह स्थिति और खराब हो जाती है।" "यफ्स नंद फ्लैश फेल शमन


0

यह अत्यधिक संभावना है कि जिस प्रोग्रामिंग सॉफ़्टवेयर का आप उपयोग कर रहे हैं, वह पहले से ही "आवश्यक" 256 बाइट्स लिख रहा है। यह "प्रतीत होता है" जैसे कि यह आपको एक से 256 बाइट्स तक लिखने की क्षमता दे रहा है, लेकिन मुझे संदेह है कि यह जो कर रहा है वह बाइट (ओं) को आप 256 "एफएफ" के "मुखौटा" के साथ चाहते हैं। यदि यह सही है, तो आप पूरे 4K बाइट्स को मिटाने के बिना, किसी भी बाइट को एक बार "सुरक्षित" लिख सकते हैं । यदि आपके नियंत्रण के बाहर एक चेकसम लिखा जाता है, तो, सबसे अधिक संभावना है, एक अमान्य चेकसम तब बनाया जाएगा जब आप किसी अन्य बाइट को पहले लिखित खंड में लिखते हैं। इस के निहितार्थ, चिप पर निर्भर है।

यदि आपका प्रोग्रामिंग सॉफ़्टवेयर, "OR-ing" नहीं करता है, तो आप इसे स्वयं कर सकते हैं। एक 256 बाइट सेगमेंट को साफ़ करें, बाइट को सही स्थिति (ओं) में लिखें, या एफएफ के 256 बाइट मास्क के साथ, और सेगमेंट को वांछित पेज पर लिखें।

चाहे विधि किसी भी विशेष चिप के साथ काम करती है, आपके द्वारा आसानी से निर्धारित की जा सकती है । पहले 128 बाइट्स को लिखें, दूसरे 128 बाइट्स को लिखें, यह सत्यापित करें कि पहले 128 बाइट्स "गड़बड़" नहीं हैं!

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