Andrew,
We’re working on updating documentation that explains the differences you’re observing. The short version is this:
libmDot 17:0da384b sleep mode sets most internal IO pins to analog input with no pull resistors to achieve the lowest possible consumption. A few must be set low or high instead of left floating. External IO pins are the responsibility of the user for the following reason: we don’t know what is happening on those pins. Your application may need to keep a pin high, low, etc while the device is asleep. We have code in the Dot-Examples program that demonstrates how the user application can put whichever of these pins they wish into the analog input no pull state for lowest consumption. If you add this code to your test for sleep mode, you’d see current consumption similar to deepsleep.
libmDot 17:0da384b deepsleep mode handles the internal IO pins similarly to sleep mode but also handles the external IO pins, emulating what would happen in ST standby mode. Nearly all of the external IO pins are set to analog input no pull except for the few we discovered that are causing the extra current consumption in some situations. The processor goes into stop mode just, RAM is retained, and the application resumes after waking up just like sleep mode. The only difference is what happens to the external IO pins.
We will be updating the warning box on the mDot platform page in the LoRa Stack section to better explain this difference.
Hope this helps.
Cheers,
Mike