【已解决】MT7688的硬件看门狗watchdog玩法
-
对于无人系统来说,看门狗很重要
-
是啊,watchdog timer验证了么?
-
@wdlhpw 最晚周一出来。:art:
-
Watchdog 首先在16MB+128MB上验证了(暂不适用32+128的情况),如下:
这里涉及到的寄存器,请查询7688手册1.4版本的69页 http://wiki.widora.cn/_media/mt7688_datasheet_v1_4.pdf 。
首先,enable_watchdog.sh脚本:#!/bin/sh reg w 10000120 0x03e80000 reg w 10000124 0x7d0 reg w 10000120 0x03e80090
第一句是设置分频系数,系统默认是1us,也就是1M,此处3e8是分频到千分之一,也就是1ms。
第二句是这是看门狗的初始值,7d0是2000。看门狗是个减法计时器,减到0发起系统复位。所以此出意义是2秒。
第三局是启动看门狗。上述脚本运行后,如果什么都不做,2秒后系统会重启。所以要想保证系统持续运行,必须有喂狗脚本eat_watchdog.sh,如下:
#!/bin/sh reg w 10000100 0x0200 reg w 10000120 0x03e80090
10000100寄存器的BIT9是控制看门狗的计数器回归到初始值(7d0),这里好像有个小bug,喂狗后,10000120处的寄存器会被清零,很奇怪,故多增加了一句喂狗后重新启动开门狗。
因32+128的版本FLASH模式复位后需要从4Byte地址切换回3Byte地址,看门狗部分不能通过系统内复位,需要利用WDT_RST_N引脚来操作系统复位引脚,我稍后会给出那个的操作步骤。
-
好的,我先验证下16M的吧。
-
16M的验证过了,32M的只需要外接硬件连线把WDT_RST_N接到RST就行了,是么?
-
@wdlhpw 我看一下吧,需要借助WDT_RST_N,但前提是寄存器得设置好,让看门狗时间到了后输出有效的低电平去复位芯片
-
-
32M的验证了么?方法是什么样的?
-
@mango , 32M的直接连接的话,打开看门狗后不喂狗,2s后系统就down了,也不重启。那个低电平好像 最多4ms,不足以复位系统。
-
@wdlhpw 我确认一下这个事情!
-
我的是16M的BIT4.0
我把时间改为10s (0x2710=10000)我的脚本是这样的
root@GZXCY:~# cat /bin/enable_wd.sh
#!/bin/sh
reg w 10000120 0x03e80000
reg w 10000124 0x2710
reg w 10000120 0x03e80090
我执行了这个脚本没有执行喂狗的脚本。
但是发现系统不会重新启动呢?
-
@mango 你有遇到这个问题吗?
-
更新一下脚本(此脚本不直接发起系统复位,针对32MB Winbond芯片情况,通过WDT引脚(WPS)输出低电平):
初始化看门狗:#!/bin/sh ## start reg w 10000120 0x3e80010 reg r 10000120 ## set timeout reg w 10000124 0x17d0 reg r 10000124 reg w 10000100 0x0202 reg r 10000100 ## enable reg w 10000120 0x3e80090 reg r 10000120 ## WDT PIN reg w 10000038 0x7fff0302 reg w 10000060 0x50005
喂狗(一旦喂狗就要一直喂下去,间隔1秒执行一次):
#!/bin/sh while true do ## ping reg w 10000100 0x0202 reg w 10000120 0x3e80090 sleep 1 done
经过测试,设置延时太长了不起作用,暂未找到原因。
另外,WDT引脚低电平时间过短,最长可能也就16ms,所以外部需要复位IC参与了,购买了MAX811S在路上。
还测试出,不知道是不是看门狗有BUG! WDT计数器无规律停止,每次初始化后,一般能跑1-2秒左右就无规律停止,计数下降到0才会触发复位。
拍摄视频:0_1522461978279_QQ20180331-100252.mp4
-
时间长了真的不行,芯片有bug?
-
@xinlan 我再查查。
-
@xinlan 找到问题了,之前的固件系统procd里其实在也在操作看门狗,自己偷懒用脚本重新设置了看门狗寄存器,这样子存在干扰。
dts中关闭系统看门狗,mt7628an.dtsi里,看门狗部分加一条:status = "disabled";
后再测试,一切正常。爽!!!!!!!
0_1522656071300_WeChatSight33.mp4
-
这个看门狗的时间设计多少合适呢?
-
@xinlan 这个没有确定之,看你具体APP的设计允许多长时间无响应。
-
标准的看门狗用法:
https://wiki.widora.io/zh/watchdog
修复看门狗的锅(OP官方把寄存器搞错了我勒个擦擦):
https://github.com/widora/openwrt_widora/commit/dc84f8bd09e0f3505ffb0adf3b85229b2e9bc7d4
-
我有遇到watchdog無法工作的問題, 根據mango的作法, 我的修改:
#!/bin/sh
# 若是開機時, 系統程序沒有做清除WDTRST這個動作, watchdog就不會動作, 需補做.
# 第一次設定10000100, 需用reg s 0
reg s 0
reg w 100 0x200reg w 10000120 0x03e80000
reg w 10000124 0x2710
reg w 10000120 0x03e80090sleep 1
while true
do
reg w 10000100 0x0200
#reg w 10000120 0x3e80090 (我的環境可以自動啟動)
sleep 5
done
-
@big-j 后续还是建议让系统procd来喂狗,也就是更正openwrt的寄存器即可。不用自己准备喂狗脚本了。系统死机后必然会重启,这个有客户在线的设备已经验证了。
-
@mango 好的, 謝謝你的建議.