독립 워치 독 (IWDG) 또는 윈도우 워치 독 (WWDG)?


15

여전히이 질문에 대한 답을 찾고 있습니다.

stm32 MCU에 완벽한 워치 독 (WWDG)이있는 동안 왜 간단한 워치 독 (IWDG)이 있습니까?

이 페이지를 찾았습니다 를 했다.

ST Microelectronics에는 Cortex-M3 장치 라인이 있습니다. M3는 저가형 임베디드 디바이스에 매우 인기가 있으며 ST의 STM32F는 이러한 부분을 대표합니다 (WDT는 ST 애드온이지만 다른 공급 업체의 구현을 반드시 반영하지는 않습니다). STM32F에는 두 가지 보호 메커니즘이 있습니다. "독립 워치 독 (Independent Watchdog)"은 바닐라 디자인으로 사용 편의성 외에는 거의 효과가 없습니다. 그러나 Window Watchdog은보다 강력한 보호 기능을 제공합니다. 카운트 다운 타이머가 만료되면 타이머를 다시로드하여 재설정 할 수있는 재설정이 생성됩니다. 특별한 것은 없습니다. 그러나 재로드가 너무 빨리 발생하면 시스템도 재설정됩니다. 이 경우 "너무 빨리"는 하나의 값이 제어 레지스터에 프로그램되는 값에 의해 결정됩니다.

또 다른 멋진 기능 : 재설정 직전에 인터럽트를 생성 할 수 있습니다. 인터럽트를 방해하는 코드를 작성하면 시스템을 안전한 상태로 두거나 디버깅 목적으로 데이터를 스냅 샷하는 등의 조치를 취할 수 있습니다. ST는 ISR을 사용하여 워치 독을 다시로드 할 것을 제안합니다. 즉, 재설정을 수행하지 않도록 개를 걷어차십시오. 충고하지 마십시오. 프로그램이 충돌하면 인터럽트 처리기가 계속 정상적으로 작동 할 수 있습니다. ISR을 사용하여 WDT를 다시로드하면 윈도우 워치 독의 전체 원인이 무효화됩니다.

그리고 이것 :

STMicroelectronics의 새로운 STM32F4 Cortex ™ -M4 CPU 시리즈에는 두 개의 독립적 워치 독이 있습니다. 하나는 자체 내부 RC 발진기에서 실행됩니다. 이는 모든 종류의 것들이 CPU에서 붕괴 될 수 있으며 WDT는 여전히 작동한다는 것을 의미합니다. 또한 코드를 자주 간질이기는하지만 너무 자주 간결하게하지 않는 "WWDT (window watchdog)"도 있습니다. 이것은 보호 메커니즘에 무작위로 쓰는 충돌 코드가 WDT 티클을 유발하지 않도록하고 WWDT가 재설정이 선언되기 직전에 인터럽트를 생성 할 수 있도록하는 매우 효과적인 방법입니다.

좋아, 참조 설명서를 살펴 보겠습니다 .

STM32F10xxx에는 2 개의 내장 워치 독 주변 장치가있어 높은 안전 수준, 타이밍 정확도 및 사용 유연성을 제공합니다. 워치 독 주변 장치 (독립 및 창)는 소프트웨어 오류로 인한 오작동을 감지 및 해결하고 카운터가 지정된 시간 초과 값에 도달하면 시스템 재설정 또는 인터럽트 (윈도우 워치 독 만)를 트리거하는 역할을합니다. 독립 워치 독 (IWDG)은 자체 전용 LSI (Low-Speed ​​Clock)에 의해 클럭킹되므로 메인 클럭이 실패하더라도 활성 상태를 유지합니다. WWDG (Window Watchdog) 클럭은 APB1 클럭에서 사전 조정되며 비정상적으로 늦거나 이른 애플리케이션 동작을 감지하도록 프로그래밍 할 수있는 구성 가능한 시간 창을 가지고 있습니다. IWDG는 워치 독이 주 응용 프로그램 외부에서 완전히 독립적 인 프로세스로 실행되어야하는 응용 프로그램에 가장 적합합니다. 타이밍 정확도 제한이 낮습니다. WWDG는 워치 독이 정확한 타이밍 창 내에서 반응해야하는 응용 분야에 가장 적합합니다.

윈도우 워치 독은 일반적으로 외부 간섭이나 예기치 않은 논리적 조건에 의해 생성되는 소프트웨어 결함의 발생을 감지하는 데 사용되며, 이로 인해 응용 프로그램이 정상적인 순서를 버립니다. T6 비트가 삭제되기 전에 프로그램이 다운 카운터의 내용을 새로 고치지 않으면 워치 독 회로는 프로그래밍 된 시간이 만료되면 MCU 리셋을 생성합니다. 다운 카운터가 창 레지스터 값에 도달하기 전에 (제어 레지스터의) 7 비트 다운 카운터 값이 새로 고쳐지면 MCU 재설정도 생성됩니다. 이는 제한된 창에서 카운터를 새로 고쳐야 함을 의미합니다.

