KEAMCU看门狗不复位的原因分析
reset引脚拉低mcu不复位

一、问题描述在嵌入式系统中,MCU(Micro Controller Unit)的reset引脚起着非常重要的作用,它通常用于将MCU恢复到初始状态。
但是在一些情况下,我们发现当reset引脚被拉低时,MCU并没有像预期那样进行复位操作。
这个问题给嵌入式系统的稳定性和可靠性带来了一定的风险,因此需要对这个问题进行深入研究和解决。
二、问题分析1. 引脚功能在绝大多数的MCU芯片中,reset引脚都用于对MCU进行复位操作。
当reset引脚被拉低时,MCU内部的复位电路会被触发,MCU会被强制恢复到初始状态。
但这并不意味着所有的MCU都会按照这种设计进行运行,不同厂家的MCU可能存在一些差异。
2. 引脚电路reset引脚在实际应用中通常会连接到外部的电路元件,比如按钮、电平转换芯片等。
这些外部电路可能会对reset信号造成干扰,或者不符合MCU的电气规格要求,从而导致reset引脚拉低时并不能达到复位的效果。
3. 复位电路MCU内部的复位电路也可能存在一些设计缺陷,或者得到了错误的外部配置。
这些问题可能会导致reset引脚被拉低时,并不能对MCU进行有效的复位操作。
4. 软件保护为了提高系统的稳定性和可靠性,MCU通常还会内置一些软件保护机制。
这些保护机制可能会对reset信号的触发条件和复位过程进行一些限制,但也可能会出现一些不符合预期的情况。
三、可能的解决方案1. 电路优化检查reset引脚的电路连接和外部元件,确保它们符合MCU的电气规格要求。
如果有必要,可以对reset引脚连接的电路进行优化和调整,以确保可以正常触发MCU的复位操作。
2. 复位信号检测通过示波器或者逻辑分析仪等工具对reset信号的波形进行检测,确保reset引脚被拉低时能够产生符合要求的电平和脉冲。
如果波形不符合要求,需要对外部电路进行调整或者更换合适的电路元件。
3. 软件修改如果复位问题是由于软件保护机制引起的,可能需要修改MCU的软件配置或者编写特定的复位处理程序,以确保reset引脚拉低时能够正常触发MCU的复位操作。
电源看门狗复位电路

电源看门狗复位电路公共模块说明V1.0版 2011-10-311.功能介绍:在实际的MCU应用系统中,由于常常会受到来自外界的某些干扰,有可能造成程序跑飞而进入死循环,从而导致整个系统的陷入停滞状态并且不会自动恢复到可控的工作状态。
指令技术、软件陷阱技术不能使失控的程序摆脱“死循环” 的困境,这时系统完全瘫痪。
如果操作者在场,就可以按下人工复位安钮,强制系统复位。
但操作者不能一直监视着系统,也往往是在引起不良后果之后才进行人工复位。
所以出于对MCU 运行的安全考虑,为使程序脱离“死循环”,便引入了一种专门的复位监控电路WatchDog,俗称看门狗。
看门狗电路所起的作用是一旦MCU运行出现故障,就强制对MCU进行硬件复位,使整个系统重新处于可控状态(要想精确恢复到故障之前的运行状态从技术上讲难度大成本高,而复位是最简单且可靠的处理手段)。
SP706 是 Exar(原 Sipex)公司推出的低功耗、高可靠、低价格的MCU复位监控芯片。
以下是其关键特性:分为4个子型号:SP706P、SP706R、SP706S、SP706T;复位输出:P为高电平有效,R/S/T为低电平有效;精密的低电压监控:P/R为2.63V、S为2.93V、T为3.08V;复位脉冲宽度:200ms (额定值);独立的看门狗定时器:1.6 秒超时(额定值);去抖TTL/CMOS 手动复位输入(/MR 管脚)。
我们公司采用Exar公司的SP706REN芯片实现看门狗复位功能,电源电路其他主要芯片还有LM2596S-5.0、SI4463BDY、LM1117IMPX-3.3,这三个主要应用于电源电路的转换中,起到降压,开关等作用。
SP706REN芯片应用于看门狗复位电路中,可以实现电源模块在受到死机的情况下而自动发出复位脉冲,从而使电源电路可以在无人状态下实现连续工作。
由SP706REN等芯片构成的电源看门狗复位电路模块实现的电源电路复位功能,在V2.0光纤直放站近与远端机主控板。
浅析LDO稳压器导致单片机复位异常的原因

