WDG Driver

[中文]

Overview

WDG (Watchdog) driver provides system monitoring and automatic reset functionality to ensure system reliability.

Functional Description

  • Watchdog timer with configurable timeout

  • Automatic system reset on timeout

  • Feed functionality to prevent reset

  • Start/stop control

  • Feed time management

  • Status monitoring

  • Low power mode support

Development Guide

  1. Initialization - Call bk_wdt_driver_init() before any WDT operations - Set timeout: bk_wdt_start(timeout_ms) - Regular feeding: bk_wdt_feed()

  2. Basic Operations - Start: bk_wdt_start(timeout_ms) - Stop: bk_wdt_stop() - Feed: bk_wdt_feed() - Time management: bk_wdt_set_feed_time()

  3. Feed Management - Set feed interval: bk_wdt_set_feed_time() - Regular feeding in main loop or task - Monitor feed time: bk_wdt_get_feed_time()

  4. Status Monitoring - Check driver status: bk_wdt_driver_inited() - Monitor watchdog state

Notes

  • Feed time must be less than timeout

  • Don’t feed in interrupt context

  • Consider watchdog reset side effects

  • System resets watchdog state after reset

API Reference

  • bk_wdt_driver_init/deinit() - Driver management

  • bk_wdt_start/stop() - Control operations

  • bk_wdt_feed() - Feed watchdog

  • bk_wdt_get/set_feed_time() - Feed time management

  • bk_wdt_driver_inited() - Status check

Examples

Basic watchdog usage:

bk_wdt_driver_init();
bk_wdt_start(5000);  // 5 second timeout

while (1) {
    // Application logic
    // ...

    bk_wdt_feed();
    rtos_delay_milliseconds(1000);
}

Feed time management:

bk_wdt_start(10000);  // 10 second timeout
bk_wdt_set_feed_time(5000);  // Feed every 5 seconds

uint32_t feed_time = bk_wdt_get_feed_time();
printf("Feed time: %d ms\n", feed_time);

Task-based feeding:

static void wdt_task(void *arg) {
    while (1) {
        bk_wdt_feed();
        rtos_delay_milliseconds(1000);
    }
}

bk_wdt_driver_init();
bk_wdt_start(3000);
rtos_create_thread(NULL, 5, "wdt", wdt_task, 1024, NULL);

Status monitoring:

if (bk_wdt_driver_inited()) {
    printf("WDT driver initialized\n");
}

bk_wdt_start(8000);
bk_wdt_set_feed_time(3000);

uint32_t feed_time = bk_wdt_get_feed_time();
printf("Current feed time: %d ms\n", feed_time);

FAQs

  • Frequent resets: Check feed time and frequency

  • Watchdog not working: Verify driver initialization

  • Feed failure: Check API call sequence

Error Codes

  • BK_ERR_WDT_DRIVER_NOT_INIT: Driver not initialized

  • BK_ERR_WDT_INVALID_PERIOD: Invalid timeout period