보시다시피, 그들 중 아무도 두 개의 감시자가 . 두 워치 독의 차이점이 무엇인지 물어 보면, 위에서 볼 수있는 모든 기능을 세어보고이 둘을 비교하고 싶다면 분명히 윈도우 워치 독 (WWDG)이 승자가 될 것입니다! 그렇다면 왜 두 개의 감시자가 있습니까?

언제 IWDG를 사용해야하고 언제 WWDG를 사용해야하는지 알고 싶습니다.

왜 우리에게 이런 이름으로 "두 번째 시계를 호출합니까?"

답변:


23

일반 워치 독 타이머는 시간이 초과되기 전에 어느 시점에 재설정해야합니다. 100ms WDT가있는 경우 99.9ms 또는 10us마다 재설정 할 수 있으며 시간이 초과되지 않습니다.

창 감시 타이머에는 재설정해야하는 시간 창이 있습니다. 너무 일찍 또는 너무 늦게 재설정하면 (이전 재설정에서) 프로세서가 재설정됩니다.

명확하지 않은 경우, 목적은 WDT를 재설정하는 코드가 의도 된 방식으로 작동하도록 의도 된 코드가되도록하는 것입니다. 고주파 WDT 재설정을 발생시키는 예기치 않은 상황이 발생해도 시스템이 재설정되지 않습니다.

시스템 클럭에서 WDT를 실행하는 것은 약간 문제가 될 수 있습니다. 클럭이 실패하고 독립적 인 클럭 모니터 회로가없는 경우 나쁜 일이 발생할 수 있습니다. WDT의 독립 클럭은 어떤 이유로 든 1/10 속도로 실행하기 시작하면 WDT가 재설정되지만 WDT 창은 재설정되지 않음을 의미합니다.

가능하면 둘 다 사용하십시오 .

페이지에서 알 수 있듯이 ISR을 사용하여 WDT를 재설정하는 것은 일반적으로 나쁜 주주입니다 (그러나 ISR이 타이머를 재설정하기 전에 펌웨어 재설정이 작동하는지 확인하는 경우 허용 될 수 있습니다).


실제로 시스템 시계가 고장날 수 있습니까? 그럴 경우 이해할 수 있습니다. 따라서 WDT는 유용하지 않습니다. 맞습니까? 그렇다면 왜 걱정이 될까요?
Roh

1
독립적 인 WDT 클럭으로 MCU를 리셋 상태 (및 해당 상태)로 강제 설정하면 재난을 방지 할 수 있습니다. MCU 결정이 단락되면 초기에 심각한 사고가 발생했습니다 (BART, IIRC).
Spehro Pefhany

1
@ Roh : 실제로이 프로세서에서 절전 모드로 들어간 후 시스템 시계가 다시 돌아 오지 않는 것을 보았습니다 (MTM 인 STM32 F0). 특정 시간에 특정 작업을 수행하면 PLL 클럭이 시작되지 않을 수 있으며 모든 것이 1/6 속도로 실행됩니다.
나톤

@Nathon 감사합니다. 흥미 롭군 완전히 나는 M0 시리즈를 싫어한다. 각 STM 시리즈에 문제가있는 것처럼 들립니다.
Roh

7

질문에 붙여 넣은 텍스트는 필요한 답변을 제공합니다.

  1. 간단한 워치 독이 필요할 때 또는 완전히 독립적 인 워치 독이 필요할 때 IWDG를 사용합니다. IWDG에는 자체 시계가 있고 WWDG는 버스 시계 중 하나에서 시계를 파생합니다.
  2. 특정 시간 범위 (윈도우) 내에서만 재설정 할 수있는 워치 독이 필요할 때 WWDG를 사용합니다. 소프트웨어가 WWDG를 너무 늦게 재설정하면 WWDG가 프로세서 재설정을 트립합니다. 소프트웨어가 WWDG를 너무 일찍 재설정하면 프로세서도 재설정됩니다.

지정된 기간 (기회 기간) 동안 워치 독 재설정만으로 워치 독이 프로세서를 재설정하지 못하게하는 단순한 이유로 "윈도우 워치 독"이라고합니다.

둘 다 비슷한 작업을 수행하지만 다르게 수행합니다. 필요한 것은 충족해야하는 요구 사항에 따라 다릅니다.


Spehro Pefhany에 대한 의견을 읽으십시오.
Roh

1
WWDG가 사용하는 타이머는 프로그래밍이 가능합니다. 소프트웨어를 통해 속도를 변경할 수 있습니다. 소프트웨어가 제어 할 수없고 APB1 속도를 변경하면 시간 창이 잘못되고 워치 독이 프로세서를 지속적으로 재설정합니다. 워치 독 키커는 적시에 워치 독을 걷어 차지 않습니다. 프로그램에서 APB1 클럭 또는 WWDG 타이머를 완전히 비활성화 할 수도 있습니다.이 경우 프로세서를 재설정하지 않습니다.
JRE

