Boron - Sleep 2.0 Examples and Power Savings

Can you show me where this was quoted Rftop? It would dramatically change my setup if we could get down to 150uA.

Frankly im a little disappointed in the devs. The nRF52 chip is able to sleep with 1uA with RTC. whats going on here.

Im also only able to get down to 660uA using Sleep2.0. I cant figure out how to get it lower. Im using just a bare boron with no other things attached to it.

1 Like

I wonder who we should ask about this high sleep current readings??

I was excited to see the progress towards lower sleeping current options.

@jack4566 @RWB @wesner0019 The sleep current is still higher than expected. The modem is not shutting down properly - this is being treated as high priority by the Engineering team.

You can get it down quite a bit but is still requires jumping through a few hoops. I’ve personally seen 160 uA on a Boron, so it is possible.
Manual Mode is required and in some cases you need to explicitly turn off the modem.

@no1089,

That would explain the difference between my readings and @Rftop but still leaves some gap between his readings and the expected results.

In my current code, I am using a sequence to help ensure the cellular modem is shut down. I believe this code was originally provided by @rickkas7

bool disconnectFromParticle()                                     // Ensures we disconnect cleanly from Particle
{
  Particle.disconnect();
  waitFor(notConnected, 15000);                                   // make sure before turning off the cellular modem
  Cellular.off();
  delay(2000);                                                    // Bummer but only should happen once an hour
  return true;
}

I was hoping we would not have to do this anymore but, could it be an interim fix? I will do some testing to see if it helps in my connected sketch.

Thanks,

Chip

1 Like

Chipmc you could probably replace your last delay with a _WFE loop to get a smidge more power savings.

1 Like

Any insight into what those hoops are and how one should jump through them would be greatly appreciated.

Yes, sorry this took a while.
I tested this over the weekend, and I am getting a consistent reading of 0.00013A/130uA as shown in the screenshot.


SYSTEM_MODE(MANUAL);

void setup()
{
}

void loop()
{
delay (5000);
powerModemOff(); // See the patch.
SystemSleepConfiguration config;
  config.mode(SystemSleepMode::STOP) 
  .gpio(WKP, RISING) 
  .duration(600s); 
System.sleep(config);
}

bool waitModemPowerOff()
{
    // Verify that the modem was powered down by checking the VINT pin up to 10 sec
 bool powerGood;
 for (unsigned i = 0; i < 100; i++) {
        powerGood = digitalRead(UBVINT);
 if (!powerGood) {
 break;
        }
 delay(100);
    }
 return !powerGood;
}

bool powerModemOff() {
 // Delay enough time to make sure pppncp thread has handled all events.
 delay(20000);
    // Important! We need to disable voltage translator here
    // otherwise V_INT will never go low
 digitalWrite(BUFEN, 1);
    // Low pulse 1.5s+ on UBPWR pin
    // IMPORTANT: SARA R4-based devices need to be using the latest firmware,
    // otherwise shutdown may need to be postponed by at least 30 seconds.
    // Affected version: L0.0.00.00.05.06,A.02.00
 digitalWrite(UBPWR, 0);
 delay(1600);
 digitalWrite(UBPWR, 1);
    // Wait for it to power off again
    bool poweredOff = waitModemPowerOff();
 if (!poweredOff) {
        Log.error("Modem failed to power off explicitly via shutdown sequence");
    }
    // Just in case explicitly disable voltage translator once again
 digitalWrite(BUFEN, 1);
#if PLATFORM_ID == PLATFORM_BORON
    // Do not leak current through antenna switch
 pinMode(ANTSW1, INPUT);
#endif // PLATFORM_ID == PLATFORM_BORON
    // Just in case disable Serial2 connected to the modem
 HAL_USART_End(HAL_USART_SERIAL2);
 return poweredOff;
}

1 Like

@no1089, I’m seeing very different results using the code you provided.
I’m testing with a µCurrent GOLD inline with a Li-Po @ 4.03V resting, Boron LTE on 1.5.1.
The Sleep Current actually ramps up to 10 mA for me with your code.

As a sanity and equipment check, I reflashed the basic code and confirmed 660 µA in Hibernate Sleep.

SYSTEM_MODE(MANUAL);
SYSTEM_THREAD(ENABLED);

  inline void softDelay(uint32_t t) {
  for (uint32_t ms = millis(); millis() - ms < t; Particle.process());  //  safer than a delay()
  }

 SystemSleepConfiguration config;

void setup() {
  config.mode(SystemSleepMode::HIBERNATE).gpio(D0, RISING).gpio(WKP, RISING); 
}

void loop() {
  Cellular.off();  // just for fun
  softDelay(15000);   
  System.sleep(config);  
}

I noticed from your screenshot that you are using a 10A range.
Do you have a lower option ?

2 Likes

I concur with rftop. That code doesn’t provide 130uA.

I was under the impression that SystemSleepMode::HIBERNATE was the lower power sleep states instead of STOP which you have used.

2 Likes

Ah, yes, I just tested this on my LTE unit - 10mA. :frowning:
With the 2G/3G unit, I have consistently been able to get sub 1mA readings with 600uA last night. The correct draw for STOP, don’t ask me how I got 130uA (I’ve seen this multiple times) yesterday - I messed with the PMIC quite a bit and the Boron kept trying to charge to unconnected battery :man_facepalming:

On the Mooshimeter 10A is the only range - I’ll try with a 1ohm shunt today.
@jack4566 - You are correct, I should be using HIBERNATE.

I’ll have a chat with engineering to see what is going on.

3 Likes

No luck on this yet? @no1089

None yet, but sleep is being refined by engineering and we’ll soon have a much more robust implementation - until that is released, the code above is the best I have.

1 Like

@ric_hard
I just tested with the DeviceOS 2.0 RC and this example: https://go.particle.io/shared_apps/5f203bb0e83d020008459159
160uA during STOP sleep. (Notice I’m testing with the Otii, a dedicated IoT testing device capable of accurately measuring these low currents, and I will expand on measurements and PMIC guides as soon as I have the time - it’s been a busy couple of weeks)

You can see the measurement top-right.

4 Likes

Nice!

I was just thinking about asking if anybody has tested the new sleep modes yet to see if we have reached the low power goals we have been waiting on.

Yes, the RC was released yesterday, and I’ve been swamped, but I’ll be testing and the engineering team will also do tests over the next couple of days. There are example apps for each mode, so you’ll be able to verify yourself as well.

The datasheets will all be updated with the new values once we have all the data.

2 Likes

Awesome! Can’t wait to test it also! Much appreicated.

1 Like

Device OS 2.0.0-rc.1 , Boron LTE , 4.01V Li-Po
Measuring the Sleep Current with a µCurrent GOLD I get:
Stop Mode = 294 µA
Hibernate = 268 µA

I hope to start all my PMIC/EN/Solar testing on 2.0.0.rc-1 today.

1 Like

Looking forward to seeing or personally testing the Argon Sleep currents now.

I assume it will be lower than the Boron.

Device OS 2.0.0-rc.1 , Argon , 4.11V Li-Po
Measuring the Sleep Current with Siglent SDM3045X I get:
Stop Mode = 72 µA
Hibernate = 59 µA

3 Likes