你好,
我正在尝试按照 NXP 社区帖子中提供的示例,为 S32K3 系列 (K312) 实现待机模式。
我的项目在正常运行期间使用外部时钟源,并配置看门狗定时器。
根据文档/示例,我的理解是,在进入待机模式之前,我必须切换到使用 FIRC。
如果在进入待机状态之前切换到 FIRC 模式,看门狗定时器会触发信号,从而 RESET MCU。这是预期行为吗?此外,如果我禁用看门狗,MCU 会进入低功耗状态,但不会从唤醒源 RESET。
同时,如果我直接进入待机状态而不切换到 FIRC,看门狗不会触发信号 RESET,MCU 将进入低功耗状态,并会从唤醒源 RESET,正如人们对待机状态的预期一样。
显然,乍一看,方法 2(不切换到 FIRC)似乎有效,但我想澄清一下,因为我观察到垫子保持方面存在一些奇怪的行为。
如果在进入待机状态之前将一个焊盘切换为高电平(方法 2),无论该焊盘是否启用或禁用保持功能,MCU 进入待机状态后,该焊盘仍保持高电平。这让我怀疑MCU是否真的进入了待机状态,还是处于某种中间状态。
我知道这篇帖子写得比较笼统——请告诉我还需要提供哪些背景信息。
此致敬礼,
哈里什
你好@Hareesh_S ,
首先,在进入待机状态之前,必须将系统时钟源更改为 48 MHz 的 FIRC,因为 PLLDIG 在待机模式下不可用。如果不按此顺序操作,可能会导致时钟行为出现意外或无法预料的情况。
如果在进入待机状态之前切换到 FIRC 模式,看门狗定时器会触发信号,从而 RESET MCU。这是预期行为吗?此外,如果我禁用看门狗,MCU 会进入低功耗状态,但不会从唤醒源 RESET。
默认情况下,POR_WDG 已启用,用于监控备用机进入/退出序列,以防出现卡顿情况:
社区提供的示例也会出现这种现象吗?您是否使用RTD API来更改时钟源?
如果在进入待机状态之前将一个焊盘切换为高电平(方法 2),无论该焊盘是否启用或禁用保持功能,MCU 进入待机状态后,该焊盘仍保持高电平。这让我怀疑MCU是否真的进入了待机状态,还是处于某种中间状态。
1.待机模式下,所有引脚将保持其在运行模式下的最后设置状态。
2. 默认情况下,RESET事件后所有引脚都将恢复到其默认状态。
PadKeeping 配置会影响引脚状态 在 K3 的唤醒复位和用户端口初始化之间,存在待机退出序列,在此期间引脚可能进入不可控状态:
此致,
朱利安
你好@Julián_AragónM ,
很抱歉回复晚了。
关于垫子保留功能——看来我误解了垫子保留功能的预期用途。感谢您的澄清。
关于 STANDBY 条目 - 此行为在未经修改的社区示例中无法重现。该序列与社区示例中的预期结果一致。
此外,我现在可以确认,当我的项目切换到 FIRC 时,MCU 会发生硬故障,这就是看门狗触发信号 RESET 的原因。
我已在一个空白项目中重现了这种行为,但无法找出根本原因。我附上了项目文件,请您检查一下,并告诉我我遗漏了什么?
此致,
哈里什·S
你好@Hareesh_S ,
我很高兴 PadKeeping 功能的问题已经解决。
关于您的项目,在调用 Clock_Ip_Init() 之后,我可以看到Clock_Ip_SetRtcRtccClksel_TrustedCall()处出现硬故障。启用PRTN1_COFB1_CLKEN[REQ34] 后,我可以按预期通过 Clock_Ip_Init() API 更改时钟源。
您能否在项目中尝试一下这个修复方法?
此致,
朱利安
你好@Julián_AragónM
在 RUN 域中启用 RTC 模块/外设后,切换到 FIRC 可以按预期工作,并且不会触发硬故障。
我没想到 RTC 会被强制启用,但无论如何,非常感谢你们的快速解决!