[KW47]Workaround implementation for DCDC failure during drive strength change

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

[KW47]Workaround implementation for DCDC failure during drive strength change

[KW47]Workaround implementation for DCDC failure during drive strength change

As mentionned in the KW47/MCXW72 errata, a DCDC failure can occur infrequently during a drive strength change to low, and the DCDC output voltage becomes greater than or equal to the current output voltage.

To avoid this particular case from happening, a software workaround can be implemented to make the voltage level at the low-power low drive-strength mode lower than the current output voltage of the DCDC.

We will take the low power peripheral reference design demo application as example to show the workaround implementation.

First of all, the default DCDC configuration in this demo project will never trigger this DCDC failure, because the DCDC is always in low drive-strength mode. To force it to the failure condition, we have to change the DCDC setting in board_dcdc.c. The DCDC configuration should be set to Normal drive strength mode, and the output voltage to 1.25V.

 BOARD_DCDC_config(kSPC_DCDC_NormalDriveStrength, kSPC_DCDC_LowUnderVoltage, false);

The workaround requires the SPC high power mode to be enabled.

  SPC0->HP_CNFG_CTRL |= SPC_HP_CNFG_CTRL_HP_REQ_EN_MASK;

The DCDC output voltage during high power mode is to set to 1.35V (higher than that of the active mode and low power mode):

RF_CMC1->SPC_HP_CTRL |= 0x2U;

 

The SPC_HP mode is to be enabled just at the moment before going into low power mode. To do this, the nbu_ble project needs to be modified, and the NBU needs to be reprogrammed with this change.

In the nbu_ble project, please modify the file fwk_platform_lowpower.c.

The function PLATFORM_HandleLowPowerEntry manages the low power mode entry, thus we can add here:

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();

 

Please note that this workaround is valid for all wireless connectivity examples where low power mode is used. It does not apply to non-connectivity examples.

 

 

