当前位置: 代码迷 >> 驱动开发 >> IIC通讯有关问题请问
  详细解决方案

IIC通讯有关问题请问

热度:104   发布时间:2016-04-28 10:13:30.0
IIC通讯问题请教
我的IIC读取程序值不正常。求大虾们指点。
内核版本 linux-3.0.1
我的iic读取到的值总是我上一次写操作时写入iic总线的值。无论读哪个寄存器地址都是这样。
是不是我的读操作有问题?
有没有人跟我碰到同样的情况? 

int main()
{
    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;
}
[/size][/size]
------解决方案--------------------
所有I2C的问题我都是同样的建议,量波形
------解决方案--------------------
I2C 最常用的是ioctl()方法。ioctl()方法可以实现所有的情况(两种数据格式、以及I2C算法和smbus算法)。
建议看看:http:[email protected]/blog/static/634068512011313112018291/
  相关解决方案