Linux I2C驱动分析

http://www.linuxidc.com/Linux/2011-02/32496.htm

目录
1. 摘要 3
2. 简介 3
3. I2C架构 3
4. I2C总线初始化 4
5. I2C适配器驱动 5
6. I2C设备驱动 9
7. 用户空间驱动支持 12
8. 数据传输框架 16
9. References 16

 

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适配器驱动

123456下一页  GO
<script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script>
阅读(995) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~
评论热议
posted @ 2016-03-30 10:30  张同光  阅读(89)  评论(0编辑  收藏  举报