Labels (1)
%3CLINGO-SUB%20id%3D%22lingo-sub-2340538%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%5BKW47%5DWorkaround%20implementation%20for%20DCDC%20failure%20during%20drive%20strength%20change%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2340538%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%0A%3CP%3EAs%20mentionned%20in%20the%20KW47%2FMCXW72%20errata%2C%20a%20DCDC%20failure%20can%20occur%20infrequently%20during%20a%20drive%20strength%20change%20to%20low%2C%20and%20the%20DCDC%20output%20voltage%20becomes%20greater%20than%20or%20equal%20to%20the%20current%20output%20voltage.%3C%2FP%3E%0A%3CP%3ETo%20avoid%20this%20particular%20case%20from%20happening%2C%20a%20software%20workaround%20can%20be%20implemented%20to%20make%20the%20voltage%20level%20at%20the%20low-power%20low%20drive-strength%20mode%20lower%20than%20the%20current%20output%20voltage%20of%20the%20DCDC.%3C%2FP%3E%0A%3CP%3EWe%20will%20take%20the%20low%20power%20peripheral%20reference%20design%20demo%20application%20as%20example%20to%20show%20the%20workaround%20implementation.%3C%2FP%3E%0A%3CP%3EFirst%20of%20all%2C%20the%20default%20DCDC%20configuration%20in%20this%20demo%20project%20will%20never%20trigger%20this%20DCDC%20failure%2C%20because%20the%20DCDC%20is%20always%20in%20low%20drive-strength%20mode.%20To%20force%20it%20to%20the%20failure%20condition%2C%20we%20have%20to%20change%20the%20DCDC%20setting%20in%20board_dcdc.c.%20The%20DCDC%20configuration%20should%20be%26nbsp%3B%3CSPAN%3Eset%20to%20Normal%20drive%20strength%20mode%2C%20and%20the%20output%20voltage%20to%201.25V.%3C%2FSPAN%3E%3C%2FP%3E%0A%3CPRE%20class%3D%22lia-code-sample%20language-c%22%3E%3CCODE%3E%20BOARD_DCDC_config(kSPC_DCDC_NormalDriveStrength%2C%20kSPC_DCDC_LowUnderVoltage%2C%20false)%3B%3C%2FCODE%3E%3C%2FPRE%3E%0A%3CP%3EThe%20workaround%20requires%20the%20SPC%20high%20power%20mode%20to%20be%20enabled.%3C%2FP%3E%0A%3CPRE%20class%3D%22lia-code-sample%20language-c%22%3E%3CCODE%3E%20%20SPC0-%26gt%3BHP_CNFG_CTRL%20%7C%3D%20SPC_HP_CNFG_CTRL_HP_REQ_EN_MASK%3B%3C%2FCODE%3E%3C%2FPRE%3E%0A%3CP%3EThe%20DCDC%20output%20voltage%20during%20high%20power%20mode%20is%20to%20set%20to%201.35V%20(higher%20than%20that%20of%20the%20active%20mode%20and%20low%20power%20mode)%3A%3C%2FP%3E%0A%3CPRE%20class%3D%22lia-code-sample%20language-c%22%3E%3CCODE%3ERF_CMC1-%26gt%3BSPC_HP_CTRL%20%7C%3D%200x2U%3B%3C%2FCODE%3E%3C%2FPRE%3E%0A%3CBR%20%2F%3E%0A%3CP%3EThe%20SPC_HP%20mode%20is%20to%20be%20enabled%20just%20at%20the%20moment%20before%20going%20into%20low%20power%20mode.%20To%20do%20this%2C%20the%20nbu_ble%20project%20needs%20to%20be%20modified%2C%20and%20the%20NBU%20needs%20to%20be%20reprogrammed%20with%20this%20change.%3C%2FP%3E%0A%3CP%3EIn%20the%20nbu_ble%20project%2C%20please%20modify%20the%20file%20fwk_platform_lowpower.c.%3C%2FP%3E%0A%3CP%3EThe%20function%26nbsp%3BPLATFORM_HandleLowPowerEntry%20manages%20the%20low%20power%20mode%20entry%2C%20thus%20we%20can%20add%20here%3A%3C%2FP%3E%0A%3CPRE%20class%3D%22lia-code-sample%20language-c%22%3E%3CCODE%3ERF_CMC1-%26gt%3BSPC_HP_CTRL%20%7C%3D%200x1U%3B%20%20%2F%2Fenable%20HP%20mode%0Awhile%20((RF_CMC1-%26gt%3BSPC_HP_STAT%20%26amp%3B%26amp%3B%20RF_CMC1_SPC_HP_STAT_SPC_HP_ACK_MASH)%20%3D%3D%200)%3B%20%2F%2Fwait%20for%20HP%20mode%20requested%20to%20be%20ackownledged%0ARF_CMC1-%26gt%3BSPC_HP_CTRL%20%26amp%3B%3D%200x0U%3B%20%2F%2Fdisable%20HP%20mode%0Awhile%20((RF_CMC1-%26gt%3BSPC_HP_STAT%20%26amp%3B%26amp%3B%20RF_CMC1_SPC_HP_STAT_SPC_HP_ACK_MASH)%20%3D%3D%200)%3B%20%2F%2Fwait%20for%20HP%20mode%20requested%20to%20be%20ackownledged%0A%0A%2F*%20WFI%20will%20trigger%20low%20power%20entry%20procedure%20*%2F%0A%20__DSB()%3B%0A%20__WFI()%3B%0A%20__ISB()%3B%3C%2FCODE%3E%3C%2FPRE%3E%0A%3CBR%20%2F%3E%0A%3CP%3EPlease%20note%20that%20this%20workaround%20is%20valid%20for%20all%20wireless%20connectivity%20examples%20where%20low%20power%20mode%20is%20used.%20It%20does%20not%20apply%20to%20non-connectivity%20examples.%3C%2FP%3E%0A%3CBR%20%2F%3E%0A%3CBR%20%2F%3E%0A%3C%2FLINGO-BODY%3E%3CLINGO-LABS%20id%3D%22lingo-labs-2340538%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CLINGO-LABEL%3EFRDM-RW612%3C%2FLINGO-LABEL%3E%3C%2FLINGO-LABS%3E
No ratings
Version history
Last update:
‎03-26-2026 11:20 AM
Updated by: