RP2040: Is WaveshareBoard::powerOff() intentionally a no-op? #3230
Unanswered
s465h98bft-boop
asked this question in
Q&A
Replies: 2 comments 2 replies
|
For RP2040, you are welcome to put in code to powerOff() at uA. Until recently, ESP32 / NRF52 can powerOff() at around 10uA. Before MeshCore 1.15 or 1.16, most ESP32/NRP52 boards was powered off at...6mA. |
0 replies
|
Are you using Seeed Studio XIAO RP2040 with Sx1262 for Xiao? Since the boards are not so commonly used, I guess we need to wait for a friend here with existing RP2040. |
2 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment


Uh oh!
There was an error while loading. Please reload this page.
Hi all,
I'm building a battery-powered outdoor sensor node (Companion/Tracker role)
based on the Raspberry Pi Pico + Waveshare Pico-LoRa-SX1262 shield, targeting
2 years of runtime on a single primary lithium cell.
Because the RP2040's own dormant/sleep current is still in the ~0.8 mA range
(per the RP2040 datasheet), that's too high for a multi-year battery budget.
So my plan is to use an external nanopower timer IC (TI TPL5110, ~20-35 nA)
that physically cuts all power to the board between transmissions, and
restores it either on a timer or on a sensor-triggered wake signal. The board
does a full cold boot each time, sends its message, and then the timer cuts
power again after a short delay.
My idea was to call board.powerOff() first, wait a few seconds or minutes,
and only then cut power externally. That way the firmware gets a chance to
stop the radio and finish any pending flash writes (e.g. /prefs.json,
/contacts3, /channels2, /bl/*) before power disappears.
But I checked the source, and WaveshareBoard (and XiaoRP2040Board) don't
implement powerOff() at all - it just falls back to an empty no-op in
src/MeshCore.h. ESP32 and nRF52 both have real implementations (stopping the
radio, then entering deep sleep), but I couldn't find anything similar for
RP2040 anywhere in the codebase.
Questions:
gotten to it), or is there a specific reason it's not feasible on this
platform?
implementation (radio.sleep() + rp2040 dormant/sleep) be a welcome
contribution?
know that all pending flash writes (e.g. the dirty_contacts_expiry
debounce in MyMesh::loop()) have completed, so it's safe to fully remove
power? Or is that something powerOff() would need to guarantee as part of
its implementation?
I can't write the implementation myself, but I (or someone helping me) could
test a patch if pointed in the right direction.
Thanks!
All reactions