2011-11-03 8 views
14

मैं एक कस्टम कॉर्टेक्स-एम 3-आधारित डिवाइस पर काम कर रहा हूं और मुझे इन-एप्लिकेशन प्रोग्रामिंग (आईएपी) तंत्र को लागू करने की आवश्यकता है ताकि JTAG के बिना डिवाइस फर्मवेयर को अपडेट करना संभव हो (हम इसके बजाय TFTP या HTTP का उपयोग करेंगे)। जबकि एसटी माइक्रोइलेक्ट्रॉनिक्स से उपलब्ध आईएपी से संबंधित कोड उदाहरण मेरे लिए काफी स्पष्ट हैं, मैं वास्तव में समझ नहीं पा रहा हूं कि री-फ्लैशिंग कैसे काम करती है।एआरएम (कॉर्टेक्स एम 3) के लिए इन-एप्लिकेशन प्रोग्रामिंग कैसे काम करता है?

जहां तक ​​मैं समझता हूँ, निर्देश ICODE बस के माध्यम से फ्लैश से सीपीयू (और प्रीफ़ेच ब्लॉक, ज़ाहिर है) द्वारा दिलवाया जाता है। तो, यहां मेरा सुंदर मूर्ख सवाल है: क्यों चल रहा प्रोग्राम दूषित नहीं होता है, जबकि यह खुद को फिर से चमकता है (यानी फ्लैश मेमोरी को बदलता है जिससे इसे चलाया जा रहा है)?

उत्तर

9

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

बेशक

, इस छोटे से क्षेत्र ओवरराइट नहीं है जब फर्मवेयर चमकती है, यह केवल अन्य तरीकों से (JTAG) की तरह किया जा सकता है। तो सुनिश्चित करें कि यह फ़्लैशिंग प्रोग्राम शुरू करने के लिए अच्छा काम करता है। :)

+0

आह-हा ... यह सही है, कोड का अध्ययन करते समय मैंने उस हिस्से को याद किया है! –

+1

हां, हालांकि, कई उपकरणों पर यह फ्लैश प्रोग्रामिंग करते समय वास्तव में राम से चलने के लिए आवश्यक है, इसलिए प्रोग्रामिंग कोड का एक छोटा ब्लॉक रैम पर कॉपी किया जाना चाहिए और वास्तविक प्रोग्रामिंग करने के लिए कहा जाता है, भले ही समग्र प्रक्रिया का प्रबंधन किया जाता है फ्लैश के आरक्षित हिस्से में कोड। –

+0

कई विफलता परिदृश्य हैं जिन पर आपको विचार करने की आवश्यकता है, अन्यथा, आप अपने सिस्टम को ब्रिक कर सकते हैं।आईएपी एफ/डब्ल्यू विकास का एक कोने पत्थर है और यह विशेष रूप से हानिकारक नेटवर्क पर सही कर रहा है मुश्किल हो सकता है। – Amit

6

मैं एसटीएम कार्यान्वयन से परिचित नहीं हूँ, लेकिन एनएक्सपी चिप्स में आईएपी दिनचर्या एक अलग, सुरक्षित ROM क्षेत्र है जो उपयोगकर्ता कोड से मिटाया नहीं जा सकता है में संग्रहीत हैं।

आप HW सीधे पंजीकृत करता है का उपयोग करके फ़्लैश लेखन कोड लागू कर रहे हैं, तो अपने आप को, या तो आप यकीन है कि यह राम से क्षेत्रों से चल रहा है, या रन स्पर्श नहीं करता है बनाने की जरूरत है।

1

आजकल कई सूक्ष्म नियंत्रकों आईएपी का समर्थन करते हुए कि वह अपने फ्लैश मेमोरी, जबकि एक ही फ्लैश में प्रोग्राम निष्पादन कार्यक्रम के लिए संभव है।

आईएपी के लिए, फ्लैश में कार्यक्रम स्मृति 2 भागों, एक निष्पादन & अन्य बैकअप भागों में बांटा जा सकता है।

आम तौर पर हम जेएजी के माध्यम से एक स्थान (कहें, भाग -1) पर फ्लैश मेमोरी प्रोग्राम करते हैं, जिसका फर्मवेयर संस्करण 0.01 है। आईएपी के लिए, यानी कोड को निष्पादित करते समय फ्लैश को किसी अन्य भाग (भाग -2) में प्रोग्राम करें, संबंधित एपीआई फर्मवेयर संस्करण 0.01 में प्रदान की जानी चाहिए, जो फ़्लैश भाग -2 प्रोग्राम करने में मदद करता है, प्रोग्रामिंग सफलतापूर्वक फर्मवेयर संस्करण पूरा होने के बाद 0.02 के रूप में अद्यतन किया गया। प्रोसेसर पुनरारंभ करने पर, प्रोग्राम निष्पादन प्रारंभिक पर फर्मवेयर संस्करण की जांच करके नवीनतम फर्मवेयर पर कूदता है।

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

0

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

संबंधित मुद्दे