AnsweredAssumed Answered

H3LIS331DL sleep-to-wake

Question asked by padbury.chris on Aug 17, 2015
The datasheet implies that sleep-to-wake functionality allows the detection of above threshold accelerations even between samples at the low power mode samples:

2.5.3 Sleep-to-wakeup
The “sleep-to-wakeup” function, in conjunction with low-power mode, allows to further reduce the system power consumption and develop new smart applications.
The H3LIS331DL may be set in a low-power operating mode, characterized by lower date rate refreshments. In this way the device, even if sleeping, continues to sense acceleration and generate interrupt requests.
When the “sleep-to-wakeup” function is activated, the H3LIS331DL is able to automatically wake up as soon as the interrupt event has been detected, increasing the output data rate and bandwidth.
With this feature the system may be efficiently switched from low-power mode to full performance, depending on user-selectable positioning and acceleration events, therefore ensuring power saving and flexibility.”

I have tried the following configuration:

#define H3LIS331_DATA_RATE_SETTING          (0x40 | 0x08)   // LP ODR=0.5Hz, Norm ODR = 100Hz
#define H3LIS331_FULLSCALE_SETTING          H3LIS331_FS_100G
#define H3LIS331_CTRL_REG1_VAL              (0x07 | H3LIS331_DATA_RATE_SETTING)
#define H3LIS331_CTRL_REG3_VAL              0x24
#define H3LIS331_CTRL_REG4_VAL              (0x00 | (0x00 << 4))   //FS = 100g
#define H3LIS331_CTRL_REG5_VAL              0x03  // (turns on sleep to wake)
#define H3LIS331_INT1_THS_VAL               0x03    // ? @ 100g setting this is in units of 16*0.05g = 0.8g ?
#define H3LIS331_INT1_DURATION_VAL          0x00
#define H3LIS331_INT1_CFG_VAL               0x2A

I've seen it change data rate based on an above threshold measurement that was returned at the pre-change data rate tick of once every ~2 seconds. It also seems to miss a lot of events that occur between samples. This suggests that the part doesn't "even if sleeping, continues to sense acceleration and generate interrupt requests". Rather, it seems to change mode only if the acceleration at the instant of a low power mode measurement is above threshold.

Am I missing a register setting required to make use of sleep-to-wake?