Watchdog timer là gì? Được dùng để làm gì và cách hoạt động

Watchdog timer (WDT) là bộ phận quan trọng giúp chúng ta theo dõi các chương trình đang chạy trong vi điều khiển, để biết chúng đang hoạt động bình thường hay bị ngừng hoạt động đột xuất không. Hiểu đơn giản, đây giống như là một bộ phận giám sát hoạt động của vi điều khiển.

Vi điều khiển (MCU) là gì? Đây là một chip nhỏ gọn hỗ trợ điều khiển những thiết bị điện tử khác. Chúng có sẵn các phần mềm và chương trình sẵn có phục vụ cho việc lập trình, điều khiển thiết bị khác. Nhờ có Watchdog timer, chúng ta có thể dễ dàng khắc phục các tình trạng như treo chip.

Giải nghĩa Watchdog timer là gì

Mình sẽ giải thích ý nghĩa từng bộ phận trong cụm từ “Watchdog timer” nha! Timer ở đây là bộ đếm, thường là đếm các xung nhịp (xung clock) mà bất kỳ thiết bị ngoại vi phổ biến nào cũng có. Bạn có thể cấu hình thời gian hoạt động Timer theo nhu cầu, trong khoảng thời gian đó thì hệ thống sẽ thực hiện một nhiệm vụ nào đó do bạn đặt ra.

Hiểu theo nghĩa này, Watchdog timer là bộ đếm clock hoạt động liên tục trong khoảng thời gian xác định, nhằm thực hiện một nhiệm vụ cụ thể. Sau khoảng thời gian này, hệ thống sẽ reset thiết bị, gửi thông tin cảnh bảo,… tùy yêu cầu của bạn. Bộ đếm sẽ liên tục được reset về 0 và đếm tiếp.

Watchdog timer cung cấp khả năng hoạt động độc lập với chip CPU của hệ thống, chúng có thể đếm tăng hoặc đếm giảm tùy theo từng loại chip bạn dùng.

Các chế độ phát hiện lỗi trong MCU của Watchdog timer

Cơ quan giám sát Watchdog timer sẽ giao tiếp với MCU theo một khoảng thời gian mà bạn cấu hình. Khi đó, nếu MCU không gửi tín hiệu, gửi quá nhiều tín hiệu hoặc gửi tín hiệu sai so với mẫu trước đó, cơ quan giám sát WDT sẽ hiểu là MCU đang gặp vấn đề và gửi tín hiệu reset mạch về cho MCU:

Cách hoạt động của Watchdog timer - Phát hiện lỗi
Cách hoạt động của Watchdog timer – Phát hiện lỗi

Chế độ Time-out (hết thời gian)

Ở chế độ này, cơ quan giám sát WDT không nhận được tín hiệu từ MCU trong thời gian đã định:

Chế độ time out của Watchdog timer
Chế độ time out của Watchdog timer

Đây là phương pháp chính trong cơ quan WDT, nhưng đôi khi WDT không phát hiện được lỗi từ MCU qua phương pháp này, ví dụ như trong trường hợp MCU gửi quá nhiều tín hiệu hoặc gửi sai tín hiệu trong thời gian xác định.

Chế độ cửa sổ

Chế độ này cho phép Watchdog timer phát hiện được lỗi chính xác hơn, phù hợp cho các ứng dụng có nhu cầu giám sát cao hơn:

Chế độ Q&A

Đây là chế độ cuối cùng, cho phép Watchdog timer phát hiện lỗi chính xác hơn cả 2 phương pháp trước đó.

Cụ thể, MCU sẽ gửi tín hiệu đến WDT. Lúc này, WDT sẽ xác thực xem thông tin mà MCU gửi đến có giống với mẫu thông tin đã định trước đó hay không. Tuy nhiên, vì việc này cần phải giao tiếp dữ liệu giữa Watchdog timer và MCU, cũng như phải có cơ chế xác định thông tin đúng sai,… nên hoạt động của chúng sẽ phức tạp hơn.

Chế độ Q & A của Watchdog timer
Chế độ Q & A của Watchdog timer

Các ứng dụng của cơ quan giám sát WDT

Hiện nay, MCU đang được sử dụng trong đa số các thiết bị điện tử. Tuy nhiên, không phải bất kỳ thiết bị nào cũng cần dùng đến WDT. Chúng ta chỉ cần dùng công cụ này cho các thiết bị hoặc ứng dụng có nhu cầu về mức độ an toàn cao.

Ví dụ, các thiết bị như xe ô tô nếu gặp phải lỗi nhỏ trong MCU thôi cũng sẽ gây ra những nguy hiểm lớn liên quan tới tính mạng con người. Hoặc trong các loại thiết bị như máy nước nóng, bếp điện từ,… việc MCU gặp lỗi có thể dẫn tới cháy nổ, hỏa hoạn. Do đó, trong các trường hợp này, chúng ta cần có cơ quan giám sát nâng cao hiệu quả.

Tổng kết lại, những hệ thống điện tử trong đời sống sinh hoạt hoặc các thiết bị có khả năng gây ra sự cố, ảnh hưởng nghiêm trọng tới đời sống con người cần có Watchdog timer để giám sát liên tục, đảm bảo an toàn.

Cách dùng Watchdog timer

Như mình đã trình bày ở nội dung bên trên, WDT sẽ đếm theo thời gian và thực hiện hành động cụ thể. Giả sử như bạn muốn dùng Watchdog timer đếm đến 50, nếu tới 50 thì sẽ tiến hành reset chip, bạn cần phải:

  • Sử dụng hàm để nạp lại giá trị 0 trong vòng lặp, để WDT có thể đếm lại từ 0 chứ không đếm tới 50 trong trạng thái chip bình thường.
  • Khi chương trình bị treo thì WDT không thể đếm lại từ 0 như trong vòng lặp. Lúc đó, chúng sẽ tăng tới 50 và reset chip.

Dưới đây là đoạn code mẫu, bạn tham khảo ứng dụng thử nhé:

void main()
{
watchdog_init(); // Khởi tạo watchdog timer
while(1)
{
//do something here :))
watchdog_reload(); // nạp lại giá trị cho watchdog
}
}

Tuy nhiên, Watchdog timer cũng chỉ là một phần nhỏ để dự phòng thôi, nên điều quan trọng là bạn cần phải chọn phần cứng ổn định, thật chuẩn chỉnh có độ chống nhiễu tốt để tránh việc MCU bị lỗi nhé. Ngoài ra, chúng ta cũng nên chú ý về các vòng lặp mà mình đã sử dụng trong chương trình. 

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *