สุนัขเฝ้าบ้านอิสระ (IWDG) หรือสุนัขเฝ้าบ้าน (WWDG)?


15

ฉันยังคงค้นหาคำตอบสำหรับคำถามนี้:

ทำไมในขณะที่ stm32 MCUs มีสุนัขเฝ้าบ้านที่สมบูรณ์ (ฉันหมายถึง Window watchdog (WWDG)) มีสุนัขเฝ้าบ้านที่เรียบง่าย (สุนัขเฝ้าบ้านอิสระ (IWDG))

ฉันพบหน้านี้ที่ได้กล่าว:

ST Microelectronics มีสายผลิตภัณฑ์ Cortex-M3 M3 ได้รับความนิยมอย่างมากสำหรับอุปกรณ์ฝังตัวระดับล่างและ STM32F ของ ST เป็นตัวแทนของชิ้นส่วนเหล่านี้ (แม้ว่า WDT เป็น Add-on ST และไม่จำเป็นต้องสะท้อนถึงการใช้งานของผู้ขายรายอื่น) STM32F มีสองกลไกการป้องกันที่แตกต่างกัน "Watchdog อิสระ" คือการออกแบบวานิลลาสวยที่มีน้อยไปสำหรับมันนอกเหนือจากความสะดวก แต่ Window Watchdog ของพวกเขาให้การป้องกันที่แข็งแกร่งกว่า เมื่อตัวจับเวลานับถอยหลังหมดอายุการรีเซ็ตจะถูกสร้างขึ้นซึ่งสามารถขัดขวางได้โดยการโหลดตัวจับเวลาอีกครั้ง ไม่มีอะไรพิเศษที่นั่น แต่ถ้าการโหลดเกิดขึ้นเร็วเกินไประบบก็จะรีเซ็ตเช่นกัน ในกรณีนี้ "เร็วเกินไป" ถูกกำหนดโดยค่าหนึ่งโปรแกรมในการลงทะเบียนควบคุม

อีกคุณสมบัติที่ยอดเยี่ยม: มันสามารถสร้างการขัดจังหวะก่อนที่จะรีเซ็ต เขียนโค้ดเล็กน้อยเพื่อขัดขวางการขัดจังหวะและคุณสามารถดำเนินการบางอย่างกับระบบให้อยู่ในสถานะที่ปลอดภัยหรือเพื่อถ่ายภาพข้อมูลเพื่อการดีบัก ST แนะนำให้ใช้ ISR เพื่อโหลดสุนัขเฝ้าบ้าน - นั่นคือเตะสุนัขเพื่อไม่ให้มีการรีเซ็ต อย่าใช้คำแนะนำของพวกเขา หากโปรแกรมขัดข้องตัวจัดการขัดจังหวะอาจทำงานต่อได้ตามปกติ และการใช้ ISR เพื่อโหลด WDT จะทำให้เหตุผลทั้งหมดสำหรับสุนัขเฝ้าบ้านไม่ทำงาน

และสิ่งนี้ :

ชุดใหม่ของ STMicroelectronics ของซีพียู STM32F4 Cortex ™ -M4 มีสุนัขเฝ้าบ้านอิสระสองคน หนึ่งรันจาก oscillator RC ภายในของตัวเอง นั่นหมายความว่าทุกสิ่งสามารถพังในซีพียูและ WDT จะยังคงทำงานอยู่ นอกจากนี้ยังมี“ window watchdog” (WWDT) ซึ่งต้องการรหัสเพื่อจี้มันบ่อย แต่ไม่บ่อยเกินไป นี่เป็นวิธีที่มีประสิทธิภาพมากในการประกันรหัสที่ผิดพลาดที่สุ่มเขียนไปยังกลไกการป้องกันที่ไม่ก่อให้เกิดการจี้ WDT และ WWDT สามารถสร้างการขัดจังหวะในไม่ช้าก่อนที่จะถูกรีเซ็ต

ตกลงเรามาดูคู่มืออ้างอิง :

