linux i2c 多字节读写,iic 多字节读出现问题,还请指导,谢谢

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;

}

你用这两个函数试试?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值