大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是系统看门狗WDOG1在i.MXRT1xxx系统启动中的应用及影响

  软件看门狗模块(WDOG)在 MCU 应用里可以说是非常基础的功能模块。对于一个产品级的应用程序,如果它没有使能主控内部的看门狗模块,一般都不能算是一个合格的软件设计。有的时候,硬件工程师觉得软件看门狗不可靠,还会在板级设计里再加入外部看门狗电路。总之看门狗对于产品工作稳定性具有很重要的意义。

  最近有一个 i.MXRT 客户注意到了芯片手册 System Boot 章节里提及了 WDOG 应用,想使能这个功能,并且要确认该功能真实生效以及评估对后续应用程序的影响。借助客户的问题,我们来细聊下这个话题。

一、WDOG模块简介

  首先我们来了解一下 i.MXRT1xxx 系列内部的 WDOG 模块,在i.MXRT1xxx 内部 WDOG 模块一共有三个(WDOG1/2/3),虽然 WDOG 本质上就是个特殊功能定时器,但因为芯片设计时为其赋予的超时触发行为不同,所以其应用场合并不一样。

1.1 系统看门狗WDOG1/2

  WDOG1 和 WDOG2 属于系统看门狗,前者用于系统级复位(产生 WDOG_RESET_B_DEB 信号给 SRC 模块)防止系统发生异常,后者用于系统 SNVS 域安全警报(不会产生复位效果)。不过从模块寄存器角度,WDOG1 和 WDOG2 是一样的,因此除了超时触发行为外,它们其余方面特性是一样的:

1. 模块内部两个计数时钟源是固定的,来自 ipg_clk_32k 以及 anatop_xtal32k_clk 。
2. 模块内部 8bit 定时器(Time-Out Counter)用于产生 WDOG_RESET_B_DEB 复位信号,计时精度固定为 0.5 秒,超时可设范围为 0.5 秒到 128 秒。
3. 模块内部定时器(Power Down Counter)用于产生对外输出的复位信号 WDOG_B,其超时时间固定为 16 秒。
4. 模块对外输出的信号最多有三个: WDOG_RST_B_DEB、WDOG_B、WDOG_ANY(仅 WDOG1)。
5. 模块使能信号 WDOGx->WCR[WDE] 可多次设置(并不是一次复位期间仅可 write one once)。
6. 模块配置寄存器与定时器计数值可直接修改。
7. 模块 Time-Out Counter 默认是关闭的,Power Down Counter 默认是开启的。

1.2 内核看门狗WDOG3(4)

  WDOG3 有时候又叫 RTWDOG(对于 RT1170,还存在用于默认 CM4 从核的 WDOG4),属于内核看门狗,主要用于复位内核,防止程序陷入死循环。其模块寄存器跟 WDOG1/2 完全不同,更接近于一般的定时器模块设计:

1. 模块内部计数时钟源有四种选择,Bus clock / LPO clock / INTCLK / ERCLK 。
2. 模块内部 16bit 定时器(Time-Out Counter)用于产生内核复位信号。
3. 模块使能信号 WDOGx->CS[EN] 可多次设置(但是其属于 write-once 属性)。
4. 模块配置寄存器 write-once bits 与定时器计数值需要特殊 unlock 时序才可以修改。
5. 模块 Time-Out Counter 默认是开启的。

二、系统ROM里对WDOG的使用

  i.MXRT1xxx 系列芯片上电默认都是先执行系统 BootROM,在 BootROM 里会有对看门狗的处理。默认情况下 BootROM 是不启用看门狗做代码执行守护的,只有当用户烧写了指定的 eFuse 位,看门狗功能才会生效。BootROM 并没有使用默认开启的 WDOG3,而是将其关闭并打开了 WDOG1 作为看门狗。

2.1 看门狗使能

  i.MXRT10xx 系列芯片 BootROM 看门狗在 eFuse 里配置如下,包含 eFuse 0x460[21] 使能位与 eFuse 0x6D0[15:13] 超时时间设置。

  i.MXRT1160/1170 芯片 BootROM 看门狗在 eFuse 里配置如下,包含 eFuse 0x9A0[15] 使能位与 eFuse 0x9B0[2:0] 超时时间设置,以及多了 eFuse 0x9B0[5:3] 关于 WDOG_B 外部信号脚选择设置。

