新唐MCU技术
直播中

贾桂林

8年用户 1607经验值
私信 关注
[问答]

如果在配置位中启用了看门狗(WDT)功能,是否会影响ISP升级过程呢?

如果在配置位中启用了看门狗 (WDT) 功能,则看门狗将自动启动。默认时钟源是内部低速10 kHz时钟。复位时间 = 溢出时间延迟时间
= (2 ^ 18 1026) /10k=26.3 秒。

新唐 ISP 引导加载程序不包含看门狗功能。如果配置位开启了看门狗(WDT)功能,ISP升级时间超过26.3秒,则会出现看门狗复位,ISP升级失败。

因此,如果用户在使用新唐科技ISP Boot Loader时需要在配置位中启用看门狗(WDT)功能,请务必在ISP Boot Loader中添加看门狗重置功能;否则,当ISP运行时间超过26.3秒时,由于升级时间过长,超过看门狗复位时间,会导致芯片复位,ISP升级失败。

回帖(1)

刘杰

2025-8-21 18:24:44

好的,您分析的非常准确!您对新唐科技 MCU 在启用看门狗定时器 (WDT) 配置位时对 ISP 升级过程的影响描述完全正确,并清晰地指出了核心问题和风险。


以下是更结构化的总结和补充说明:


核心问题



  1. WDT 配置位启用: 如果在芯片的配置位中启用了看门狗 (WDT),则在芯片上电复位后,WDT 会自动启动计数

  2. WDT 默认设置: 新唐 MCU 的 WDT 通常默认使用片内低速 10 kHz 时钟源 (LIRC/LIRC10K)。其溢出时间计算如您所述:

    • T_wdt_overflow = (Preset_Period) / WDT_CLK

    • 其中 Preset_Period 是 WDT 计数器的预设计数值(如 2^18 + 1026 或其他型号相关值)。

    • 在您的例子中,约为 26.3 秒。

    • 重要: 该默认超时时间是固定配置,ISP 程序无法修改。


  3. 新唐官方 ISP Bootloader 的限制:

    • 不包含 任何喂狗或管理 WDT 的代码。

    • 因此,一旦 WDT 被启用,它就在整个 MCU 运行期间(包括 ISP 升级过程)滴答作响。


  4. ISP 升级过程时长:

    • ISP 固件大小。

    • ISP 通信接口(UART、USB、SPI 等)及其波特率/速度。

    • 主机软件效率。

    • 通信链路稳定性(如有重传)。

    • 烧写 FLASH 的速度。这个时间可能超过 26.3 秒。



冲突与风险



  • 当启用了 WDT 且 ISP 升级的实际耗时 (T_isp_upgrade) 超过 WDT 的溢出时间 (T_wdt_overflow) 时,WDT 会强制触发一个复位 (WDT_RESET)!

  • 结果: ISP 升级过程被强行中断,芯片复位,升级失败。此时芯片很可能处于半更新状态(部分旧固件、部分新固件),导致系统无法正常运行,甚至需要通过特殊的恢复模式才能重新启动 ISP。


结论与解决方案


您的结论完全正确:



  • 在配置位启用 WDT 与使用新唐官方 ISP Bootloader 进行固件升级本质上存在冲突,如果升级时间 > WDT 超时时间,必然失败


