BC840 Low power current in System ON

I am using a BC840 on custom PCB for a low power data logging application and am struggling to get lower than 270uA sleep current. This part has the 32mHz external crystal and our custom PCB provides the 32.768kHz crystal. I am using upstream Zephyr and I've created a custom board config from the nrf52840dk as a starting point, adjusting the IO as needed for our minor differences. When I go to System OFF mode I see 20uA of current, which is the same passive current draw from the PCB when the BC840 is not installed (via PCIE connector). From what I've read and the people I've talked to, I should be able to get to the double digits of uA while in System ON (my target is less than 50uA). I think the difference with my application is the external 32mHz crystal on the BC840, but from what I understand the CPU should be disabling this clock source when nothing is using it. I have created the most basic application which just goes straight into a `k_sleep(K_FOREVER)`, and when I go into System OFF before the sleep it gets very low current draw, but if I stay in System ON it sits at 270uA. I am suspecting that the 32mHz crystal is staying powered, but I'm really not sure. 

These are the KConfig options


CONFIG_SERIAL=n
CONFIG_CONSOLE=n
CONFIG_SHELL=n
CONFIG_LOG=n
CONFIG_GPIO=y
CONFIG_BOOTLOADER_MCUBOOT=y
CONFIG_PM=y
CONFIG_PM_DEVICE=y

CONFIG_CLOCK_CONTROL_NRF_K32SRC_XTAL=y
CONFIG_CLOCK_CONTROL_NRF_K32SRC_EXT_FULL_SWING=y
CONFIG_CLOCK_CONTROL_LOG_LEVEL_DBG=y

and the code

void main(void)
{
    // pm_power_state_force((struct pm_state_info){PM_STATE_SOFT_OFF, 0, 0});

    k_sleep(K_FOREVER);
}

Parents
  • I have configured only the GPIO I am using, so there should be none that are accidentally input floating. I assume the default state of IO is high-z and they should be left floating? I did try the finger test, but the footprint is BGA so it probably isn't of much help. I just audited all of the GPIO again and everything looks to be configured correctly. 

    Do you know if there is anything special I need to do in order to ensure the 32MHz external crystal is disabled during sleep? The technical reference says that power savings clock control is done automatically when nothing is using it, but perhaps it's not actually getting disabled. The shell command `nrf_clock_control` does show the HFCLK as being "off" when sleeping, but maybe there's a bug?

    The current draw from the MCU is 250uA, since 20uA is the quiescent current of the PCB.

Reply
  • I have configured only the GPIO I am using, so there should be none that are accidentally input floating. I assume the default state of IO is high-z and they should be left floating? I did try the finger test, but the footprint is BGA so it probably isn't of much help. I just audited all of the GPIO again and everything looks to be configured correctly. 

    Do you know if there is anything special I need to do in order to ensure the 32MHz external crystal is disabled during sleep? The technical reference says that power savings clock control is done automatically when nothing is using it, but perhaps it's not actually getting disabled. The shell command `nrf_clock_control` does show the HFCLK as being "off" when sleeping, but maybe there's a bug?

    The current draw from the MCU is 250uA, since 20uA is the quiescent current of the PCB.

Children
Related