浅析LDO稳压器导致单片机复位异常的原因作者:赵杨来源:《电子技术与软件工程》2013年第22期摘要越来越多的电子设备在电路设计中选择了结构简单成本低的LDO稳压器,本文就笔者在工程实践中遇到的问题,对LDO稳压块的特性以及对单片机复位的影响进行分析。
【关键词】 LDO 稳压器单片机复位 ESR1 引言LDO稳压器具有小型化、低压差、低输出噪声的诸多优点。
但在使用过程中有许多需要注意的事项,如果忽略了这些条件将会导致稳压器工作不稳定,甚至发生振荡。
笔者在工程实践中遇到过由于LDO工作不稳定从而造成单片机上电复位有时正常有时不正常的情况。
通过分析查明原因,通过增大输出电容值解决了故障。
2 关于LDO稳压器的说明LDO对输入电容的要求:(1)容值要大于某个值,对与LP2985来说要大于1uF;(2)输入无需考虑电容的ESR值的影响;(3)输入使用坦电解电容时一定考虑到浪涌电流的影响,选择电容时要留有一定的裕量(一倍),因为坦电解电容在浪涌电流冲击下会失效,导致输入容值不能满足要求;(4)输入端使用陶瓷电容时一定要考虑温度对陶瓷电容容值的影响,根据手册留足裕量,或者选用受温度影响较小的陶瓷电容。
LDO对输出电容的要求:LDO稳压块原理上利用的负反馈,由于体积很小所以需要通过外接电容的ESR(等效串连电阻)来补偿半边的零点。
这个值太大太小都不行。
稳定区间又被称为“稳定区间”,输出电容值超出这一区间将会导致稳压块不稳定甚至振荡。
注意低温时坦电解电容的ESR值会增大。
图1和图2给出了常见的两种LDO稳压器LP2985和TPS76333的“稳定区间”。
表1给出了常用电容的ESR值。
Bypass脚的电容对电源上升时间的影响:以LP2985为例,给出如图3、图4两张图。
可见不同容值的旁路电容对电源的上升时间影响很大。
3 关于单片机复位的说明以常见的AVR单片机ATmega8为例,它有4个复位源:1.上电复位:电源电压低于上电复位门限VPOT时,单片机复位;2.外部复位:Reset引脚上的低电平持续时间大于最小脉冲宽度时MCU复位;3.看门狗复位:看门狗使能并且看门狗定时器溢出时复位发生;4.掉电检测复位:掉电检测复位功能使能,且电源电压低于掉电检测复位门限VBOT时,MCU复位。
什么是看门狗(watchdog)看门狗有什么作用 - 副本

什么是看门狗(watchdog)看门狗,又叫watchdog timer,是一个定时器电路, 一般有一个输入,叫喂狗,一个输出到MCU 的RST端,MCU正常工作的时候,每隔一端时间输出一个信号到喂狗端,给WDT 清零,如果超过规定的时间不喂狗,(一般在程序跑飞时),WDT 定时超过,就回给出一个复位信号到MCU,是MCU复位. 防止MCU死机. 看门狗的作用就是防止程序发生死循环,或者说程序跑飞。
工作原理:在系统运行以后也就启动了看门狗的计数器,看门狗就开始自动计数,如果到了一定的时间还不去清看门狗,那么看门狗计数器就会溢出从而引起看门狗中断,造成系统复位。
所以在使用有看门狗的芯片时要注意清看门狗。
硬件看门狗是利用了一个定时器,来监控主程序的运行,也就是说在主程序的运行过程中,我们要在定时时间到之前对定时器进行复位如果出现死循环,或者说PC指针不能回来。
那么定时时间到后就会使单片机复位。
常用的WDT芯片如MAX813 ,5045, IMP 813等,价格4~10元不等.软件看门狗技术的原理和这差不多,只不过是用软件的方法实现,我们还是以51系列来讲,我们知道在51单片机中有两个定时器,我们就可以用这两个定时器来对主程序的运行进行监控。
我们可以对T0设定一定的定时时间,当产生定时中断的时候对一个变量进行赋值,而这个变量在主程序运行的开始已经有了一个初值,在这里我们要设定的定时值要小于主程序的运行时间,这样在主程序的尾部对变量的值进行判断,如果值发生了预期的变化,就说明T0中断正常,如果没有发生变化则使程序复位。
对于T1我们用来监控主程序的运行,我们给T1设定一定的定时时间,在主程序中对其进行复位,如果不能在一定的时间里对其进行复位,T1 的定时中断就会使单片机复位。
在这里T1的定时时间要设的大于主程序的运行时间,给主程序留有一定的的裕量。
而T1的中断正常与否我们再由T0定时中断子程序来监视。
这样就够成了一个循环,T0监视T1,T1监视主程序,主程序又来监视T0,从而保证系统的稳定运行。
看门狗复位的应用技巧