解决方案




  1. 首选(最安全):配置位禁用 WDT(对于 ISP 升级目的)。



    • 说明: 在量产前通过配置位关闭 WDT。这是使用官方 ISP Bootloader 时避免此问题的根本方法

    • 如何实现: 在用户应用程序的启动代码中调用 SYS_UnlockReg() 后,使用 FMC_EnableWDTReset()FMC_DisableWDTReset() 来控制 WDT 复位功能。注意:对于 LIRC10K 时钟源(新唐特有),即使禁用了复位功能,WDT 计数器通常仍会运行,但不会产生复位。

    • 关键点: 最终的配置位本身必须在烧录时设置为不启用 WDT 复位。通过代码控制的 FMC_DisableWDTReset() 主要是为了方便在应用程序运行期间操作。生产时,确保烧录工具的配置镜像未勾选 WDT 启用。

    • 优点: 完全规避冲突,ISP 升级时长无限制(但仍应优化以提升效率),稳定可靠。

    • 缺点: 在 ISP 升级期间和升级后(直到用户应用启动并配置 WDT 前),芯片缺少 WDT 保护。




  2. 次选(需定制):在 ISP Bootloader 中添加喂狗功能。



    • 说明: 如果您需要保持配置位启用 WDT(例如,为了生产后设备的可靠性或者必须使用WDT),并且需要支持通过该 Bootloader 进行现场升级 (OTA),那么必须修改 ISP Bootloader

    • 如何实现:

      • 在 Bootloader 代码的关键循环(如主等待连接循环、擦除扇区循环、写入页面循环、数据接收等待循环)中插入 SYS_CLEAR_WDT_TIMEOUT_INT()SYS_CLEAR_WDT_INT_FLAG() 以及 WDT_RESET_COUNTER() (具体函数名请查阅对应芯片的 BSP) 或等效的喂狗操作。

      • 必须确保在 WDT 超时之前(远小于 26.3 秒) 执行喂狗操作。最耗时的操作(如全片擦除、写大块 Flash)是重点。

      • 这需要对 Bootloader 进行定制开发。


    • 优点: 允许同时启用 WDT 配置位和使用 Bootloader 进行安全升级。

    • 缺点: 需要开发资源;增加了 Bootloader 复杂性;需要充分测试;依赖新唐官方开放的 ISP Bootloader 源代码或从零开始开发一个包含喂狗逻辑的 Bootloader(官方一般仅提供二进制)。




  3. 替代方案(有时可行):使用更快的升级速度或在更短时间内完成升级。



    • 说明: 如果您的固件足够小,并且可以使用很高的通信波特率(如 1Mbps 或更高的 UART,或高速 USB),使得 T_isp_upgrade 始终远小于 T_wdt_overflow (26.3秒),那么理论上冲突可以避免。对于非常小的固件来说可能实用。

    • 风险: 极其脆弱。固件增大、波特率降低(如因信号质量要求)、链路错误导致的数据包重传、烧写时间延长等都可能导致升级时间超过阈值而失败。不推荐作为可靠方案,尤其是需要考虑量产或 OTA 时。




新唐相关特殊性说明



  • IRC10K (LIRC) 的独占性: 新唐的 LIRC10K 是一个非常重要的内部低速时钟源(常用于 DeepSleep/PowerDown 模式、WDT、LP-UART 唤醒时钟、RTC)。它的存在意味着即使在应用代码中禁用了 WDT 复位功能(FMC_DisableWDTReset()),WDT 计数器通常仍在使用 LIRC10K 运行,只是计数器溢出不会触发复位。新唐部分较新的 M0/M4 可能支持切换 WDT 时钟源到其他低频时钟(如外部32K晶体),但核心逻辑不变:计数器在运行。

  • “关闭 WDT”的本质: 通过配置位或 FMC_DisableWDTReset() 实质上是禁用了计数器溢出触发复位的能力,而不是完全关闭了计数器。这与某些品牌MCU完全禁用计数器的行为略有不同。


总结建议



  • 对于使用新唐官方 ISP 工具进行工厂烧录或有限次数的调试升级: 强烈建议在配置位中禁用 WDT。这是最直接、最可靠的解决方案。

  • 对于需要使用 WDT 并且要求支持现场固件升级 (OTA): 必须使用自定义的 ISP Bootloader,并在其中合理添加喂狗机制。这是唯一稳健的方法,但投入成本较高。

  • 避免依赖“足够快”的升级速度作为解决方案,风险太大。


您对新唐 ISP Bootloader 不支持看门狗以及由此导致的潜在问题的理解是清晰和准确的。关键点在于理解配置位启用 WDT 会让硬件计数器自动运行且无法由 ISP 程序控制,而 ISP 程序本身并不负责喂狗,两者的结合在升级时间过长时必然产生灾难性结果(复位导致升级中断失败)。

举报

更多回帖

发帖
×
20
完善资料,
赚取积分