STM32F10xxx มีอุปกรณ์ต่อพ่วงสุนัขเฝ้าบ้านในตัวสองตัวที่ให้การผสมผสานระหว่างระดับความปลอดภัยสูงความแม่นยำในการจับเวลาและความยืดหยุ่นในการใช้งาน อุปกรณ์จ้องจับผิดทั้งสอง (อิสระและหน้าต่าง) ทำหน้าที่ตรวจจับและแก้ไขความผิดปกติเนื่องจากความล้มเหลวของซอฟต์แวร์และเพื่อให้ระบบรีเซ็ตหรือขัดจังหวะ (หน้าต่างจ้องจับผิดเท่านั้น) เมื่อตัวนับถึงค่าการหมดเวลาที่กำหนด Watchdog อิสระ (IWDG) ถูกโอเวอร์คล็อกด้วยนาฬิกาความเร็วต่ำเฉพาะของตัวเอง (LSI) และยังคงทำงานแม้ว่านาฬิกาหลักจะล้มเหลว นาฬิกา window watchdog (WWDG) ถูกตั้งค่าล่วงหน้าจากนาฬิกา APB1 และมีหน้าต่างเวลาที่กำหนดค่าได้ซึ่งสามารถตั้งโปรแกรมให้ตรวจจับพฤติกรรมแอปพลิเคชันที่ช้าหรือผิดปกติ IWDG นั้นเหมาะสมที่สุดสำหรับแอพพลิเคชั่นที่ต้องการให้สุนัขเฝ้าบ้านทำงานเป็นกระบวนการอิสระโดยสิ้นเชิงนอกแอปพลิเคชันหลัก แต่มีข้อ จำกัด ด้านความแม่นยำของเวลาที่ต่ำกว่า WWDG เหมาะสมที่สุดสำหรับการใช้งานที่ต้องการสุนัขเฝ้าบ้านเพื่อตอบสนองภายในช่วงเวลาที่แม่นยำ

หน้าต่างจ้องจับผิดถูกใช้เพื่อตรวจจับการเกิดข้อผิดพลาดของซอฟต์แวร์ซึ่งมักเกิดจากการรบกวนจากภายนอกหรือจากเงื่อนไขทางลอจิคัลที่ไม่คาดฝันซึ่งทำให้โปรแกรมแอปพลิเคชันละทิ้งลำดับปกติ วงจร watchdog สร้างการรีเซ็ต MCU เมื่อหมดเวลาของช่วงเวลาที่โปรแกรมไว้เว้นแต่ว่าโปรแกรมจะรีเฟรชเนื้อหาของ downcounter ก่อนที่จะทำการล้าง bit bit T6 การรีเซ็ต MCU จะถูกสร้างขึ้นเช่นกันหากค่า downcounter 7 บิต (ในรีจิสเตอร์ควบคุม) ถูกรีเฟรชก่อนที่ downcounter จะถึงค่ารีจิสเตอร์หน้าต่าง นี่หมายความว่าต้องมีการรีเฟรชตัวนับในหน้าต่างที่ จำกัด

อย่างที่คุณเห็นไม่มีใครบอกว่าทำไมมีสุนัขเฝ้าบ้านสองคน ถ้าฉันถามว่าอะไรคือความแตกต่างระหว่างสุนัขเฝ้าบ้านทั้งสองคุณจะนับคุณสมบัติทั้งหมดที่คุณเห็นในข้างบนและถ้าคุณต้องการเปรียบเทียบทั้งสองอย่างแน่นอนสุนัขเฝ้าบ้าน (WWDG) จะเป็นผู้ชนะ! ถ้าเช่นนั้นทำไมมีสุนัขเฝ้าบ้านสองคน

ฉันอยากรู้ว่าฉันควรใช้ IWDG และ WWDG เมื่อใด

และมีเหตุผลอะไรบ้างที่บอกเราว่าทำไมพวกเขาถึงเรียกสายที่สองตามชื่อนี้ -> "Window watchdog"?

คำตอบ:


23

ตัวจับเวลาจ้องจับผิดปกติจะต้องรีเซ็ตในบางครั้งก่อนที่จะหมดเวลา หากคุณมี 100ms WDT คุณสามารถรีเซ็ตได้ทุก ๆ 99.9ms หรือทุกๆ 10us และมันจะไม่หมดเวลา

ตัวจับเวลาจ้องจับผิดของหน้าต่างจะมีหน้าต่างเวลาซึ่งจะต้องรีเซ็ต หากคุณรีเซ็ตมันเร็วเกินไปหรือช้าเกินไป (จากการรีเซ็ตก่อนหน้านี้) มันจะทำให้โปรเซสเซอร์รีเซ็ต