2.2 看门狗作用

  对于 i.MXRT10xx 系列,BootROM 看门狗主要用于 Serial Downloader 分支程序下(SDP 模式 BT_MODE = 2'b01,或者 Device Boot 模式 BT_MODE = 2'bx0 下启动失败进入了 Serial Downloader)检测与主机通讯情况,只要在设置的超时时间里没有通信交互行为,看门狗就会复位整个系统(并不是单次通信就可以的,任意超时时间内都得保持交互)。如果在 Device Boot 模式下能够正常启动程序,则看门狗不会被使能。

  对于 i.MXRT1160/1170 系列,BootROM 看门狗不仅在 Serial Downloader 分支程序中有效,其在 Device Boot 模式下(BT_MODE = 2'bx0)也同样被使能了,这样做主要有两个用意:

  • 用意1: 如果因板级电路干扰导致首次启动程序失败,BootROM 正常是直接跳转到了 SDP 模式不会再做启动程序行为。但是使能了看门狗,则在 SDP 模式下等待超时时间后系统复位会重新尝试启动程序,这样不断尝试直到板级干扰消失。
  • 用意2: 如果启动程序成功,BootROM 会直接跳转到目标应用程序,但无法检验目标程序是否能够正常执行。但是使能了看门狗,如果应用程序不对看门狗做有效处理,系统还是会复位回来,这样相当于做了应用程序是否执行的验证。

三、WDOG使能后对i.MXRT开发的影响

  现在回到文章开头提到的客户问题,如何判断 BootROM 中 WDOG 已经生效了,这个其实特别简单,在 SDP 模式下插上 USB 线,在资源管理器里观察是不是有 HID 设备每隔一段时间就会重新枚举一次,没错就是 WDOG 捣的鬼。

  那么对于应用程序的开发,有什么注意事项呢?对于 i.MXRT10xx 其实没有任何影响,而对于 i.MXRT1160/1170,则必须在应用程序里增加对 WDOG1 的处理。在恩智浦提供的头文件 system_MIMXRT1xxx.c 文件里 SystemInit() 函数中其实有关于看门狗相关代码,默认是将全部的看门狗都关一遍(DISABLE_WDOG=1),这部分代码对于 i.MXRT10xx 程序是可以不做的,但是对于 i.MXRT1160/1170 就必须要做了。

  至此,系统看门狗WDOG1在i.MXRT1xxx系统启动中的应用及影响痞子衡便介绍完毕了,掌声在哪里~~~

欢迎订阅

文章会同时发布到我的 博客园主页CSDN主页知乎主页微信公众号 平台上。

微信搜索"痞子衡嵌入式"或者扫描下面二维码,就可以在手机上第一时间看了哦。

痞子衡嵌入式:聊聊系统看门狗WDOG1在i.MXRT1xxx系统启动中的应用及影响的更多相关文章

  1. 痞子衡嵌入式:系统时钟配置不当会导致i.MXRT1xxx系列下OTFAD加密启动失败

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是系统时钟配置不当会导致i.MXRT1xxx系列下OTFAD加密启动失败问题. 我们知道,i.MXRT1xxx家族早期型号(RT1050/ ...

  2. 痞子衡嵌入式:利用GPIO模块来测量i.MXRT1xxx的系统中断延迟时间

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT1xxx的系统中断延迟时间. 在 <Cortex-M系统中断延迟及其测量方法简介> 一文里,痞子衡介绍了 Cor ...

  3. 痞子衡嵌入式:改动i.MXRT1xxx里IOMUXC_GPR寄存器保留位可能会造成系统异常

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是改动i.MXRT1xxx里IOMUXC_GPR寄存器保留位可能会造成系统异常. 痞子衡的嵌入式技术交流群里有一位非常活跃的朋友(网名:文 ...

  4. 痞子衡嵌入式:聊聊i.MXRT1170双核下不同GPIO组的访问以及中断设计

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT1170双核下不同GPIO组的访问以及中断设计. 在双核 i.MXRT1170 下设计应用程序,有一个比较重要的考虑点就是外 ...

  5. 痞子衡嵌入式:ARM Cortex-M内核那些事(6)- 系统堆栈机制

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是ARM Cortex-M堆栈机制. 今天给大家分享的这篇依旧是2016年之前痞子衡写的技术文档,花了点时间重新编排了一下格式.前面痞子衡 ...

  6. 痞子衡嵌入式:聊聊i.MXRT1xxx上的普通GPIO与高速GPIO差异及其用法

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT上的普通GPIO与高速GPIO差异. GPIO 可以说是 MCU 上最简单最常用的外设模块了,当一些原生功能外设接口模块不能 ...

  7. 痞子衡嵌入式:JLink Script文件基础及其在IAR下调用方法

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是JLink Script文件基础及其在IAR下调用方法. JLink可以说是MCU开发者最熟悉的调试工具了,相比于其他调试器(比如DAP ...

  8. 痞子衡嵌入式:嵌入式Cortex-M中断向量表对齐原则的深入研究

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是Cortex-M中断向量表对齐原则. 今天这篇文章的内容主要来自于五年前做 Kinetis K32W 系列双核启动时的发现,最近正好有同 ...

  9. 痞子衡嵌入式:深扒IAR启动函数流程及其__low_level_init设计对函数重定向的影响

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是IAR启动函数流程及其__low_level_init设计对函数重定向的影响. 上一篇文章 <IAR下RT-Thread工程自定义 ...

随机推荐

  1. 反射操作dll类库之普通类和各种方法调用

    一.使用方法 查找DLL文件, 通过Reflection反射类库里的各种方法来操作dll文件 二.步骤 加载DLL文件 Assembly assembly1 = Assembly.Load(" ...

  2. mysql备份灵活恢复

    mysql备份灵活恢复 服务上线遇到一个问题,开始操作前做了全库备份,但是没有做要操作的库备份,如果操作过程出现失败情况需要回退时,直接用全备文件做全库恢复很不妥当. 通过mysql的全备份文件,可以 ...

  3. Axure在Chrome浏览解决方案

    AXURE RP EXTENSION FOR CHROME Google Chrome浏览器需要扩展程序才能查看本地存储的项目.或者,将您的RP文件上传到Axure Cloud或使用其他浏览器.您也可 ...

  4. 什么是编织(Weaving)?

    为了创建一个 advice 对象而链接一个 aspect 和其它应用类型或对象,称为编 织(Weaving).在 Spring AOP 中,编织在运行时执行.

  5. python中dtype,type,astype的区别

    python中dtype,type,astype的区别 type() dtype() astype() 函数名称 用法 type 返回参数的数据类型 dtype 返回数组中元素的数据类型 astype ...

  6. Python中的numpy库介绍!

    转自:https://blog.csdn.net/codedz/article/details/82869370 机器学习算法中大部分都是调用Numpy库来完成基础数值计算的.安装方法: pip3 i ...

  7. SQL之总结(四)---null问题的处理

    概述:如果表中的某个列是可选的,那么我们可以在不向该列添加值的情况下插入新记录或更新已有的记录.这意味着该字段将以 NULL 值保存. NULL 值的处理方式与其他值不同. NULL 用作未知的或不适 ...

  8. PHP基于Thinkphp5的砍价活动相关设计

    近期我们公司项目里陆陆续续有很多为了招引新用户的活动推出,砍价的活动由我来负责,我们的项目是在微信浏览器里供用户浏览访问. 大概描述:进入砍价活动列表页选择有意向的商品,用户点击商品图片可以看到WEB ...

  9. [护网杯 2018]easy_tornado 1

    复现一道关于tornado的题目 首先可以得知此题用的是tornado,基于python的后端框架,多半是ssti注入 有三个文件,首先可得知flag在何处 然后观察hint和url就知道要根据coo ...

  10. [computer vision] Bag of Visual Word (BOW)

    Bag of Visual Word (BoW, BoF, 词袋) 简介 BoW 是传统的计算机视觉方法,用一些特征(一些向量)来表示一个图像.BoW的核心思想是利用一组较为通用的特征,将图像用这些特 ...