Nano 33 BLE - high current during sleep

Hello, I am measuring sleep current of about 90uA (and also spikes up to about 600 uA) and was expecting to see < 20uA. I am trying to get this board to run a year or more on a coin cell battery. I have been trying to figure out what is causing such high current during sleep. My sketch blinks an LED on and off. To minimize sleep current, my sketch disables USB and stops Timer1. I have also set some of the floating IO pins to outputs (specifically, IO lines going to sensors which are un-populated on the Nano 33 BLE). In addition, I have cut the 3.3V jumper on the board and am powering the board with 3.3V directly on the 3V3 pin.

Current measurement is done with a 1x scope probe across a 10 Ohm shunt at the 3V3 pin with USB cable unplugged from the board. While the LED is off, I am measuring average sleep current about 5x higher than I was expecting. Any ideas what peripherals (aside from USB and Timer1) may be on by default and causing high current during sleep? The sketch was uploaded using the Arduino Cloud IDE.

/*
	Blink LED using delay, for measuring sleep current
*/

#include <nrfx.h>
#include <nrf_timer.h>  // reference: https://github.com/NordicSemiconductor/nrfx/blob/master/hal/nrf_timer.h
#include "usb_phy_api.h"

void setup() {
  // initialize pin 2 and LED_BUILTIN as output
  pinMode(2, OUTPUT);
  digitalWrite(2, LOW);
  pinMode(LED_BUILTIN, OUTPUT);
  digitalWrite(LED_BUILTIN, LOW);
  digitalWrite(LED_PWR, LOW);

  //stop non-low-power timer, this timer used for micros();
  NRF_TIMER1->TASKS_STOP = 1; // Stop timer
  
  // stopping timer0, timer2, 3 or 4 has no effect
  // only timers 0 - 4 are defined
  // NRF_TIMER0->TASKS_STOP = 1; 
  // NRF_TIMER2->TASKS_STOP = 1; 
  // NRF_TIMER3->TASKS_STOP = 1;
  // NRF_TIMER4->TASKS_STOP = 1;

  //nrf_saadc_disable();
  //nrf_saadc_enable();   // adc I_sleep = 87 uA (saadc in default config has no effect on sleep current)
  
  // with these I_sleep=91 uA; without these I_sleep=97 uA
  pinMode(PDM_DIN, OUTPUT);   
  digitalWrite(PDM_DIN, LOW);
  pinMode(PDM_CLK, OUTPUT);  
  digitalWrite(PDM_CLK, LOW);
  pinMode(MIC_PWR, OUTPUT);   
  digitalWrite(MIC_PWR, LOW);
  pinMode(VDD_ENV, OUTPUT);      
  digitalWrite(VDD_ENV, HIGH); 
  pinMode(INT_APDS, OUTPUT);       
  digitalWrite(INT_APDS, HIGH);
  
  // pinMode(VDD_ENV, OUTPUT);      //sleep : 1.1 mA 
  // digitalWrite(VDD_ENV, LOW);

  // test with: 124 uA; without: 535 uA
  //stop USB
  //must have #include "usb_phy_api,h"
  get_usb_phy()->deinit();
}

void loop() {
  digitalWrite(LED_BUILTIN, HIGH);  
  digitalWrite(2, HIGH);  
  delay(5000);     
  digitalWrite(LED_BUILTIN, LOW);   
  digitalWrite(2, LOW);  
  delay(5000);  
}

More Clarification and some Suggestions:

Low currents, especially in sensitive circuits, can lead to many sneak paths that might not be immediately obvious. This is a complex problem. To assist you effectively, please provide the following:

  1. Annotated Schematic:
    Include a detailed schematic showing:
  • All connections (power, ground, signal, etc.).
  • Power sources and their ratings.
  • Any links to technical information for the components you're using.
  1. Test Equipment Details:
    Note exactly how the test equipment is connected, including:
  • Probes, ground clips, or other interfaces.
  • Equipment settings (e.g., voltage/current limits, mode).
  1. Clear Pictures:
    Provide clear images of your setup, ensuring:
  • All connections are visible.
  • Labels or markers on key components.

With this information, we can better analyze your system and identify potential causes of sneak paths or unintended currents.

Hello, Please see the requested details of my setup below. As requested, here is a link to the 3.3V LDO and the 1x oscilloscope probe used. Before the test I confirmed LDO VIN=8.70V and VOUT=3.304V.
SparkFun PRT-13032 (Breadboard Power Supply Stick - 5V/3.3V)
Cal Test Electronics CT2678 (1:1 Passive Oscilloscope Probe, 15MHz, 1MOhm Input Resistance, CAT II 300V)


Those are all great suggestions. For my testing I believe there are no test setup related leakage paths disrupting my measurements. I was hoping that the community would also have been keen to get this board working at low current during sleep. Since the initial configuration details of the board are opaque to the Arduino user by design (i.e. fuses and initialization that happens "behind the scenes" prior to running the setup() procedure), I am trying to determine which peripherals (such as ADC, timers, UART, USB, TWI, SPI, ... etc.) are on by default (or turned on during board initialization and/or by fuses) and how to shut these down before sleep so that those peripherals don't consume extra energy during sleep. Again, maybe the Arduino team has already encountered this since some customers want to run this board on a battery. Any help is greatly appreciated.

Sorry I am not that familiar with that particular Arduino but here is a link to the data sheet for it, it will have the information you need. https://www.mouser.com/datasheet/2/297/nRF52840_OPS_v0.5-1074816.pdf It uses a Nordic nRF52840 processor.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.