#include "test.h"
#define I2C_MASTER_SCL_IO GPIO_NUM_22
#define I2C_MASTER_SDA_IO GPIO_NUM_21
#define I2C_MASTER_NUM I2C_NUM_1
#define I2C_MASTER_FREQ_HZ 100000
#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 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 */
#define SLAVE_ADDR 0x6D // 从机地址
#define READ_SIZE I2C_MASTER_ACK
/**
@brief I2C初始化函数
@return 错误码
*/
esp_err_t I2C_Init()
{
int i2c_master_port = I2C_MASTER_NUM;
static i2c_config_t conf;
conf.mode = I2C_MODE_MASTER;
conf.sda_io_num = I2C_MASTER_SDA_IO;
conf.sda_pullup_en = GPIO_PULLUP_ENABLE;
conf.scl_io_num = I2C_MASTER_SCL_IO;
conf.scl_pullup_en = GPIO_PULLUP_ENABLE;
conf.master.clk_speed = 100000;
esp_err_t err = i2c_param_config(I2C_MASTER_NUM,&conf);
if(err != ESP_OK)
{
return err;
}
return i2c_driver_install(I2C_MASTER_NUM, conf.mode, I2C_MASTER_RX_BUF_DISABLE, I2C_MASTER_TX_BUF_DISABLE, 0);
}
/**
@brief I2C读数据函数
@param slaveAddr -[in] 从设备地址
@param regAddr -[in] 寄存器地址
@param pData -[in] 读出数据
@param dataLen -[in] 读出数据长度
@return 错误码
*/
int I2C_ReadData(uint8_t slaveAddr, uint8_t regAddr, uint8_t *pData, uint16_t dataLen)
{
esp_err_t ret;
i2c_cmd_handle_t cmd = i2c_cmd_link_create(); //新建操作I2C句柄
i2c_master_start(cmd); //0
i2c_master_write_byte(cmd, (slaveAddr << 1) | READ_BIT, ACK_CHECK_EN); //发送地址+写+检查ack //0
if(NULL != regAddr)
{
i2c_master_write_byte(cmd, regAddr, ACK_CHECK_EN); //发送寄存器ID //0
}
i2c_master_read(cmd, pData, dataLen, READ_SIZE); //0
i2c_master_stop(cmd); //0
ret = i2c_master_cmd_begin(I2C_MASTER_NUM, cmd, 1000 / portTICK_RATE_MS); //-1
i2c_cmd_link_delete(cmd);
return ret;
}
######我尝试一句话一句话的打印出来 我取到的寄存器里的值也是0 这明显不对