"是什么意思硬件看门狗芯片是不是有 软件 和 硬件 之分

软件的可靠性一直是一个关键问题。任何使用软件的人都可能会经历计算机死机或程序跑飞的问题,这种情况在嵌入式系统中也同样存在。由于的抗干扰能力有限,在工业现场的仪器仪表中,常会由于不稳、电弧干扰等造成死机。在水表、电表等无人看守的情况下,也会因系统遭受干扰而无法重启。为了保证系统在干扰后能自动恢复正常,看门狗定时器(Watchdog Timer)的利用是很有价值的。
看门狗问题及相关实验
现今市面上流行的一些单片机,多嵌有内部WDT,如TI的430系列,Philips的P87XXX和P89XXX系列,Mro的PIC列,Atmel的AT89SXX系列和Hok公司的Htxxx系列。但是这些内部看门狗在工作时,多存在一定的误差。一些工程师在设计的过程中,由于忽略了这一点,导致系统出现异常。MSP430系列单片机是美国德州仪器公司(TI)近几年开发的新一代单片机,该系列是一款16位、具有精简指令集、超低功耗的全新概念混合型单片机。在众多单片机系列中,由于它具有极低的功耗、丰富的片内外设和方便灵活的开发手段,已成为一颗耀眼的新星。其内部自带看门狗及复位,理论上如果程序跑飞,可用看门狗将其复位。但在实际使用过程中,发现看门狗的作用并非万无一失,以下实验证明了这一点。实验电路如图1所示。
单片机内置看门狗实验电路
试验程序清单: #include void main(void){ p1dir l=0x0f; //设置p1.2-.p1.0为输出 for(;;){ vol wdtctl=wdtpw+ //复位wdt piout==0x0t; i=5000; do(i&) while(i!=0); }}
上述实验启动后,如果程序正常运行,会闪烁。缺省时,MSP430的看门狗是允许状态,所运行的程序会不断地访问看门狗。理论上,这个系统是不会发生启动失败的,因为即使启动失败,看门狗也应该在数百毫秒内启动,复位整个系统。基于这种思想,对单片机的复位进行测试。K2断开,用K1连续产生。Reset信号,测试看门狗使系统重启的成功率。K2闭合,则reset端高,理论上K1不能有效产生复位脉冲,观察看门狗是否起作用。
实验结果与分析
实验结果如下:K2断开,连续开关K1,上电重启系统,平均155次失败1次(LED不闪),即看门狗失效概率0.6%;K2闭合,连续开关K1,平均18次失败1次(LED不闪),且一旦失败,将连续失败下去,看门狗无效率占到了约5.5%。另外,当采用同样具有内置看门狗的其他系列单片机替代实验中的MSP430,启动程序段作相应修改时,实验结果仍大致相同,这说明具有内置看门狗的单片机面临的问题是相同的。经分析可能有如下原因:
①由于看门狗的时钟不独立,计数时钟与系统为同一链路,因此看门狗不能在系统出现问题时有效运作。
②由于时钟可用软件设置,启动失败时,开机时钟可能处于空档,没有时钟看门狗不能生效。
③有些看门狗需要用软件设置或启动,因此启动失败后,初始化程序没有激活,CPU可能跳转到随机代码,使看门狗被禁止。这样的看门狗是需要有可靠的上电复位作保证的,因此,从理论上讲,原设计存在着不合理性。基于上述分析,采用片外看门狗专用芯片TPS3823由独立的分频振荡电路提供计数脉冲。实验电路如图2所示。
外置看门狗专用芯片TPS3823应用实验电路
上述电路中,TPS3823输出定时溢出信号给Reset端。程序段中,CPU要不断地通过I/O口输出喂狗信号,使看门狗计数器清零。在此电路中重复上述试验中K1、K2的相同动作,系统重启成功率达到100%。
未来的内置看门狗必须有独立可靠的时钟。系统上电后,看门狗即为允许状态,无需软件设置,它只能被外部硬件跳线或内部熔丝(fuse)所禁止。目前,如果要求设计可靠性较高的嵌入式系统,外置看门狗是必须考虑的。内置看门狗的另一问题是系统复位后,程序应判断是由Reset端正常上电复位,还是程序跑飞看门狗所致,由此确定现场数据是否应该保留。这也是在看门狗应用中所应考虑的。
本网站试开通微、小企业商家广告业务;维修点推荐项目。收费实惠有效果!欢迎在QQ或邮箱联系!
试试再找找您想看的资料
资料搜索:
查看相关资料 & & &
   同意评论声明
   发表
