嵌入式linux驱动-I2C笔记
2019-07-12 18:45发布
生成海报
一、开发环境
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()函数,就可以完成对数据的读写了。
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