ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

浅析嵌入式系统之uboot详解(3)—看门狗

2021-11-24 17:35:02  阅读:246  来源: 互联网

标签:分频 uboot 16 复位 浅析 寄存器 看门狗 cpu


uboot详解—看门狗

1. 前言

  uboot启动时,当将cpu运行模式设置为管理模式后,就要关闭看门狗了,那么看门狗是干什么的呢?

  狗狗是我们的好朋友,有时候,一条好狗狗能够救主人的性命,”看门狗“是cpu的“好朋友”,它也能够在cpu出状况的时候把它救活。

  看门狗其实就是一个可以在一定时间内被复位的计数器,当看门狗启动后,计数器开始自动计数,经过一定时间,cpu就会将这个计数器复位,如果没有被复位,计数器溢出就会对CPU产生一个复位信号使系统重启,这个复位的操作就是“喂狗”。

  看门狗就这样兢兢业业的守着它的主人cpu,当cpu出状况的时候,就不能喂狗了,看门狗饿了就知道cpu不正常工作了,然后发送复位信号让cpu重新醒过来。

  对于一些安装在户外的设备,可以很直接的体现它的价值,比如运营商在荒郊野岭安装了好多基站,如果这里的基站停止工作了,就需要派人去这个基站手动重启了,有了看门狗以后,只要过一段时间没有喂狗,看门狗就将系统重启,节省了不少人力。

2. 看门狗的种类

看门狗主要分三种:

  • 内置在cpu内部的看门狗

      此类看门狗一般是将一个芯片中的定时器来作为看门狗,通过程序的初始化,写入初值,并启动定时器。程序按时对定时器赋初值(或复位),以免它饿了。这种看门狗是可以被禁用的(只要停止这个定时器即可),好比对那只要咬你的狗来个“葵花点穴手”。大部分CPU都内置看门狗,硬件原理可参考各芯片数据手册。

    优点: 可以通过程序改变初始时间,也可以随时禁用
    缺点: 需要初始化,如果程序在初始化、启动完成前跑飞或在禁用后跑飞,看门狗就无法复位系统,这样看门狗的作用就没有了,系统恢复能力降低。
    在这里插入图片描述

  • 独立的看门狗芯片

      这种看门狗主要有一个用于喂狗的引脚(一般与CPU的GPIO相连)和一个复位引脚(与系统的RESET引脚相连),如果没有在一定时间内改变喂狗脚的电平,复位引脚就会改变状态复位CPU。此类看门狗一上电就开始工作,无法禁用。现在常用的芯片有:CAT705/CAT706、IMP706等等,溢出时间在1.6秒左右。 硬件原理可以参考各芯片数据手册和《基于Linux的嵌入式系统全程喂狗策略》。

    优点: 无须配置,上电即用。无法禁用,系统必须按时喂狗,系统恢复能力高。
    缺点: 无法灵活配置溢出时间,无法禁用,灵活性降低。

  • 软件看门狗

      这其实就是一个监控软件,对于硬件上出的问题它还是无能为力的,它主要对一些重要的软件进行监控。

      一些重要的程序,必须让它一直跑着;而且还要时时关心它的状态——不能让它出现死锁现象。(当然,如果一个主程序会出现死锁,肯定是设计或者编程上的失误。首要做的事是Debug。)但如果时间紧迫可以用软件看门狗,暂时应急。

      这种监控软件运行不出现界面窗口,具有一定的隐蔽性;它定时判断目标进程是否运行在当前系统中,如果没有则启动目标进程;判断目标进程是否“无响应”,如果是则终止目标进程;如果目标进程“无响应”的次数超过一定的数量,则重启整个系统。它的目的也是复位,但是它主要市复位进程,实在不行才复位CPU。

第二种和第三种看门狗,在这里不作讨论,下面将讨论怎么使用内置在cpu内部的看门狗。

因为是内置在cpu内部,所以从电路图中就找不到看门狗的连接方式了,下面是看门狗的工作原理图:
在这里插入图片描述
从图中可以看出一下几点:

  1. 看门狗使用的输入时钟是PCLK,关于时钟的知识将在后面进行详细分析

  2. 看门狗的配置涉及到三个寄存器:控制寄存器(WTCON),数据寄存器(WTDAT),计数寄存器(WTCNT)

  3. 看门狗先将PCLK时钟进行预分频 (prescaler),分频的精度为0~255 (2的8次方-1 ,由WTCON的8-15位进行设置),预分频后再除以一个分频因子(division factor,由WTCON的4:3两位进行设置,一共有4中选择——16,32,64,128),有PCLK、prescaler和division factor三个变量以后,就可以计算出看门狗计数器递减时间间隔:
    在这里插入图片描述
    t_watchdog:看门狗计数器递减时间间隔,单位秒

    PCLK:APB总线工作始终,单位HZ

    prescaler value + 1:预分频大小,因为从0开始,所以需要加一

    division_factor:分频因子,有4个档——16,32,64,128

当开发板一上电的时候,系统时钟是还没有初始化的,所以PCKL的时钟大小是和外部时钟一样的,cpu连接的外部晶振如下图:
在这里插入图片描述
所以刚上电时,PCKL的大小12MHz,WTCON[15:8]设置为74,除数因子选择16,通过上面公式可以计算出,看门狗控制器递减时间间隔0.1毫秒。将WTCNT里的值设置为0x2710(十进制10000),那么看门狗会每过一秒钟产生一次超时。

我们来看看控制寄存器(WTCON),数据寄存器(WTDAT),计数寄存器(WTCNT)芯片手册:
在这里插入图片描述
从上图可以看到WTCON的默认状态:

  • [0]=1 当看门狗计时器超时的时候,开启发送reset信号的功能

  • [2]=0 超时的时候不发送中断

  • [4:3]=00 默认分频因子是1/16, division_factor=16

  • [5]=1 开启看门狗计数器,看门狗会按照WTCNT中的初始值进行递减,直到超时

  • [15:8]=0x80 换成十进制是128, prescaler=128

因为刚开机的时候,PCLK=12M, prescaler=128, division_factor=16 , 所以可以计算出 t_watchdog=1/(12M/129/16)=(129*16)/(12000000)=0.000172s=0.172ms

在这里插入图片描述
上图是WTDAT寄存器的芯片手册,默认值是0x800, 十进制是2048
在这里插入图片描述
上图是计数器寄存器的芯片手册,默认值也是0x800,十进制是2048
所以刚上电的时候,看门狗的超时时间是:time_out=2048*0.000172=0.352252s
0.352252s是如此的短暂,所以在开机的时候如果没有关闭看门狗,它将每隔0.352252s就发送一次reset信号重启cpu,不管uboot运行到哪个阶段,都将被看门狗终止并重启。

从上面可以得出结论,板子重启时,必须尽早关闭看门狗,以便后面的代码顺利执行。

看门狗关闭以后,需要在什么时候开启呢?我们将会在后面分析uboot和内核代码的时候进行分析。

3. 总结

  这篇文章讲了看门狗的一些内容,包括看门狗的作用,看门狗的分类,看门狗的工作原理和在arm处理器中看门狗的 配置手册,并根据手册计算了看门狗的计时间隔和计时周期,后面我们将继续根据uboot启动流程讲解中断相关的知识。
在这里插入图片描述

标签:分频,uboot,16,复位,浅析,寄存器,看门狗,cpu
来源: https://blog.csdn.net/IT_xiao_bai0516/article/details/121515546

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有