全部博文(1159)
分类: 嵌入式
2011-09-28 23:17:54
1. 摘要
主要介绍Msm7227平台上I2C驱动原理,多数部分是29内核标准架构。
2. 简介
I2C只有两条线,一条串行数据线:SDA,一条是时钟线SCL。I2C是一种多主机控制总线,同一总线上可允许多个master.
i2c总线适配器(adapter)就是一条i2c总线的控制器,在物理连接上若干i2c设备。在linux驱动中,每种处理器平台有自己的适配器驱动。
3. I2C架构
内核中i2c相关代码可以分为三个层次:
i2c框架层:i2c.h和i2c-core.c为其主体框架代码,提供了核心数据结构的定义、i2c适配器驱动和设备驱动的注册、注销管理等;i2c-dev.c用于创建i2c适配器的/dev/i2c-%d设备节点,提供i2c设备的用户空间访问方法等。
i2c总线适配器驱动:i2c/busses/目录下,如i2c-msm.c。定义描述具体i2c总线适配器的i2c_adapter数据结构、实现在具体i2c适配器上的i2c总线通信的具体实现,并由i2c_algorithm数据结构描述与i2c设备通信的方法。
i2c设备驱动:定义描述具体设备的i2c_client和可能的私有数据结构。
上图展示了内核I2C结构大整体框架,以下根据内核加载顺序介绍I2C总线初始化,I2C总线适配器驱动,I2C设备驱动和用户空间驱动支持及数据传输框架五部分介绍。
4. I2C总线初始化
该过程主要完成了sysfs总线结构,最终形成如下结构:
/sys/bus/i2c/
|-- devices
|-- drivers
| |-- dummy
| |-- bind
| |-- uevent
| `-- unbind
|-- drivers_autoprobe
|-- drivers_probe
`-- uevent
和
/sys/class/i2c-adapter/
dummy_driver
仅仅是注册了一个空的设备驱动,注册驱动时会遍历加载/sys/class/i2c-adapter/中的所有设备,该过程在初始话总线过程中完成,
/sys/class/i2c-adapter/基本为空,所以我认为这里的驱动注册只是验证i2c总线结构的完整性考虑的。
5. I2C适配器驱动
1