毕业论文开发语言企业开发JAVA技术.NET技术WEB开发Linux/Unix数据库技术Windows平台移动平台嵌入式论文范文英语论文
您现在的位置: 毕业论文 >> 嵌入式 >> 正文

arm-linux下的iic读写代码

更新时间:2014-6-20:  来源:毕业论文

买了块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 的就好了。

设为首页 | 联系站长 | 友情链接 | 网站地图 |

copyright©youerw.com 优尔论文网 严禁转载
如果本毕业论文网损害了您的利益或者侵犯了您的权利,请及时联系,我们一定会及时改正。