XIAO BLE Sense in deep sleep mode

Hi jimmy, XIAO Nrf52840 BLE Sense unit.

checkout the sleep portion, I use the double tap to wake up (reset) Just be sure to put in the delay before the sleep function. Otherwise it sleeps and wakes right back up in seconds.
HTH
GL :slight_smile:

1 Like

Thank you very much for your answer. I tried your code on the post, and it works perfectly to wake up the device (Reset) with the IMU sensor. However, I am trying to do the same with a timer instead of the IMU.

For a better explanation, I want to:

Turn on the device → read and send a measurement (do something) → go to deep sleep → wake up after 10s (for example) → Repeat (reset).

Based on your experience, do you think this is possible with this board and the available libraries/configurations?

Thanks again for your help!

23µA when the LED is off.
However, if you turn the QSPIFlash Off, I measured 4.2µA like with my script.

2 Likes

in short …so far I learned that :

  • in deep sleep (power off) You can not wake up the device using timer .
  • in power on sleep ( sd_app_evt_wait() ) You can use timers to wake up the device

… The only way to wake up the nRF is with one of a few specific external wakeup signals (GPIO, LPCOMP, NFC or pin reset). A wakeup from system off is always in form of a reset…

1 Like

Thank you, Adam. You are right, it is not possible to use the time in “deep sleep” mode. However, using the "sd_app_evt_wait() " function, I could achieve a low power consumption, which is very suitable for my application.

Thank you very much for the contributions!

Jimmy ,
Yes I wanted also to use a timer, would be preferred. However NOT available to or in both Board versions and weather or not the BLE and IMU function properly with sd_power_mode_set(NRF_POWER_MODE_LOWPWR); functions AFAIK, other views are welcome.
I’m pretty sure that’s why SEEED Licensing put the RTC on the expansion board. RTC interrupt WAY more reliable. and there original If you want to call it “engineering” choices where the wrong ones. Mbed, no mbed either way it’s “HALF” a loaf. just like the battery reading shenanigans’ :smile:
On my board I added the RTC just to overcome and enhance the capabilities.


Rev 2.0 board all mostly SMD parts, NO RTC (found out about NO low power support with BLE and IMU, or reliable battery reading.

Rev 3.1 with RTC , Serial1 port and a display interface connector and a buzzer.

HTH
GL :slight_smile:

1 Like

wow ! looks great :slight_smile:

Do You know any other nrf52840 boards that are “full” like yours ? … and can support proper system-on sleep with BLE use ?

Reading your post I understand that I will not get proper system-on sleep during BLE using ?
Maybe it is a matter of what kind of system-on sleep I will use … thete are a few options of the mode :

I published a sketch and a rewritten arduino interrupt module under this topic Getting lower power consumption on Seeed XIAO nRF52840. The sketch demonstrates an arduino loop() that operates at 3uA with gpio interrupts and no delay() calls using system_on sleep mode. It also demonstrates system_off and wake from system off.

2 Likes

is this board for “xiao nrf52840” on the market ?

this one?

I am working on a project which uses Li-Po 300mAH battery for powering up my seeed studio xiao nrf52840 ble sense board. I want to implement sleep mode in it so that my power consumption decreases, but it is important that my data stored is not lost when the device is in sleep mode as I will transmit it using ble later. It would be better if I can wake up my device from sleep mode when a external button is pressed. I have followed above code but unfortunately my board is getting bricked. Kindly let me know any resources to follow or look into.

Any help is appreciated. Thanks in advance

no.
I ask if this one is on the market

…what do You mean bricked ?
is it destroyed ?
… after deep sleep = “power off sleep” the device is waking up like after reset.
To keep some data on the device I think You should use “power_on sleep”

Look here

Hey Adam,
Thanks for the reply
My serial port was not able to read the board, but thankfully I was able to reupload the bootloader hex file to reset the board.

Coming to power_on sleep I will test it out and get back to you with any update.

LoL, No… its a roll your own.
I made it to address some of the poor design decisions by seeed imo.

Interrupts, rtc etc. I may mod it again to address the battery reading short-fall of the designs software hooliganism.

JLPCB is your friend. :smile::v:
GL ,PJ.

JLCPCB …never used this …long way ahead of me :slight_smile:

Update: To use power_on sleep I need to use softdevice which uses bluefruit library, but bluefruit library is compatible with v.1.0.0 for board manager. This version is toggling with the IMU sensor on the board. Can I have any other way to not use softdevice and put the device in system on sleep mode to save the data. Something similar to NRF_POWER->SYSTEMOFF = 1 command.

Thanks in Advance

Hmmm, Not that I’m aware of maybe someone else can comment, I would think the QSPI flash is where you can store the data before a sleep and system reset as the only wakeup method? I use only Mbed afaik it’s the only way to get BLE and IMU together and patch or hack Battery reading and Sleep mode lameness.
I’m looking toward getting RTC low power INT generated and save data in Flash for my next push. The BLE IMU data notify and connectivity to the MIT AI2 is very good and reliable for me. It’s battery reading and sleep ALL or nothing that SUCK. Nordic has it figured out and so does adafruit, SEEED ?

HTH
GL :slight_smile:
PJ

Hey @PJ_Glasso ,
Thanks for a lead.

Tired to first test using a basic QSPI flash code present in SEEED_nRF52840_QSPI/QSPI_New.ino at main · PMCheetham/SEEED_nRF52840_QSPI · GitHub , got the expected output but unfortunately whenever I try to use flash of the seeed studio board it is getting bricked meaning I can’t detect the board on serial port anymore.

So i guess it’s a risk to toggle with flash memory of the board. Any other solutions or resources by yourself or anyone else is highly appreciated.

Hi!
I wrote a very simple code to check the current in sleep mode, measured the current - 8 µa.
According to the manufacturer’s specification, you can get less current.
How to do this ?
Who was able to get a current of less than 8 µA ?

my test code:
void setup()
{
delay(10000);
NRF_POWER->SYSTEMOFF = 1;
}

void loop()
{

}