Chinaunix首页 | 论坛 | 博客
  • 博客访问: 505421
  • 博文数量: 157
  • 博客积分: 3010
  • 博客等级: 中校
  • 技术积分: 1608
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-16 09:30
文章存档

2010年(155)

2008年(2)

我的朋友

分类: LINUX

2010-03-11 20:32:03

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
                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总线驱动的问题,他是如此之复杂,以至于我们不得不静下心来,仔细的研究他的实现!
 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/imho888/archive/2009/02/05/3861927.aspx
阅读(1158) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~