看门狗复位的应用技巧
说起看门狗这个名字还是蛮有趣的,它的作用就是在主人走神的时候咬他一口,把他咬醒。
实际点来说,就是当MCU运行过程中,在某处进入了死循环,或者受到干扰造成PC指针指向了无程序区,都会导致程序没反应,按键失效,屏幕内容不变等问题。
这时如果正确使用了看门狗,就会让PC
指针复位,从头开始执行程序。
看门狗复位的应用技巧包括三个方面:
一: 判断是否需要使用。
如果要使用看门狗的话,需要做一些寄存器的配置,在程序区的某些地方也要加入喂狗指令来防止看门狗复位,有一定的工作量,所以用与不用需要考虑一下。
能不使用看门狗的场合,要求是系统即使死机也问题不大,等待人过来断电复位即可的情况。
但是这种情况已经很少了,所以绝大多数情况下看门狗都要加上。
比如有温控功能的电热水器,假如电加热已经启动,但是系统死机了,温控失效,电加热也不会关闭,这时水温就会一直升高,直到水被蒸干,然后电加热损坏或引发火灾,或者人被开水烫伤。
这时有看门狗复位,系统就会恢复正常,检测到温度够了,就会关闭电加热的。
二、保证看门狗工作正常。
看门狗除了进行寄存器配置之外,喂狗函数的位置也很重要,没处理好就会发生不该复位时复位了,或改复位的时候没有复位,可能的原因是在可能出现的死循环里喂狗了。
复位上电(外部)复位低电压检测和复位看门狗定时器复

复位/上电(外部)复位/低电压检测和复位/看门狗定时器复位复位电路产生一个一定宽度的复位脉冲信号去复位整个电路,使其工作在预设的状态,保证电路从一个预先已知的状态开始工作。
SH66/67/69xxx系列单片机复位功能包括上电(外部)复位、低电压复位、看门狗定时器复位等。
1.上电复位 ( Power On Reset,POR )及外部复位内建的上电复位电路配合外接的上电复位辅助电路,在上电时产生复位脉冲信号复位整个电路,保证电路从一个预先已知的预设状态开始工作。
SH66/67/69xxx系列单片机内建了稳定的上电复位电路,在复位输入端外接的复位辅助电路配合下,单片机具有稳定可靠上电复位性能。
同时,复位输入端也作为外部复位的输入端,输入外部复位信号复位整个电路。
中颖的SH66/67/69xxx 系列单片机普遍采用低电平有效的复位方式。
按应用场合和对上电复位可靠性要求不同,复位外部电路可采用不同的方式。
简易型RC复位电路最简单的上电复位电路即是用RC充放电电路所构成(如图1-1),应用于干扰较小的环境。
复位时间长短由电阻R和电容C的值决定。
复位时间的长短,一般考虑为当系统电源稳定进入单片机工作范围时,才可结束复位。
当单片机断电时,C上的电荷应尽快完全放电,以保证下次复位的成功。
R和C建议数值为47k.和0.1μF。
复位电路的布线很重要,一般要求复位电容C与单片机的Reset 和VSS引脚的布线最短。
RC图1-1 简易型RC复位电路改良型RC复位电路为了让上电复位更加稳定,在简易型RC复位电路的基础上,可以在电阻位置并联一个二极管构成改良型RC复位电路(如图1-2)。
复位时间长短仍由R 和C的值决定。
当单片机断电时,附加的二极管D可使电容C上的电荷快速完全放电,以保证下次复位的成功。
C图1-2 改良型RC复位电路高抗干扰型RC复位电路高抗干扰型RC复位电路如图1-3,高抗干扰型RC复位电路应用于干扰较强的环境。
一个外置看门狗的反复复位问题的解决

