I used the slave address specified in one of the arduino examples that uses the same I2C slave (OV2620).
But to verify that its not a slave address issue I quickly adjusted the code to loop over all 127 slave addresses, see below. Unfortunately this did not give me any solutions, all I2C write requested are still failing. See the attached image with the loggings.
Code: Select all
#include <stdio.h>
#include "esp_log.h"
#include "driver/i2c.h"
#define WRITE_BIT (I2C_MASTER_WRITE) /*!< I2C master write */
#define READ_BIT (I2C_MASTER_READ) /*!< I2C master read */
#define ACK_CHECK_EN (0x1) /*!< I2C master will check ack from slave*/
#define ACK_CHECK_DIS (0x0) /*!< I2C master will not check ack from slave */
#define ACK_VAL (0x0) /*!< I2C ack value */
#define NACK_VAL (0x1) /*!< I2C nack value */
static const char *TAG = "i2c-example";
static esp_err_t i2c_master_init(void)
{
ESP_LOGI(TAG, "Initializing the I2C master");
int i2c_master_port = I2C_NUM_0;
i2c_config_t conf = {
.mode = I2C_MODE_MASTER,
.sda_io_num = GPIO_NUM_26,
.sda_pullup_en = GPIO_PULLUP_ENABLE,
.scl_io_num = GPIO_NUM_27,
.scl_pullup_en = GPIO_PULLUP_ENABLE,
.master.clk_speed = 400000,
.clk_flags = 0,
};
esp_err_t err = i2c_param_config(i2c_master_port, &conf);
if (err != ESP_OK) {
return err;
}
return i2c_driver_install(i2c_master_port, conf.mode, 0, 0, 0);
}
static uint8_t i2c_read(uint8_t slv_addr, uint8_t reg)
{
uint8_t data=0;
esp_err_t ret = ESP_FAIL;
i2c_cmd_handle_t cmd = i2c_cmd_link_create();
i2c_master_start(cmd);
i2c_master_write_byte(cmd, ( slv_addr << 1 ) | WRITE_BIT, ACK_CHECK_EN);
i2c_master_write_byte(cmd, reg, ACK_CHECK_EN);
i2c_master_stop(cmd);
ret = i2c_master_cmd_begin(I2C_NUM_0, cmd, 1000 / portTICK_PERIOD_MS);
i2c_cmd_link_delete(cmd);
if(ret != ESP_OK) {
ESP_LOGE(TAG, "Failed to write write request to slave addr: 0x%02x, err: %s", slv_addr, esp_err_to_name(ret));
return 0;
}
cmd = i2c_cmd_link_create();
i2c_master_start(cmd);
i2c_master_write_byte(cmd, ( slv_addr << 1 ) | READ_BIT, ACK_CHECK_EN);
i2c_master_read_byte(cmd, &data, NACK_VAL);
i2c_master_stop(cmd);
ret = i2c_master_cmd_begin(I2C_NUM_0, cmd, 1000 / portTICK_PERIOD_MS);
i2c_cmd_link_delete(cmd);
if(ret != ESP_OK) {
ESP_LOGE(TAG, "Read Failed addr:0x%02x, reg:0x%02x, data:0x%02x, err:%s", slv_addr, reg, data, esp_err_to_name(ret));
return 0;
}
return data;
}
void app_main(void)
{
ESP_ERROR_CHECK(i2c_master_init());
/* Reguest data from register 0x0A from slave 0 to 127 to determine slave address */
uint8_t slave_addr = 0x00;
for (slave_addr = 0x00; slave_addr <= 0x7F; slave_addr++) {
uint8_t data = i2c_read(slave_addr, 0x0A);
ESP_LOGI(TAG, "Read from data: 0x%02x", data);
}
}
I (314) cpu_start: Starting scheduler on PRO CPU.
I (0) cpu_start: Starting scheduler on APP CPU.
I (324) i2c-example: Initializing the I2C master
E (334) i2c-example: Failed to write write request to slave addr: 0x00, err: ESP_FAIL
E (344) i2c-example: Failed to write write request to slave addr: 0x01, err: ESP_FAIL
E (354) i2c-example: Failed to write write request to slave addr: 0x02, err: ESP_FAIL
E (374) i2c-example: Failed to write write request to slave addr: 0x03, err: ESP_FAIL
E (384) i2c-example: Failed to write write request to slave addr: 0x04, err: ESP_FAIL
E (394) i2c-example: Failed to write write request to slave addr: 0x05, err: ESP_FAIL
E (404) i2c-example: Failed to write write request to slave addr: 0x06, err: ESP_FAIL
E (424) i2c-example: Failed to write write request to slave addr: 0x07, err: ESP_FAIL
E (434) i2c-example: Failed to write write request to slave addr: 0x08, err: ESP_FAIL
E (444) i2c-example: Failed to write write request to slave addr: 0x09, err: ESP_FAIL
E (464) i2c-example: Failed to write write request to slave addr: 0x0a, err: ESP_FAIL
E (474) i2c-example: Failed to write write request to slave addr: 0x0b, err: ESP_FAIL
E (484) i2c-example: Failed to write write request to slave addr: 0x0c, err: ESP_FAIL
E (504) i2c-example: Failed to write write request to slave addr: 0x0d, err: ESP_FAIL
E (514) i2c-example: Failed to write write request to slave addr: 0x0e, err: ESP_FAIL
E (524) i2c-example: Failed to write write request to slave addr: 0x0f, err: ESP_FAIL
E (544) i2c-example: Failed to write write request to slave addr: 0x10, err: ESP_FAIL
E (554) i2c-example: Failed to write write request to slave addr: 0x11, err: ESP_FAIL
E (564) i2c-example: Failed to write write request to slave addr: 0x12, err: ESP_FAIL
E (584) i2c-example: Failed to write write request to slave addr: 0x13, err: ESP_FAIL
E (594) i2c-example: Failed to write write request to slave addr: 0x14, err: ESP_FAIL
E (604) i2c-example: Failed to write write request to slave addr: 0x15, err: ESP_FAIL
E (624) i2c-example: Failed to write write request to slave addr: 0x16, err: ESP_FAIL
E (634) i2c-example: Failed to write write request to slave addr: 0x17, err: ESP_FAIL
E (644) i2c-example: Failed to write write request to slave addr: 0x18, err: ESP_FAIL
E (664) i2c-example: Failed to write write request to slave addr: 0x19, err: ESP_FAIL
E (674) i2c-example: Failed to write write request to slave addr: 0x1a, err: ESP_FAIL
E (684) i2c-example: Failed to write write request to slave addr: 0x1b, err: ESP_FAIL
E (694) i2c-example: Failed to write write request to slave addr: 0x1c, err: ESP_FAIL
E (714) i2c-example: Failed to write write request to slave addr: 0x1d, err: ESP_FAIL
E (724) i2c-example: Failed to write write request to slave addr: 0x1e, err: ESP_FAIL
E (734) i2c-example: Failed to write write request to slave addr: 0x1f, err: ESP_FAIL
E (754) i2c-example: Failed to write write request to slave addr: 0x20, err: ESP_FAIL
E (764) i2c-example: Failed to write write request to slave addr: 0x21, err: ESP_FAIL
E (774) i2c-example: Failed to write write request to slave addr: 0x22, err: ESP_FAIL
E (794) i2c-example: Failed to write write request to slave addr: 0x23, err: ESP_FAIL
E (804) i2c-example: Failed to write write request to slave addr: 0x24, err: ESP_FAIL
E (814) i2c-example: Failed to write write request to slave addr: 0x25, err: ESP_FAIL
E (834) i2c-example: Failed to write write request to slave addr: 0x26, err: ESP_FAIL
E (844) i2c-example: Failed to write write request to slave addr: 0x27, err: ESP_FAIL
E (854) i2c-example: Failed to write write request to slave addr: 0x28, err: ESP_FAIL
E (874) i2c-example: Failed to write write request to slave addr: 0x29, err: ESP_FAIL
E (884) i2c-example: Failed to write write request to slave addr: 0x2a, err: ESP_FAIL
E (894) i2c-example: Failed to write write request to slave addr: 0x2b, err: ESP_FAIL
E (914) i2c-example: Failed to write write request to slave addr: 0x2c, err: ESP_FAIL
E (924) i2c-example: Failed to write write request to slave addr: 0x2d, err: ESP_FAIL
E (934) i2c-example: Failed to write write request to slave addr: 0x2e, err: ESP_FAIL
E (954) i2c-example: Failed to write write request to slave addr: 0x2f, err: ESP_FAIL
E (964) i2c-example: Failed to write write request to slave addr: 0x30, err: ESP_FAIL
E (974) i2c-example: Failed to write write request to slave addr: 0x31, err: ESP_FAIL
E (994) i2c-example: Failed to write write request to slave addr: 0x32, err: ESP_FAIL
E (1004) i2c-example: Failed to write write request to slave addr: 0x33, err: ESP_FAIL
E (1014) i2c-example: Failed to write write request to slave addr: 0x34, err: ESP_FAIL
E (1034) i2c-example: Failed to write write request to slave addr: 0x35, err: ESP_FAIL
E (1044) i2c-example: Failed to write write request to slave addr: 0x36, err: ESP_FAIL
E (1054) i2c-example: Failed to write write request to slave addr: 0x37, err: ESP_FAIL
E (1074) i2c-example: Failed to write write request to slave addr: 0x38, err: ESP_FAIL
E (1084) i2c-example: Failed to write write request to slave addr: 0x39, err: ESP_FAIL
E (1094) i2c-example: Failed to write write request to slave addr: 0x3a, err: ESP_FAIL
E (1114) i2c-example: Failed to write write request to slave addr: 0x3b, err: ESP_FAIL
E (1124) i2c-example: Failed to write write request to slave addr: 0x3c, err: ESP_FAIL
E (1134) i2c-example: Failed to write write request to slave addr: 0x3d, err: ESP_FAIL
E (1154) i2c-example: Failed to write write request to slave addr: 0x3e, err: ESP_FAIL
E (1164) i2c-example: Failed to write write request to slave addr: 0x3f, err: ESP_FAIL
E (1174) i2c-example: Failed to write write request to slave addr: 0x40, err: ESP_FAIL
E (1194) i2c-example: Failed to write write request to slave addr: 0x41, err: ESP_FAIL
E (1204) i2c-example: Failed to write write request to slave addr: 0x42, err: ESP_FAIL
E (1214) i2c-example: Failed to write write request to slave addr: 0x43, err: ESP_FAIL
E (1234) i2c-example: Failed to write write request to slave addr: 0x44, err: ESP_FAIL
E (1244) i2c-example: Failed to write write request to slave addr: 0x45, err: ESP_FAIL
E (1254) i2c-example: Failed to write write request to slave addr: 0x46, err: ESP_FAIL
E (1274) i2c-example: Failed to write write request to slave addr: 0x47, err: ESP_FAIL
E (1284) i2c-example: Failed to write write request to slave addr: 0x48, err: ESP_FAIL
E (1294) i2c-example: Failed to write write request to slave addr: 0x49, err: ESP_FAIL
E (1314) i2c-example: Failed to write write request to slave addr: 0x4a, err: ESP_FAIL
E (1324) i2c-example: Failed to write write request to slave addr: 0x4b, err: ESP_FAIL
E (1334) i2c-example: Failed to write write request to slave addr: 0x4c, err: ESP_FAIL
E (1354) i2c-example: Failed to write write request to slave addr: 0x4d, err: ESP_FAIL
E (1364) i2c-example: Failed to write write request to slave addr: 0x4e, err: ESP_FAIL
E (1374) i2c-example: Failed to write write request to slave addr: 0x4f, err: ESP_FAIL
E (1394) i2c-example: Failed to write write request to slave addr: 0x50, err: ESP_FAIL
E (1404) i2c-example: Failed to write write request to slave addr: 0x51, err: ESP_FAIL
E (1414) i2c-example: Failed to write write request to slave addr: 0x52, err: ESP_FAIL
E (1434) i2c-example: Failed to write write request to slave addr: 0x53, err: ESP_FAIL
E (1444) i2c-example: Failed to write write request to slave addr: 0x54, err: ESP_FAIL
E (1454) i2c-example: Failed to write write request to slave addr: 0x55, err: ESP_FAIL
E (1474) i2c-example: Failed to write write request to slave addr: 0x56, err: ESP_FAIL
E (1484) i2c-example: Failed to write write request to slave addr: 0x57, err: ESP_FAIL
E (1494) i2c-example: Failed to write write request to slave addr: 0x58, err: ESP_FAIL
E (1514) i2c-example: Failed to write write request to slave addr: 0x59, err: ESP_FAIL
E (1524) i2c-example: Failed to write write request to slave addr: 0x5a, err: ESP_FAIL
E (1534) i2c-example: Failed to write write request to slave addr: 0x5b, err: ESP_FAIL
E (1554) i2c-example: Failed to write write request to slave addr: 0x5c, err: ESP_FAIL
E (1564) i2c-example: Failed to write write request to slave addr: 0x5d, err: ESP_FAIL
E (1574) i2c-example: Failed to write write request to slave addr: 0x5e, err: ESP_FAIL
E (1594) i2c-example: Failed to write write request to slave addr: 0x5f, err: ESP_FAIL
E (1604) i2c-example: Failed to write write request to slave addr: 0x60, err: ESP_FAIL
E (1614) i2c-example: Failed to write write request to slave addr: 0x61, err: ESP_FAIL
E (1634) i2c-example: Failed to write write request to slave addr: 0x62, err: ESP_FAIL
E (1644) i2c-example: Failed to write write request to slave addr: 0x63, err: ESP_FAIL
E (1654) i2c-example: Failed to write write request to slave addr: 0x64, err: ESP_FAIL
E (1674) i2c-example: Failed to write write request to slave addr: 0x65, err: ESP_FAIL
E (1684) i2c-example: Failed to write write request to slave addr: 0x66, err: ESP_FAIL
E (1694) i2c-example: Failed to write write request to slave addr: 0x67, err: ESP_FAIL
E (1714) i2c-example: Failed to write write request to slave addr: 0x68, err: ESP_FAIL
E (1724) i2c-example: Failed to write write request to slave addr: 0x69, err: ESP_FAIL
E (1734) i2c-example: Failed to write write request to slave addr: 0x6a, err: ESP_FAIL
E (1754) i2c-example: Failed to write write request to slave addr: 0x6b, err: ESP_FAIL
E (1764) i2c-example: Failed to write write request to slave addr: 0x6c, err: ESP_FAIL
E (1774) i2c-example: Failed to write write request to slave addr: 0x6d, err: ESP_FAIL
E (1794) i2c-example: Failed to write write request to slave addr: 0x6e, err: ESP_FAIL
E (1804) i2c-example: Failed to write write request to slave addr: 0x6f, err: ESP_FAIL
E (1814) i2c-example: Failed to write write request to slave addr: 0x70, err: ESP_FAIL
E (1834) i2c-example: Failed to write write request to slave addr: 0x71, err: ESP_FAIL
E (1844) i2c-example: Failed to write write request to slave addr: 0x72, err: ESP_FAIL
E (1854) i2c-example: Failed to write write request to slave addr: 0x73, err: ESP_FAIL
E (1874) i2c-example: Failed to write write request to slave addr: 0x74, err: ESP_FAIL
E (1884) i2c-example: Failed to write write request to slave addr: 0x75, err: ESP_FAIL
E (1894) i2c-example: Failed to write write request to slave addr: 0x76, err: ESP_FAIL
E (1914) i2c-example: Failed to write write request to slave addr: 0x77, err: ESP_FAIL
E (1924) i2c-example: Failed to write write request to slave addr: 0x78, err: ESP_FAIL
E (1934) i2c-example: Failed to write write request to slave addr: 0x79, err: ESP_FAIL
E (1954) i2c-example: Failed to write write request to slave addr: 0x7a, err: ESP_FAIL
E (1964) i2c-example: Failed to write write request to slave addr: 0x7b, err: ESP_FAIL
E (1974) i2c-example: Failed to write write request to slave addr: 0x7c, err: ESP_FAIL
E (1994) i2c-example: Failed to write write request to slave addr: 0x7d, err: ESP_FAIL
E (2004) i2c-example: Failed to write write request to slave addr: 0x7e, err: ESP_FAIL
E (2014) i2c-example: Failed to write write request to slave addr: 0x7f, err: ESP_FAIL