From 6efaf6b85ca2e8bb4aae97a0d0eca830dc52c0d1 Mon Sep 17 00:00:00 2001 From: "C.S.M" Date: Mon, 24 Mar 2025 14:01:07 +0800 Subject: [PATCH] fix(i2c_master): Fix the stretch happen cause timeout in probe, Closes https://github.com/espressif/esp-idf/issues/15589 --- components/esp_driver_i2c/i2c_master.c | 2 ++ components/esp_driver_i2c/i2c_slave.c | 1 - 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/components/esp_driver_i2c/i2c_master.c b/components/esp_driver_i2c/i2c_master.c index 881e3d2d03..657f433d18 100644 --- a/components/esp_driver_i2c/i2c_master.c +++ b/components/esp_driver_i2c/i2c_master.c @@ -1214,6 +1214,8 @@ esp_err_t i2c_master_probe(i2c_master_bus_handle_t bus_handle, uint16_t address, } i2c_ll_master_set_fractional_divider(hal->dev, 0, 0); i2c_ll_enable_intr_mask(hal->dev, I2C_LL_MASTER_EVENT_INTR); + // 20ms is sufficient for stretch, since there is no device config on probe operation. + i2c_hal_master_set_scl_timeout_val(hal, 20 * 1000, bus_handle->base->clk_src_freq_hz); i2c_ll_update(hal->dev); s_i2c_send_commands(bus_handle, ticks_to_wait); diff --git a/components/esp_driver_i2c/i2c_slave.c b/components/esp_driver_i2c/i2c_slave.c index 5bf88fd366..d2c12a7d1e 100644 --- a/components/esp_driver_i2c/i2c_slave.c +++ b/components/esp_driver_i2c/i2c_slave.c @@ -290,7 +290,6 @@ static esp_err_t i2c_slave_bus_destroy(i2c_slave_dev_handle_t i2c_slave) if (i2c_slave) { if (i2c_slave->base) { i2c_ll_disable_intr_mask(i2c_slave->base->hal.dev, I2C_LL_SLAVE_EVENT_INTR); - i2c_common_deinit_pins(i2c_slave->base); i2c_release_bus_handle(i2c_slave->base); } if (i2c_slave->slv_rx_mux) {