上图是逻辑分析仪的数据,没有应答信号返回。
下面是我的读写代码,现在我读chipID都要问题,16位的寄存器数据
static rt_err_t pmic_i2c_read(struct rt_i2c_bus_device *pmic_i2c_bus,
rt_uint8_t addr, rt_uint8_t reg, rt_uint16_t *data)
{
struct rt_i2c_msg msg[2];
rt_uint8_t send_buf[2];
send_buf[0] = reg;
msg[0].addr = addr;
msg[0].flags = RT_I2C_WR;
msg[0].len = 1;
msg[0].buf = send_buf;
msg[1].addr = addr;
msg[1].flags = RT_I2C_RD;
msg[1].len = 2;
msg[1].buf = (rt_uint8_t *)data;
if (rt_i2c_transfer(pmic_i2c_bus, msg, 2) == 2)
{
return RT_EOK;
}
else
{
rt_kprintf("read reg 0x%x error\n", reg);
return -RT_ERROR;
}
}
static rt_err_t pmic_write(struct rt_i2c_bus_device *pmic_i2c_bus,
rt_uint8_t addr, rt_uint8_t reg, rt_uint16_t data)
{
struct rt_i2c_msg msg;
rt_uint8_t send_buf[2];
send_buf[0] = reg;
send_buf[1] = data>>8;
send_buf[2] = data & 0xFF;
msg.addr = addr;
msg.flags = RT_I2C_WR;
msg.len = 3;
msg.buf = send_buf;
if (rt_i2c_transfer(pmic_i2c_bus, &msg, 1) == 1)
{
return RT_EOK;
}
else
{
rt_kprintf("write reg 0x%x, data %d error\n", reg, data);
return -RT_ERROR;
}
}
多谢,这个我倒是没看到。
@ys丶h 老哥你最后解决了吗,没有ACK是何原因