We have an nRF51822-based product that goes the SYSTEM OFF in certain situations. We wake up with the DETECT signal from a pin which we set to sensing just before calling sd_power_system_off() The code is really trivial:
... nrf_gpio_cfg_sense_input(WAKEUP_PIN, NRF_GPIO_PIN_PULLUP, NRF_GPIO_PIN_SENSE_LOW); #ifdef USE_UART simple_uart_putstring((uint8_t*)"Good bye, blue sky!\r\n"); #endif sd_power_system_off(); ...
This always seems to work in "sunny day" cases. Unfortunately, we found a reproducible corner case for which the wake up does not work. In case we have a TRANSIENT short between the 3V3 power rail and GND (I know, it's bad. It happened temporarily for a mechanical issue), the following happens:
- the nRF51 resets (cleanly, it seems)
- the application starts executing, configures GPIOs, enters the main loop
- the application decides to enter SYSTEM OFF, which triggers the code above
The nRF51 enters successfully SYSTEM OFF, but never wakes up again for WAKEUP_PIN. Is there some known situation where the wake up from DETECT could fail? We read the PANs (2.3 and 3.0) but did not find anything that could apply.