मैं एक फ्लैश के साथ वृद्धिशील अपडेट कैसे कर सकता हूं जिसे केवल ब्लॉक-वार मिटाया जा सकता है?


11

परिदृश्य

मैं डिवाइस के माइक्रोकंट्रोलर (एस) को अपडेट करने वाले नए फर्मवेयर के साथ कम लागत वाले IoT डिवाइस को ओवर-द-एयर अपडेट करना चाहता हूं। 32k से 128k रेंज (हर प्रतिशत मायने रखता है) में माइक्रोकंट्रोलर मेमोरी फ्लैश मेमोरी है। इस सस्ती मेमोरी की एक प्रमुख सीमा है: इसे केवल ब्लॉक-वार मिटाया जा सकता है।

सवाल

क्या इसका मतलब है कि मैं एक अंतर ( डेल्टा ) अपडेट नहीं कर सकता हूं ? क्या मुझे हमेशा पूरे नियंत्रक मेमोरी (या कम से कम पर्याप्त भागों) को अपडेट करना होगा?

मैं सब कुछ फ्लैश करने और डिवाइस को पूरी तरह से संभव के रूप में जोखिम को कम करने की आवश्यकता को कम करना चाहता हूं। क्या मौजूदा रणनीतियाँ हैं जब हवा पर माइक्रोकंट्रोलर चमकते हैं?


आपके लिए लागत या सबसे कम जोखिम दर क्या है?
बेन्स कौलिक्स

@BenceKaulics दोनों के बीच सही संतुलन बनाता है, मुझे लगता है। सब के बाद एक ईंट जोखिम भी एक (भारित) लागत है।
Helmar

जवाबों:


8

सरल उत्तर हां है - यदि आप उच्च विश्वसनीयता चाहते हैं, तो बूटलोडर और ए / बी कोड चित्रों का समर्थन करने के लिए आपको पर्याप्त ब्लॉक चाहिए। नई छवि को सक्रिय करने से पहले, आप पूरी बात लिख सकते हैं, इसे सत्यापित कर सकते हैं और संभावित रूप से पुनः प्रयास कर सकते हैं।

हालांकि इस है एक महंगी / विश्वसनीय रणनीति और वहाँ बातें आप भूमि के ऊपर कम करने के लिए कर सकते हैं। ओटीए अपडेट के लिए निम्न स्तर का समर्थन भी डिवाइस फर्मवेयर या ओएस के हिस्से के रूप में आ सकता है, इसलिए आप रोलिंग-अपने-आप से बच सकते हैं जब तक आप सीखना नहीं चाहते। इस सुविधा के रूप में वर्णित किया जा सकता है FOTA

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

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

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


6

मैं सब कुछ फ्लैश करने और डिवाइस को पूरी तरह से संभव के रूप में जोखिम को कम करने की आवश्यकता को कम करना चाहता हूं। क्या मौजूदा रणनीतियाँ हैं जब हवा पर माइक्रोकंट्रोलर चमकते हैं?

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

इसे ध्यान में रखते हुए, आप दोनों छवियों को अपडेट करते समय वियर-लेवलिंग एल्गोरिदम का उपयोग कर सकते हैं। इस तरह के एल्गोरिदम का कोड कुल संग्रहण का लगभग 10-15% हो सकता है, लेकिन यह डिवाइस के जीवनकाल को बढ़ाने में इसके लायक है।

वियर लेवलिंग को आमतौर पर फ्लैश कंट्रोलर द्वारा प्रबंधित किया जाता है, जो हर बार डेटा का उपयोग करने के लिए भौतिक ब्लॉक को निर्धारित करने के लिए वियर लेवलिंग एल्गोरिदम का उपयोग करता है। दो प्रकार के सॉलिड-स्टेट ड्राइव (SSD) वियर लेवलिंग हैं: डायनेमिक और स्टैटिक। डायनेमिक वियर लेवलिंग पूल ने ब्लॉक मिटा दिए और अगले राइट के लिए सबसे कम इरेज़ काउंट वाले ब्लॉक का चयन किया।

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

( Techtarget.com: लेवलिंग पहनें )


6

फ्रीस्केल सेमीकंडक्टर अपने काइनेटिस माइक्रोकंट्रोलर्स के लिए ओवर-द-एयर फर्मवेयर अपग्रेड का एक मजबूत तरीका बताता है ।

इसे कहा जाता है: प्रोग्राम फ्लैश मेमोरी स्वैप

फ्लैश मेमोरी स्वैप का उपयोग करने वाले सिस्टम

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

लाभ

  • प्रोग्रामिंग में आसानी। एप्लिकेशन हमेशा मेमोरी मैप में निचले ब्लॉक से बाहर निकलता है।
  • बिजली की हानि सहिष्णु।
  • कोई बूटलोडर की आवश्यकता नहीं है। मुख्य आवेदन की शुरुआत में कोई देरी नहीं।
  • मल्टी-टास्किंग ओएस के लिए अच्छी तरह से अनुकूल है। न्यूनतम आवेदन डाउनटाइम। मल्टी-टास्किंग सिस्टम में मुख्य एप्लिकेशन कार्यों को निष्पादित करना जारी रखना संभव है, जबकि बैकग्राउंड कार्य एप्लिकेशन की नई कॉपी को अपडेट करने के लिए चल रहे हैं।
  • कोड की बैकअप कॉपी। ज्ञात कार्यशील अनुप्रयोग पर वापस लौटना संभव है।

नुकसान

  • अतिरिक्त फ़्लैश मेमोरी स्पेस बैकअप कॉपी को स्टोर करने के लिए आवश्यक है।

आप ब्लॉक अपडेट कर सकते हैं और फिर उन्हें स्वैप कर सकते हैं।

अद्यतन के दौरान स्मृति अदला-बदली

जुड़ा हुआ दस्तावेज़ विस्तृत विवरण रखता है।

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


2
यह बहुत अच्छा लग रहा है और एक समाधान की तरह दिखता है जिसे निश्चित रूप से विचार किया जाना चाहिए कि क्या इसे लागत आवश्यकताओं के साथ संतुलित किया जा सकता है। + 1
Helmar
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.