Setup
- Fanstel BC15M-V3 module (nRF54L15, FICR
0x340 = 0x1C,0x344 = 0x01, i.e. Revision 1) on a small custom board. The only other active part is a TDK ICM-45686 IMU, on the same 3.0 V rail, left in its power-on state for the sample runs; its lines go to nRF pins the sample leaves as unused (disconnected) inputs. Supply: 3.0 V from a PPK2 in source-meter mode, straight onto the board's supply rail (100 µF + 0.1 µF decoupling). - NCS v3.4.0,
samples/boards/nordic/system_off. We build with the DK board targetnrf54l15dk/nrf54l15/cpuappplus an overlay that sets the module's crystal load capacitance (HFXO 17 pF, LFXO 7 pF, internal caps per the BC15M datasheet) and disables the DK-only peripherals our board doesn't have (UART, the external SPI flash). Console and the sample's GPIO/GRTC/LPCOMP wake sources are all disabled, via these additions to the sample's config:CONFIG_UART_CONSOLE=n,CONFIG_SERIAL=n,CONFIG_CONSOLE=n,CONFIG_PRINTK=n,CONFIG_GPIO_WAKEUP_ENABLE=n,CONFIG_GRTC_WAKEUP_ENABLE=n. The overlay is attached (3583.pod_bc15m_soc.overlay). The sample's earlyreturnafter a power-on reset was removed — stock, it returns frommain()whenprint_reset_cause()gets a cause of 0, so it never enters System OFF after a POR (worth a note in the sample README).
Measurement conditions (verified)
- Genuine power-on: the rail is drained (device powered off while awake and left off for 20 s, or the supply rail shorted to 0 V) before each run. The firmware records
RESETREASat the very start ofmain():0x0. - No debug power request at the time
sys_poweroff()is called: TADSYSPWRUPREQ = 0,DBGPWRUPREQ = 0(read by the firmware itself, saved to RRAM, read back afterwards). - Current is steady at the 1 ms scale (per-second minimum of 1 ms windows ≈ the average), so this is not a wake/reboot loop. A 10 s raw capture at 100 µs resolution (101k samples) reads mean 40.2 µA, max 44.3 µA, zero samples above 100 µA.
Results (steady current in System OFF, 3.0 V)
| variant of the stock sample | current |
|---|---|
| VREGMAIN DC/DC (DK default) | 35-36 µA |
| VREGMAIN LDO | 145 µA |
| LFRC instead of LFXO | 36 µA |
| DK crystal load caps instead of module values | 36 µA |
The sample was measured on two of our five boards (35-38 µA on both). Our own application sleeps at 40-44 µA (incl. ~8 µA IMU wake-on-motion) on all five — verified with no debug probe connected at all on one board; the other four were measured with a probe attached but idle. The DC/DC-vs-LDO ratio (~4×) points at a ~110-145 µA load on the regulated core domain that persists into System OFF. It is not board leakage or the IMU: the unpowered board measures open-circuit on an ohmmeter, and anything powered straight from the 3.0 V rail could not change with the nRF's regulator mode.
Control: the nRF54L15 DK, same sample, same NCS, same 3.0 V, DC/DC
| chip | FICR 0x340 / 0x344 |
System OFF |
|---|---|---|
| BC15M-V3 (all five of ours) | 0x1C / 0x01 (Rev 1) |
36-40 µA |
| nRF54L15 DK (PCA10156 1.0.0) | 0x1C / 0x02 (Rev 2) |
0.92 µA mean (0.73 median, 10 s raw at 100 µs, max 6.7 µA) |
The DK ran the stock sample for its own board (no overlay), powered through its nRF current-measurement header (P6) with nothing else attached. Its figure was taken with its on-board debugger still requesting debug power (emulated System OFF), so its true figure is at most that. The two differ in both the module and the silicon revision, so this does not by itself say which one is responsible.

(Attached image: 10 s of each at 100 µs resolution. The pod trace is our application, so it includes ~8 µA for the IMU's wake-on-motion; the stock sample on the same board sits at 35-36 µA.)
Other observations
- Attaching a debugger to a device in this state and halting shows the core in
nrf_regulators_system_off()(the loop after theSYSTEMOFFwrite), withRESETREAS = 0x800(GRTC). VREGMAIN.INDUCTORDETreads0whileDCDCEN = 1on the BC15M — but the Rev 2 DK (external inductor, 0.92 µA asleep) reads exactly the same, so this is not a clue.SystemInitapplies the erratum 37 write and disablesGLITCHDET(checked in the disassembly). The erratum 37 register (0x5005340C) reads back 0 even immediately after writing 1 with TAD enabled.- A pin reset does not clear it: cold power-on → 40 µA asleep; nRESET shorted to GND by hand (no debugger connected at all) → woke, slept again at the same 40 µA. So this is not the erratum-37-style "high after POR, normal after pin reset" pattern.
- Explicit shutdown before
sys_poweroff()changes nothing (our application, no debugger):sys_clock_disable(), GRTCTASKS_STOP, CLOCKTASKS_XOSTOP/PLLSTOP/LFCLKSTOP, everyMEMCONF.POWER[n].RET/RET2 = 0,RESETREAScleared, then the erratum 37 write plus a >40-cycle delay → still 40 µA (37.6 µA min per 1 ms). - Forcing the Rev 1-only erratum 32 regulator write from
SystemInit(0x50120640 = 0x1EA9E040, which it applies only when FICR0x334 <= 0x180A1D00) atEARLYinit changes nothing: still 40 µA. - The module vendor (Fanstel) confirms these modules are lot B0V3, i.e. B0 = Rev 1 silicon, and that the module contains no other active component: its current consumption is the nRF54L15's.
- Ruled out: erratum 31/37 workarounds, NFC pads (
nfct-pins-as-gpios), LFXO vs LFRC, crystal load caps, glitch detectors, NCS v3.3.0 vs v3.4.0.
Questions
- Is a System OFF current of ~36 µA (DC/DC) / ~145 µA (LDO) known for Rev 1 silicon (FICR
0x344 = 0x01)? Five Rev 1 (B0) BC15M-V3 modules all show it, the module vendor states the module has no other active component, and a Rev 2 DK reads 0.92 µA under the same conditions. - If it is not a known Rev 1 behaviour, what could keep a ~110-145 µA load on VREGMAIN in System OFF, given that it scales with the regulator mode?