This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

No GPIO wakeup from SYSTEM OFF state

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.

Related