วัตถุประสงค์หากไม่ชัดเจนคือเพื่อช่วยให้แน่ใจว่ารหัสรีเซ็ต WDT เป็นรหัสที่ตั้งใจทำงานในรูปแบบที่ต้องการ เงื่อนไขที่ไม่คาดคิดบางประการที่สร้างการรีเซ็ต WDT ความถี่สูงจะไม่ป้องกันระบบจากการรีเซ็ต

การเรียกใช้ WDT จากนาฬิการะบบอาจเป็นปัญหาเล็กน้อยหากนาฬิกาล้มเหลวและหากไม่มีวงจรการตรวจสอบนาฬิกาที่เป็นอิสระสิ่งเลวร้ายอาจเกิดขึ้นได้ นาฬิกาอิสระสำหรับ WDT หมายความว่าหากบางสิ่งด้วยเหตุผลบางอย่างเริ่มทำงานที่ความเร็ว 1/10 WDT จะรีเซ็ต (แต่หน้าต่าง WDT จะไม่)

ใช้ทั้งคู่ถ้าคุณทำได้

ตามที่หน้าระบุไว้การรีเซ็ต WDT ด้วย ISR นั้นโดยปกติจะเป็น juju ที่ไม่ดี (แต่อาจยอมรับได้หาก ISR ตรวจสอบการรีเซ็ตเฟิร์มแวร์นั้นทำงานก่อนที่จะรีเซ็ตตัวจับเวลา)


เป็นไปได้จริง ๆ ที่นาฬิกาของระบบล้มเหลว ถ้ามันเกิดขึ้นเราก็เข้าใจได้ ดังนั้น WDT ไม่มีประโยชน์ฉันถูกไหม แล้วทำไมมันจะต้องเป็นกังวล?
Roh

1
หากนาฬิกา WDT อิสระบังคับให้ MCU เข้าสู่สถานะรีเซ็ต (และสถานะนั้นปลอดภัย) ภัยพิบัติอาจจะสามารถป้องกันได้ คริสตัล MCU แบบ shorted ทำให้เกิดอุบัติเหตุร้ายแรงในวันแรก (BART, IIRC)
Spehro Pefhany

1
@Roh: ฉันเห็นจริง ๆ ว่านาฬิการะบบไม่สามารถกลับมาได้หลังจากเข้าสู่โหมดสลีปในโปรเซสเซอร์นี้ (เช่น STM32 F0 ซึ่งเป็น M0) ปรากฎว่าเมื่อคุณทำบางสิ่งบางอย่างในเวลาที่นาฬิกา PLL ไม่สามารถเริ่มต้นได้และสิ่งทั้งหมดจะทำงานด้วยความเร็ว 1 / 6th
หน้าทอน

@ หน้าทอนขอบคุณ น่าสนใจ ฉันเกลียดซีรี่ส์ M0 โดยสิ้นเชิง ดูเหมือนว่าชุด STM แต่ละชุดจะมีปัญหา
Roh

7

ข้อความที่คุณวางลงในคำถามจะให้คำตอบที่คุณต้องการ

  1. คุณใช้ IWDG เมื่อคุณต้องการจ้องจับผิดอย่างง่ายหรือเมื่อคุณต้องการจ้องจับผิดอิสระอย่างสมบูรณ์ - IWDG มีนาฬิกาของตัวเอง WWDG มาจากนาฬิกาของมันจากนาฬิการถบัสถ้ามันล้มเหลวหรือซอฟแวร์ของคุณปิดมัน
  2. คุณใช้ WWDG เมื่อคุณต้องการ watchdog ที่สามารถรีเซ็ตได้ภายในช่วงเวลาที่แน่นอน (หน้าต่าง) หากซอฟต์แวร์ของคุณรีเซ็ต WWDG ช้าเกินไป WWDG จะเดินทางไปรีเซ็ตโปรเซสเซอร์ หากซอฟต์แวร์ของคุณรีเซ็ต WWDG ด้วยเช่นกันจะทำให้รีเซ็ตโปรเซสเซอร์

มันถูกเรียกว่า "window watchdog" ด้วยเหตุผลง่ายๆว่า watchdog เท่านั้นที่รีเซ็ตในช่วงเวลาที่กำหนด (หน้าต่างของโอกาส) จะป้องกันไม่ให้ watchdog รีเซ็ตตัวประมวลผลของคุณ

