修改了下,做了一个定时器,定时去线程里面喂狗的。
结果一直erase的
涂鸦T5,硬件看门狗开发
-
- Posts: 41
Re: 涂鸦T5,硬件看门狗开发
- Attachments
-
- 硬件安了看门狗,升级一直重复erase.txt
- (218.46 KiB) Downloaded 11 times
Re: 涂鸦T5,硬件看门狗开发
你这个是在升级?这个是我们的升级过程。
-
- Posts: 41
Re: 涂鸦T5,硬件看门狗开发
1、我们安装了硬件看门狗,升级过程中一直重启,喂不了狗的,附件是log
2、升级过程中是进入其它什么模式?为什么喂狗不可以?
Re: 涂鸦T5,硬件看门狗开发
1、我们安装了硬件看门狗,升级过程中一直重启,喂不了狗的,附件是log
硬件看门狗的喂狗间隔默认多少时间?固件重启后,硬件看门狗的喂狗间隔是否会被重置为很短?
2、升级过程中是进入其它什么模式?为什么喂狗不可以?
升级下载时,SDK会持续喂狗的。但下载完成后会进入BOOT,而这个时候是不会喂狗的。因此在准备重启的时候(tkl-reset接口),请关闭硬件看门狗。
3、硬件看门狗需要在每次上电/重启时需要默认关闭,由SDK在初始化看门狗时再开启。
-
- Posts: 41
Re: 涂鸦T5,硬件看门狗开发
1、间隔1.6s,平时都没有问题的,都可以正常的,就是在升级的过程中,存在喂不了狗的,我们这个是外部独立看门狗的,没有关闭功能的。
2、这个T5芯片内部有硬件看门狗吧?芯片内部的看门狗是带有关闭功能的。
Re: 涂鸦T5,硬件看门狗开发
那这样的话,还是建议不要使用外部硬件看门狗电路了。
T5本身就有芯片级看门狗电路(可以开启与关闭,默认开启),可以达到同样效果的
-
- Posts: 41
Re: 涂鸦T5,硬件看门狗开发
T5本身就有芯片级看门狗电路-----------T5这是软件看门狗吧?有硬件看门狗?
Re: 涂鸦T5,硬件看门狗开发
T5内置的是硬件看门狗,专用的看门狗电路
-
- Posts: 41
Re: 涂鸦T5,硬件看门狗开发
1、app_main 中
static void __feed_wdg(void *arg)
{
#define WDT_TIME 30000
TUYA_WDOG_BASE_CFG_T cfg = {.interval_ms = WDT_TIME};
tkl_watchdog_init(&cfg);
Code: Select all
while (1) {
tkl_watchdog_refresh();
tkl_system_sleep(WDT_TIME / 2);
}
} 这个是博通的喂狗吧?是属于软狗吧?
2、tuya_devos_health里面有一个喂狗时间的设置,这个是软狗还是硬狗?
3、硬件看门狗在哪里?相关代码封装起来了是吧?
Re: 涂鸦T5,硬件看门狗开发
您好,
这里是喂狗操作,操作的硬狗,流程参考如下
tkl_watchdog_refresh ---> bk_wdt_feed ---> wdt_hal_init_wdt ---> wdt_ll_set_period
Code: Select all
static inline void wdt_ll_set_period(wdt_hw_t *hw, uint32_t period)
{
#if CONFIG_NMI_WDT_EN
uint32_t nmi_wdt_clk_div = sys_hal_nmi_wdt_get_clk_div();
uint32_t multi = 1;
switch(nmi_wdt_clk_div) {
case 0: //wdt_clk = src_clk/2
multi = 16;
break;
case 1: //wdt_clk = src_clk/4
multi = 8;
break;
case 2: //wdt_clk = src_clk/8
multi = 4;
break;
case 3: //wdt_clk = src_clk/16
multi = 2;
break;
default:
multi = 1;
break;
}
period = period * multi;
if (period > WDT_F_PERIOD_M) {
period = WDT_F_PERIOD_M;
}
#endif
hw->global_ctrl.soft_reset = 1;
uint32_t ctrl_val = (period & WDT_F_PERIOD_M) | (WDT_V_KEY_1ST << WDT_F_KEY_S);
REG_WRITE(WDT_R_CTRL, ctrl_val);
ctrl_val = (period & WDT_F_PERIOD_M) | (WDT_V_KEY_2ND << WDT_F_KEY_S);
REG_WRITE(WDT_R_CTRL, ctrl_val);
}
努力写bug……