We are operating at the OPT3001 at 1MHz as the only device on the I2C2 bus of an STM32F767 MCU. We sample the OPT3001 every 2 seconds in End-of-Conversion Mode by writing 0xCA00 to the config register then waiting for the interrupt before reading the resulting value. This may work perfectly for 12 hours or more, but eventually we get a read error (as reported by the CubeMX function HAL_I2C_Master_Receive). Following this error, the OPT3001 acks and communicates correctly, however it appears that our writes to the config register (0xCA00) are shifted since the value reads back as xxCA rather than CAxx (logged in parentheses below). When we detect this state, we issue a General-Call Reset Command by writing 0x06 to I2C address 0x00 as described in 7.5.1.2 of the datasheet, however this has no effect on the behavior of the OPT3001 as the registers continue to be shifted. Only a power-cycle seems to restore normal operation. How can we restore normal operation of this part short of a power-cycle.
ALS Start (0xCA00) ALS cLux: 4168
ALS Start (0xCA00) ALS cLux: 4160
ALS Start (0xCA00) ALS cLux: 4220
ALS Start (0xCA00) ALS cLux: 4248
ALS Start (0xCA00) ALS cLux: 4232
ALS Start (0xCA00) ALS cLux: 4232
ALS Start (0xCA00)
ERROR: Read_ALS_Register failed
Reset ambient light sensor
ALS Start (0x24CA) ALS cLux: 127008768
ALS Start (0xFFCA) ALS cLux: 126976000
ALS Start (0xFFCA) ALS cLux: 127008768
ALS Start (0xFFCA) ALS cLux: 127008768
ALS Start (0xFFCA) ALS cLux: 126976000
ALS Start (0xFFCA) ALS cLux: 127008768