Tracker - Wake for CAN interrupt ignored

Hi everyone,

I am having trouble waking my Tracker One from sleep by CAN interrupt. The CAN_INT pin is falling low whenever it detects activity. However, when the Tracker One is falling asleep it takes close to 10s to shutdown the modem and fall to sleep. If CAN traffic happens during that time the Tracker won't wake up via CAN since the CAN_INT pin is already low and the falling edge cannot be detected by the hardware.

I tried to put a digitalRead(CAN_INT) statement in the sleep callback function but it is executed before the modem shuts down.

Do you know if there is a way to read the CAN_INT pin right before the Tracker falls to sleep so that the interrupt hardware can detect a falling edge? Preferably from the application part of the firmware?

I appreciate your help.

This is not currently solvable. Even if you could move the check closer to the actual sleep, there will always a be a period of time between the check and sleep where the interrupt could occur.

One potential workaround is to use HIBERNATE sleep. Because of hardware limitations of the nRF52 MCU in the Tracker, HIBERNATE doesn't actually wake on edge, it wakes on level. This means if the interrupt triggers before the sleep occurs, it will immediately wake again, which is actually what you want.

In the future, we may provide additional level-based wake options instead of the current edge-based wake options for ULP and STOP sleep modes. This would require a modification to Device OS and Tracker Edge.