🌱 Watchdog Timer trong hệ thống nhúng

🌱 Watchdog Timer trong hệ thống nhúng

    Watchdog là khái niệm rất quen thuộc khi lập trình nhúng / vi điều khiển, tuy nhiên lại ít được sử dụng khi các bạn học tập về vi điều khiển, vì nó liên quan đến phần safety mà chỉ sử dụng trong các ứng dụng thực tế.

    Watchdog Timer (WDT) là một bộ ngoại vi timer của vi điều khiển, mục tiêu để giám sát hoạt động của vi điều khiển xem nó có bị treo / ngừng hoạt động hay không.

    Trong các tài liệu phổ thông có thể bạn đọc đã nghe về Watchdog với chức năng chống treo chương trình. Trên thực tế thì đó chỉ là chức năng chính và cơ bản nhất của một bộ Watchdog, vì vậy bài viết này mong muốn gửi đến bạn đọc cái nhìn tổng quan nhất về các loại và các cơ chế hoạt động của Watchdog.

    ➤ Hoạt động cơ bản của Watchdog

Watchdog Overview

    Về cấu tạo và cơ chế hoạt động của Watchdog cũng khá đơn giản, thành phần chính là một bộ đếm timer để đếm khoảng thời gian cần giám sát. Nguồn cấp clock cho bộ đếm này thường tách biệt với nguồn clock dành cho CPU.

Watchdog Timer Diagram
Sơ đồ khối Watchdog Timer
    Hoạt động chung của Watchdog là phát hiện lỗi và đưa ra các phản ứng (behaviour) cho hệ thống (điển hình nhất là reset như các dòng chip phổ biến).

    👉 Nguồn cấp Clock cho Watchdog

    Như hình trên, nguồn cấp clock cho Watchdog thường là một nguồn clock nội riêng, khác với nguồn cấp clock cho core. Mục tiêu là để tránh lỗi mất core clock, lúc này thì Watchdog vẫn sẽ hoạt động và phát hiện được lỗi.

    Tuy nhiên, một số dòng chip mới đã tích hợp sẵn các bộ ngoại vi để phát hiện mất clock riêng (ví dụ CMU - Clock Monitoring Unit trong một số chip của NXP, OFD - Oscillation Frequency Detector trong một số chip của Toshiba). Vì vậy, Watchdog có thể sử dụng chung các clock chung nhánh với core như những ngoại vi khác.

    👉 Hoạt động chính của Watchdog

    Các bộ Watchdog sẽ cho phép người lập trình cấu hình thời gian timeout tương ứng. Khi chương trình bật Watchdog, timer sẽ bắt đầu chạy, chạy hết thời gian đã cấu hình thì timer tràn và Watchdog sẽ đưa đưa ra các phản ứng cho hệ thống. Vì vậy, cách sử dụng Watchdog thông dụng nhất chính là đặt đoạn code cần protect ở sau phần Enable Watchdog, và kết thúc bởi phần Clear Watchdog.

Watchdog Timer Normal Flow
Hoạt động cơ bản của Watchdog

  • Nếu đoạn code (Safety Code) thực thi xong trước thời gian cấu hình, thì chương trình sẽ Clear Watchdog và tiếp tục hoạt động bình thường.
  • Nếu có vấn đề xảy ra (nhiễu, mất clock, ...) khiến cho đoạn code không thể thực hiện xong trong thời gian cấu hình, đồng nghĩa CPU không thể clear watchdog, WDT sẽ timeout và đưa ra các behaviour về hệ thống.

    👉 Các behaviour của Watchdog về hệ thống

    Đối với những con chip mình từng làm việc, một số phản ứng chính của Watchdog:

    🔻 Watchdog Reset

    Phổ biến nhất chắc chắn là Reset. Đối với các dòng chip đơn giản (AVR, PIC, STM32, ...) thì Watchdog sẽ trigger một tín hiệu reset để vi điều khiển chạy lại từ đầu.

    Tuy nhiên, phương án này sẽ chỉ giải quyết được một số vấn đề đơn giản bằng cách reset lại phần mềm chứ không phân tích hay giải quyết các lỗi gây ra. Vì vậy, behaviour này sử dụng trong các trường hợp như lỗi liên quan đến bộ nhớ RAM, nhiễu tín hiệu truyền thông, hẹn giờ reset hệ thống, ...

    Phương án bên dưới sẽ cho hệ thống "cơ hội để sửa sai", chứ không vội vàng reset. Việc này nhằm mục đích giúp MCU có thể phân tích, xử lý được lỗi, hoặc check lỗi là gì sau đó lưu vào các bộ nhớ NVM trước khi reset.

    🔻 Interrupt / NMI

    Một số dòng chip thiết kế Watchdog để có thể cấu hình trigger một Interrupt hoặc NMI Handler (Vì NMI là một exception được thiết kế để nhận tín hiệu trigger từ các bộ ngoại vi).

    Trong WDT_ISR hoặc NMI_ISR, dev có thể clear watchdog và xử lý các cờ lỗi tương ứng (cái này tùy vào yêu cầu và thiết kế chương trình).

    🔻 FCCU - Fault Collection and Control Unit

    FCCU là một module phục vụ cho Safety, với mục đích tổng hợp các lỗi của chương trình MCU và đưa ra các reaction tương ứng. FCCU được thiết kế trong một số dòng chip sinh ra để đáp ứng tiêu chuẩn safety ISO26262 cho Automotive (Một số chip của NXP - S32Gx / S32K3 / ..., ST chip - SPC584B / SPC56EL60x / RPC56EL60x).

    Một số dòng chip sẽ thiết kế để Watchdog có thể cấu hình gửi tín hiệu về FCCU khi timeout, sau đó reaction đưa ra là gì (reset, xử lý lỗi, ...) sẽ phụ thuộc vào cấu hình của FCCU. Về cơ bản, mục tiêu vẫn giống trường hợp Interrupt hay NMI ở trên, để phân tích, lưu trữ, xử lý lỗi.

    ➤ Chế độ hoạt động của Watchdog

    🔻 Timeout Mode / or Independent Watchdog

    Timeout Mode là chế độ hoạt động đơn giản và thường gặp nhất của Watchdog, với việc phát hiện timer bị timeout khi đếm hết và dev có thể clear watchdog ở bất kể thời điểm nào.

