lorawan-library-for-pico icon indicating copy to clipboard operation
lorawan-library-for-pico copied to clipboard

Shutting down the stack to be sure NVM is no longer being written to before power-down

Open shabaz123 opened this issue 2 years ago • 3 comments

Hello,

I had a quick (hopefully easy) query : ) What do you suggest could be the best way to shut down the stack, or at least to know when the NVM is not being written to? Is there a lorawan_close() type of function? The reason I'd like to do such a shutdown or be able to be sure when NVM is not being written, is because I managed to corrupt the portion of Flash that the LoRaWAN stack uses as NVM somehow, I believe through removing power at an incorrect time. I'd like to first check (or shutdown the stack) that it is not writing to NVM, and then remove power. I have only corrupted it once, but I wanted to reduce the risk of it occurring.

For now, I can do a force erase of the NVM portion on startup if corruption has occurred, so it's a minor thing.

Also, I was wondering, when does the NVM get written to? Is it when lorawan_init_otaa() is executed, or also at any other point?

Many thanks!

shabaz123 avatar Jul 14 '22 00:07 shabaz123

Hi @shabaz123,

What do you suggest could be the best way to shut down the stack, or at least to know when the NVM is not being written to? Is there a lorawan_close() type of function?

This is no lorawan_close() function - but would be open to reviewing a pull request to add this feature.

The reason I'd like to do such a shutdown or be able to be sure when NVM is not being written, is because I managed to corrupt the portion of Flash that the LoRaWAN stack uses as NVM somehow, I believe through removing power at an incorrect time. I'd like to first check (or shutdown the stack) that it is not writing to NVM, and then remove power. I have only corrupted it once, but I wanted to reduce the risk of it occurring.

Let me know if you have steps to consistently reproduce this issue.

Also, I was wondering, when does the NVM get written to? Is it when lorawan_init_otaa() is executed, or also at any other point?

From my understanding the NVRAM is written after packets are transmitted.

sandeepmistry avatar Jul 25 '22 14:07 sandeepmistry

Hi Sandeep,

Thanks for the feedback! Currently I don't have steps to reproduce it. Thinking about it some more, perhaps the low-hanging fruit is to merely know if the stack is using NVRAM or not, so I've created a pull request with a suggested function, called lorawan_nvm_in_use.

With that function, it is possible for the user application to have code like this:

do {
        sleep_ms(100);
    } while(lorawan_nvm_in_use());
self_poweroff();

Let me know if you think this is fine or not (I have tested it, and it seems fine). Many thanks!

shabaz123 avatar Jul 27 '22 01:07 shabaz123

Currently I don't have steps to reproduce it.

Let's hold off on pull request #29 until we have a way to reproduce this and can verify the fix.

sandeepmistry avatar Jul 29 '22 14:07 sandeepmistry