임베디드를 다루다보면 시스템 적인 문제로 또는 프로그램의 오류로 중단 상태에 빠지거나 무한 루프에 빠질 때가 있다. 이런 경우 스스로 살아날 수가 없고 계속 멈춰있기 때문에 다시 살릴 수 있는 방법을 찾아보다가 WDT (Watchdog) 라는 것을 알게 됐다.
와치독(워치독) / WDT / Watchdog 이란?
컴퓨터의 오작동을 탐지하고 복구하기 위해 쓰이는 전자 타이머라고 한다. 정상 작동 중의 컴퓨터는 시간이 경과하거나 타임아웃이 되는 것을 막기 위해 정기적으로 와치독 타이머를 재가동 시킨다. 즉, 일정 시간 동안 시스템을 감시하다가 시스템을 리셋하는 기능을 뜻한다.
Watchdog 와치독은 집을 지킨다는 뜻을 내포하고 있는 단어의 조합이다. 개에게 밥을 주지 않는다면 그 밥을 주는 프로그램을 맡고 있는 프로세스를 개라는 타이머가 물어버린다 라고 생각하면 쉬울 것이다.
만약, 하드웨어의 결함 또는 프로그램 오류로 인해 컴퓨터가 와치독을 재가동하는 데 실패하면 타이머가 시간을 두고 타임아웃 신호를 생성한다. 이 타임아웃 신호는 일반적으로 컴퓨터 시스템을 안전한 상태로 유지하는 것과 정상적인 시스템 작동으로 원상복귀 시키는 조치를 취하는데 쓰인다.
왜 와치독을 사용하는가? 사용하는 이유는?
많은 임베디드 시스템들은 사람이 재부팅해주는 것에만 의존할 수가 없고, 이 임베디드 시스템들은 반드시 자립적이어야할 필요가 있다.
예를 들어, 우주 탐사기와 같은 원격 임베디드 시스템은 운영자가 물리적으로 접근할 수 없다. 만일 그 원격 임베디드 시스템이 자동으로 오류들을 복구할 수 없다면 아마 영구적으로 손상될 가능성이 있다. 이러한 경우에 와치독을 사용한다고 한다.
와치독 구성도
- Clock : 하드웨어 디바이스를 동작시키는 외부 Clock Source
- Clear ( Restart / Kick ) : 하드웨어 디바이스가 정상적으로 동작함을 알려주는 주기적 Alive 신호
- Timeout : 타이머가 종료되었음을 알려주는 출력 신호
- Reset : 하드웨어 디바이스를 초기화 할 수 있는 입력 신호
와치독 동작 : Detection of MCU Fault
와치독은 설정된 주기로 MCU와 통신한다. MCU가 신호를 출력하지 않거나, 너무 많은 신호를 출력하거나 또는 정해진 패턴과는 다른 신호를 출력하게 되면 와치독은 MCU가 오작동하는 것으로 판단하고 MCU에 리셋 신호를 보내게 된다.
※여기서 MCU란 ?
Micro Controller Unit의 약자이며, 일반적으로 마이크로컨트롤러라고 불린다.
마이크로 프로세서와 메모리, 프로그램 가능한 입출력 모듈을 하나의 칩으로 만들었고, 프로그래밍을 통해 다양한 제어나 연산 작업이 가능하다. 그래서 회로나 LED, 모터 등을 제어할 수 있고 LCD에 글씨를 쓸 수도 있다.
예를 들어 우리가 생각하는 TV, 냉장고, 세탁기 등 대부분의 가전제품에 이 MCU가 들어간다고 생각하면 된다.
와치독 모드
타임아웃 모드 (Timeout Mode)
와치독은 MCU가 설정된 주기 안에 MCU로부터 신호를 받지 못하면 MCU가 오작동하는 것으로 판단하고 리셋 신호를 출력한다.
타임아웃 모드에서 와치독은 MCU가 설정된 주기에 이중 펄스를 입력하면 MCU 오류를 감지하지 않는다. 그래서 각각의 입력 신호가 타임 아웃 주기를 재설정하므로 와치독은 짧은 주기 안에 MCU에서 신호가 입력되더라도 MCU가 정상적으로 동작하는 것으로 판단하게 된다.
주요 사용하는 와치독 모드이지만, 가끔 MCU 오류를 감지하지 못한다.
윈도우 모드 (Window Mode)
윈도우 모드는 타임아웃 모드보다 오류를 더 정확하게 감지할 수 있다.
윈도우 모드에서 와치독은 MCU로부터 신호를 받지 못하거나, 설정된 주기 내에서 MCU로부터 이중 펄스를 받으면 MCU가 오작동하는 것으로 판단하고 리셋 신호를 출력한다.
그래서 윈도우 모드는 높은 안전성이 요구되는 automotive 디바이스와 같은 애플리케이션에 더 적합할 수 있다.
Q&A 모드 (Q&A Mode)
Q&A 모드는 이전 두 모드보다 더 정확한 결함 감지가 가능하다.
Q&A 모드에서 MCU는 미리 결정된 데이터를 와치독한테 보낸다. 와치독은 MCU에게 받은 신호가 미리 정해진 데이터와 일치하는지 여부에 따라 MCU가 정상 동작하는지 판단한다.
높은 수준의 안전성이 필요한 장치에는 Q&A 모드를 필요로 할 수 있으나 윈도우 모드 및 타임아웃 모드와 달리 MCU와 와치독 간 데이터 통신에 의존하므로 작동이 더 복잡해질 수 있다.
와치독이 필요한 응용 프로그램과 마찬가지로 일부 상황에서는 구현에 필요하거나 필요한 것으로 간주되는 안전 수준을 제공하기 위해 와치독 사용이 필요할 수가 있다.
전자 장치에 요구되는 안전, 특히 자동차 분야에서는 더욱 엄격해지고 있는 것 같다. 예를 들어 타임아웃 모드가 와치독 표준이었던 디바이스 모델은 현재 윈도우 모드로 대체되고 있다.
'프로그래밍 > Keil RTX' 카테고리의 다른 글
[C/Keil RTX] CAN 통신 (22) | 2023.01.03 |
---|---|
[C/RL-ARM KEIL] event 처리 구현 (60) | 2022.12.28 |
[C/RL-ARM KEIL] thread 대신 os_tsk_create 사용하기 (1) | 2022.12.01 |
[C/RL-ARM KEIL] 포인터 사용하기 (malloc 대체) (0) | 2022.12.01 |
[C/Keil RTX] GPIO INPUT 이벤트 처리 (IRQHandler) (0) | 2022.12.01 |
댓글