I am using the Example 9 Code (Two Sensors.ino) from Arduino Library for SparkFun Qwiic ToF Imager - VL53L5CX. The sensor runs fine normally, but when I reset the ESP32-S3, the I2C bus freezes.
I have attached the Initialization Part of Tofs.
// --------- I2C Initialization ---------
Wire.begin(); // Start first I2C bus
Wire.setClock(400000); // Set fast speed for sensors
WIRE_PORT_IMU.begin(35,36); // Start second I2C for IMU
WIRE_PORT_IMU.setClock(400000); // Set medium speed for IMU
// --------- ToF Sensor Initialization ---------
// Reset sequence for sensor 1
pinMode(sensorReset2, OUTPUT); // Set sensor 2 reset pin
digitalWrite(sensorReset2, HIGH); // Hold sensor 2 in reset
pinMode(sensorReset1, OUTPUT); // Set sensor 1 reset pin
digitalWrite(sensorReset1, HIGH); // Reset sensor 1
delay(100); // Wait 100ms
digitalWrite(sensorReset1, LOW); // Release sensor 1
delay(500); // Wait 100ms
// Initialize sensor 1 with custom address
SERIAL_PORT.println(“Initializing ToF Sensor 1”);
if (!myImager1.begin()) { // Try to start sensor 1
*SERIAL_PORT*.*println*("Sensor 1 not found. Freezing...");
while (1); *// Stop if failed*
}
myImager1.setAddress(sensorAddress2); // Change sensor 1 address
// Release and initialize sensor 2
digitalWrite(sensorReset2, LOW); // Release sensor 2
delay(500); // Wait 100ms
SERIAL_PORT.println(“Initializing ToF Sensor 2”);
if (!myImager2.begin()) { // Try to start sensor 2
*SERIAL_PORT*.*println*("Sensor 2 not found. Freezing...");
while (1); *// Stop if failed*
}
// Configure both sensors
myImager1.setResolution(8 * 8); // Set 8x8 grid
myImager2.setResolution(8 * 8); // Set 8x8 grid
imageResolution = myImager1.getResolution(); // Get resolution
imageWidth = sqrt(imageResolution); // Calculate width
myImager1.setRangingFrequency(15); // Set 15Hz update rate
myImager2.setRangingFrequency(15); // Set 15Hz update rate
myImager1.startRanging(); // Start measuring
myImager2.startRanging(); // Start measuring
// --------- IMU Initialization ---------
bool imuInitialized = false; // IMU start flag
while (!imuInitialized) { // Keep trying until IMU starts
myICM.*begin*(*WIRE_PORT_IMU*, *AD0_VAL*); *// Try to start IMU*
*SERIAL_PORT*.*print*("IMU Init: "); *// Print status*
*SERIAL_PORT*.*println*(myICM.*statusString*());
if (myICM.status *!=* ICM_20948_Stat_Ok) { *// If failed*
*SERIAL_PORT*.*println*("Retrying IMU..."); *// Print retry message*
*delay*(500); *// Wait 500ms*
} else {
imuInitialized = true; *// Set flag if success*
}
}