स्वतंत्र प्रहरी (IWDG) या विंडो प्रहरी (WWDG)?


15

मैं अभी भी इस प्रश्न का उत्तर ढूंढ रहा हूं:

क्यों जबकि stm32 MCUs में एक सही प्रहरी (मेरा मतलब है वॉचडॉग (WWDG)) है, एक साधारण प्रहरी (इंडिपेंडेंट वॉचडॉग (IWDG)) है?

मुझे यह पृष्ठ मिला है जिसमें कहा गया है:

ST माइक्रोइलेक्ट्रॉनिक में Cortex-M3 उपकरणों की एक पंक्ति है। एम 3 लोअर-एंड एम्बेडेड उपकरणों के लिए बेहद लोकप्रिय हो गया है, और एसटी की एसटीएम 32 एफ इन भागों का प्रतिनिधि है (हालांकि डब्ल्यूडीटी एक एसटी ऐड-ऑन है, और जरूरी नहीं कि अन्य विक्रेताओं के कार्यान्वयन को दर्पण करें)। STM32F में दो अलग-अलग सुरक्षा तंत्र हैं। एक "इंडिपेंडेंट वॉचडॉग" एक सुंदर वेनिला डिज़ाइन है जो उपयोग में आसानी के अलावा इसके लिए बहुत कम है। लेकिन उनका विंडो वॉचडॉग अधिक मजबूत सुरक्षा प्रदान करता है। जब एक उलटी गिनती टाइमर समाप्त हो जाता है, तो एक रीसेट उत्पन्न होता है, जिसे टाइमर को फिर से लोड करके लगाया जा सकता है। वहां कुछ खास नहीं। लेकिन अगर पुनः लोड बहुत जल्दी होता है, तो सिस्टम भी रीसेट हो जाएगा। इस मामले में "बहुत जल्दी" एक मूल्य एक प्रोग्राम द्वारा एक नियंत्रण रजिस्टर में निर्धारित किया जाता है।

एक और अच्छी सुविधा: यह रीसेट करने से ठीक पहले एक अवरोध उत्पन्न कर सकता है। बीच में रोड़ा अटकाने के लिए थोड़ा सा कोड लिखें और आप कुछ कार्रवाई कर सकते हैं, उदाहरण के लिए, सिस्टम को सुरक्षित स्थिति में रखें या डीबगिंग उद्देश्यों के लिए डेटा स्नैप करें। ST ने प्रहरी को पुनः लोड करने के लिए ISR का उपयोग करने का सुझाव दिया है - अर्थात, कुत्ते को किक करें ताकि रीसेट न हो। उनकी सलाह मत लो। यदि प्रोग्राम क्रैश हो जाता है तो बाधा हैंडलर बहुत अच्छी तरह से सामान्य रूप से कार्य करना जारी रख सकते हैं। और WDT को पुनः लोड करने के लिए ISR का उपयोग करने से विंडो वॉचडॉग का पूरा कारण अमान्य हो जाता है।

और यह :

STMicroelectronics 'STM32F4 Cortex ™ -M4 सीपीयू की नई श्रृंखला में दो स्वतंत्र वॉचडॉग हैं। एक अपने आंतरिक आरसी थरथरानवाला से चलाता है। इसका मतलब है कि सीपीयू में सभी प्रकार की चीजें ढह सकती हैं और डब्ल्यूडीटी अभी भी आग लगाएगा। एक "विंडो वॉचडॉग" (WWDT) भी है जिसे कोड को बार-बार गुदगुदी करने की आवश्यकता होती है, लेकिन बहुत बार नहीं। दुर्घटनाग्रस्त कोड का बीमा करने के लिए यह एक बहुत प्रभावी तरीका है जो सुरक्षा तंत्र को अनियमित रूप से लिखता है और WDT गुदगुदी का कारण नहीं बनता है, और रीसेट होने से पहले WWDT एक अवरोध उत्पन्न कर सकता है।

ठीक है, संदर्भ मैनुअल में एक नज़र डालते हैं :

