फ्लैश और EEPROM


14

Atmega16 डेटाशीट का कहना है कि यह है

क) 16 इन-सिस्टम स्व-प्रोग्रामेबल फ़्लैश प्रोग्राम मेमोरी के बी और 512 बाइट्स EEPROM।

क्या एक माइक्रोकंटोलर में दो अलग-अलग रोम हो सकते हैं जिन्हें EEPROM प्रौद्योगिकी और फ्लैश तकनीक के माध्यम से प्रोग्राम किया जा सकता है?

या डेटशीट से मेरा अनुमान (जैसा कि ऊपर दिया गया है) गलत है?

मुझे पता है कि हमारे कार्यक्रम को फ्लैश मेमोरी में संग्रहीत किया जाता है, किसी को भी EEPROM की आवश्यकता क्यों होगी? यदि कार्यक्रम के लिए फ्लैश मेमोरी है तो इसका क्या उपयोग है?

इसके अलावा क्या कोई भी समझा सकता है कि "इन-सिस्टम सेल्फ-प्रोग्रामेबल" शब्द क्या है?

मुझे क्या पता: फ़्लैश तकनीक डेटा के ब्लॉक में प्रोग्राम लिख सकती है जबकि EEPROM बाइट द्वारा डेटा बाइट लिख सकती है।

जवाबों:


21

आजकल, फ़्लैश मेमोरी का उपयोग प्रोग्राम कोड रखने के लिए किया जाता है, और EEPROM (इलेक्ट्रोनिक रूप से इरेज़ेबल रीड-ओनली मेमोरी) का उपयोग लगातार डेटा रखने के लिए किया जाता है। लगभग 30 साल पहले, फ्लैश के साथ आने से पहले, EEPROM का उपयोग प्रोग्राम कोड रखने के लिए किया जाता था।

वास्तव में ROM (रीड-ओनली मेमोरी) पहले आया, फिर PROM (प्रोग्रामेबल ROM, केवल एक बार), EPROM (UV लाइट के साथ PROM इरेज़ेबल), EEPROM, और अंत में फ्लैश। रोम का उपयोग अभी भी बहुत अधिक मात्रा, कम लागत वाले अनुप्रयोगों (जैसे ग्रीटिंग कार्ड्स) के लिए किया जाता है।

वर्तमान माइक्रोकंट्रोलर्स के साथ महत्वपूर्ण अंतर यह है कि आप आमतौर पर EEPROM से बाहर कोड निष्पादित नहीं कर सकते हैं, और यह प्रोग्राम के लिए फ्लैश में डेटा स्टोर करने के लिए अजीब है। (डेटा फ्लैश में संग्रहीत किया जाता है, उदाहरण के लिए जब आप डेटा घोषणा में "कॉन्स्ट" कीवर्ड का उपयोग करते हैं, या एक स्ट्रिंग को परिभाषित करते हैं, लेकिन वह कंपाइलर और लिंकर द्वारा पर्दे के पीछे नियंत्रित किया जाता है।)

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

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

यदि आप प्रोग्राम डेटा फ़्लैश में करते हैं, तो इसका मतलब यह नहीं है कि आप डेटा को अपने C प्रोग्राम में वैरिएबल के रूप में एक्सेस कर सकते हैं, क्योंकि कंपाइलर को यह बताने का कोई तरीका नहीं है कि ये वेरिएबल्स आपके कोड में हैं (यानी आप एक कास्ट को बांध नहीं सकते हैं फ़्लैश के इस क्षेत्र में परिवर्तनशील।) इसलिए उन्हें पढ़ना रजिस्टर के विशेष सेट के माध्यम से किया जाना है जो उन्हें लिखने के लिए उपयोग किया जाता है। ध्यान दें कि यह प्रतिबंध EEPROM के डेटा पर भी लागू होता है, इसलिए इस संबंध में इसका कोई लाभ नहीं है।

या तो फ्लैश या EEPROM प्रोग्राम करने के लिए, मेमोरी का एक ब्लॉक पहले मिटा दिया जाना चाहिए। फिर इसे प्रोग्राम किया जाता है। फ्लैश के लिए, लेखन आमतौर पर एक समय में एक ब्लॉक भी किया जाता है। EEPROM के लिए, यह माइक्रोकंट्रोलर के आधार पर एक समय में ब्लॉक या बाइट द्वारा किया जा सकता है।

