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
Initialization - Call bk_wdt_driver_init() before any WDT operations - Set timeout: bk_wdt_start(timeout_ms) - Regular feeding: bk_wdt_feed()
Basic Operations - Start: bk_wdt_start(timeout_ms) - Stop: bk_wdt_stop() - Feed: bk_wdt_feed() - Time management: bk_wdt_set_feed_time()
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()
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