5

윈도우 워치 독을 대신 또는 독립 워치 독과 함께 사용하는 또 다른 이유가 있습니다. WWDG에는 후크 할 수있는 인터럽트가 있습니다. 즉, 코드가 루프 또는 푸가에 들어간 경우 WWDG ISR에서 중단 점을 설정하고 개가 짖을 때 펌웨어가 수행 한 작업을 찾기 위해 거꾸로 작업 할 수 있습니다.

IWDG로는이 작업을 수행 할 수 없습니다. 이름에서 알 수 있듯이 이는 프로세서와 무관합니다. 인터럽트를 발생시키는 대신 단순히 / RESET을 단언하고 단언하기 때문에 왜 짖 었는지에 대한 많은 단서가 없습니다. 정상적인 작동 매개 변수 내에서 WWDG를 설정하고 훨씬 더 긴 기간에 IWDG를 설정하는 것이 좋습니다 .2 * WWDG 최대. 둘 다 발 차기 킥독 기능을 만듭니다. 이런 식으로 IWDG는 WWDG가 잠긴 경우에만 최종 백업으로 짖습니다.


1

내 생각 :

서로 다른 실패한 조건을 찾기 때문에 동시에 둘 다 사용하십시오.

독립 워치 독 (IWDG) 타이머 요구는 전에 계속 시간을 재설정합니다. 실제로 유효한 프로그램 상태가있는 모든 곳에서 또는 기본 지연없이 자주 실행되는 메인 루프가있는 경우 기본 루프에서 한 번만 리셋 코드를 추가 할 수 있습니다. 이런 식으로 타이머를 재설정하라는 호출 (이것은 때때로 "petting", "tickling 또는 단순히"watch dog "라고도 함)이 발생하지 않으면 코드가 A) 실수로 멈 췄음을 의미합니다. 예상치 못한 무한 루프 유형 상태, 또는 B) 의도적으로 어딘가에assert()중요한 조건이 때마다 코드가 전달되도록하는 무한 루프가 포함 된 함수 호출 ). 맞지 않을진실. 따라서 어설 션 조건이 거짓이므로 코드가 의도적으로 무한 루프에 빠지고 워치 독이 마이크로 컨트롤러를 재설정하여 유효한 상태로 되돌립니다. "독립 워치 독 (IWDG)은 자체 전용 LSI (Low-Speed ​​Clock)에 의해 클럭킹되므로 메인 클럭이 실패하더라도 활성 상태를 유지합니다"( ST RM0008 참조 매뉴얼 p493 참조)

그러나 WWDG (Window Watchdog) 타이머 는 위에서 설명한 사례 (어쨌든 의도하지 않은 또는 의도적으로 [어설 션을 통해]가 어딘가에서 "고착 된")를 찾지 않도록 설계된 것으로 보입니다. A) 코드가 실행 해야하는 것을 수행하지 않습니다 . 즉, 메인 루프 나 다른 코드 하위 섹션이 너무 빨리 실행되거나 완전히 건너 뛰는 결함이있어 워치 독을 창 밖에서 너무 빨리 재설정하면 mcu가 재설정됩니다. 또는, B)발견 할 수있는 다른 조건은 실패한 타이머 설정입니다. 어쩌면 고정 간격으로 재설정하고 있지만이 간격을 만드는 데 사용 된 타이머는 실수로 구성하지 않아야 할 위치에서 실수로 구성을 변경하거나 처음부터 잘못 구성 한 다음 시간 간격이 해제되어 고정됩니다. 시간 간격 재설정은 WWDG를 창 밖으로 재설정합니다 (너무 빠르거나 너무 늦음). mcu가 재설정하여 사용자에게 알리거나 상태를 수정합니다.

이게 내 취향이야 생각이나 의견을 환영합니다.


0

"windowed"워치 독은 더 나쁜 프로그래밍 방법을 보호하는 일반적인 워치 독입니다. 다른 사람들이 말했듯이 일반적으로 "피드"를 공급할 위치를 조정할 수있는 "시간 프레임"이 있습니다.

코드가 자동 서스테인 루프에 입력 될 수 있다면 방탄은 없습니다. 예 : 타이머 관련 IRQ를 기반으로 "피드"하려는 경우, 코드 스레드가 메일 스레드의 일부 / 중간에 멈출 수 있고 인터럽트가 여전히 WWDT에 올바른 순서로 공급 될 수 있기 때문에 이는 매우 나쁜 습관입니다.

실제로 MIPS (Microchip)에서와 같이 정상적인 실행 코드 에서 IRQ 우선 순위를 낮출 수있는 경우 인터럽트를 사용하여 WWDT를 공급할 수 있습니다 .

코드가 생명 유지, 중요 등이라면 코드를 모두 삭제하고 외부 WDT (Q & A 기반 선호)를 사용하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.