How manage errors while Init VL53L1X
I'm using the VL53L1X ULD API to drive 4 sensors and, sometimes, the function VL53L1X_SensorInit returns error VL53L1_ERROR_CONTROL_INTERFACE while initializing the third or four sensor (the first two are always initialized correctly).
The sensor boot up correctly and returns correct measurements, tho.
What's the best practice to manage this error? Is it correct to use something like
statusRadar = VL53L1X_SensorInit(dev_address);
while(statusRadar) {
statusRadar = VL53L1X_SensorInit(dev_address);
}My init function is like
static void VL53L1_init(void) {
uint16_t ToFAddresses[4] = {0x54, 0x56, 0x58, 0x5A};
uint16_t dev_address = 0x52;
uint8_t byteData, sensorState=0;
// Reset the 4 ToF sensors on the expansion board
for (ToFSensor = 0; ToFSensor < NUMERO_RADAR; ToFSensor++) {
statusRadar = XNUCLEO53L1A1_ResetId(ToFSensor, 0);
}
// Bring the sensors out of the reset stage one by one and set the new I2C address
for (ToFSensor = 0; ToFSensor < NUMERO_RADAR; ToFSensor++) {
statusRadar = XNUCLEO53L1A1_ResetId(ToFSensor, 1); // Bring sensor out of reset
while(sensorState==0){
statusRadar = VL53L1X_BootState(dev_address, &sensorState);
HAL_Delay(1);
}
//Device Initialization and setting
statusRadar = VL53L1X_SensorInit(dev_address);
statusRadar = VL53L1X_SetI2CAddress(dev_address, ToFAddresses[ToFSensor]);
statusRadar = VL53L1X_SetDistanceMode(ToFAddresses[ToFSensor], 2); /* 1=short, 2=long */
statusRadar = VL53L1X_SetTimingBudgetInMs(ToFAddresses[ToFSensor], 33); /* in ms possible values [20, 50, 100, 200, 500] */
statusRadar = VL53L1X_SetInterMeasurementInMs(ToFAddresses[ToFSensor], 40); /* in ms, IM must be > = TB */
statusRadar = VL53L1X_StartRanging(ToFAddresses[ToFSensor]);
HAL_Delay(1);
}
}
