嵌入式linux驱动-I2C笔记

来源:互联网 发布:mysql字段不区分大小写 编辑:程序博客网 时间:2024/05/22 08:11

一、开发环境

1、内核:Linux 2.6.22.6;

2、JZ2440v3

3、ubuntu 9.10

二、过程

参考drivers/i2c/chips/eeprom.c,drivers/i2c/chips/ds1374.c。

1.分配一个i2c_driver结构体

2.设置i2c_driver结构体

  设置两个重要的成员

    .attach_adapter=xxx_adapter   //在函数xxx_adapter会调用  i2c_probe(adap,设备地址addr,发现这个设备后要调用的函数function)

    .detach_client=xxx_client  //卸载驱动后,如果之前发现能够支持的设备,则调用它来清理

3.注册上面分配的i2c_driver结构体变量。使用函数i2c_add_driver,在入口函数里注册。注册后,装载驱动时程序会调用xxx_adapter函数,xxx_adapter函数中会调用i2c_probe(adap,addr,function)函数,确认设备地址为addr是否有设备(通过是否会回发ACK信号确认),如果设备存在则执行function函数卸载驱动时会调用xxx_client函数,在xxx_adapter中注册分配的东西要在这卸载释放。

4.构造i2c_client结构体,收发数据会用到。例子中这个i2c_client结构体的变量会在function函数中被设置。function函数还会进行字符设备驱动的操作,包括分配file_operations结构体变量,并设置.read=xxx_read,.write=xxx_write,分配设备号等。

i2c_client结构体重要成员

   .address   //设备地址

   .adapter   //指向适配器

   .driver   //指向i2c_driver结构体

使用:i2c-attach_client(i2c_client结构体变量)

5.编写xxx_read,xxx_write函数。

其中要用到i2c_msg结构体。这个结构体中可以用设置数据传输三要素:源地址、目的地址、长度,操作类型(读、写)等。设置好三要素还有读写,再调用i2c_transfer()函数,就可以完成对数据的读写了。




0 0