当前位置: 代码迷 >> 驱动开发 >> 请问arm-linux下的iic读写有关问题
  详细解决方案

请问arm-linux下的iic读写有关问题

热度:140   发布时间:2016-04-28 10:13:40.0
请教arm-linux下的iic读写问题
本人菜鸟,问的问题可能比较初级,请大家不吝赐教。谢谢

买了块s3c6410开发板,上面装了Linux3.0+QT。 我取消了开机运行QT。想自己编写代码调试一下IIC功能。
查看iic 设备应该是在这里:"/dev/i2c/0"
设备open过了,但是ioctl控制总是失败。代码如下
#include <stdio.h>
#include <sys/ioctl.h>
#include <fcntl.h>
#include <linux/i2c-dev.h>
#include <linux/i2c.h>

#define TVP5150_ADDR 0xba
#define I2C_DEV  "/dev/i2c/0"   //  "/sys/class/i2c-dev/i2c-0" 
int fd_i2c0;

int main()
{
    // unsigned char raddr;
    unsigned char write_data[3] = {0, 0xac, 0x3c};
    // unsigned char read_addr[2] = {0xac, 0xac};
    
    if((fd_i2c0 = open(I2C_DEV, O_RDWR)) <0) {
        printf("open i2c0 faild!\n");
        return -1;
    }

    if(ioctl(fd_i2c0, I2C_TENBIT, 0) <0) {  // 这里就失败了。即使屏蔽这命令,下一条也失败
        printf("Set not 10 bit faild !\n");
        return -1;
    }
    
    if(ioctl(fd_i2c0, I2C_SLAVE, TVP5150_ADDR) < 0) {  // I2C_SLAVE_FORCE
        printf("set i2c slave address faild!\n");
        return -1;
    }

    rst = write(fd_i2c0, write_data, 3);
    if(rst < 0) {
        printf("write i2c faild !\n");
        return -1;
    }

    close(fd_i2c0);
    
}


关于设备驱动,本人不是很了解。找到iic dev代表设备驱动可用了吗?必须要自己写驱动吗?
------解决方案--------------------
你strace一下,仔细检查下各个系统调用的参数和返回值
另外你也可以在i2cdev_ioctl里面加打印啊,看看到底有没有走进来 


------解决方案--------------------
返回-1表示内核出错了