nrf5340

[160] REGULATORS: VREGMAIN and VREGRADIO can malfunction in DC/DC mode

This anomaly applies to Revision 1, build codes CLAA-D00, QKAA-D00.

Domains

Application, Network

Symptoms

Device behaves erratically. This occurs more likely at lower than room temperatures.

Conditions

VREGMAIN or VREGRADIO is in DC/DC mode.

Consequences

CPU lockup reset is triggered, watchdog reset is triggered if watchdog is enabled, or device is unresponsive.

Workaround

On the application core, perform the following operations before enabling DC/DC operation on VREGMAIN or VREGRADIO.

*((volatile uint32_t *)0x5000470C) = 0x7Eul;
*((volatile uint32_t *)0x5000493C) = 0x7Eul;
*((volatile uint32_t *)0x50002118) = 0x7Ful;
*((volatile uint32_t *)0x50039E04) = 0x0ul;
*((volatile uint32_t *)0x50039E08) = 0x0ul;
*((volatile uint32_t *)0x50101110) = 0x0ul;
*((volatile uint32_t *)0x50002124) = 0x0ul;
*((volatile uint32_t *)0x5000212C) = 0x0ul;
*((volatile uint32_t *)0x502012A0) = 0x0ul;
On the network core, perform the following operations at boot:

*((volatile uint32_t *)0x41002118) = 0x7Ful;
*((volatile uint32_t *)0x41080E04) = 0x0ul;
*((volatile uint32_t *)0x41080E08) = 0x0ul;
*((volatile uint32_t *)0x41002124) = 0x0ul;
*((volatile uint32_t *)0x4100212C) = 0x0ul;
*((volatile uint32_t *)0x41101110) = 0x0ul;
nRF5340 Product Specification electrical parameters INETCPU1, INETCPU2, INETCPU4, INETCPU5, IAPPCPU3, IAPPCPU5, IAPPCPU9, and IAPPCPU11 are increased by 5-10%.

In addition to the register write, there is a runtime requirement. Ensure that CPU is not switched between active and sleep (WFI/WFE) more than five times within a 200 ┬Ás period.

Implemented workaround:
  • Register writes are included in MDK version 8.53.0.
  • Workaround is included in nRF Connect SDK version 2.3.0. It covers the register writes and the timing restriction for switching between active and sleep mode. The workaround for the timing restriction is implemented in k_cpu_idle() and k_cpu_atomic_idle().
    • Requirements for application:
      • Must use k_cpu_idle() or k_cpu_atomic_idle() when requesting CPU sleep.
      • Must ensure that the Zephyr system clock is running (CONFIG_SYS_CLOCK_EXISTS=y).