TC2XX WDT 复位机制与ESR0逻辑分析
本文最后更新于15 天前,其中的信息可能已经过时,如有错误请留言评论。

1. 机制说明:双重 WDT 复位锁定

TC2xx 内置了一套针对看门狗(WDT)和 SMU 触发复位的双重保护机制,目的是防止应用程序因反复无法喂狗而使系统陷入无休止的复位循环。

手册原文(TC27x UM V2.2,Section 7.2.1.10):

If an SMUinduced Application Reset occurs twice, a severe system malfunction is assumed and the TC27x is held in permanent Application Reset until a Power-On or System Reset occurs. This prevents the device from being periodically reset if the application fails to service the watchdog correctly and the watchdog repeatedly times out.

其工作逻辑如下:

  • 第一次 WDT/SMU 触发 Application Reset 时,硬件在内部置位一个”已发生过 SMU 复位”标志
  • 系统正常重启后,若应用代码未主动清除该标志(通过 WDTSCON1.CLRIRF),标志持续保留
  • 一旦再次发生 WDT/SMU 触发的 Application Reset,TC27x 判定为严重系统故障,锁入永久 Application Reset 状态
  • 此状态只能由 Power-On Reset 或 System Reset 解除,Application Reset 级别的操作无法恢复

WDTSCON1.CLRIRF 寄存器说明:

This bit can only be modified if WDTSCON0.ENDINIT is cleared. The internal flag is cleared when ENDINIT is set again. As long as ENDINIT is cleared, the internal flag is unchanged and continues to determine the response to a further SMU reset request. When ENDINIT is set again with a valid Modify Access, the internal flag is cleared together with this bit.

2. 机制说明:ESR0 防反馈保护

与上述锁定机制配合工作的,还有 ESR0 引脚的防反馈保护机制

当 ESR0 被配置为复位输出(reset output)时,Application Reset 发生后硬件会将 SCU_ESROCFG.ARI(Application Reset Indicator)置 1,同时将 ESR0 引脚拉低,向外部设备广播复位信号。

手册原文(Section 7.2.2):

“When the ARI bit is set and an ESR pin is configured as a reset output, the corresponding ESR input will not re-trigger a reset. This prevents feedback of the reset indication causing a new reset request.”

这意味着:ARI=1 期间,ESR0 引脚上的低电平不会被当作新的复位输入来处理,避免了”ESR0 拉低 → 触发复位 → ESR0 继续拉低”的反馈死循环。

ARI 的清除方式:向 ESROCFG.ARC 写 1,需在 Safety ENDINIT 解锁窗口内执行。

3. 实际案例

在定时任务中人为制造逻辑错误,写入死循环导致 WDT 计时溢出。复位之后发现:

  • ESR0 引脚持续为低电平,无法自行恢复
  • 系统无法正常启动,看起来像一直处于 reset 状态
  • 只有断电重上电(或用调试器触发 System Reset)才能恢复

故障链还原

结合上述两个机制,故障链完整还原如下:

第 1 次 WDT 超时
  → Application Reset
  → 内部"已发生过 SMU 复位"标志被置 1
  → 系统重启,但死循环依然存在(或重新进入问题路径)
 
第 2 次 WDT 超时
  → SMU 检测到"已是第二次"
  → 判定为严重系统故障
  → TC27x 锁入永久 Application Reset
 
后续状态:
  ARI=1,ESR0 被持续拉低
  防反馈机制屏蔽 ESR0 输入,阻止再次触发复位
  芯片永远无法完成正常启动序列,ESR0 呈现永久低电平

⚠️ 关键认知:ESR0 低电平是现象,不是原因。芯片并非卡在复位状态无法启动,而是被锁定机制主动阻止了启动。

哪些方式可以解除永久锁定?

断电重上电(Cold Power-On Reset)最彻底,完全清除所有内部标志
拉低 PORST 引脚再释放触发 System Reset,级别高于 Application Reset
调试器执行 System Reset通过 JTAG/DAP 发 System Reset 命令
拉低 ESR0 引脚(作为复位输入)ESR0 默认触发 Application Reset,级别不够
软件写 SW Reset⚠️ 视配置需配置为触发 System Reset 级别才有效

4.  解决方案

核心思路

每次热复位启动时(WDT / ESR / SMU 触发),在 Bootloader 早期主动写 WDTSCON1.CLRIRF = 1,清除内部 SMU 复位标志,打破”双重复位 → 永久锁定”的触发条件。

插入位置

以项目DQ019-01_PD054 为例。在Bootloader_Entry()中,非上电复位路径(else 分支)已有一个 Safety ENDINIT 解锁窗口,可以直接复用,无需额外的 unlock/lock 开销:

// Bootloader_Entry() — else 分支(非上电复位)
else
{
    Bootloader_bPowerResetUB = 0;
 
    // ... numResetUB 计数逻辑 ...
 
    passwordSaftyUW = Bootloader_getSafetyWatchdogPassword();
    Bootloader_clearSafetyEndinit(passwordSaftyUW);
    // ↑ Safety ENDINIT 已解锁,CLRIRF 此时可写
 
    /* ★ 清除双重 WDT/SMU 复位内部标志,防止永久 Application Reset */
    MODULE_SCU.WDTS.CON1.B.CLRIRF = 1;
 
    SCU_RSTCON2.B.USRINFO = Bootloader_infoResetU.U;
    Bootloader_setSafetyEndinit(passwordSaftyUW);
    // ↑ ENDINIT 重新置位时,CLRIRF 内部标志才真正清除(此为生效时机)
}

💡 为什么选这里?

CLRIRF 的生效条件是:写 1 后,再执行一次有效的 ENDINIT 置位(Modify Access)。这里的 setSafetyEndinit 正好承担这个角色,顺序天然吻合,无需任何额外操作。放在 else(非上电复位)分支中语义也准确,不干扰正常上电流程。

5. 总结

涉及机制双重 WDT/SMU 复位锁定 + ESR0 ARI 防反馈保护
故障触发定时任务死循环 → WDT 超时两次 → 永久 Application Reset
现象ESR0 永久低电平,芯片无法正常启动
解除方式断电、PORST、调试器 System Reset
根治方案Bootloader 热复位路径,Safety ENDINIT 窗口内写 WDTSCON1.CLRIRF = 1
手册章节TC2xx UM V2.2 Section 7.2.1.10、SCU WDTSCON1、SCU ESROCFG

使用 TC2xx 开发时,建议将 CLRIRF 清除作为 Bootloader 热复位路径的标准初始化步骤,而不是等到出问题后再补救。

文末附加内容
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