买了块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);
}
你strace一下,仔细检查下各个系统调用的参数和返回值
另外你也可以在i2cdev_ioctl里面加打印啊,看看到底有没有走进来
有一句话写错了。
#define TVP5150_ADDR 0xba
地址 为7bit 的时候 不能大于0x7F, 你把这地址改成小于0x7F 的就好了。