Hi there,
I’ve tested with this one , whenever I’m looking to save Power. usually les than 13 ua.
// Lowest power BSP 1.1.8 less than 20 ua.
// d:\Users\Dude\Pictures\ppk-LoPower_ Sketch_.png
//
#include "Adafruit_SPIFlash.h"
#include <nrf52840.h>
#define DO_WORK_PIN D2
#define SHUTDOWN_PIN D3
Adafruit_FlashTransport_QSPI flashTransport;
SemaphoreHandle_t xSemaphore;
bool gotoSystemOffSleep = false;
int work_LED_status = HIGH;
void setup()
{
pinMode(LED_RED, OUTPUT);
pinMode(LED_GREEN, OUTPUT);
pinMode(LED_BLUE, OUTPUT);
digitalWrite(LED_RED, HIGH);
digitalWrite(LED_GREEN, HIGH);
digitalWrite(LED_BLUE, work_LED_status);
pinMode(DO_WORK_PIN, INPUT_PULLUP_SENSE);
attachInterrupt(digitalPinToInterrupt(DO_WORK_PIN), doWorkISR, FALLING);
pinMode(SHUTDOWN_PIN, INPUT_PULLUP_SENSE);
attachInterrupt(digitalPinToInterrupt(SHUTDOWN_PIN), shutdownISR, FALLING);
//start bluefruit (this also starts the soft device if you don't start the sd then none of your sd_* calls will do anything
//Bluefruit.begin();
QSPIF_sleep();
xSemaphore = xSemaphoreCreateBinary();
// Flash green to see power on, reset, and wake from system_off
digitalWrite(LED_GREEN, LOW);
delay(1000);
digitalWrite(LED_GREEN, HIGH);
delay(1000);
digitalWrite(LED_GREEN, LOW);
delay(1000);
digitalWrite(LED_GREEN, HIGH);
NRF_POWER->DCDCEN = 1;
NRF_POWER->TASKS_LOWPWR = 1;
uint32_t dcdcen = NRF_POWER->DCDCEN;
//uint32_t tasks_lowpwr = NRF_POWER->TASKS_LOWPWR;
//Serial1.print("DCDCEN: 0x");
//Serial1.println(dcdcen, HEX);
//Serial1.print("TASKS_LOWPWR: 0x");
//Serial1.println(tasks_lowpwr, HEX);
}
void doWorkISR()
{
xSemaphoreGive(xSemaphore);
}
void shutdownISR()
{
gotoSystemOffSleep = true;
xSemaphoreGive(xSemaphore);
}
void loop()
{
// FreeRTOS will automatically put the system in system_on sleep mode here
xSemaphoreTake(xSemaphore, portMAX_DELAY);
if (gotoSystemOffSleep)
{
//Flash red to see we are going to system_off sleep mode
digitalWrite(LED_RED, LOW);
delay(1000);
digitalWrite(LED_RED, HIGH);
NRF_POWER->SYSTEMOFF=1; // Execution should not go beyond this
//sd_power_system_off(); // Use this instead if using the soft device
}
// Not going to system off sleep mode, so do work
work_LED_status = !work_LED_status;
digitalWrite(LED_BLUE, work_LED_status);
//Serial.println(" working");
}
void QSPIF_sleep(void)
{
flashTransport.begin();
flashTransport.runCommand(0xB9);
flashTransport.end();
}
getting this PPK power on battery…
here is the DUT…
HTH
GL PJ
Add the D2 D3 jumper to ground (touch) to switch modes, Work , and Power down.
Works well.
Power down average is 2.72uA.