फ्लैश और ईईपीआरओ दोनों के लिए, मेमोरी को पहनने से पहले अधिकतम बार आप उन्हें अपडेट कर सकते हैं। यह संख्या एक न्यूनतम गारंटी मूल्य के रूप में डेटाशीट में दी गई है । यह आमतौर पर फ्लैश मेमोरी की तुलना में ईईपीआरओएम के लिए बहुत अधिक है। फ्लैश के लिए, मैंने संख्याओं को 1000 जितना कम देखा है। ईईपीआरओएमएस के लिए, मैंने संख्याओं को 1,000,000 के रूप में देखा है।

फ्लैश पर EEPROMs का एक फायदा यह है कि आप उन्हें मिटा सकते हैं कई बार फ्लैश को मिटा सकते हैं।

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


आपकी प्रतिक्रिया के लिए धन्यवाद सर। तो EEPROM के अंदर डेटा दर्ज करने के लिए, मुझे USB मेमोरी प्रोग्राम में Flash मेमोरी के अंदर डंप करने के लिए EEPROM प्रोग्रामर की आवश्यकता होगी? क्या मैं सही हूं सर?
जस्सर

1
@ जैसर नहीं, आपको बाहरी प्रोग्रामर की आवश्यकता नहीं है। आप EEPROM को अपने प्रोग्राम के भीतर से एक्सेस करेंगे। ATmega के अंदर रजिस्टर का एक सेट होगा जो उन्हें लिखकर आपको EEPROM को अपडेट करने की अनुमति देगा। आपको EEPROM से बाहर पढ़ने के लिए इन रजिस्टरों का उपयोग करने की भी आवश्यकता होगी, क्योंकि यह सामान्य पते के नक्शे में दिखाई नहीं देगा। EEPROM को मिटाने, लिखने और पढ़ने की जानकारी चिप के लिए डेटशीट में होगी।
tcrosley

चूंकि हम माइक्रोकंट्रोलर के अंदर ईईपीआरओएम से लिख या पढ़ सकते हैं, इसलिए ईईपीआरओएम के अंदर डेटा स्टोर करने के लिए एक सर्किटरी होनी चाहिए और यह ईईप्रॉम प्रोग्रामर के समान होना चाहिए। यह फिर से मुझे एक और प्रश्न की ओर ले जाता है कि चूंकि EEPROM लगभग 100,000 बार की तुलना में खराब हो सकता है, इसके बाद हम रजिस्टरों के माध्यम से EEPROM के अंदर डेटा स्टोर करने में सक्षम नहीं हो सकते हैं। क्या ये कथन सार्थक हैं? @tcrosley
जासेर

1
@ जस्सर सही, आप EEPROM को अपडेट कर सकते हैं की संख्या पर एक सीमा है। यह आमतौर पर फ्लैश को अपडेट करने की संख्या की तुलना में बहुत अधिक (कभी-कभी अधिक परिमाण का एक आदेश) होता है। मुझे अपने उत्तर में इसका उल्लेख करना चाहिए, और इसे अपडेट करूंगा। आपके द्वारा उद्धृत संख्या चिप निर्माता द्वारा न्यूनतम गारंटी है; मैंने एक बार एक चिप के साथ कुछ परीक्षण किए जो 100,000 लिखने के लिए निर्दिष्ट किए गए थे, और किसी भी त्रुटि का पता चलने से पहले यह 500,000 से अधिक हो गया था।
tcrosley

1
@ जासर हां, फ्लैश में डेटा सेट करना थोड़ा मुश्किल है। इसके अलावा, जैसा कि मेरे जवाब के लिए मेरे अपडेट में चर्चा की गई है, आप EEPROM को फ्लैश से कई गुना अधिक (आमतौर पर 10x) मिटा सकते हैं और हटा सकते हैं।
tcrosley

4

मैं @tcrosley द्वारा उत्कृष्ट उत्तर में कुछ और जानकारी जोड़ूंगा।

ATmega16 एक हार्वर्ड आर्किटेक्चर को लागू करता है , अर्थात एक सिस्टम टोपोलॉजी जहां डेटा मेमोरी को प्रोग्राम मेमोरी से अलग किया जाता है। Atmega16 डेटाशीट (8 पेज) से संबंधित पैराग्राफ का हवाला देते हुए :

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

हार्वर्ड आर्किटेक्चर को इंस्ट्रक्शन साइकिल और डेटा एक्सेस साइकिल के बीच कोई बस विवाद नहीं है, क्योंकि डेटा और निर्देश आपके पारंपरिक पीसी आर्किटेक्चर की तरह ही बस को साझा नहीं करते हैं।

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

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