ทั้งคู่ทำงานคล้ายกัน แต่ทำงานต่างกัน ซึ่งคุณต้องขึ้นอยู่กับข้อกำหนดที่คุณต้องปฏิบัติตาม


โปรดอ่านความคิดเห็นของฉันเพื่อ Spehro Pefhany
Roh

1
ตัวจับเวลาที่ WWDG ใช้นั้นสามารถตั้งโปรแกรมได้ - คุณสามารถเปลี่ยนอัตราผ่านทางซอฟต์แวร์ของคุณ หากซอฟต์แวร์ของคุณควบคุมไม่ได้และเปลี่ยนอัตรา APB1 หน้าต่างเวลาจะไม่ถูกต้องและ watchdog จะรีเซ็ตโปรเซสเซอร์ของคุณอย่างต่อเนื่อง - watcherog kicker ของคุณจะไม่ (หรือโดยบังเอิญ) เตะสุนัขในเวลาที่เหมาะสม โปรแกรมของคุณอาจปิดการใช้งานนาฬิกา APB1 หรือตัวจับเวลา WWDG ได้อย่างสมบูรณ์ซึ่งในกรณีนี้มันจะไม่รีเซ็ตโปรเซสเซอร์ของคุณ
JRE

5

มีเหตุผลอื่นที่ใช้การเฝ้าระวังหน้าต่างไม่ว่าจะแทนหรือหรือนอกเหนือจากการจ้องจับผิดอิสระ WWDG มีการขัดจังหวะคุณสามารถขอ ซึ่งหมายความว่าหากรหัสเข้าสู่ลูปหรือความทรงจำคุณสามารถตั้งค่าเบรกพอยต์ใน WWDG ISR และทำงานย้อนหลังเพื่อค้นหาว่าเฟิร์มแวร์ทำอะไรเมื่อสุนัขเห่า

คุณไม่สามารถทำได้ด้วย IWDG ตามชื่อที่แนะนำนั่นเป็นอิสระจากโปรเซสเซอร์ แทนที่จะเพิ่มการขัดจังหวะเพียงแค่ยืนยันและ deasserts / RESET - ซึ่งไม่ได้ให้เงื่อนงำมากมายกับคุณว่าทำไมเห่า ฉันขอแนะนำอย่างยิ่งให้ตั้งค่า WWDG ภายในพารามิเตอร์การดำเนินงานปกติของคุณรวมถึง IWDG ในระยะเวลานานกว่านั้นอาจมากที่สุด 2 * WWDG สร้างฟังก์ชั่นเตะสุนัขที่เตะทั้งคู่ ด้วยวิธีนี้ IWDG จะเห่าเมื่อ WWDG ล็อคเช่นกันเพื่อเป็นการสำรองข้อมูลครั้งสุดท้าย


1

ฉันใช้มัน:

ใช้ทั้งสองในเวลาเดียวกันเพราะพวกเขามองหาเงื่อนไขที่ล้มเหลวที่แตกต่างกัน:

