i2c总线设备测试应用程序

原文:http://blog.csdn.net/imho888/article/details/3861927

 

i2c总线设备测试应用程序

       既然是应用程序无非就是read,write。是的如果没有算法加进来的话,就是这样的,更何况这是一个测试程序!

       首先介绍一个系统总线(设备)给大家,如果有人接受不了这个概念可以先把它了解清楚再继续阅读,如果觉得自己还可以忍受一会儿的话,我们在后面的i2c总线中给大家详细解释。

[root@Intel rtc]# ll /dev/i2c-0

这个目录就是我们的i2c总线设备(它对应我们的i2c总线适配器),你可以把它简单的理解为总线,我们后面的操作其实就是对总线的读和写。

       Code 1:

        fd = open(I2C_DEV, O_RDWR);// I2C_DEV /dev/i2c-0

        if(fd < 0){

                printf("####i2c test device open failed####/n");

                return (-1);

        }

        res = ioctl(fd,I2C_TENBIT,0);   //not 10bit

        res = ioctl(fd,I2C_SLAVE,CHIP_ADDR);    //设置I2C从设备地址[6:0]

上面是打开该设备的源码,并进行了相关的设置,这里需要了解一点i2c总线的知识,简单的给大家提两句,i2c是工作在主从模式下的,也就是说不关是读还是写都是由工作在主模式下的i2c设备发起的。I2c主设备在发送的命令中包含i2c从设备的地址,也就是上面的CHIP_ADDR,这个地址是由phips公司提供给生产i2c设备芯片的厂商的。我们这个芯片的地址是0x68  [6:0]。

打开该设备之后我们对他进行读写,这里还需要了解一点i2c总线的知识,关于读写的时序!
在写i2c从设备寄存器的时候,先发送的是从设备的地址,然后是要写入的寄存器的偏移地址,最后是数据,当然你可以写一个寄存器或者多个,只要给出基址就可以了;在读从设备的时候稍微复杂一点点,先要写入要读写的从设备的寄存器偏移量,然后在再读取数据!

这里有一个细节大家一定要注意,读写是由控制位决定的,由从设备地址(7位)加上1位读写控制位,组成了一个字节!

有了上面的这些介绍我们就不难理解下面的这两个读写函数:

       Code 2:

static int read_HWclock(int fd, char buff[], int addr, int count)

{

        int res;

        if(write(fd,&addr,1)!=1)        //写地址失败

                return -1;

        res=read(fd,buff,count);

        printf("read %d byte at 0x%x/n", res, addr);

        return res;

}

static int write_HWclock(int fd, char buff[], int addr, int count)

{

        int res;

        int i,n;

        static char sendbuffer[PAGE_SIZE+1];

        memcpy(sendbuffer+1, buff, count);

        sendbuffer[0]=addr;

        for(n=0; n<sizeof(sendbuffer); n++)

                printf("0x%x, ", sendbuffer[n]);

        res=write(fd,sendbuffer,count+1);

        printf("write %d byte at 0x%x/n", res, addr);

}

好了,既然已经写道这里,我们直接给出结果就可以了:

[root@Intel rtc]#./readrtc

07/10/27  6

 17:23:20

[root@Intel rtc]#

这个测试结果显然是令人满意了,现在大可放心,这个八只脚的笑臭虫,还是很听话的!

测试结束之后,我们就可以沐浴更衣,去探讨i2c总线驱动的问题,他是如此之复杂,以至于我们不得不静下心来,仔细的研究他的实现!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值