]> granicus.if.org Git - esp-idf/commitdiff
bugfix: I2C spikes on master init #393 from github
authorWangjialin <wangjialin@espressif.com>
Sun, 19 Mar 2017 09:05:07 +0000 (17:05 +0800)
committerWangjialin <wangjialin@espressif.com>
Sun, 19 Mar 2017 09:05:07 +0000 (17:05 +0800)
Fix I2C spikes on master init.
This issue is reported from https://github.com/espressif/esp-idf/issues/393
Before I2C io init, set high level on SDA/SCK IOs.

components/driver/i2c.c

index 39eb877349fe7def6cf5930f77f03d2f9b44bf10..914c5785ec5c8a5e99c4778834beaf9b5f0d3971 100644 (file)
@@ -66,6 +66,7 @@ static DRAM_ATTR i2c_dev_t* const I2C[I2C_NUM_MAX] = { &I2C0, &I2C1 };
 #define I2C_GPIO_PULLUP_ERR_STR         "this i2c pin do not support internal pull-up"\r
 #define I2C_FIFO_FULL_THRESH_VAL   (28)\r
 #define I2C_FIFO_EMPTY_THRESH_VAL  (5)\r
+#define I2C_IO_INIT_LEVEL          (1)\r
 \r
 typedef struct {\r
     uint8_t byte_num;  /*!< cmd byte number */\r
@@ -626,6 +627,7 @@ esp_err_t i2c_set_pin(i2c_port_t i2c_num, gpio_num_t sda_io_num, gpio_num_t scl_
             break;\r
     }\r
     if (sda_io_num >= 0) {\r
+        gpio_set_level(sda_io_num, I2C_IO_INIT_LEVEL);\r
         PIN_FUNC_SELECT(GPIO_PIN_MUX_REG[sda_io_num], PIN_FUNC_GPIO);\r
         gpio_set_direction(sda_io_num, GPIO_MODE_INPUT_OUTPUT_OD);\r
         if (sda_pullup_en == GPIO_PULLUP_ENABLE) {\r
@@ -638,6 +640,7 @@ esp_err_t i2c_set_pin(i2c_port_t i2c_num, gpio_num_t sda_io_num, gpio_num_t scl_
     }\r
 \r
     if (scl_io_num >= 0) {\r
+        gpio_set_level(scl_io_num, I2C_IO_INIT_LEVEL);\r
         PIN_FUNC_SELECT(GPIO_PIN_MUX_REG[scl_io_num], PIN_FUNC_GPIO);\r
         if (mode == I2C_MODE_MASTER) {\r
             gpio_set_direction(scl_io_num, GPIO_MODE_INPUT_OUTPUT_OD);\r