1. 芯片内部看门狗

内部看门狗通常为芯片内部某个特殊定时器,用户可以通过手动初始化、设置timeout、使能、失能该看门狗,然后在线程中定时去喂狗,从而达到检测应用程序跑飞、跑死的情况。

在Linux系统中,可以在uboot中打开看么狗,把喂狗时间设置长度超过kernel启动时间,从而当kernel正常启动后,喂狗任务由uboot交给了应用程序,这样达到了监控kernel启动bootsup和应用程序的双重功效。

2. 芯片外部看门狗

外部看门狗具有独立性,可以更加安全的确保芯片的正常运行。

外部看门狗如何工作?

外部看门狗非常简单,没有所谓的初始化、使能等等,就是电源、地、WDI喂狗引脚、RESET引脚,当WDI每次检测到边沿跳变,则重新置位看门狗计数,如果在超出timeout,则拉低RESET引脚一段时间,周而复始。

那外部看门狗的使用也带来一些问题:

  • 在超长启动时间的系统中,如何确保外部看门狗的喂狗

    • 在Uboot中将内部看门狗设置1~3min喂狗时间以确保kernel启动过程出现问题,在系统启动完成后,重新交由应用程序喂狗,且喂狗周期根据线程时长决定
    • 不做特殊喂狗处理,uboot命令行期间将会出现看门狗超时
    • 外部看门狗,则可以在硬件电路中将具有pwm功能的IO口接至WDI引脚,在uboot中使能IO口的pwm功能,在kernel加载驱动期间,可以不再对此IO进行操作,也可以重新再kernel中使能该IO脚的PWM功能,但是必须在驱动probe阶段,如果交由应用程序,中间时间可能无法喂狗,导致重启。
  • 在ICT、FCT、程序烧录阶段中,如何确保这些动作不被外部看门狗打断,循环复位

解决思路

在电路设计中,针对第二个问题,可以设计电路的JTAG中Reset的优先级最高,当Jtag插上,程序不运行,Reset也就失效了。

增加跳线,在生产阶段,将跳线跳开,完毕后,将跳线跳上,但是此法增加Factory阶段的复杂度。

ISP:In-system programing 在线系统编程; IAP: In-application programing 在应用编程; ICP: In-circuit programing 在电路编程。ISP和IAP都是在板进行编程,也就是不用拆除芯片。ISP的意思就是应用程序本身有和PC上位机之间的接口,当上位机有更新程序的需求时,应用程序会进入更新程序的逻辑,知道更新结束。而IAP则是BootLoader+Application的结构,在Boot阶段,如果接收到上位机的更新需求,则进行更新,更新结束跳到application。

Warm Reset:

Code Reset:

最新文章

  1. ssl + nginx + tomcat 部署方案
  2. Android标题栏最右边添加按钮
  3. python print 进度条的例子
  4. 无穷滚动(Infinite scroll)的实现原理
  5. 【Spring】Spring系列1之Spring概述
  6. $_REQUEST变量数组header()函数
  7. 如何同时激活两个不同版本的MyEclipse 【MyEclipse2013和MyEclipse2014同时激活】
  8. Oracle基本代码学习
  9. 实现图片的循环滚动——JS的简单应用
  10. java 学习笔记 读取配置文件的三种方式
  11. “百度杯”CTF比赛 九月场_SQL
  12. 【Ural1277】 Cops and Thieves 无向图点连通度问题
  13. Day24 中间件 自定义分页 ModelForm 序列化 缓存 信号
  14. [转]【Angular4】基础(六):HTTP模块
  15. 推荐5款简洁美观的Hexo主题
  16. CocosCreator原生平台退出游戏,暂停和继续
  17. 【传输协议】什么是CA证书
  18. transition动画
  19. js 转义
  20. [转载]typedef struct和struct的区别

热门文章

  1. myBatis + SpringMVC上传、下载文件
  2. Java 中 方法名或类名 变更 同时 更新 所有引用的 类名或方法名 的解决方案
  3. Android -- Spinner && AutoCompleteTextView
  4. Ajax datatype:'JSON'的error问题Status1:200,JSON格式
  5. 百度地图SDK for Android【检索服务】
  6. Python网络爬虫 - 1. 准备工作
  7. CAS中的ABA问题
  8. Python模块学习 ---- logging 日志记录
  9. python2.7里的StringIO.StringIO与BytesIO有什么区别
  10. selenium webdriver 的三种等待方式