你好,
我正在阅读 KW47 参考手册,但我对 WDOG 低功耗模式和系统电源模式之间的关系感到困惑。
在 WDOG 章节中,控制和状态寄存器包含以下位:
- 等待:
“使 WDOG 在芯片处于等待模式时也能运行。”
- 停止:
“使 WDOG 在芯片处于停止模式时也能运行。”
WDOG章节还指出:
- 在停止模式下,选定的 WDOG 时钟源必须保持活动状态。
- 对于调试模式和停止模式,必须使用总线时钟以外的时钟源。
另一方面,“电源模式”章节描述了:
睡眠模式:
CPU执行已停止。
- 核心时钟已关闭
系统时钟和总线时钟可能会继续运行
深度睡眠模式:
- 核心时钟已关闭
系统时钟已关闭
总线时钟已关闭
基于以上描述,可以合理地解释如下:
- 等待模式 ≈ 睡眠模式
- 停止模式 ≈ 深度睡眠模式
然而,我尚未在参考手册中找到任何明确说明来证实这种映射关系。
我的问题是:
1. WDOG 等待模式是否对应于 KW47 的电源模式睡眠模式?
2. WDOG 停止模式是否对应于 KW47 的电源模式深度睡眠模式?
3. 或者说,Wait/Stop WDOG 是 CPU 特有的状态,与 SoC 电源模式不同?
4. 是否有参考手册章节或应用笔记明确描述了这种关系?
感谢您的帮助。
你好,希望你一切都好。
KW47 参考手册中使用的术语与将 WDOG 控制寄存器中的 WAIT 和 STOP 字段解释为对芯片/内核低功耗状态的引用,而不是对 WDOG 特定 CPU 状态的引用是一致的。我会将这种关系描述为功能对应,而不是严格的等价关系。
从这个意义上讲,WDOG WAIT 对应于等待/睡眠类条件,其中 CPU 执行停止,但系统和总线时钟可能仍然可用。WDOG STOP 对应于停止/深度睡眠类条件,其中内核、系统和总线时钟被门控,看门狗只有在配置为使用在该模式下保持活动的时钟源时才能继续工作。
此致,
索菲亚。
你好,索菲亚,
感谢您之前的解释。
根据您的回复,我的理解是:
- WDOG WAIT 对应于等待/睡眠类低功耗状态。
- WDOG STOP 对应于停止/深度睡眠级别的低功耗状态。
- 这种关系是一种功能对应关系,而不是严格的一对一映射关系。
再次查阅KW47参考手册后,我发现了以下章节:
28.4 模块在低电源模式下的运行
表 225:Cortex M33 核心模块在低电源模式下的运行情况
对于 WDOGx,表格显示:
- 睡眠:开启
- 深度睡眠:可选
- 关机:可选
深度关机:关闭
从这张表中,我了解到 WDOG 操作至少可以在深度睡眠和关机模式下配置。
为了更好地了解其行为,我使用 KW47-Loc 评估板进行了测试。
测试条件:
- 已启用 WDOG
- WDOG 刷新由 vApplicationIdleHook() 执行
- PWR_EnterLowPower() 由 FreeRTOS vPortSuppressTicksAndSleep() 执行
- 观察进入低功耗状态后是否发生看门狗复位
测试结果:
案例 1
等待=0,停止=0
→ 未发生看门狗RESET
案例 2
等待=1,停止=0
→ 看门狗复位发生
案例3
等待=0,停止=1
→ 未发生看门狗复位
我的理解是,当看门狗复位时,设备进入低功耗状态,vApplicationIdleHook() 不再执行,而看门狗继续运行,最终超时。
但是,只有当 WAIT=1 且 STOP=0 时才会发生看门狗 RESET,而当 STOP=1 时则不会发生看门狗 RESET。
由于这个结果,我很难理解在低功耗电源模式下,WAIT 和 STOP 位是如何实际应用于看门狗操作的。
请您澄清以下几点?
1.当设备通过 PWR_EnterLowPower() 进入低功耗模式时,WDOG 操作是由 WAIT 位控制还是由 STOP 位控制?
2. 观察到的结果表明设备实际上进入了睡眠模式而不是深度睡眠模式,还是应该解释为进入了深度睡眠模式?
3. STOP 位是否对应于电源模式章节中描述的深度睡眠模式,还是指不同的低功耗状态?
4. 表 225 中的下列条目应该如何解释与 WDOG WAIT 和 STOP 控制位相关的内容?
- WDOGx:可选的(深度睡眠)
- WDOGx:可选的(掉电)
感谢您的支持。
@hyama你好,很抱歉回复晚了。
您是否使用 SDK 中的示例进行测试?您如何确认设备已进入深度睡眠模式?
根据你描述的情况,设备可能只是进入了睡眠模式。如果设备进入深度睡眠状态,结果则相反:STOP=1(情况 3)应该会导致超时,而 WAIT=1(情况 2)应该不会产生任何影响。WAIT=1 触发 RESET 这一事实表明设备进入了睡眠模式,而不是深度睡眠模式。
回答您的问题:
1.当设备通过 PWR_EnterLowPower() 进入低功耗模式时,WDOG 操作是由 WAIT 位控制还是由 STOP 位控制?
CS[WAIT] 和 CS[STOP] 是独立模式的独立控制,其中 CS[WAIT] 控制睡眠模式下的 WDOG 操作,CS[STOP] 控制深度睡眠模式下的 WDOG 操作。
如果设备进入睡眠模式,则 CS[WAIT] 为活动控制。CS[STOP] 在这里不起作用,因为没有进入深度睡眠状态。如果设备配置为进入深度睡眠状态,则 CS[STOP] 将是活动控制。
2. 观察到的结果表明设备实际上进入了睡眠模式而不是深度睡眠模式,还是应该解释为进入了深度睡眠模式?
结果与进入睡眠模式相符,与深度睡眠不符。根据三个测试用例,系统进入睡眠模式。
3. STOP 位是否对应于电源模式章节中描述的深度睡眠模式,还是指不同的低功耗状态?
根据文档,CS[STOP] 对应于深度睡眠,测试中观察到的行为与此一致(假设没有进入深度睡眠)。
4. 表 225 中的下列条目应该如何解释与 WDOG WAIT 和 STOP 控制位相关的内容?
对于深度睡眠,“可选”意味着如果 CS[STOP]=1 并且配置了总线时钟以外的时钟源,则 WDOG 可以在深度睡眠中运行。对于调试模式和停止模式,必须使用总线时钟以外的时钟源。使用总线时钟,看门狗在架构上可以“启用”,但它的时钟就消失了,除非选择不同的时钟源,例如 32K_CLK。
此致,
索菲亚。
嗨@sofiaurueta
感谢您之前的解释。
> 您是否使用 SDK 中的任何示例进行测试?您如何确认设备已进入深度睡眠模式?
关于您的问题,该测试并非在 SDK 示例项目上进行。这是在我们基于 NXP SDK 的应用程序上执行的。
为了验证设备是否进入深度睡眠模式,我进行了一些额外的调查,发现进入低功耗模式时会执行以下路径:
vPortSuppressTicksAndSleep()
-> PWR_EnterLowPower()
-> PM_EnterLowPower()
-> PM_EnterLowPowerMode()
-> CMC_EnterLowPowerMode()
在 CMC_EnterLowPowerMode() 中,SDK 在执行 WFI 之前设置 SCB->SCR 寄存器中的 SLEEPDEEP 位。
我们理解,设置 SLEEPDEEP 位并执行 WFI 意味着设备进入深度睡眠模式。请问您对KW47的理解是否正确?
我这样问是因为我的 WDOG 测试结果似乎取决于 WAIT 位而不是 STOP 位。
感谢您的帮助。