Can you explain what differences (if any) there are between using sd_power_system_off() function versus NRF_POWER->POWEROFF = 1 to put the device into power off mode?
I have an application where I check the battery voltage upon power up and don't let the device fully boot up if the battery is too low. Since the soft device isn't init'd I think I am forced to use the NRF_POWER->POWEROFF register to enter power off mode.
I also monitor the battery voltage under normal operation and if it goes too low I put the device into power off mode. In this case, the soft device is init'd and I'm still just using the NRF_POWER register. Is there any downside to entering power off mode in this way? What differences are there between these two methods?
This is with an NRF51822 and S110.
The end result of sd_power_system_off() and NRF_POWER->POWEROFF = 1 is the same. When the softdevice is initialized, you should use sd_power_system_off(), which make sure the softdevice is not in the middle of a critical operation when putting the device into system off mode.
NRF_POWER->POWEROFF = 1
Without the softdevice, sd_power_system_off() is not available, and it is safe to use NRF_POWER->POWEROFF = 1.
Notice that the device is not OFF when you put it in system off mode, it is put in a low power/deep sleep state, where it can only be waked up by reset, GPIO, NFC field or LPCOMP module.