Hi Nordic team,
I'm using the nPM2100 PMIC in my design to power a microcontroller. The microcontroller sets the nPM2100 into Hibernate mode, and a vibration sensor connected to the SHPHLD pin is used to wake the system on movement.
-
The vibration sensor is normally closed, pulling SHPHLD to GND (low) during rest.
-
The PMIC is configured to wake on a Rising Edge on SHPHLD (via register
0xC2 = 1
). -
SHPHLD is internally pulled up.
Problem:
When the SHPHLD pin is already high before entering Hibernate, the nPM2100 immediately wakes up, even though no edge transition occurred. This seems to contradict the expected edge-based wakeup behavior.
To eliminate external factors:
-
I replaced the vibration sensor with a mechanical switch (same logic behavior).
-
No bounce or glitches were observed.
-
Wakeup occurs immediately if SHPHLD is already high when Hibernate is entered.
Attached you’ll find two charts:
Figure 1: Shows the SHPHLD wakeup trigger occurring without any edge transition at Hibernate entry (Rising-Edge configuration).
Figure 2: Same scenario with Falling-Edge configuration (
0xC2 = 0
) — no false wakeups occur. Behavior is now correct and stable.
This leads me to believe that:
The nPM2100 may internally default to a low reference state for SHPHLD edge detection during Hibernate entry. If the pin is already high, this is interpreted as a Rising Edge, triggering a wakeup immediately.
This behavior is not described in the nPM2100 Product Specification.
Temporary workaround:
I switched to Falling-Edge detection and inverted the logic. This now works reliably.
My questions:
-
Is this a known behavior or a bug in the Hibernate wakeup edge detection logic?
-
Does the PMIC not properly reference the current SHPHLD state when entering Hibernate?
-
Can this be addressed in firmware, or should Falling-Edge be considered the only reliable mode?
Thanks in advance – let me know if you'd like more test logs or register traces.
Best regards,
Philipp