RT10XX 看门狗——RTWDOG系统复位

i.MX RT10XX 看门狗定时器配置与使用指南
本文详细介绍了i.MX RT10XX微控制器中的三个看门狗定时器,特别是WDOG12和WDOG3的区别。WDOG12需要外置32.768K晶体,而WDOG3则有多种时钟源选择,包括Busclock、LPOclock、INTCLK和ERCLK。在没有外部32K晶体时,RTC_XTALI应接GND,RTC_XTALO悬空。同时,基于Busclock的WDOG3喂狗时间不应超过0.11秒。文章提供了简单代码示例,帮助读者理解配置过程。

1 前情提要

        RT10XX有三个看门狗定时器,用法都比较相似,但WDOG12的时钟源必须来自外置32.768K的晶体。WDOG3是窗口看门狗,对于时钟源的选择就没有这么苛刻,有如下选择:

Bus clock来自外置的24M晶体,SDK里面默认是150M(基于i.mx RT106X)
LPO clock和INTCLK默认是外置的32K晶体,若无该晶体,可以自动切到内部32K(精度为10-45KHz)
ERCLK默认是1MHz,来自内部的24M,精度需要基于外置的32K晶体检验,一般是±100KHz

2 设计和注意事项

       若无外置32K的时候,需要注意RTC_XTALI连接到 GND 且 RTC_XTALO 浮空

       若基于Bus clock驱动WDOG3,默认SDK的情况下,喂狗时间不能超过0.11S,不要问我怎么知道,能管Gai的,就能管狗。

3 最简单的code

<think>好的,我现在需要帮用户介绍RT-Thread的看门狗测试。首先,我得回忆一下RT-Thread的基本知识,特别是看门狗(Watchdog)模块的相关内容。RT-Thread是一个实时操作系统看门狗是其重要的硬件外设支持模块之一,用于检测和恢复系统故障。 首先,用户可能想知道什么是看门狗测试,以及如何在RT-Thread中进行。看门狗分为硬件看门狗和独立看门狗,可能用户需要了解它们的区别和使用方法。RT-Thread提供了WDT设备驱动框架,应该包括初始化和配置看门狗、喂狗等操作步骤。 接下来,我需要考虑测试的基本步骤。通常包括初始化看门狗设备、设置超时时间、启动看门狗,然后定期喂狗。如果程序正常运行,喂狗会及时重置计数器;如果出现故障未喂狗,系统复位。测试时需要验证这些流程是否正常工作,比如故意不喂狗,观察系统是否复位。 另外,用户可能需要代码示例来说明具体操作。比如使用rt_device_find查找设备,rt_device_init初始化,设置超时时间,启动看门狗,然后在循环中喂狗。同时,测试异常情况,比如注释掉喂狗代码,检查系统复位情况。 还要注意一些常见问题,比如超时时间设置过短导致频繁复位,或者喂狗间隔过长导致误触发。此外,硬件连接是否正确,驱动是否支持,以及是否在合适的位置初始化看门狗设备。 用户可能还关心如何验证测试结果,比如通过日志输出或系统复位现象来判断看门狗是否起作用。需要提醒在测试时保存关键数据,防止复位导致数据丢失。 总结来说,回答需要结构清晰,分步骤介绍测试流程,提供代码示例,指出注意事项和常见问题,确保用户能够逐步理解和实施看门狗测试。</think>### RT-Thread 看门狗(Watchdog)测试介绍 #### 1. 看门狗的基本概念 看门狗(Watchdog)是嵌入式系统中用于检测和恢复系统故障的硬件模块。若系统因程序跑飞或死循环导致**未及时喂狗**,看门狗会强制复位系统RT-Thread 通过 WDT 设备驱动框架统一管理看门狗外设。 #### 2. 看门狗测试的核心步骤 ##### 步骤 1:初始化看门狗设备 ```c #include <rtdevice.h> static rt_device_t wdt_dev = RT_NULL; /* 查找并初始化看门狗设备 */ wdt_dev = rt_device_find("wdt"); if (wdt_dev == RT_NULL) { rt_kprintf("找不到看门狗设备\n"); return -RT_ERROR; } rt_device_init(wdt_dev); // 初始化设备 ``` ##### 步骤 2:配置超时时间 $$ T_{timeout} = (2^{n} \times \text{预分频系数}) / \text{时钟源频率} $$ ```c /* 设置超时时间为 5 秒 */ rt_uint32_t timeout = 5000; // 单位:毫秒 rt_device_control(wdt_dev, RT_DEVICE_CTRL_WDT_SET_TIMEOUT, &timeout); ``` ##### 步骤 3:启动看门狗 ```c rt_device_control(wdt_dev, RT_DEVICE_CTRL_WDT_START, RT_NULL); ``` ##### 步骤 4:定期喂狗 ```c while (1) { rt_thread_mdelay(2000); // 每 2 秒喂狗一次(需小于超时时间) rt_device_control(wdt_dev, RT_DEVICE_CTRL_WDT_KEEPALIVE, RT_NULL); rt_kprintf("喂狗成功\n"); } ``` #### 3. 测试验证方法 - **正常场景**:程序按时喂狗,系统复位。 - **异常场景**:注释喂狗代码,观察系统是否在超时后复位: ```c // rt_device_control(wdt_dev, RT_DEVICE_CTRL_WDT_KEEPALIVE, RT_NULL); ``` #### 4. 关键注意事项 1. **时间匹配**:喂狗间隔需小于超时时间,例如: $$ T_{feed} < T_{timeout} $$ 2. **硬件差异**:不同芯片的看门狗实现可能影响超时精度。 3. **调试支持**:部分调试器会禁用看门狗,需在真实环境中测试。 #### 5. 典型问题排查 | 现象 | 可能原因 | 解决方案 | |------|----------|----------| | 系统频繁复位 | 未及时喂狗 | 检查喂狗间隔是否超限 | | 无法启动看门狗 | 驱动未实现 | 确认 BSP 是否支持 WDT 驱动 | #### 6. 扩展功能 - **窗口看门狗**:需在特定时间窗口内喂狗。 - **复位原因检测**:通过寄存器判断复位源是否为 WDT。 通过以上步骤和注意事项,可有效验证 RT-Thread 看门狗功能的可靠性。测试时建议结合硬件信号(如复位引脚波形)和软件日志综合分析。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值