STM32F10xxx में दो एम्बेडेड वॉचडॉग परिधीय हैं जो उच्च सुरक्षा स्तर, समय सटीकता और उपयोग के लचीलेपन का संयोजन प्रदान करते हैं। वॉचडॉग परिधीय (स्वतंत्र और विंडो) दोनों सॉफ़्टवेयर विफलता के कारण खराबी का पता लगाने और हल करने के लिए सेवा करते हैं, और सिस्टम रीसेट या एक रुकावट (केवल विंडो वॉचॉग) को ट्रिगर करने के लिए जब काउंटर किसी दिए गए टाइमआउट मान तक पहुंचता है। स्वतंत्र वॉचडॉग (IWDG) को अपनी समर्पित कम गति वाली घड़ी (LSI) द्वारा देखा जाता है और इस प्रकार मुख्य घड़ी के विफल होने पर भी सक्रिय रहता है। विंडो वॉचडॉग (WWDG) घड़ी APB1 घड़ी से निर्धारित की गई है और इसमें एक विन्यास योग्य समय-विंडो है जिसे असामान्य रूप से देर से या प्रारंभिक अनुप्रयोग व्यवहार का पता लगाने के लिए प्रोग्राम किया जा सकता है। IWDG उन अनुप्रयोगों के लिए सबसे उपयुक्त है, जिन्हें मुख्य एप्लिकेशन के बाहर पूरी तरह से स्वतंत्र प्रक्रिया के रूप में वॉचडॉग चलाने की आवश्यकता होती है, लेकिन कम समय सटीकता की कमी है। WWDG उन अनुप्रयोगों के लिए सबसे उपयुक्त है, जिन्हें वॉचडॉग को एक सटीक समय विंडो के भीतर प्रतिक्रिया करने की आवश्यकता होती है।

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

जैसा कि आप देख सकते हैं, उनमें से किसी ने भी नहीं कहा है कि क्यों दो प्रहरी । अगर मैं पूछता हूं कि दोनों प्रहरी के बीच क्या अंतर हैं, तो आप उन सभी विशेषताओं को गिनेंगे जो आप ऊपर देख सकते हैं और यदि आप दोनों की तुलना करना चाहते हैं, तो जाहिर है कि विंडो वॉचडॉग (WWDG) विजेता होगा! तो फिर दो प्रहरी क्यों हैं?

मैं जानना चाहता हूं कि IWDG कब और WWDG का उपयोग कब करना चाहिए?

और क्या कोई कारण है कि हम कहें कि वे इस नाम से दूसरी घड़ी क्यों कहते हैं -> "विंडो वॉचडॉग"?

जवाबों:


23

नियमित वॉचडॉग टाइमर को समय से पहले रीसेट करना चाहिए। यदि आपके पास 100ms WDT है तो आप इसे हर 99.9ms या हर 10us पर रीसेट कर सकते हैं और यह कभी भी समाप्त नहीं होगा।

विंडो वॉचडॉग टाइमर एक है समय विंडो होती है जिसके भीतर उन्हें रीसेट किया जाना चाहिए। यदि आप इसे बहुत जल्दी या बहुत देर से रीसेट करते हैं (पिछले रीसेट से) तो यह प्रोसेसर को रीसेट करने का कारण बनेगा।

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

सिस्टम घड़ी से WDT चलाना एक समस्या का एक सा हो सकता है- अगर घड़ी विफल हो जाती है और अगर एक स्वतंत्र घड़ी मॉनिटर सर्किट नहीं है, तो खराब चीजें हो सकती हैं। डब्लूडीटी के लिए स्वतंत्र घड़ी का अर्थ है कि यदि किसी कारण से चीज़ १/१० की गति से चलने लगे, तो डब्लूडीटी रीसेट हो जाएगा (लेकिन विंडो डब्लूडीटी नहीं होगा)।

यदि आप कर सकते हैं तो दोनों का उपयोग करें ।

जैसा कि पृष्ठ कहता है, एक ISR के साथ WDT को रीसेट करना आम तौर पर बुरा जूजू है (लेकिन स्वीकार्य हो सकता है यदि ISR फर्मवेयर को रीसेट करता है, तो टाइमर को रीसेट करने से पहले काम कर रहा है)।


वास्तव में क्या यह संभव है कि सिस्टम घड़ी विफल हो जाए? अगर ऐसा होता है, तो हम इसे समझ सकते हैं। इस प्रकार, WDT उपयोगी नहीं है, क्या मैं सही हूं? फिर यह चिंता का विषय क्यों होगा?
रोह

