क्या उपयोगकर्ता कॉन्फ़िगरेशन को संग्रहीत करने के लिए माइक्रोकंट्रोलर प्रोग्राम फ्लैश मेमोरी का उपयोग किया जा सकता है?


9

कई माइक्रोकंट्रोलर, उदाहरण के लिए PIC18F , फ्लैश प्रोग्राम मेमोरी है: "फ्लैश प्रोग्राम मेमोरी सामान्य ऑपरेशन के दौरान पठनीय और लिखने योग्य है"। क्या इसका मतलब है कि मैं प्रोग्राम मेमोरी में कुछ उपयोगकर्ता कॉन्फ़िगरेशन स्टोर कर सकता हूं?

जवाबों:


12

हाँ तुम कर सकते हो। मैंने कई बार ऐसा किया है।

हालांकि, अलग EEPROM का उपयोग करने के लिए कुछ कमियां हैं:

  1. फ्लैश मेमोरी को प्रोग्राम करने के लिए जीवनकाल की संख्या डेटा EEPROM की तुलना में काफी कम है।

  2. प्रोसेसर मिटाने और लिखने के समय दोपहर के भोजन के लिए बाहर जाएगा।

  3. प्रोग्राम फ्लैश ब्लॉक में मिटा दिया जाता है। आप केवल एक बाइट को अपडेट नहीं कर सकते। मैं आमतौर पर इससे निपटने के लिए एक ब्लॉक कैशिंग योजना का उपयोग करता हूं।


बिल्कुल सही, आप किसी भी तरह से जानते हैं कि मेरा प्रश्न वास्तव में "EEPROM की आवश्यकता क्यों है जब आप प्रोग्राम मेमोरी और उपयोगकर्ता डेटा दोनों के लिए प्रोग्राम मेमोरी का उपयोग कर सकते हैं" :)
student1

जब फर्मवेयर का नया संस्करण PIC में जलाया जाता है तो ओलिन, फ्लैश के सभी मिट जाते हैं? क्या फ़र्मवेयर डाउनलोड के दौरान फ़्लैश में उपयोगकर्ता कॉन्फ़िगरेशन (या अंशांकन डेटा) को रोकने का एक अच्छा तरीका है? यह फर्मवेयर विकास के दौरान सुविधा के बारे में है। मुझे लगता है कि उपयोगकर्ता विन्यास बहुत पिछले ब्लॉक या फ़्लैश में संग्रहीत किया जाएगा।
निक एलेक्सीव

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

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

@ चिह्न: हां, यह PIC32 पर भी काम करता है, जहां रैम से निष्पादित करना भी संभव है। वास्तव में, यह तेज है।
ओलिन लेट्रोप

6

कई PIC18 की मेमोरी EEPROM है, आकार में 1K तक। दुर्भाग्य से PIC18F46J50 आप संदर्भ नहीं है। यदि EEPROM उपलब्ध है, तो यह आपके डेटा के लिए पर्याप्त बड़ा है, तो यह बेहतर विकल्प है, क्योंकि EEPROM में न्यूनतम 1,000,000 मिटा / चक्र हैं, और फ्लैश केवल 10,000 है।

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

इसके बजाय, PIC18 परिवार पर, आप TBLPTR नामक एक 22-बिट रजिस्टर में एक प्रारंभिक पता सेट करते हैं। फ्लैश से बाइट्स पढ़ने के लिए, आप एक TBLRD निर्देश का उपयोग करते हैं। आपके द्वारा मैन्युअल रूप से ऐसा करने की आवश्यकता नहीं है पढ़ने के बाद पते को स्वचालित रूप से बढ़ाने या घटाने का विकल्प है।

फ्लैश मेमोरी को लिखने के लिए, आपको फ्लैश मेमोरी के एक या अधिक 64-बाइट ब्लॉक को मिटाना होगा जो पहले लिखा जाएगा। TBLPTR में फिर से शुरुआती पता लगाने के बाद, और मिटाए गए ऑपरेशन को शुरू करने के लिए कुछ अन्य रजिस्टरों में मानों को बाधित किया जाता है, इंटरप्ट को अक्षम किया जाता है और फिर आपको 0x55 के बाद तुरंत 0xAA को एक रजिस्टर में लिखना होगा; यह इरेज़ कमांड को अनलॉक करता है और गलत कोड को गलती से मेमोरी को मिटा देने से रोकने के लिए आवश्यक है। अंत में वास्तव में मिटाए जाने की आज्ञा को क्रियान्वित किया जाता है, इसके बाद इंटरप्ट को फिर से सक्षम किया जाता है।

मेमोरी को राइट करना मिटाने के समान है, सिवाय ब्लॉक साइज के छोटा है। लेखन वास्तव में एक TBLWT अनुदेश का उपयोग करके निष्पादित किया जाता है, जो TBLRD अनुदेश की तरह ऑटो वेतन वृद्धि / गिरावट भी देता है।

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

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


वह "फर्मवेयर ऑन द एयर" विधि बहुत दिलचस्प लगती है। क्या यह इन सिस्टम प्रोग्रामिंग (आईएसपी) की आवश्यकता को दूर करता है?
छात्र 1

@ student1 यह ISP इंटरफ़ेस के माध्यम से चिप के प्रारंभिक प्रोग्रामिंग की आवश्यकता को दूर नहीं करता है, क्योंकि आपको अपडेट को बाद में अपडेट करने में सक्षम होने के लिए चिप पर कुछ फर्मवेयर रखना होगा। Arduino बोर्डों पर उपयोग किए जाने वाले ATmega माइक्रोकंट्रोलर्स पर पहले से ही इस प्रकार का फर्मवेयर है, जिसे Bootloader कहा जाता है, यही कारण है कि आपको Arduino पर स्केच डाउनलोड करने के लिए ISP इंटरफ़ेस का उपयोग करने की आवश्यकता नहीं है। हालाँकि यदि आप खुद बूटलोडर को अपडेट करना चाहते हैं, तो इसके लिए ISP इंटरफ़ेस की आवश्यकता है। यह बूटलोडर केवल यूएसबी पर अपडेट संभालता है, इसलिए यह वास्तव में "हवा पर फर्मवेयर" नहीं है।
tcrosley
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.