आजकल, फ़्लैश मेमोरी का उपयोग प्रोग्राम कोड रखने के लिए किया जाता है, और 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 सिस्टम में चिप को प्रोग्राम करने के लिए किया जाता है।