尊重网上道德,遵守中华人民共和国的各项有关法律法规
承担一切因您的行为而直接或间接导致的民事或刑事法律责任
本站管理人员有权保留或删除其管辖留言中的任意内容
本站有权在网站内转载或引用您的评论
参与本评论即表明您已经阅读并接受上述条款
copyright & &广电电器(中国梧州) -all right reserved& 若您有什么意见或建议请mail: & &
地址: 电话:(86)774-2826670& & &&)新手园地& & & 硬件问题Linux系统管理Linux网络问题Linux环境编程Linux桌面系统国产LinuxBSD& & & BSD文档中心AIX& & & 新手入门& & & AIX文档中心& & & 资源下载& & & Power高级应用& & & IBM存储AS400Solaris& & & Solaris文档中心HP-UX& & & HP文档中心SCO UNIX& & & SCO文档中心互操作专区IRIXTru64 UNIXMac OS X门户网站运维集群和高可用服务器应用监控和防护虚拟化技术架构设计行业应用和管理服务器及硬件技术& & & 服务器资源下载云计算& & & 云计算文档中心& & & 云计算业界& & & 云计算资源下载存储备份& & & 存储文档中心& & & 存储业界& & & 存储资源下载& & & Symantec技术交流区安全技术网络技术& & & 网络技术文档中心C/C++& & & GUI编程& & & Functional编程内核源码& & & 内核问题移动开发& & & 移动开发技术资料ShellPerlJava& & & Java文档中心PHP& & & php文档中心Python& & & Python文档中心RubyCPU与编译器嵌入式开发驱动开发Web开发VoIP开发技术MySQL& & & MySQL文档中心SybaseOraclePostgreSQLDB2Informix数据仓库与数据挖掘NoSQL技术IT业界新闻与评论IT职业生涯& & & 猎头招聘IT图书与评论& & & CU技术图书大系& & & Linux书友会二手交易下载共享Linux文档专区IT培训与认证& & & 培训交流& & & 认证培训清茶斋投资理财运动地带快乐数码摄影& & & 摄影器材& & & 摄影比赛专区IT爱车族旅游天下站务交流版主会议室博客SNS站务交流区CU活动专区& & & Power活动专区& & & 拍卖交流区频道交流区
白手起家, 积分 33, 距离下一级还需 167 积分
论坛徽章:0
10可用积分
emb9260开发板,watchdog是Max706.
驱动是linux内核里面已有的,
不明白的是:硬件看门狗是只要打开运行就可以了吗? 不用程序区“喂”狗吗? 如果不喂的话,按理说应该会自动启动系统的吧,可是我打开以后,一直没什么反映。
是不是硬件会自动的喂狗,知道系统崩溃后,才会重启呢??????
&&nbsp|&&nbsp&&nbsp|&&nbsp&&nbsp|&&nbsp&&nbsp|&&nbsp
丰衣足食, 积分 967, 距离下一级还需 33 积分
论坛徽章:0
一般都没有打开看门狗吧
这个问题有点意思,有时间试试
白手起家, 积分 184, 距离下一级还需 16 积分
论坛徽章:0
要喂狗的,不喂系统就复位了。
看门狗在文件系统里应该是被映射成一个字符型设备的,比如/dev/watchdog。
你写一个程序单单open这个文件,然后也不去喂它,比如下面的伪码。
open(/dev/watchdog);
while(1);
系统应该会过一段时间就复位的,喂狗周期可以用ioctl函数进行设置,也可以直接修改看门狗驱动代码中的默认喂狗周期。
至于如何喂狗只要随便write一个值就可以了。
另外,close(/dev/watchdog)会将看门狗关闭,程序结束也会关闭看门狗,此时,不去喂狗系统也不会复位了。
白手起家, 积分 33, 距离下一级还需 167 积分
论坛徽章:0
回复 #3 zhsishi 的帖子
楼上,我按照您说的试了,
open,然后 while空循环没有退出。
可是它就是不复位,不知为什么??
等了很长时间的。。。
丰衣足食, 积分 967, 距离下一级还需 33 积分
论坛徽章:0
原帖由 wwlhz 于
16:43 发表
楼上,我按照您说的试了,
open,然后 while空循环没有退出。
可是它就是不复位,不知为什么??
等了很长时间的。。。
我估计还有ioctl来设置watchdog有效
白手起家, 积分 33, 距离下一级还需 167 积分
论坛徽章:0
回复 #5 sep 的帖子
int main(int argc, char *argv[])
& & fd = open(&/dev/watchdog&, O_WRONLY);
& & if (fd == -1) {
& & & & fprintf(stderr, &Watchdog device not enabled.\n&);
& & & & fflush(stderr);
& & & & exit(-1);
& & if (argc & 1) {
& & & & if (!strncasecmp(argv[1], &-test&, 5)) {
& & & && &&&ioctl(fd, WDIOC_SETOPTIONS, WDIOS_ENABLECARD);
& & & && &&&while (1){
& & & & & & & & sleep(100);
& & & && &&&}
& & & & } else if (!strncasecmp(argv[1], &-d&, 2)) {
& & & && &&&ioctl(fd, WDIOC_SETOPTIONS, WDIOS_DISABLECARD);
& & & && &&&fprintf(stderr, &Watchdog card disabled.\n&);
& & & & } else if (!strncasecmp(argv[1], &-e&, 2)) {
& & & && &&&ioctl(fd, WDIOC_SETOPTIONS, WDIOS_ENABLECARD);
& & & && &&&fprintf(stderr, &Watchdog card enabled.\n&);
& & & & } else if (!strncasecmp(argv[1], &-t&, 2) && (argc & 2)) {
& & & && &&&timeout = atoi(argv[2]);
& & & && &&&ioctl(fd, WDIOC_SETTIMEOUT, &timeout);
& & & && &&&fprintf(stderr, &Set timeout %s sec.\n&, argv[2]);
& & & & } else {
& & & && &&&fprintf(stderr, &-d to disable, -e to enable, -t val to set timeout.\n&);
& & & && &&&fprintf(stderr, &run by itself to tick the card.\n&);
& & & & fflush(stderr);
& & & & exit(0);
& & } else {
& & & & fprintf(stderr, &Watchdog Ticking Away!\n&);
& & & & fflush(stderr);
& & while(1) {
& & & & keep_alive();
& & & & sleep(1);
我运行:./wdt_test -test
是先open后ioctl设置为ENABLECARD
还是不会reset
丰衣足食, 积分 967, 距离下一级还需 33 积分
论坛徽章:0
你可以先看下说明,一般这些说明位于内核驱动的相关头文件
论坛徽章:6
硬件狗就是时钟counter && Interrupt.
软件要做的事情就是:
1. 设置计时周期.
2. 设置reset级别.
3. disable/enable
Enable后, 硬件counter自己计数, 定时产生Interrupt, 软件喂狗, 使狗复位, 重新计数.
长时间没喂狗, reset interrupt产生, 根据reset级别, 复位你的系统.
LZ可以比较一下, 看看哪些步骤没做好.
大富大贵, 积分 10160, 距离下一级还需 9840 积分
论坛徽章:0
在每次调度时是否系统自动喂狗了呢?
白手起家, 积分 33, 距离下一级还需 167 积分
论坛徽章:0
回复 #8 yidou 的帖子
/* Check if disabled */
& & & & mr = at91_sys_read(AT91_WDT_MR);
& & & & if (mr & AT91_WDT_WDDIS) {
& & & & & & & & printk(KERN_ERR DRV_NAME&: sorry, watchdog is disabled\n&);
& & & & & & & & return -EIO;
看门狗控制寄存器的值读出来DISABLE位一直是1,无论写什么值,这个寄存器的值都出来都是一样的。
手册上写的这个寄存器只可以write一次,但写不起作用。
不知道为什么会这样
DISABLE位应该是可以控制的吧?
写0就enable了?
现在主要问题是无法enable看门狗
[ 本帖最后由 wwlhz 于
12:06 编辑 ]
北京皓辰网域网络信息技术有限公司. 版权所有 京ICP证:060528号 北京市公安局海淀分局网监中心备案编号:
广播电视节目制作经营许可证(京) 字第1234号
中国互联网协会会员&&联系我们:
感谢所有关心和支持过ChinaUnix的朋友们
转载本站内容请注明原作者名及出处stm32独立看门狗和窗口看门狗的区别
单片机&嵌入式
单片机应用
嵌入式操作系统
学习工具&教程
学习和开发单片机的必备工具
(有问必答)
(带你轻松入门)
电子元件&电路模块
当前位置: >>
>> 浏览文章
stm32独立看门狗和窗口看门狗的区别
本文转自:&
1)独立看门狗没有中断,窗口看门狗有中断
2)独立看门狗有硬件软件之分,窗口看门狗只能软件控制
3)独立看门狗只有下限,窗口看门狗又下限和上限
4)独立看门狗是12位递减的。窗口看门狗是7位递减的
5)独立看门狗是用的内部的大约40KHZ RC振荡器,窗口看门狗是用的系统时钟APB1ENR
以上是我总结的
接下来我们介绍一下独立看门狗和窗口看门狗,这里我们就不讲解程序了,很简单的,配置一下寄存器就可以使用了。
独立看门狗没有中断功能,只要在计数器减到0(下限)之前,重新装载计数器的值,就不会产生复位,独立看门够有硬件和软件之分,硬件是通过烧写器的&设定选项几节等&配置,一旦开启了硬件看门狗,那么就停不下来了,只能在重新配置&设定选项几节等&才能关掉硬件看门狗,软件看门狗只需要设置IWDG-&KR=0XCCCC;就可以启动看门狗了,软件狗可以在系统复位时关掉,如果在在初始化里开启软件看门狗,那就开启了软件看门狗,
独立看门狗是12位递减的寄存器,使用片子内部的RC振荡器,这个振荡器是关不掉的。
窗口看门狗有中断,这个中断的作用是在计数器达到下限0x40的时候,产生中断,让你喂狗,如果你不喂狗,计数器的值变为0x3f的时候,将会产生系统复位,即使是喂狗,也应该在中断里快速喂狗,要不时间长了计数器减一也会变成0x3f产生复位,这个时间根据芯片手册的公式进行计算即可得到,窗口看门狗只有软件开启方式,还有一个上限值,这个值如果大于计数器的初始值,那么就没有任何作用了,这个值小于计数器的初始值得时候,当计数器的值大于上限值时你对计数器进行装载,将会产生复位,只有在计数器减到小于上限值时,你才能重新装载计数器,意思就是说只有计数器的值在上限值和下限值之间你才能装载计数器,否则就会产生系统复位,当上限值小于下限值,也没有意义。
独立看门狗Iwdg&&我的理解是独立于系统之外,因为有独立时钟,所以不受系统影响的系统故障探测器。主要用于监视硬件错误。
窗口看门狗wwdg&&我的理解是系统内部的故障探测器,时钟与系统相同。如果系统时钟不走了,这个狗也就失去作用了。主要用于监视软件错误。
以下是经过测试发现的:
//发现1:当窗口值大于等于计数器的值,无论怎么更改配置的顺序,都是正确的运行结果
//发现2:当窗口值小于计数器的值,顺序一旦改变就运行错误
经过测试发现,当初始化的顺序不是正常顺序的话,就会把WWDG-&SR置一,为什么我也不知道,谁知道片子里面怎么搞的
你在开启中断就进入中断的,这时你又进行喂狗,就会复位的,因为这时计数器的值&上限窗口的值,所以会复位,所以就会一直出错下去
解决办法是,初始话的时候最后两句是先清除中断标志然后在开启中断,如果你不这么干,那么在初始化的时候很可能把WWDG-&SR
置位,那么你在开启中断,就会毫不犹豫的进入中断,你在中断重装计数器值得时候,就会产生复位
【】【】【】【】
上一篇:下一篇:
CopyRight @
单片机教程网
, All Rights ReservedPS4和《看门狗》分别统领5月NPD软硬件销量排行榜-游戏视频-搜狐视频
PS4和《看门狗》分别统领5月NPD软硬件销量排行榜
视频介绍:
作者偷懒呢,还没有添加视频介绍
推荐出品人
游戏热播榜}

我要回帖

更多关于 硬件看门狗作用 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信