hey there, i am using ESP-IDF to program the atom lite, i have a Pb hub and i want to configure it with atom lite using the espidf, but the issue is i am getting read timeout error (error code 0x107) below is the code i am using.
#include <stdio.h>
#include "esp_log.h"
#include "driver/i2c.h"
static const char *TAG = "i2c-simple-example";
#define I2C_MASTER_SCL_IO 32 /*!< GPIO number used for I2C master clock /
#define I2C_MASTER_SDA_IO 26 /!< GPIO number used for I2C master data /
#define I2C_MASTER_NUM 0 /!< I2C master i2c port number, the number of i2c peripheral interfaces available will depend on the chip /
#define I2C_MASTER_FREQ_HZ 400000 /!< I2C master clock frequency /
#define I2C_MASTER_TX_BUF_DISABLE 0 /!< I2C master doesn't need buffer /
#define I2C_MASTER_RX_BUF_DISABLE 0 /!< I2C master doesn't need buffer */
#define I2C_MASTER_TIMEOUT_MS 1000
#define MPU9250_SENSOR_ADDR 0x61 /*!< Slave address of the MPU9250 sensor /
#define MPU9250_WHO_AM_I_REG_ADDR 0x61 /!< Register addresses of the "who am I" register */
#define MPU9250_PWR_MGMT_1_REG_ADDR 0x6B /*!< Register addresses of the power managment register */
#define MPU9250_RESET_BIT 7
/**
-
@brief Read a sequence of bytes from a MPU9250 sensor registers
*/
static esp_err_t mpu9250_register_read(uint8_t reg_addr, uint8_t *data, size_t len)
{
esp_err_t err = ESP_OK;
err = i2c_master_write_read_device(I2C_NUM_0, MPU9250_SENSOR_ADDR, ®_addr, 1, data, len, I2C_MASTER_TIMEOUT_MS / portTICK_RATE_MS);
return err;
}
static esp_err_t i2c_master_init(void)
{
i2c_config_t conf = {
.mode = I2C_MODE_MASTER,
.sda_io_num = I2C_MASTER_SDA_IO,
.scl_io_num = I2C_MASTER_SCL_IO,
.sda_pullup_en = GPIO_PULLUP_ENABLE,
.scl_pullup_en = GPIO_PULLUP_ENABLE,
.master.clk_speed = I2C_MASTER_FREQ_HZ,
};i2c_param_config(I2C_NUM_0, &conf);
i2c_set_timeout(I2C_NUM_0, 400000);
return i2c_driver_install(I2C_NUM_0, conf.mode, I2C_MASTER_RX_BUF_DISABLE, I2C_MASTER_TX_BUF_DISABLE, 0);
}
void app_main(void)
{
uint8_t data[2];
ESP_ERROR_CHECK(i2c_master_init());
ESP_LOGI(TAG, "I2C initialized successfully");
while (1)
{
esp_err_t err = mpu9250_register_read(0x00, data, 1);
if (err != ESP_OK)
{
int timevalue;
i2c_get_timeout(I2C_NUM_0, &timevalue);
ESP_LOGI(TAG, "time value is : %d err[%d]", timevalue, err);
}
ESP_LOGI(TAG, "WHO_AM_I = %X", data[0]);
vTaskDelay(2000 / portTICK_PERIOD_MS);
}
ESP_ERROR_CHECK(i2c_driver_delete(I2C_NUM_0));
ESP_LOGI(TAG, "I2C unitialized successfully");
}
Note : interestingly i am able to read and write the Pb hub using the arduino ide wire library so i am confused what could be the issue.
i have go through all the documentation and help i could get online to resolve the issue but i am unable to solve it. any help in this regard would be highly appreciated.