内核:Linux 2.6.38
例子:
i2c设备驱动程序:Z2_battery.c
i2c总线驱动程序:i2c-s3c2410.c
I2C总线,同步串行接口,存在两条信号线SCL,SDA,因此简化了硬件资源和PCB板的布线,适合于很多设备。适合于交换少量数据,速度较慢的场合,速度最快只能达到400kbit/s。
i2c通常是作为某些设备的辅助手段,它适用于交换少量数据,速度较慢,在i2c_driver中通常有attach_adapetr, detach_client来检测设备的接入和分离,在接入设备时,我们通常可以注册一些基本操作,在分离时,清空这些操作,有些不依赖于i2c的操作,可以再调用入口和退出出口来操作。这两个函数最好不要用了,可使用新增的的probe和remove
Linux内核中的I2C驱动框架主要分为以下几个部分:
(1)i2c-core:即I2c核心,它提供了i2c总线驱动和i2c设备驱动的注册,注销,以及i2c的通信方法,与具体硬件适配器无关,提供探测设备,地址的等体系无关代码。i2c-core其实也就是i2c总线驱动和i2c设备驱动的桥梁,也与i2c-dev相连。
(2)i2c总线驱动:是针对i2c的硬件体系中适配器端的实现,i2c-adapter,i2c-algorithm的实现,涉及i2c通信底层,如如何配置,如何发送,接受等.
(3)i2c设备驱动:是针对i2c的硬件体系中设备端的实现,i2c-driver,i2c-client,与底层无关,通过设备地址,通常是桥梁,比如在字符设备中来注册i2c设备驱动,然后read,write中既可以用i2c通信的方式来获得相关数据。
(4)i2c-dev,提供给用户空间访问i2c设备的方法,其实也就是内核中已有一套实现好的i2c通信方法,有固定的主次设备号,用户空间可通过相关规范来访问。