我的IIC读取程序值不正常。求大虾们指点。
内核版本 linux-3.0.1
我的iic读取到的值总是我上一次写操作时写入iic总线的值。无论读哪个寄存器地址都是这样。
是不是我的读操作有问题?
有没有人跟我碰到同样的情况?
int main()[/size][/size]
{
int rst = 0;
unsigned char read_data[5] = {0,0,0,0,0};
unsigned char read_addr[2] = {0x00, 0x03};
if((fd_i2c0 = open("/dev/i2c/0", O_RDWR)) <0) { // 打开设备
printf("open i2c0 faild! fd_i2c %d\n", fd_i2c0);
printf("error string : %s \n", strerror(errno));
return -1;
}
if((rst = ioctl(fd, I2C_SLAVE_FORCE , 0x48)) < 0) { // 从设备地址是 0x48
printf("set i2c slave address faild!\nerror info: %s\n\n", strerror(errno));
return -1;
}
if((rst = write(fd_i2c0, read_addr, 2)) < 0) { // 读取从设备0x00, 0x03寄存器
printf("write error. info : %s \n", strerror(errno));
printf("write i2c faild !\n");
return -1;
}
if((rst < read(fd_i2c0, read_data, 1)) < 0) { // 执行读操作
printf("read error. info : %s \n", strerror(errno));
printf("read i2c faild !\n");
return -1;
}
printf("read_data %02x, read_data %02x\n", rst, read_data[0]); // 如果开机直接就读取的话每次都是得到0x15。如果先往iic写值的话每次都读到上一次写入的值。//
return 0;
}
------解决方案--------------------
所有I2C的问题我都是同样的建议,量波形
------解决方案--------------------
I2C 最常用的是ioctl()方法。ioctl()方法可以实现所有的情况(两种数据格式、以及I2C算法和smbus算法)。
建议看看:http:[email protected]/blog/static/634068512011313112018291/