正如 KW47/MCXW72 勘误中提到的,在驱动强度变为低电平时,DCDC 故障会不时发生,DCDC 输出电压会大于或等于当前输出电压。
为了避免这种特殊情况的发生,可以实施一种软件变通方法,使低功耗低驱动强度模式下的电压等级低于DCDC的当前输出电压。
我们将以低功耗外设参考设计演示应用程序为例,展示变通方案的实现。
首先,此演示项目中的默认 DCDC 配置永远不会触发这个 DCDC 故障,因为 DCDC 始终处于低驱动强度模式。要强制其进入故障状态,我们必须更改 board_dcdc.c 中的 DCDC 设置。DCDC 配置应设置为正常驱动强度模式,输出电压应为 1.25V。
BOARD_DCDC_config(kSPC_DCDC_NormalDriveStrength, kSPC_DCDC_LowUnderVoltage, false);
解决方法需要启用 SPC 高功率模式。
SPC0->HP_CNFG_CTRL |= SPC_HP_CNFG_CTRL_HP_REQ_EN_MASK;
高电源模式下的 DCDC 输出电压设置为 1.35V(高于运行模式和低电源模式下的输出电压):
RF_CMC1->SPC_HP_CTRL |= 0x2U;
SPC_HP 模式将在进入低功耗模式之前立即启用。为此,需要修改 nbu_ble 项目,并根据这一修改重新编程 NBU。
请修改 nbu_ble 项目中的 fwk_platform_lowpower.c 文件。
函数 Platform_handleLowPowerEntry 管理低功耗电源模式入口,因此我们可以在此处添加:
RF_CMC1->SPC_HP_CTRL |= 0x1U; //enable HP mode
while ((RF_CMC1->SPC_HP_STAT && RF_CMC1_SPC_HP_STAT_SPC_HP_ACK_MASH) == 0); //wait for HP mode requested to be ackownledged
RF_CMC1->SPC_HP_CTRL &= 0x0U; //disable HP mode
while ((RF_CMC1->SPC_HP_STAT && RF_CMC1_SPC_HP_STAT_SPC_HP_ACK_MASH) == 0); //wait for HP mode requested to be ackownledged
/* WFI will trigger low power entry procedure */
__DSB();
__WFI();
__ISB();
请注意,此解决方法适用于所有使用低功耗模式的无线连接示例。它不适用于非连接示例。