一个外置看门狗的不断复位问题的解决最近,研发产品运行中的遇到一个异常,表现为:上电后反复重启(时间间隔大概7秒),不能正常启动,断开外置看门狗复位信号后就正常了。
看门狗部分图纸如下:启动过程如下:初始化cpu及部分硬件-》启动ucos-》创建2个任务,1个可以复位看门狗,1个完成系统的初始化。
因为是3.3V系统,使用的外置看门狗型号为SP706TE,特征如下:经过仔细测试,cpu是输出的WDI信号是正常的,250ms间隔的脉冲,没有问题。
测量SP706的供电等,也都是正常的。
但是WDO上每隔6.18s会有一个20uS的低电平脉冲。
经测试,在C32上并一个47uF的电容,效果会好一些。
由此,怀疑是3.3V上的干扰在某个瞬时会低于3.08V的RESET阀值。
将SP706T改为SP706RE后,问题解决;总结:1)外置看门狗检测电压VCC,灵敏度很高。
如果vcc上纹波大,建议使用低阀值的芯片,或者使用PFI功能来检测电压,当然也可以采用更优质的电源方案;2)产品上电后,尽早启动看门狗,系统的可靠性会高一些,可以避免系统启动过程中发生的异常;3)喂狗避免放到中断中,也尽量不要放到优先级高的任务中;20140909网友allen_zhan提到电源可靠性的问题,又做了3.3V的纹波测试,如下:可见3.3V的电压跌落有700mV之高。
原因是以下电路:系统启动后,延时打开通讯电源(时间延迟和上文提到的6-7s一致),这样可以降低启动冲击电流,避免供电电源保护。
在PWR输入为低电平时,F0505D工作,包括前面的C33充电,造成5V的电源跌落,同时3.3V也收到了影响。
将C33和C47由10uF改为1uF后,电源跌落下降到370mV。
重新将看门狗改为SP706SE后,也可以正常启动了。
复位故障,异常