1
यदि स्वतंत्र WDT घड़ी MCU को एक रीसेट स्थिति (और वह स्थिति सुरक्षित है) में बाध्य करती है, तो संभवतः आपदा को रोका जा सकता है। एक शॉर्ट MCU क्रिस्टल ने शुरुआती दिनों (BART, IIRC) में एक गंभीर दुर्घटना का कारण बना।
स्परोहो फेफेनी

1
@ रो: मैंने वास्तव में सिस्टम घड़ी को इस बहुत ही प्रोसेसर (अच्छी तरह से, एक एसटीएम 32 एफ 0, जो एक एम 0 ए 0 है) पर स्लीप मोड में प्रवेश करने के बाद वापस आने में विफल देखा है। पता चलता है कि जब आप निश्चित समय पर कुछ चीजें करते हैं तो पीएलएल घड़ी शुरू करने में विफल हो सकती है, और पूरी चीज 1/6 गति पर चलती है।
नाथों

@ नाथन को धन्यवाद। दिलचस्प। पूरी तरह से मुझे M0 श्रृंखला से नफरत है। लगता है एसटीएम की प्रत्येक श्रृंखला में एक समस्या है।
रोह

7

प्रश्न में आपके द्वारा चिपकाए गए पाठ में आपको आवश्यक उत्तर दिए गए हैं।

  1. जब आप एक साधारण वॉचडॉग की आवश्यकता होती है या जब आपको पूरी तरह से स्वतंत्र वॉचडॉग की आवश्यकता होती है, तो आप IWDG का उपयोग करते हैं - IWDG की अपनी घड़ी होती है, WWDG अपनी घड़ी को बस की एक घड़ी से निकालता है - यदि यह विफल हो जाता है या आपका सॉफ्टवेयर इसे बंद कर देता है तो वॉचडॉग की मृत्यु हो जाती है।
  2. आप WWDG का उपयोग करते हैं जब आपको एक वॉचडॉग की आवश्यकता होती है जिसे केवल एक निश्चित समय-सीमा (विंडो) के भीतर रीसेट किया जा सकता है। यदि आपका सॉफ़्टवेयर WWDG को बहुत देर से रीसेट करता है, तो WWDG प्रोसेसर के रीसेट को ट्रिप करेगा। यदि आपका सॉफ्टवेयर WWDG को बहुत जल्दी रीसेट करता है, तो यह प्रोसेसर के रीसेट का कारण भी होगा।

यह सरल कारण के लिए एक "विंडो वॉचडॉग" कहा जाता है कि एक निर्दिष्ट समय अवधि के दौरान केवल एक वॉचडॉग रीसेट (अवसर की खिड़की) वॉचडॉग को आपके प्रोसेसर को रीसेट करने से रोक देगा।

दोनों समान काम करते हैं, लेकिन वे उन्हें अलग तरीके से करते हैं। जो आपको चाहिए वह उन आवश्यकताओं पर निर्भर करता है जिन्हें आपको पूरा करना है।


कृपया Spehro Pefhany को मेरी टिप्पणी पढ़ें।
रोह

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

5

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

आप IWDG के साथ ऐसा नहीं कर सकते। जैसा कि नाम से पता चलता है, यह प्रोसेसर से स्वतंत्र है। एक बाधा को बढ़ाने के बजाय, यह बस जोर देता है और डेज़र्ट / RESET - जो आपको कई सुराग नहीं देता है कि यह क्यों भौंकता है। मैं दृढ़ता से आपके सामान्य परिचालन मापदंडों के भीतर एक WWDG स्थापित करने का सुझाव देता हूं, साथ ही एक IWDG अधिक लंबी अवधि में, शायद 2 * WWDG अधिकतम। एक किक-डॉग फ़ंक्शन बनाएं जो दोनों को किक करता है। इस तरह, IWDG केवल तभी भौंकता है जब WWDG अंतिम बैकअप के रूप में भी लॉक हो जाता है।


1

इस पर मेरी ले:

एक ही समय में दोनों का उपयोग करें, क्योंकि वे विभिन्न विफल स्थितियों की तलाश में हैं:

