static struct rt_i2c_bus_device *i2c_bus_dev;

static int rt_i2c_write_reg(uint16_t addr, uint16_t reg, uint8_t *data, uint16_t len)

{

rt_int8_t res = 0;

rt_uint8_t tmp = reg;

struct rt_i2c_msg msgs[2];

msgs[0].addr = addr; /* Slave address */

msgs[0].flags = RT_I2C_WR; /* Write flag */

msgs[0].buf = &tmp; /* Slave register address */

msgs[0].len = 1; /* Number of bytes sent */

msgs[1].addr = addr; /* Slave address */

msgs[1].flags = RT_I2C_WR | RT_I2C_NO_START; /* Read flag */

msgs[1].buf = data; /* Read data pointer */

msgs[1].len = len; /* Number of bytes read */

if (rt_i2c_transfer(i2c_bus_dev, msgs, 2) == 2)

{

res = RT_EOK;

}

else

{

res = -RT_ERROR;

}

return res;

}

static int rt_i2c_read_reg(uint16_t addr, uint16_t reg, uint8_t *data, uint16_t len)

{

rt_int8_t res = 0;

rt_uint8_t tmp = reg;

struct rt_i2c_msg msgs[2];

msgs[0].addr = addr; /* Slave address */

msgs[0].flags = RT_I2C_WR; /* Write flag */

msgs[0].buf = &tmp; /* Slave register address */

msgs[0].len = 1; /* Number of bytes sent */

msgs[1].addr = addr; /* Slave address */

msgs[1].flags = RT_I2C_RD; /* Read flag */

msgs[1].buf = data; /* Read data pointer */

msgs[1].len = len; /* Number of bytes read */

if (rt_i2c_transfer(i2c_bus_dev, msgs, 2) == 2)

{

res = RT_EOK;

}

else

{

res = -RT_ERROR;

}

return res;

}

你用这两个函数试试?

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