อิสระ Watchdog (IWDG) จับเวลาความต้องการที่จะมีการตั้งค่าอย่างต่อเนื่องก่อนที่จะหมดเวลา ในทางปฏิบัติคุณสามารถเพิ่มรหัสรีเซ็ตได้ทุกที่ที่คุณมีสถานะโปรแกรมที่ถูกต้องหรือหนึ่งครั้งในลูปหลักหากคุณมีลูปหลักที่ควรรันบ่อยๆโดยไม่มีความล่าช้าหลัก ด้วยวิธีนี้หากการโทรของคุณเพื่อรีเซ็ตตัวจับเวลา (บางครั้งเรียกว่า "petting", "การจี้หรือเพียงแค่" รีเซ็ต "" สุนัขเฝ้าดู ") จะไม่เกิดขึ้นในเวลานั้นหมายความว่ารหัสของคุณA) ตั้งใจติด ที่ใดที่หนึ่งที่คุณไม่คาดคิด --- รัฐประเภทวงวนไม่สิ้นสุดที่คาดไม่ถึงหรือB) จงใจติดอยู่ที่ไหนสักแห่งที่คุณบังคับใช้ผ่านทางassert()การเรียกใช้ฟังก์ชันโดยมีวงวนไม่ จำกัด ที่ฝังอยู่ซึ่งคุณต้องการให้รหัสไปเมื่อใดก็ตามที่เงื่อนไขสำคัญบางอย่างไม่เป็นจริง ดังนั้นตอนนี้เงื่อนไขการยืนยันของคุณเป็นเท็จรหัสของคุณติดค้างอยู่ในวงวนไม่สิ้นสุดและจ้องจับผิดรีเซ็ตไมโครคอนโทรลเลอร์เพื่อให้มันกลับสู่สถานะที่ถูกต้อง โปรดสังเกตว่า "watchdog อิสระ (IWDG) ถูกโอเวอร์คล็อกด้วยนาฬิกาความเร็วต่ำเฉพาะของตัวเอง (LSI) และยังคงทำงานแม้ว่านาฬิกาหลักจะล้มเหลว" (ดูST RM0008 คู่มืออ้างอิง p493 )

สำหรับผมแล้วดูเหมือนว่าตัวจับเวลาของWindow Watchdog (WWDG)ได้รับการออกแบบมาเพื่อไม่มองหาเคสที่อธิบายข้างต้น (ที่รหัสของคุณโดยไม่ตั้งใจหรือตั้งใจ [ผ่านการยืนยัน] ทำให้ "ติดอยู่" ที่ใดที่หนึ่ง) ก)โค้ดของคุณไม่ได้ทำงานตามที่ควรจะเป็น กล่าวอีกนัยหนึ่งมันเป็นความผิดที่ทำให้เกิดการวนซ้ำหลักหรือส่วนย่อยอื่น ๆ ของรหัสในการดำเนินการเร็วเกินไป (หรือถูกข้ามไปอย่างสิ้นเชิง) ดังนั้นคุณจึงรีเซ็ต watchdog เร็วเกินไปนอกหน้าต่างและ mcu จะถูกรีเซ็ต หรือB)เงื่อนไขอื่น ๆ ที่สามารถสังเกตเห็นได้คือการตั้งค่าตัวจับเวลาที่ล้มเหลว บางทีคุณอาจรีเซ็ตมันตามช่วงเวลาที่กำหนด แต่ตัวจับเวลาของคุณที่ใช้ในการสร้างช่วงเวลานี้อาจได้รับการกำหนดค่าโดยไม่ตั้งใจโดยไม่ได้ตั้งใจหรือคุณกำหนดค่าผิดในครั้งแรกจากนั้นช่วงเวลาจะถูกปิด การรีเซ็ตช่วงเวลาจะรีเซ็ต WWDG นอกหน้าต่าง (ไม่ช้าหรือช้าเกินไป) และ mcu จะถูกรีเซ็ตเพื่อแจ้งให้คุณทราบและ / หรือแก้ไขเงื่อนไข

นี่คือสิ่งที่ฉันทำ ยินดีต้อนรับความคิดหรือข้อเสนอแนะ


0

สุนัขเฝ้าบ้าน "windowed" เป็นเพียงสุนัขเฝ้าบ้านปกติที่ปกป้องบางวิธีสำหรับการเขียนโปรแกรมที่เลวร้ายยิ่ง เช่นเดียวกับคนอื่น ๆ กล่าวว่าคุณมี "กรอบเวลา" ซึ่งมักจะปรับตำแหน่งที่ควรให้ "ฟีด" ของคุณ

ไม่มีสิ่งเหล่านี้เป็นหลักฐานแสดงหัวข้อถ้ารหัสของคุณสามารถป้อนในการวนซ้ำที่ยั่งยืนโดยอัตโนมัติ เช่น. หากคุณวางแผนที่จะ "ป้อน" ตาม IRQ ที่เกี่ยวข้องกับตัวจับเวลานี่อาจเป็นวิธีปฏิบัติที่แย่มากเนื่องจากรหัสของคุณอาจติดอยู่ในสิ่งที่ต้องทำ / ในขณะที่อยู่ในเธรดอีเมลในขณะที่การขัดจังหวะยังสามารถป้อน WWDT

ที่จริงแล้วคุณสามารถใช้อินเทอร์รัปต์เพื่อป้อน WWDT ถ้าคุณสามารถลดลำดับความสำคัญของ IRQ ภายใต้รหัสการดำเนินการตามปกติเหมือนที่คุณทำได้บน MIPS (Microchip)

หากรหัสของคุณคือการช่วยเหลือชีวิตสำคัญอย่างยิ่งเพียงทิ้งรหัสเหล่านั้นทั้งหมดแล้วใช้ WDT ภายนอก

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.