痞子衡嵌入式:聊聊系统看门狗WDOG1在i.MXRT1xxx系统启动中的应用及影响
大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是系统看门狗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系统启动中的应用及影响的更多相关文章
- 痞子衡嵌入式:系统时钟配置不当会导致i.MXRT1xxx系列下OTFAD加密启动失败
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是系统时钟配置不当会导致i.MXRT1xxx系列下OTFAD加密启动失败问题. 我们知道,i.MXRT1xxx家族早期型号(RT1050/ ...
- 痞子衡嵌入式:利用GPIO模块来测量i.MXRT1xxx的系统中断延迟时间
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT1xxx的系统中断延迟时间. 在 <Cortex-M系统中断延迟及其测量方法简介> 一文里,痞子衡介绍了 Cor ...
- 痞子衡嵌入式:改动i.MXRT1xxx里IOMUXC_GPR寄存器保留位可能会造成系统异常
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是改动i.MXRT1xxx里IOMUXC_GPR寄存器保留位可能会造成系统异常. 痞子衡的嵌入式技术交流群里有一位非常活跃的朋友(网名:文 ...
- 痞子衡嵌入式:聊聊i.MXRT1170双核下不同GPIO组的访问以及中断设计
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT1170双核下不同GPIO组的访问以及中断设计. 在双核 i.MXRT1170 下设计应用程序,有一个比较重要的考虑点就是外 ...
- 痞子衡嵌入式:ARM Cortex-M内核那些事(6)- 系统堆栈机制
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是ARM Cortex-M堆栈机制. 今天给大家分享的这篇依旧是2016年之前痞子衡写的技术文档,花了点时间重新编排了一下格式.前面痞子衡 ...
- 痞子衡嵌入式:聊聊i.MXRT1xxx上的普通GPIO与高速GPIO差异及其用法
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT上的普通GPIO与高速GPIO差异. GPIO 可以说是 MCU 上最简单最常用的外设模块了,当一些原生功能外设接口模块不能 ...
- 痞子衡嵌入式:JLink Script文件基础及其在IAR下调用方法
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是JLink Script文件基础及其在IAR下调用方法. JLink可以说是MCU开发者最熟悉的调试工具了,相比于其他调试器(比如DAP ...
- 痞子衡嵌入式:嵌入式Cortex-M中断向量表对齐原则的深入研究
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是Cortex-M中断向量表对齐原则. 今天这篇文章的内容主要来自于五年前做 Kinetis K32W 系列双核启动时的发现,最近正好有同 ...
- 痞子衡嵌入式:深扒IAR启动函数流程及其__low_level_init设计对函数重定向的影响
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是IAR启动函数流程及其__low_level_init设计对函数重定向的影响. 上一篇文章 <IAR下RT-Thread工程自定义 ...
随机推荐
- 知识点简单总结——Lyndon分解
知识点简单总结--Lyndon分解 Lyndon串 定义:一个字符串的最小后缀就是整个串本身. 等效理解:这个串为其所有循环表示中最小的. Lyndon分解 定义:将字符串分割为 $ s_{1} s_ ...
- 「入门篇」初识JVM
记录于 2022-01-02 17:25:12 GhostFace 1. 什么是JVM? 概念 来自百度百科 JVM是 Java Virtual Machine(Java虚拟机)的缩写,JVM是一 ...
- 从零开始,开发一个 Web Office 套件(13):删除、替换已选中文字
这是一个系列博客,最终目的是要做一个基于 HTML Canvas 的.类似于微软 Office 的 Web Office 套件(包括:文档.表格.幻灯片--等等). 博客园:<从零开始, 开发一 ...
- Mac 常用
Mac下如何复制文件路径 / 文件夹路径 Rudon滨海渔村 2020-08-06 20:35:33 587 收藏分类专栏: Mac OS X 命令行 文章标签: Mac Finder版权步骤在Fin ...
- linux管理用户(组)与相关问题处理
相关联文件如下: /etc/passwd/etc/shadow/etc/group ================================= [切换当前用户为root]sudo -i [创建 ...
- Captcha生成验证码,docker部署时问题
https://blog.csdn.net/huofuman960209/article/details/100738712 Dockerfile FROM openjdk:8-jdk-alpine ...
- ApplicationContext通常的实现是什么?
FileSystemXmlApplicationContext :此容器从一个XML文件中加载beans的定义,XML Bean 配置文件的全路径名必须提供给它的构造函数. ClassPathXmlA ...
- java中的generate
流generate(Supplier s)返回无限顺序无序流,其中每个元素由提供的供应商生成.这适用于生成恒定流,随机元素流等. public class Flow { public static v ...
- 如何从https://developer.mozilla.org上查询对象的属性、方法、事件使用说明和示例
在https://developer.mozilla.org搜索要在前面加上指令 搜索之后点进去 进入之后就是这样的 在页面左边你可以选择自己要查询的对象 里面就是会有属性.方法.事件使用说明和示例.
- Linux 基础优化
1.操作的最小化原则 1)安装系统最小化 一般情况下安装OS时,软件安装包组(Package Group)的选择: base--------------------------基本环境 editors ...