打印
[技术问答]

NUC970系列资料之WDT问题及解决办法

[复制链接]
2779|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
NUC970系列资料之WDT问题及解决办法
1 WDT问题介绍
NUC970的必须要通过硬件Power on setting来开启,且开启后无法通过软件来关闭和打开。这样使用起来很不方便。很多客户希望可以在linux下通过软件来控制wdt。
WDT的硬件开关是由PWRON[3]位来控制的,它对应的GPIO是PA.3.
如果要关闭WDT,则需在系统上电前将PA.3拉到低电平。
如果要打开WDT,则需在系统上电前将PA.3拉悬空(因内部有上拉)。

评论
s2333 2018-12-17 16:57 回复TA
你好,请指导一下,请问什么是硬件打开WDT? 我直接用的linux的wdt_demo,看门狗在死循环超时后,直接死机,没有进行复位,是因为我没有硬件打开WDT的原因吗?这个硬件打开怎么操作? 
沙发
dongnanxibei|  楼主 | 2018-1-26 16:23 | 只看该作者
2 WDT 测试情况2.1硬件关闭WDT的情况下测试WDT
系统启动后,运行bsp里wdt_demo程序后,当不喂狗时系统死机但没有触发重启。
/usr # ./wdt_demo
Open watchdog0 ok
ii = 10
ii = 9
ii = 8
ii = 7
ii = 6
ii = 5
ii = 4
ii = 3
ii = 2
ii = 1
ii = 0
watchdog watchdog0: nowayout prevents watchdog being stopped!
watchdog watchdog0: watchdog did not stop!
这说明通过软件无法打开nuc970的WDT
2.2硬件打开WDT的情况下测试WDT
在这种情况下,默认的bsp中u-boot是有喂狗程序的,但引导linux时就没有喂狗程序了,如果linux系统启动时间过长,就会出现系统没启动完就复位的问题。系统启动时间短的是有机会进入系统的,但进入系统如果不立即喂狗就会重启。
ohci_hcd: USB 1.1 ‘Open’ Host Controller (OHCI) Driver
nuc970-ohci nuc970-ohci: Nuvoton NUC970 OHCI Host Controller
nuc970-ohci nuc970-ohci: new USB bus registered, assigned bus number 2
nuc970-ohci nuc970-ohci: irq 24, io mem 0xb0007000
hub 2-0:1.0: USB hub found
hub 2-0:1.0: 2 ports detected
usbcore: registered new interface driver usb-storage
TCP: cubic registered
NET: Registered protocol family 17
Freeing unused kernel memory: 10844K (c033b000 – c0dd2000)
BusyBox v1.22.1 (2017-05-19 16:49:44 CST) built-in shell (ash)
Enter ‘help’ for a list of built-in commands.
~ #
NUC970 IBR 20151008.1735
No Key
Boottttttæ“{kæ44aÃÿand_boot
U-Boot 2013.04-rc2 (Nov 25 2015 – 13:25:12)
CPU: NUC972
DRAM: 64 MiB
NAND: 128 MiB
MMC: mmc: 0, mmc: 1
In: serial
Out: serial
Err: serial
Net: emac
Hit any key to stop autoboot: 0
Using emac device
TFTP from server 10.130.11.18; our IP address is 10.130.11.120
Filename ‘970uimage’.
Load address: 0x7fc0
在这种情况,系统启动后就运行wdt_demo程序是可以控制WDT正常工作的:正常喂狗时系统正常工作,不喂狗时WDT复位。
NET: Registered protocol family 17
Freeing unused kernel memory: 10844K (c033b000 – c0dd2000)
BusyBox v1.22.1 (2017-05-19 16:49:44 CST) built-in shell (ash)
Enter ‘help’ for a list of built-in commands.
Open watchdog0 ok
ii = 10
ii = 9
ii = 8
ii = 7
ii = 6
ii = 5
ii = 4
ii = 3
ii = 2
ii = 1
ii = 0
watchdog watchdog0: nowayout prevents watchdog being stopped!
watchdog watchdog0: watchdog did not stop!
~ #
NUC970 IBR 20151008.1735
No Key
Boottttttæ“{kæ44aÃÿand_boot
U-Boot 2013.04-rc2 (Nov 25 2015 – 13:25:12)
CPU: NUC972
DRAM: 64 MiB
NAND: 128 MiB
MMC: mmc: 0, mmc: 1
In: serial
Out: serial
Err: serial
Net: emac
不配置内核Disable watchdog shutdown on close时,当wdt_demo运行结束退出后,linux系统会关闭wdt。
Device drivers—>
  • Watchdog Timer Support—>
  • [ ] Disable watchdog shutdown on close
    测试结果如下:
    hub 2-0:1.0: 2 ports detected
    usbcore: registered new interface driver usb-storage
    TCP: cubic registered
    NET: Registered protocol family 17
    Freeing unused kernel memory: 10844K (c033b000 – c0dd2000)
    BusyBox v1.22.1 (2017-05-19 16:49:44 CST) built-in shell (ash)
    Enter ‘help’ for a list of built-in commands.
    Open watchdog0 ok
    ii = 10
    ii = 9
    ii = 8
    ii = 7
    ii = 6
    ii = 5
    ii = 4
    ii = 3
    ii = 2
    ii = 1
    ii = 0
    Stopping WDT is probably not a good idea
    系统没有重启,表明linux系统可以通过软件关闭nuc970的WDT。
    通过软件关闭WDT后,还能否通过软件来开启WDT呢?
    修改Wdt_demo程序在程序喂狗结束后不退出程序,加入一个死循环程序
    While(1){}
    编译demo程序并保存为wdt_demo1
    TCP: cubic registered
    NET: Registered protocol family 17
    Freeing unused kernel memory: 10884K (c033b000 – c0ddc000)
    BusyBox v1.22.1 (2017-05-19 16:49:44 CST) built-in shell (ash)
    Enter ‘help’ for a list of built-in commands.
    Open watchdog0 ok
    ii = 10
    ii = 9
    ii = 8
    ii = 7
    ii = 6
    ii = 5
    ii = 4
    ii = 3
    ii = 2
    ii = 1
    ii = 0
    Stopping WDT is probably not a good idea
    ~ #
    ~ #
    ~ #
    ~ #
    /usr # ./wdt_demo1
    Open watchdog0 ok
    ii = 10
    ii = 9
    ii = 8
    ii = 7
    ii = 6
    ii = 5
    ii = 4
    ii = 3
    ii = 2
    ii = 1
    ii = 0
    NUC970 IBR 20151008.1735
    No Key
    Boottttttæ“{kæ44aÃÿand_boot
    U-Boot 2013.04-rc2 (Nov 25 2015 – 13:25:12)
    CPU: NUC972
    DRAM: 64 MiB
    NAND: 128 MiB
    MMC: mmc: 0, mmc: 1
    In: serial
    Out: serial
    Err: serial
    Net: emac
    Hit any key to stop autoboot: 0
    Using emac device
    TFTP from server 10.130.11.18; our IP address is 10.130.11.120
    Filename ‘970uimage’.
    Load address: 0x7fc0
    以上测试表明,nuc970的WDT虽然只能由硬件来打开,但硬件打开后,软件就可以正常控制WDT的打开与关闭。
    2.3 在硬件打开WDT的情况下,U-BOOT下如何关闭WDT
    默认情况下硬件打开WDT后,u-boot是不会关闭WDT的,客户正常使用WDT时希望进入linux系统后再打开WDT。如何在U-boot下关闭WDT呢?
    上面测试表明,硬件打开WDT后,是可以通过软件来控制WDT的开关的。所以只要在u-boot的WDT驱动中关闭通过软件关闭WDT即可。
    打开wdt的驱动文件,分析发现nuc970的wdt驱动中预留了通过环境变量watchdog来控制WDT的开关的方法。
    设置环境变量watchdog=off时,u-boot就关闭WDT。不设置环境变量watchog或设置为其他值,就不关闭WDT。
    在u-boot下通过如下命令设置watchog环境变量。
    U-Boot>set watchdog off
    U-Boot>save
    设置好以后,重启系统:
    NET: Registered protocol family 17
    Freeing unused kernel memory: 10884K (c033b000 – c0ddc000)
    BusyBox v1.22.1 (2017-05-19 16:49:44 CST) built-in shell (ash)
    Enter ‘help’ for a list of built-in commands.
    ~ #
    工作正常,进入系统后不重启,表明WDT已经关闭。

    使用特权

    评论回复
    板凳
    dongnanxibei|  楼主 | 2018-1-26 16:23 | 只看该作者
    3 NUC970 WDT的使用方法
    通过上面的测试,可以总结出nuc970系列芯片WDT的使用方法:
    1)要通过硬件power on setting打开WDT,否则WDT不可用
    2)设置u-boot下环境变量watchdog=off来关闭WDT
    3)进入系统后要使用WDT时打开WDT。

    使用特权

    评论回复
    地板
    643757107| | 2018-1-29 10:59 | 只看该作者
    这个比裸奔的系统好玩啊。

    使用特权

    评论回复
    5
    huangcunxiake| | 2018-1-30 19:29 | 只看该作者
    这种不懂Linux的看天书啊。

    使用特权

    评论回复
    6
    xinxianshi| | 2018-1-30 19:45 | 只看该作者
    好像所有的单片机的看门狗都是只能操作一次,运行起来后,就没法停止了。

    使用特权

    评论回复
    7
    稳稳の幸福| | 2018-12-17 20:12 | 只看该作者
    系统下,可以直接调用底层的寄存器操作吗

    使用特权

    评论回复
    8
    xin3684| | 2018-12-22 11:29 | 只看该作者
    对我很有帮助,mark一下

    使用特权

    评论回复
    9
    shw_0320| | 2020-7-24 13:21 | 只看该作者
    MAKE 最近在开发NUC972很有用

    使用特权

    评论回复
    10
    稳稳の幸福| | 2020-7-25 09:30 | 只看该作者
    MARK一下

    使用特权

    评论回复
    发新帖 我要提问
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    201

    主题

    3580

    帖子

    16

    粉丝