关于看门狗的那些事
一、SP706S外置看门狗
SP706S看门狗,只要1.6S内给看门狗芯片高低电平信号看门狗的复位引脚就会保持高电平,如果没喂狗则为低。
SP706S看门狗芯片特性,只有GPIO口为3.3V或0V的时候才会工作,如果GPIO口为1.5V左右,则不会工作。
二、对于单片机来说
1、因为单片机启动比较快,对于STM32来说,1S就能启动。
a、在启动过程中GPIO口还没有初始化的时候,GPIO口电压是1.5V左右。不是3.3V也不是0V。
所以此时需要在硬件上将SP706S的喂狗信号脚上拉到3.3V,此时如果设备死机,或者软件起来没有喂狗,就会重启,这样才能达到实际项目使用目的。
所以此时需要在硬件上将SP706S的喂狗信号脚上拉到3.3V,SP706S看门狗复位脚接设备电源供电芯片使能脚(高使能),此时如果设备死机、或出现异常不能输出喂狗信号,则看门狗复位脚输出低电平,设备电源供电芯片失能,就会断电重启。这样才能达到实际项目使用目的。
b、如何烧录和Debug?
硬件工程师可以通过三极管的特性,跳开SP706S,外接一个接线端子,引出两个接头,比如短接这两个接头(或用跳线帽短接)SP706S就不工作,这样就能实现烧录和Debug。
三、对于跑linux系统的CPU来说
1、因为跑linux操作系统的CPU启动比较慢,对于V3S、X1021等CPU来说,启动时间要七八秒。
a、在启动过程中GPIO口还没有初始化的时候,GPIO口电压是1.5V左右。不是3.3V也不是0V。
因为启动时间的原因,硬件上不能将SP706S喂狗信号引脚上拉至3.3V,否则看门狗开始工作,但是设备又不能及时起来进行喂狗,就会一直重启。
b、解决办法?
法一、此时可以多加一个GPIO口和一个PNP三极管进行控制,比如:GPIO口通过硬件上拉到3.3V并且连接到三极管的基极(B),PNP三极管集电极(C)和发射极(E)连接SP706S看门狗的复位脚和设备的电源供电芯片使能脚(高使能),此时PNP三极管集电极(C)和发射极(E)开路,看门狗就控制不到设备的电源供电芯片,也就不会重启了。等到设备软件起来的时候再把这个GPIO口拉低,PNP三极管集电极(C)和发射极(E)导通,SP706S开始控制设备电源供电芯片,此时如果有喂狗信号,SP706S看门狗芯片输出高电平,电源芯片使能,设备开始工作,如果喂狗不正常,SP706S看门狗芯片输出低电平,电源芯片失能,设备断电重启。
注意事项:上述我们一直讨论SP706S看门狗芯片接设备电源供电芯片使能脚的情况,其实这也存在一种问题,因为设备死机时GPIO电平为不确定状态,可能会导致看门狗芯片不工作(根据如上法一所述,如果GPIO死机时为高电平则看门狗芯片不工作),所以最好的方式是看门狗复位引脚接CPU复位引脚。
原理图参考:
复位芯片串电阻的原因:由于大多看门狗芯片复位脚为推挽输出,驱动能力大,灌电电流强,可能会烧坏CPU的复位引脚。
四、关于单片机内置看门狗
单片机内置看门狗就是定时器,程序跑飞时,定时器仍然在工作,因此喂狗函数不能放在定时器中断函数里,应放在main函数的while循环喂狗,减少到处喂狗,注意发送中断或接收中断时,如果数据很多也会导致不能喂狗(调整中断优先级)。