监控芯片因电源问题引起异常复位的处理办法在单片机系统设计中,对系统的EMI、信号完整性、时序设计都能引起足够的重视;但对于电源完整性引起的地弹和电源反弹的问题,很多设计者还是认识得不清晰。
在单片机系统设计中,有时由于芯片自身缺陷或芯片之间接口驱动配合不当引起的系统不稳定,甚至不能工作的情况非常多。
下面通过对微处理器监控芯片MAX818在使用中出现异常复位的实例分析,说明由于电源完整性引起的系统工作不稳定现象。
1 系统描述图1为μP监控电路。
监控芯片MAX818具有电源低压监视、电池管理、RAM片选锁定及微处理器硬件看门狗功能。
电源低压监视是当系统电压低于芯片设定电压时,MAX818发出复位信号。
电池管理是当VCC高于电池VBATT时,OUT切换到VCC,电池处于浮充状态;当VCC低于VBATT时,OUT切换到VBATT,由电池供电。
RAM片选锁定用于上电或掉电时保护RAM中的数据不丢失且正确读写。
微处理器硬件看门狗的作用是当程序跑飞,喂狗信号WDI 得不到服务时,芯片发出复位信号,复位系统。
WDI信号悬空时,MAX818自动发出复位信号的功能禁止。
系统RAM片选信号由CPU的地址线,控制线经EPLD译码后输出接到MAX818的CEIN,经MAX818输出脚CEOUT接到RAM片选CE上。
RAM的供电电源由MAX818的OUT输出引脚提供。
2 系统异常复位现象及分析解决在单片机系统调试过程中,将监控芯片MAX818的看门狗清除引脚WDI悬空,使MAX818的复位功能禁止,且程序处于仿真状态,这时系统软硬件一切功能正常。
仿真调试完毕,将程序写入Flash中让其运行,系统总是不停地复位、重启。
MAX818的复位脚不停地发出复位信号,用示波器观察的波形如图2所示。
将WDI悬空重新仿真,系统正常;将WDI悬空,写入Flash,系统正常。
分析认为是MAX818自己在发出复位信号。
理论上能引起MAX818复位的原因有以下2点:①超过1.6s,MAX818引脚(6)WDI没有喂狗信号,能引起复位;②系统电源低于MAX818电源电压设定值4.65V,能引起复位。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
【经验分享】KE KEA看门狗不复位的几点说明
最近发现有些网友在使用KE,KEA系列的看门狗时,发现配置后,看门狗不能正常复位,或者是设置的复位时间不对等问题。
而且这些网友基本上使用官方例程添加看门狗代码,或者是自己使用CW新建一个工程遇到这样的问题。
所以,为了方便后来者,在这里总结下大家遇到问题的原因以及相关的解决方法。
下面来具体讲解遇到问题的原因以及解决方法:
1,主程序配置看门狗不复位
谈到这点,首先需要认真的阅读下KE,KEA系列的相关用户手册的WDOG章节以及第三章中关于WDOG的讲解,在关于WDOG的寄存器中,有些是复位后只写一次的,写第二次无效,比如WDOG_CS1,WDOG_CS2中的window 使能,分频使能,时钟源选择等。
这里,需要注意,WDOG_CS1[EN]是看门狗的使能位,默认是使能的,上电后一旦禁止,后续第二次开启是无效的。
而我们官方例程中,为了防止看门狗上电复位,在代码启动时,就会做一个看门狗关闭的动作,所以后续如果需要使用看门狗,就要先把启动代码中的看门狗禁止代码屏蔽,从而使能看门狗。
很多网友在主程序中配置相应的看门狗使能代码,发现程序不能实现看门狗复位的原因正是因为没有屏蔽掉启动代码中的看门狗禁止程序。
下面以
KEXX_DRIVERS_V1.2.1_DEVD 为例,讲解下在IAR, KEIL, CW中的启动代码看门狗屏蔽情况。
(1)IAR启动代码
从上图中可以看到,IAR启动先进入start函数,进入cpu文件夹中start.c文件,发现,start函数的第一句就是:WDOG_DisableWDOGEnableUpdate(); 即关闭看门狗。
如果实际使用想实现具体的看门狗配置,可以直接在这个地方配置看门狗并及时喂狗,防止在程序没有进入到main程序就mcu看门狗复位。
这里给出一个看门狗配置的例子:
从上图中,可以看到KEIL的启动代码,进入main之前首先进入到SystemInit函数中,在CPU文件夹的Start.c中可以找到SystemInit函数,这个函数里面统一是关于关闭看门狗的代码,如果是KEIL工程,那么就需要在这个地方屏蔽掉关闭看门狗的代码,可以加上自己的看门狗初始化代码,例子见(1)。
(3)CW启动代码
从上图可以看到,CW启动会先进入到_init_hardware();函数,而在
Project_Setting -> startup_code 文件夹中的kinetis_sysinit.c中可以看到
_init_hardware();函数,这个函数里面同样执行了关闭看门狗的代码。
如果使用的是CW,并想开启看门狗,就需要这块地方的看门狗禁止代码屏蔽。
如果是自己新建的CW代码,同样需要注意这个地方的启动代码,默认生成代码会关闭看门狗。
2,配置的看门狗复位时间不准确
在使用KEXX_DRIVERS_V1.2.1_DEVD的过程中,尤其是配置看门狗溢出时间值的时候,会发现某些情况下配置的时钟值并不是对的,这里以IAR工程为例。
在手册中定义看门狗溢出时间的寄存器是分为两个的,分别为高字节WDOG_TOVALH和低字节WDOG_TOVALL两个寄存器。
如果选择1KHZ的看门狗时钟源,想实现1S
的看门狗复位,那么就需要给看门狗溢出时间的值设为1000,即0X03E8。
按照头文件的定义,如下:
(1)两个寄存器直接设置
可以看到,这种方法设置出来的WDOG_TOVALH和WDOG_TOVALL寄存器的值已经反掉了,原因就是IAR中的内存存放是按照小端存放的形式,如果定义的是一个uint16_t类型的,这时候存放到内存地址,是按照低字节的放在较小地址,高字节
的放在较大地址,这里就导致,0X03E8值中0XE8放到了地址
0X400520004(WDOG_TOVALH),0X03放到了地址0X400520005(WDOG_TOVALL),
从而导致实际的溢出寄存器值反了,导致溢出时间不准现象。
(2)分开单独设置
按照头文件中的联合体定义,还可以分开设置WDOG_TOVALH和WDOG_TOVALL 寄存器,实际上如果分开定义,由于联合体中,结构体TOVALH 和TOVALL两个是8位的,这样就不会涉及到小端对齐,使得16位数据高低字节存放地址和实际地址不符的现象,TOVALH的定义地址还是0X400520004,TOVALL的定义地址还是0X400520005。
所以按照如下分开定义就可以实现正确的看门狗溢出时间定义。
如果大家还是想整体定义16位的,那么就需要高低自己调一下顺序,因为我发现在IAR的属性设置里面,设置大小端存储的地方已经灰掉,不可以设置。