This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

QSPI current is high at nRF52840DK

Hi,

I have measured QSPI current consumption on our product at no access period, and got 1mA (too high current!).

So I tried to check with nRF52840 DK to confirm our source code is wrong or not.

 I tested SDK14.2 example of QSPI (examples/peripheral/qspi) with nRF52840 DK measuring with PPK board.

I put the following code to main.c, and check current  by 2 cases.

white (true) {
    __WFE();
}

case1. put them just after startup of main() -> 2uA.

 (this is just check board setting is correct)

case2. put them after read instruction(after NRF_LOG_INFO("Data read"))  -> about 1mA

Do you have any idea to reduce this 1mA current?

Best regard, 

  • Hi,

    Calling "__WFE(); __SEV(); __WFE();" does not change current(I mean around 985uA).

    I know current goes down to about 2uA if I call nrf_drv_qspi_uninit() with anomaly 122.

    But our objective is reduce current at standby time.

    So your solution is,  call nrf_drv_qspi_uninit() -> nrf_drv_qspi_init() -> configure_memory() every Flash ROM access?

    Calling configure_memory() needs recovery time, so this solution is not realistic.

    If you have more simple solution, please advice me.

    (ex. disable QSPI module clock)

    Best regards,

  • Hi

    In order to achieve current below ~900uA, you will have to uninitialize the QSPI driver and go to standby (WFE). In order to uninitialize it correctly while taking anomaly 122 into consideration, you should add something like this before calling the WFE.

        *(volatile uint32_t *)0x40029010ul = 1ul;
        *(volatile uint32_t *)0x40029054ul = 1ul;
        nrf_drv_qspi_uninit();

    Do you have to configure the memory every time you initialize the QSPI? If so, I don't think you will get the current consumption very much lower while the QSPI driver is running.

    Best regards,

    Simon

  • Hi,

    Thank you very much.

    I understand what you said that configure_memory() is not necessary.

    So I  call nrf_drv_qspi_uninit() -> nrf_drv_qspi_init() every Flash ROM access and get 3uA.

    Best regards,

Related