clarification about GRTC.SYSCOUNTER when in low-power sleep

i have a trivially simple "bare-metal" (register-level) test case in which i setup GRTC as follows:

MODE.SYSCOUNTEREN = 1
TASKS.START = 1
TIMEOUT = 2

i also have the LFXTAL configured as my LFCLK....

after this, i go into an *indefinite* sleep....  no GRTC wakeups have been scheduled....

all other things being equal, i find that this (benign) setup adds 0.4uA of *extra* current consumption when sleeping....  (2.1uA without, 2.5uA with)....

i've verified that no SYSCOUNTER[i] is ACTIVE.... 

i've "discussed" this with your AI (very helpful!!!), but it ultimately said we need to ask a human to clarify....  ;-)

Parents
  • Hi,

     

    If you write to any of the registers mentioned here, it will be active in sleep mode:

    https://docs.nordicsemi.com/bundle/ps_nrf54L15/page/grtc.html#d763e406

     

    all other things being equal, i find that this (benign) setup adds 0.4uA of *extra* current consumption when sleeping....  (2.1uA without, 2.5uA with)....

    Which mode(s) are you testing?

    The expected SystemOnIdle current, with full RAM retention, with- and without GRTC, is specified to be just below 3 uA (2.7 vs 2.9):

    https://docs.nordicsemi.com/bundle/ps_nrf54L15/page/chapters/current_consumption/doc/current_consumption.html#ariaid-title4

     

    Kind regards,

    Håkon 

  • i'm not touching any of the GRTC registers which would make SYSCOUNTER active....  i've also verified that the ACTIVE bit is indeed 0....

    what i recently discovered was that i was *not* setting up the CLKCFG register -- which by default is set to LFCLKSRC....  now i have setup the LFCLK to use the LFXTAL -- but apparently i should also explicitly set CLKCFG to LFXTAL as well....

    while everything "works", i found that explicitly setting CLKCFG saved about 0.2uA when sleeping.... my test case is *only* retaining a single 16K SRAM block, which puts me closer to the 2.2uA range....

    i'm trying to match the sleep current achived in nordic's submission to the BlueJoule benchmark (2uA), found at https://github.com/em-foundation/BlueJoule/blob/main/captures/nrf-54-dk/zephyr2-3V0-J/ABOUT.md

    i (wrongly) presumed that the default setting for CLKCFG would be sufficient -- especially since i already bound LFXTAL as my LFCLK....  for whatever reason, it introduced about 0.2uA of additional sleep current....

    i'm still not quite in parity with nordic's code; another 0.2uA to go....  

  • Hi,

     

    If you only retain 16k RAM, the floor current should be below 2 uA. 

    Could you share the test-case that you currently have, so I can try to recreate the scenario on my side?

     

    Kind regards,

    Håkon

  • using the PPK, i just verified that the nordic code referenced above consumes about 1.74uA when sleeping; when awake it transmits a pre-specified BLE advertising packet....

    my own code (completely bare-metal, no zephyr, no softdevice, touching registers only) just measured 2.14uA on the same board....  there is clearly some register i "forgot" to setup correctly....

    another major difference....  the nordic code (based on a sample project in zephyr) is about 92K in size; my code (which performs the identical BLE advertising task) is about 2.5K in size....  and it clearly outperforms the nordic stack when active -- less energy consumed to perform the same task....

    another major difference....  my code is written in a novel (open-source) programming language described at openem.org/emscript....  i could certainly use a review from nordic people who clearly know the subtleties of the nRF54l better than i....

    if you're willing to help, just message me and we'll figure out how to proceed....  just trying to get the most out of your silicon.... 


  • Hi,

     

    I setup a test project in zephyr (first 4 blocks on, system on idle):

    system_on_idle_test_nrf54l15.zip

    Where I tried to replicate the setup that you have. Sorry for the magic numbers on the register level.

    Testing on nRF54L15-DK, with "almost everything" disabled in the board controller application, and 3.0V:

     

    I measure a difference of approx. 0.2 uA if I start the LFXO + setup the GRTC as you initially mention.

    No LFXO: 1.6 uA

    LXFO + RTC: 1.77 uA

     

    As there is a write to the registers mentioned in the docs, the LFXO/GRTC will be kept on, accounting for the added ~0.2 uA:

      

    If you are unsure of the difference between the SoftDevice setup vs. the bare-metal approach, and you think it is related to the clock configuration, you could use Segger Ozone to enter debug mode and look at the register content in both projects, to see if there is anything directly different between the two setups.

     

    Kind regards,

    Håkon

  • i can confirm that there is a 0.2uA difference when i tested your project on my end....  my measurements  were 2.5uA (without GRTC) and 2.7uA (with GRTC) at 3V....  (i must have "old" silicon on my DK???)

    i'm attaching the program Pal Haland submitted....  when idle, it only saves one 16K block of SRAM....  otherwise, i believe all peripherals are disabled when sleeping -- except for the GRTC....

    1373.beacon_advertiser.zip

Reply Children
Related