Watchdog Timer Timeout Mode
Watchdog Timer Timeout Mode

    ➥ Một ví dụ lập trình Watchdog Timeout Mode trên vi điều khiển ATMega16/ATMega32

    🔻 Watchdog Window Mode <Chế độ cửa sổ>

    Window Mode <Chế độ cửa sổ> là chế độ hoạt động mà Watchdog sẽ chỉ xác định một khoảng thời gian nhất định để chương trình clear watchdog. Tức là watchdog sẽ detect lỗi và đưa ra behaviour nếu nó không được clear trong khoảng thời gian đã đặt, hoặc nhận được nhiều tín hiệu trong khoảng thời gian này.

Watchdog Timer Window Mode
Watchdog Timer Window Mode
    Ví dụ như trong hình khoảng thời gian đặt là từ 2 phút đến 5 phút. Nếu như không nhận được tín hiệu clear watchdog trong khoảng thời gian này, nó sẽ detect là lỗi, timer tràn và gửi behaviour đến hệ thống.

    Vì vậy, mức độ tin cậy của Window Mode là cao hơn so với Timeout Mode và nó thường được sử dụng trong các ứng dụng Automotive Safety.

    🔻 Q&A (Question & Answer) mode

Watchdog Timer Question and Answer Mode
Watchdog Timer Question and Answer Mode
    Khác với hai chế độ trên chỉ sử dụng tín hiệu clear watchdog, Q&A Watchdog sử dụng cách truyền tin giữa Watchdog và MCU. Trước khi hoạt động, MCU sẽ gửi một data đến Watchdog được gọi là predetermined data. Sau đó, thay vì clear watchdog, MCU sẽ gửi lại bản tin này qua Watchdog để xác nhận hoạt động bình thường.

    Do đó cơ chế này có độ tin cậy cao hơn hai mode trên, nhưng đổi lại yêu cầu phức tạp hơn cả về thiết kế phần cứng lẫn phần mềm nên rất ít được sử dụng.

    ➤ External Watchdog

    Sử dụng External Watchdog là một ý tưởng hay nếu bạn triển khai một số ứng dụng quan trọng. Vì bản thân các bộ Watchdog nội dùng để giám sát MCU lại nằm trong MCU, nên nếu có vấn đề gì đó xảy ra - chẳng hạn như clock cấp cho Watchdog có vấn đề hoặc bản thân Watchdog nội có vấn đề, thì việc đảm bảo an toàn cho hệ thống sẽ được đảm nhận bởi External Watchdog.

External Watchdog IC
Sơ đồ khối kết nối External Watchdog MAX67xx với vi điều khiển
    Hoạt động của External WDT cũng tương tự như internal WDT, chỉ thay thế việc clear Watchdog bằng một chân IO từ vi điều khiển gửi tới Watchdog IC.

    Có rất nhiều IC hỗ trợ Watchdog, thường nó kết hợp với các chức năng khác như giám sát nguồn: MAX67xx của Analog Device, TPS34xx của TI, PMIC của NXP, ...

>>>= Follow ngay =<<<

Để nhận được những bài học miễn phí mới nhất nhé 😊

Chúc các bạn học tập tốt 😊

          

Nguyễn Văn Nghĩa

Mình là một người thích học hỏi và chia sẻ các kiến thức về Nhúng IOT.

Đăng nhận xét

Mới hơn Cũ hơn