AM275x RTI看门狗与RTC寄存器配置实战:从原理到避坑指南 1. 项目概述与核心价值在嵌入式系统开发尤其是汽车电子、工业控制这类对可靠性要求极高的领域系统死机或程序跑飞是绝对不能容忍的。我经历过不止一次因为一个不起眼的时序问题导致整个设备在客户现场“卡死”最后只能靠断电重启来恢复场面非常尴尬。这种时候看门狗定时器就成了守护系统生命线的最后一道硬件屏障。它的原理听起来简单——就像一个需要定期投喂的“电子狗”程序正常运行时就按时“喂狗”重置计数器一旦程序跑飞无法按时喂狗计数器溢出就会强制系统复位把设备从异常状态中拉回来。但真要把这套机制用稳、用对尤其是在像德州仪器AM275x这样集成度高的多核信号处理器上远不是配置一个超时时间那么简单。芯片手册里动辄几十页的寄存器描述哪个先写、哪个后写、写入的值有什么玄机、时序要求如何这些细节直接决定了看门狗是“忠诚卫士”还是“摆设”甚至可能因为配置不当本身成为系统不稳定的根源。最近在调试一个基于AM275x的域控制器项目就深挖了其实时中断模块和实时时钟模块的寄存器配置特别是看门狗密钥和窗口看门狗这些高级功能。我发现很多潜在问题比如误复位、喂狗不及时导致意外复位其根源都在于对寄存器位域功能和交互逻辑的理解不够透彻。因此这篇文章我想抛开手册里冰冷的表格结合实际的调试经验和代码片段把AM275x RTI看门狗和RTC模块里那些关键的、容易出错的寄存器配置掰开揉碎了讲清楚。我们会重点看RTIWDKEY这个喂狗“密码锁”到底怎么安全操作RTIDWDCNTR的计数值如何换算成实际时间以及如何利用窗口看门狗和RTC_COMP时钟补偿寄存器来构建更健壮的系统。目标是让你看完后不仅能配通功能更能理解每一个配置动作背后的“为什么”在自家项目里避开我踩过的那些坑。2. AM275x RTI与RTC模块架构解析在深入寄存器之前我们得先搞清楚AM275x上这两个模块在整个系统里扮演什么角色以及它们之间如何协作。这有助于理解后续的配置流程而不是孤立地记忆寄存器地址。2.1 RTI模块不止是看门狗实时中断模块在AM275x中是一个功能丰富的定时器子系统。它绝不仅仅是一个简单的看门狗而是一个集成了多种定时功能的硬件单元。根据手册AM275x提供了多个RTI实例RTI0-RTI5以及WKUP_RTI0分布在不同的电源域这为系统设计提供了极大的灵活性。核心功能组件包括自由运行计数器作为所有定时功能的时基源头通常由RTICLK1例如3MHz驱动。比较器与中断/DMA生成可以设置多个比较值当自由运行计数器匹配时产生中断或DMA请求用于周期性的任务调度。数字看门狗这是我们关注的重点。它包含一个独立的递减计数器溢出会触发系统复位。它又分为标准超时看门狗只要在超时前“喂狗”即可。窗口看门狗必须在特定的时间窗口内“喂狗”过早或过晚都会触发复位能有效检测程序运行过快或过慢的异常。模拟看门狗用于监控模拟电压此处不展开。这些功能都依赖于对一系列配置寄存器的精确读写。不同的RTI实例可能有不同的物理基地址例如RTI0在0x2080 0000而WKUP_RTI0在0x2B00 0000在编程时首先要正确定位到你想要使用的实例。2.2 RTC模块系统的持久心跳实时时钟模块通常位于一个由电池供电的域即使主系统掉电它也能持续运行维持绝对时间的流逝。AM275x的RTC模块WKUP_RTCSS0是系统时间基准的最终来源。它的核心职责是维持秒计数由一个32.768kHz的慢速晶振驱动通过RTC_SUB_S_CNT和RTC_S_CNT寄存器形成一个48位的秒计数器可以记录超过9000年的时间这对于需要记录事件发生时刻的应用至关重要。提供定时唤醒事件通过RTC_ON_OFF_S_CNT和RTC_OFF_ON_S_CNT寄存器可以设置系统从低功耗模式唤醒或进入低功耗模式的时间点。时钟精度补偿通过RTC_COMP寄存器可以对32.768kHz晶振的频率偏差进行软件补偿提高长期定时精度。提供唤醒源管理通过RTC_GENRAL_CTL寄存器配置外部唤醒引脚的使能、极性和去抖。RTC和RTI的关系是协同的。RTC提供长期的、绝对的时间基准和低功耗唤醒而RTI则提供高精度的、相对的时间间隔测量和看门狗功能。在一些低功耗场景下系统可能由RTC事件唤醒唤醒后再启动RTI进行更精细的任务调度和运行监控。2.3 关键寄存器概览与寻址面对数十个寄存器我们需要抓住重点。对于看门狗功能以下RTI寄存器是核心寄存器名称 (偏移地址)核心功能描述所属模块RTIWDKEY (0x9C)看门狗喂狗密钥寄存器。必须按特定序列写入才能安全复位看门狗计数器写错值直接导致复位。RTIRTIDWDCNTR (0xA0)数字看门狗递减计数器。只读用于查看当前剩余的计数可推算距离复位的剩余时间。RTIRTIDWWDRXNCTRL (0xA4)窗口看门狗反应控制。配置窗口看门狗违规时触发复位还是不可屏蔽中断。RTIRTIDWWDSIZECTRL (0xA8)窗口看门狗窗口大小控制。配置喂狗有效窗口相对于整个超时周期的比例。RTIRTIINTCLRENABLE (0xAC)比较中断自动清除使能。配置比较匹配事件是否自动清除中断标志。RTI对于RTC的时间与补偿功能这些寄存器是关键寄存器名称 (偏移地址)核心功能描述所属模块RTC_S_CNT_LSW (0x08)秒计数器低32位。与MSW组成48位秒计数器。RTCRTC_S_CNT_MSW (0x0C)秒计数器高16位。RTCRTC_COMP (0x10)时钟补偿寄存器。用于校准32.768kHz晶振的频率偏差。RTCRTC_GENRAL_CTL (0x50)RTC通用控制寄存器。控制RTC工作模式、读写冻结、唤醒使能等。RTC注意所有寄存器的访问都必须在特权模式下进行。用户模式下的写操作是无效的某些寄存器的读操作返回值可能是不确定的。在编写驱动时务必确保你的代码运行在正确的执行级别。3. 看门狗核心寄存器深度解析与实战配置理解了架构我们就可以深入到每个关键寄存器的比特位看看它们具体如何控制看门狗的行为。这里我会结合代码片段和实际配置逻辑来讲解。3.1 RTIWDKEY喂狗的“安全密钥”这是看门狗最核心、也最容易用错的寄存器。它不像普通寄存器那样随便写个值就能清零计数器而是设计了一套密钥序列来防止误操作。寄存器位域分析位域[15:0] - WDKEY这是关键的密钥字段。复位值是0xA35C。手册描述的精髓特权模式写入时必须连续执行两次独立的写操作先写入0xE51A再写入0xA35C才能成功“喂狗”即放电看门狗电容并重载计数器。写入任何其他值都会立即导致数字看门狗复位。为什么设计得这么复杂想象一下如果程序跑飞PC指针乱跳恰好跳到一段向某个地址写入数据的代码区域而这个地址又巧合是WDKEY寄存器地址那么看门狗就可能被意外“喂食”从而失去监控作用。这种双密钥序列机制极大地降低了这种偶然性因为程序连续两次“恰好”写入这两个特定值的概率极低。实战配置与喂狗流程正确的喂狗操作不是一个简单的WRITE_REG(WDKEY, 0xA35C)。你必须严格遵循序列。下面是一个C语言的示例// 假设 RTI_BASE 是你使用的RTI实例的基地址 #define RTI_WDKEY_REG (*(volatile uint32_t *)(RTI_BASE 0x9C)) void RTI_FeedDog(void) { // 第一步写入第一个密钥 0xE51A RTI_WDKEY_REG 0x0000E51A; // 第二步写入第二个密钥 0xA35C RTI_WDKEY_REG 0x0000A35C; }必须注意的致命细节时序要求手册明确提到写入该寄存器需要3个VCLK周期。这意味着在两次写操作之间以及喂狗操作的整体时间必须考虑这个延迟。你不能在紧邻的两条汇编指令中完成写入。通常编译器优化和缓存可能会影响指令执行速度。一个稳妥的做法是在两次写入之间插入一个短暂的空操作或屏障。void RTI_FeedDog_Safe(void) { RTI_WDKEY_REG 0x0000E51A; // 插入少量空操作或数据内存屏障确保写入完成 __asm__ volatile(nop); __asm__ volatile(nop); __asm__ volatile(nop); RTI_WDKEY_REG 0x0000A35C; }错误的后果如果你不小心先写了0xA35C或者写入了0x1234这样的值看门狗会立即触发系统复位。这在调试阶段非常恼人但却是其安全机制的体现。喂狗任务的位置喂狗操作必须放在系统主循环或高优先级定时任务中确保在程序正常运行时能定期执行。同时要避免在长时间关中断的临界区或低优先级任务中喂狗否则可能导致看门狗超时。3.2 RTIDWDCNTR监视看门狗的“倒计时器”这是一个只读寄存器用于查看数字看门狗递减计数器的当前值。通过读取它你可以诊断系统状态甚至实现一些高级功能。寄存器位域分析位域[24:0] - DWDCNTR25位的递减计数器当前值。复位后初始值为0x1FFFFFF十进制33,554,431。超时时间计算手册给出了一个关键信息当DWD使能且RTICLK1时钟为3MHz时从初始值递减到0会产生一个看门狗复位时间大约是1秒。计数器最大值 2^25 - 1 33,554,431时钟频率 3,000,000 Hz超时时间 计数器最大值 / 时钟频率 33,554,431 / 3,000,000 ≈ 11.185秒等等这里似乎有个矛盾。手册说“1 second”但计算出来是11秒多。实际上这里需要理解看门狗的超时时间是由预加载寄存器设定的而不是由DWDCNTR的初始值单独决定。RTIDWDCNTR的复位值0x1FFFFFF可能是一个上电后的默认加载值。真正的超时时间配置通常通过另一个寄存器如DWD预加载寄存器可能在RTI模块的其他部分来设置。RTIWDKEY喂狗成功时会“将DWD递减计数器的高12位用DWD预加载寄存器的内容重载低13位置为全1”。这意味着超时时间 (预加载值 « 13 0x1FFF) / RTICLK1频率。因此不要直接使用RTIDWDCNTR的复位值来计算你配置的超时时间。你的驱动代码应该根据你设定的预加载值来计算理论超时时间。读取RTIDWDCNTR的价值在于监控剩余时间在调试时定期读取该寄存器可以知道距离复位还有多少“滴答”有助于判断喂狗间隔是否合理。诊断异常如果发现剩余时间异常短可能意味着上次喂狗后程序在某处卡住了很久。3.3 窗口看门狗配置RTIDWWDRXNCTRL与RTIDWWDSIZECTRL标准看门狗只检查“是否超时未喂狗”而窗口看门狗进一步检查“是否在正确的时间窗口内喂狗”。这能检测程序运行过快过早喂狗或过慢过晚喂狗的故障。3.3.1 RTIDWWDRXNCTRL违规反应控制位域[3:0] - WWDRXN控制窗口看门狗违规时的反应。0x5默认违规时触发系统复位。0xA违规时产生一个不可屏蔽中断。这给了软件一个“最后处理”的机会可以在复位前尝试保存关键数据或记录错误信息。其他任何值如果看门狗在窗口外被服务或未被服务也会导致系统复位。配置时机警告手册特别强调即使窗口看门狗计数器已经启用应用也可以更改WWDRXN。但是如果在看门狗服务窗口已经打开后再更改配置则新配置只有在下次成功喂狗后才会生效。这意味着如果你在窗口期内动态改变反应方式可能不会立即生效存在一定的风险。最佳实践是在初始化阶段就确定好使用复位还是NMI并配置好。3.3.2 RTIDWWDSIZECTRL窗口大小控制位域[31:0] - WWDSIZE这个32位寄存器实际上只有几个特定值有效用于设置喂狗窗口相对于整个超时周期的比例。0x00000005窗口大小为100%。这实际上就退化成了标准看门狗整个周期都可以喂狗。0x00000050窗口大小为50%。喂狗必须在超时周期的后50%时间内完成。0x00000500窗口大小为25%。0x00005000窗口大小为12.5%。0x00050000窗口大小为6.25%。0x00500000窗口大小为3.125%。写入任何其他值窗口大小将被强制设置为3.125%。这是一个安全特性如果由于系统干扰导致该字段值错误系统会进入最严格的监控模式窗口最小增加因窗口看门狗触发复位的概率从而让系统能处理配置错误的原因。窗口看门狗工作流程示例假设你设置了超时时间为100ms窗口大小配置为50%0x50。看门狗启动后开始一个100ms的周期。在前50ms即0-50ms是窗口关闭期。在此期间喂狗属于“过早喂狗”会触发违规反应复位或NMI。在后50ms即50-100ms是窗口打开期。你必须在这段时间内成功完成喂狗操作。如果在100ms内都未喂狗属于“超时未喂狗”同样触发违规反应。成功喂狗后计数器重置开始下一个周期。配置代码示例// 启用窗口看门狗窗口大小为25%违规时产生NMI #define RTI_DWWDRXNCTRL_REG (*(volatile uint32_t *)(RTI_BASE 0xA4)) #define RTI_DWWDSIZECTRL_REG (*(volatile uint32_t *)(RTI_BASE 0xA8)) void RTI_ConfigureWindowedWD(void) { // 1. 配置窗口大小25% (0x500) RTI_DWWDSIZECTRL_REG 0x00000500; // 2. 配置违规反应产生NMI (0xA) // 注意确保NMI中断服务例程已正确配置并能快速处理或安全地引导系统复位。 RTI_DWWDRXNCTRL_REG 0x0000000A; // 3. 通常在其他寄存器使能看门狗并设置超时预加载值... // RTI_DWDPRLD_REG ...; // 设置超时值 // RTI_WDCTRL_REG | ENABLE_BIT; // 使能看门狗 }4. RTC模块关键寄存器与应用RTC模块负责维护持久化时间它的配置相对独立但同样需要精操作。4.1 时间读写与同步RTC_S_CNT 系列寄存器RTC的秒计数器是一个48位的值由RTC_S_CNT_LSW和RTC_S_CNT_MSW组成。直接读取这两个寄存器来获取当前时间可能会遇到问题因为你在读取低32位和高16位之间计数器可能已经进了导致读到的是一个“撕裂”的值。解决方案使用读取冻结功能RTC_GENRAL_CTL寄存器的CNT_FMODE字段就是用来解决这个问题的。CNT_FMODE 01当软件读取SUB_S_CNT寄存器时硬件会自动将当前的S_CNT_MSW和S_CNT_LSW值锁存到影子寄存器。随后读取S_CNT_LSW和S_CNT_MSW就能得到一致的48位秒数。CNT_FMODE 10当软件读取S_CNT_LSW时硬件会自动锁存当前的S_CNT_MSW。安全读取时间的函数示例#define RTC_GENRAL_CTL_REG (*(volatile uint32_t *)(RTC_BASE 0x50)) #define RTC_SUB_S_CNT_REG (*(volatile uint32_t *)(RTC_BASE 0x04)) #define RTC_S_CNT_LSW_REG (*(volatile uint32_t *)(RTC_BASE 0x08)) #define RTC_S_CNT_MSW_REG (*(volatile uint32_t *)(RTC_BASE 0x0C)) uint64_t RTC_GetTimeSeconds(void) { uint32_t lsw, msw; uint64_t full_seconds; // 方法1配置为模式01通过读SUB_S_CNT来冻结 // 假设已配置 CNT_FMODE 0x01 (void)RTC_SUB_S_CNT_REG; // 读取操作触发冻结 lsw RTC_S_CNT_LSW_REG; msw RTC_S_CNT_MSW_REG 0xFFFF; // 高16位有效 // 方法2配置为模式10通过读S_CNT_LSW来冻结更常见 // 假设已配置 CNT_FMODE 0x02 // lsw RTC_S_CNT_LSW_REG; // 读取操作触发冻结MSW // msw RTC_S_CNT_MSW_REG 0xFFFF; full_seconds ((uint64_t)msw 32) | lsw; return full_seconds; }4.2 时钟校准RTC_COMP寄存器32.768kHz的晶振受温度、老化等因素影响会有频率偏差可能导致RTC走时不准。RTC_COMP寄存器提供了软件校准的能力。校准原理该寄存器是一个16位的二进制补码值MSB_COMP和LSB_COMP各8位。它定义了每4096秒内需要向32kHz计数器添加或扣除的时钟周期数。如何理解“添加”和“扣除”添加周期如果晶振实际频率偏慢那么真实时间过了4096秒RTC计数的周期数可能不足。为了补偿我们需要“添加”周期让RTC走快一点。此时需要写入一个负数的补码。手册举例要每小时添加一个周期应写入0xFFFF即-1的16位补码。因为4096秒约等于1.14小时所以每小时加1个周期对应每4096秒大约加1.14个周期软件需要计算一个合适的整数值。扣除周期如果晶振实际频率偏快则需要“扣除”周期让RTC走慢一点。此时写入一个正数。手册举例要每小时扣除一个周期应写入0x0001。校准流程测量偏差让RTC运行一个较长的时间例如一周与一个高精度的时间源如GPS、网络NTP进行对比计算累计的时间误差。计算补偿值总误差秒 参考时间 - RTC显示时间。总周期误差 总误差秒 * 32768。每4096秒需补偿的周期数 总周期误差 / (运行总秒数 / 4096)。将结果取整并转换为16位二进制补码形式。写入寄存器将计算出的补偿值写入RTC_COMP寄存器。重要警告手册明确指出值0x7FFF是禁止写入的。这个值可能是硬件保留或具有特殊含义。校准示例假设实测发现RTC每24小时慢2秒即86400秒慢2秒。总周期误差 2秒 * 32768 Hz 65536个周期。每4096秒需补偿周期数 65536 / (86400 / 4096) ≈ 65536 / 21.09 ≈ 3108个周期。因为RTC偏慢需要“添加”周期所以补偿值应为-3108。-3108的16位二进制补码计算3108的十六进制是0x0C24取反加一得到0xF3DC。因此需要向RTC_COMP寄存器写入0xF3DCMSB_COMP0xF3,LSB_COMP0xDC。5. 系统集成配置流程与避坑指南了解了各个寄存器后我们需要把它们串起来形成一个完整的RTI看门狗和RTC初始化的配置流程。这里我分享一个经过验证的启动配置顺序和关键注意事项。5.1 RTI看门狗初始化流程关闭看门狗在初始化任何可能耗时的操作如PLL配置、内存初始化之前确保看门狗处于禁用状态。通常有一个全局的控制寄存器位。配置时钟源确认RTI模块的时钟源如RTICLK1已启用并稳定。通常来自系统PLL或某个分频器。配置超时时间找到DWD预加载寄存器根据所需的超时时间和RTICLK1频率计算并写入预加载值。计算公式预加载值 (超时时间 * RTICLK1频率) 13。因为计数器是25位高12位来自预加载值低13位在喂狗时被置为全1。所以超时时间 (预加载值 13 0x1FFF) / RTICLK1频率。通常手册或SDK会提供计算宏或函数。配置窗口看门狗如果需要设置RTIDWWDSIZECTRL和RTIDWWDRXNCTRL。使能看门狗将看门狗使能位置位。立即进行一次喂狗按照正确序列写入RTIWDKEY启动看门狗计数器。// 伪代码流程 void RTI_Watchdog_Init(uint32_t timeout_ms) { // 1. 禁用看门狗假设控制寄存器位 RTI_WDCTRL_REG ~WD_ENABLE_BIT; // 2. 假设RTICLK1已配置为3MHz // 3. 计算并设置预加载值 uint32_t rticlk_hz 3000000; // 简化计算超时周期数 timeout_ms / 1000 * rticlk_hz uint32_t total_ticks (timeout_ms * rticlk_hz) / 1000; // 预加载值是计数器的高12位需要右移13位因为低13位是1 uint32_t preload_val (total_ticks 13) 0xFFF; // 12位掩码 RTI_DWDPRLD_REG preload_val; // 4. 配置为标准看门狗非窗口模式或配置窗口 // RTI_DWWDSIZECTRL_REG 0x5; // 100%窗口即标准模式 // RTI_DWWDRXNCTRL_REG 0x5; // 超时触发复位 // 5. 使能看门狗 RTI_WDCTRL_REG | WD_ENABLE_BIT; // 6. 立即喂狗启动计数器 RTI_FeedDog_Safe(); }5.2 RTC初始化与时间设置流程解锁RTC寄存器在访问某些RTC控制寄存器前可能需要先通过RTC_KICK0和RTC_KICK1寄存器进行解锁写入特定的密钥值。这是TI许多外设防止误写的保护机制。配置RTC时钟源确保32.768kHz外部晶振已起振且稳定。可能需要配置相关的模拟控制寄存器RTC_ANALOG。设置初始时间向RTC_S_CNT_LSW和RTC_S_CNT_MSW写入初始的秒计数例如从1970年1月1日开始的Unix时间戳。配置读取冻结模式根据你的时间读取策略设置RTC_GENRAL_CTL.CNT_FMODE。配置唤醒功能如果需要设置RTC_GENRAL_CTL中的WKUP_EN,WKUP_POL,WKUP_DB_EN并配置ON_OFF_S_CNT和OFF_ON_S_CNT寄存器来设定唤醒/休眠时间点。应用时钟补偿如果已知晶振偏差计算并写入RTC_COMP寄存器。启动RTC计数器通常通过设置某个控制位来使能秒计数器递增。5.3 常见问题与排查技巧实录在实际项目中我遇到过不少关于这两个模块的“坑”这里总结一下问题1看门狗在调试阶段频繁意外复位。可能原因A喂狗间隔大于超时时间。检查你的喂狗函数是否在所有关键任务循环和中断中都被正确调用。用逻辑分析仪或GPIO翻转测量喂狗间隔。可能原因B喂狗序列被编译器优化或缓存影响。确保喂狗函数中的两次写操作没有被编译器重排并且考虑写入延迟。使用volatile关键字声明寄存器指针并在两次写入间加入内存屏障__asm__ volatile( ::: memory)或足够的空操作。可能原因C程序卡在低优先级任务或关中断区域。确保喂狗任务具有足够高的优先级并且关中断的时间段远短于看门狗超时时间。排查工具在复位前如果能进入NMI中断如果配置了可以在中断里读取RTIDWDCNTR的值并保存到非易失性存储器复位后分析剩余计数判断是接近超时程序慢还是突然复位可能程序跑飞写错WDKEY。问题2RTC时间走不准。可能原因A晶振精度差或负载电容不匹配。检查硬件电路32.768kHz晶振的负载电容需要根据晶振规格书精确匹配。可能原因B未进行软件补偿或补偿值计算错误。长期运行后与标准时间对比重新计算RTC_COMP值。注意补偿值是每4096秒的周期数且是补码格式。可能原因C电池电压不足。在电池备份模式下电池电压过低可能导致RTC工作不稳定甚至停止。排查工具定期记录RTC时间并与可靠时间源对比绘制误差曲线。使用频率计测量32.768kHz晶振引脚的实际输出频率。问题3窗口看门狗在“似乎正常”的喂狗间隔下触发复位。可能原因喂狗时间点落在了窗口之外。窗口看门狗要求喂狗必须在超时周期的后一段窗口期内进行。如果你的喂狗任务周期是固定的但看门狗超时周期和你的任务周期不是整数倍关系或者系统启动时间有抖动可能导致某次喂狗落在窗口外。解决方案确保喂狗任务的最坏情况执行周期小于窗口打开的时间长度。或者将窗口设置得足够宽例如50%以容忍一定的任务时间抖动。在任务开始时读取RTIDWDCNTR估算剩余时间如果发现太早可以适当延迟喂狗。问题4无法写入RTC或RTI的某些寄存器。可能原因A未处于特权模式。确认你的代码运行在特权模式如ARM的Supervisor模式。用户模式下的写操作会被忽略。可能原因B寄存器有写保护。对于RTC检查RTC_KICK寄存器是否已正确解锁。对于RTI某些全局控制寄存器可能在使能后就不能更改需要先禁用再配置。可能原因C时钟未使能。确认该模块的时钟在系统时钟控制器中已被使能。一个实用的调试技巧GPIO标记法。在关键位置如喂狗函数入口/出口、RTC中断入口添加GPIO引脚的高低电平翻转。用示波器或逻辑分析仪观察这些GPIO的波形可以非常直观地看到任务的执行情况、间隔时间以及是否发生了意外的复位。例如在喂狗函数开始时拉高一个GPIO结束时拉低你就能清晰地看到每次喂狗的耗时和间隔。如果波形突然消失紧接着系统重启那就说明看门狗复位了结合复位前的波形可以分析原因。