Once you are under 1µA, the real factor in power consumption is the awake time, not the sleep time…
If you draw 1µA in sleep time, it will require a capacity of 10 mAh over a year, which is nothing compared to the wake-up current draw.
To give an idea I measure 0.84µA on my nodes, with RFM95 and BME280 connected, and I do nothing on the RFM95 to save power (I don’t think you will go under 0.40µA for the 328p alone – but again this is not the challenge, the challenge is to minimize your awake time/consumption)
It might seem that way, but in practice, perhaps not.
It depends on the exact circuit of course, but an ATMega328 and LoRa device is capable of a deep sleep current of circa 1.5uA.
A sleep current of 1.5uA, is really of no consequency, a set of AAA Alkalines would keep the node going for 76 years, if the batteries could have that long a shelf life.
Using the TPL5110 to power off the node, my well be actually using more power than the deep sleep option, due to the time take to cold start the node every time.
The TPL5010 is in my view a much better option. It can provide an accurate interrupt to wake up from deep sleep.
And with the deep sleep approach you dont have the issues with rejoin etc.
I am indeed re-considering the power gating option. Initially I was using ABP, therefore the issue never surfaced with the JOIN. But yes, I think using the TPL5010 on a hardware interrupt to wake up the MCU seems the best case scenario.
This Arduino stack allows you to save the session keys (and network id, upload counter):
I’m basing a node on this library for use with an ESP32 TTGO LoRa board where the session keys and some counters are stored in (simulated) EEPROM here. In the EV_JOINED callback, I’m saving them:
Upon startup, I check my EEPROM structure for a previously saved session, and restore it using either LMIC_SetSession(…), or do a JOIN using LMIC_StartJoining():
The forum will need to know the actual code you are using, its much easier for us than using the external code generator which may well not provide the same code you are using.
And an actual link to the actual hardware you are using, its not fully clear exactly which hardware ‘IOT-MCU V1’ actually is.