स्वतंत्र निगरानी (IWDG) टाइमर की जरूरत लगातार यह पहले का समय समाप्त रीसेट किया जाना है। व्यवहार में आप बस रीसेट कोड जोड़ सकते हैं हर जगह आपके पास एक मान्य प्रोग्राम स्थिति है, या मुख्य लूप में एक बार यदि आपके पास एक मुख्य लूप है जो बिना किसी बड़ी देरी के अक्सर निष्पादित करना है। इस तरह, यदि आपका कॉल टाइमर रीसेट करने के लिए है (इसे कभी-कभी "पेटिंग", "गुदगुदी, या बस" रीसेट "" वॉच डॉग "कहा जाता है) समय में नहीं होता है, तो इसका मतलब है कि आपका कोड या तो ए) गलती से अटक गया है। कहीं आपने पूर्वाभास तो नहीं किया --- कुछ प्रकार के अनपेक्षित लूप टाइप स्टेट, या बी) जानबूझकर कहीं अटक गए हैं जो आपके द्वारा लागू किए गए हैंassert() सच हो। तो, अब जब आपकी मुखर स्थिति झूठी है, तो आपका कोड जानबूझकर एक अनंत लूप में फंस गया है, और वॉचडॉग इसे एक वैध स्थिति में वापस लाने के लिए माइक्रोकंट्रोलर को रीसेट करता है। यह भी ध्यान दें कि "स्वतंत्र वॉचडॉग (IWDG) अपनी स्वयं की समर्पित कम गति वाली घड़ी (LSI) द्वारा देखा जाता है और इस प्रकार मुख्य घड़ी के विफल होने पर भी सक्रिय रहता है" ( ST RM0008 संदर्भ मैनुअल p493 देखें )।

हालांकि मुझे ऐसा लगता है कि विंडो वॉचडॉग (WWDG) टाइमर को ऊपर वर्णित मामलों के लिए नहीं देखने के लिए डिज़ाइन किया गया है (जहां आपका कोड अनजाने में या जानबूझकर [एक मुखर के माध्यम से] कहीं "अटक" जाता है), लेकिन विशेष रूप से मामले के लिए जहां ए) आपका कोड कुछ ऐसा नहीं करता है जो उसे करना चाहिए । दूसरे शब्दों में, इसमें एक गलती है जो इसके मुख्य लूप या कोड के अन्य उप-प्रकार को बहुत तेज़ी से निष्पादित करने का कारण बनता है (या पूरी तरह से छोड़ दिया जाना चाहिए), इसलिए आप वॉचडॉग को जल्द ही रीसेट कर सकते हैं, इसकी विंडो के बाहर, और mcu रीसेट हो जाता है। या, बी)दूसरी स्थिति यह एक असफल टाइमर सेटअप है। शायद आप इसे एक निश्चित अंतराल पर रीसेट कर रहे हैं, लेकिन इस अंतराल को बनाने के लिए आपके टाइमर का उपयोग या तो इसके कॉन्फ़िगरेशन में गलती से हो जाता है, कहीं ऐसा नहीं होना चाहिए, या आप इसे पहली बार में गलत तरीके से कॉन्फ़िगर करते हैं, तो समय अंतराल बंद हो जाएगा, आपका निश्चित अंतराल समय अंतराल रीसेट WWDG को उसकी विंडो के बाहर रीसेट करेगा (या तो बहुत जल्द या बहुत देर से), और mcu आपको सूचित करने और / या स्थिति को ठीक करने के लिए रीसेट हो जाता है।

इस पर मेरा टेक है। विचार या प्रतिक्रिया का स्वागत है।


0

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

यदि आपका कोड स्वचालित रूप से निरंतर लूप में प्रवेश कर सकता है, तो उनमें से कोई भी बुलेट प्रूफ नहीं है। उदाहरण के लिए। यदि आप टाइमर से संबंधित IRQ के आधार पर "फीड" करने की योजना बनाते हैं, तो यह अत्यंत बुरा व्यवहार हो सकता है क्योंकि आपका कोड मेल थ्रेड में कुछ / कुछ समय में अटक सकता है, जबकि व्यवधान अभी भी आपके WWDT को सही क्रम में फीड कर सकता है।

वास्तव में, आप WWDT को खिलाने के लिए इंटरप्ट का उपयोग कर सकते हैं यदि आप सामान्य निष्पादन कोड के तहत अपनी IRQ प्राथमिकता को कम कर सकते हैं जैसे आप MIPS (माइक्रोचिप) पर कर सकते हैं।

यदि आपका कोड जीवन समर्थन, आलोचनात्मक आदि है, तो बस उन सभी को छोड़ दें और बाहरी WDT (Q & A आधारित बेहतर) का उपयोग करें।

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