- 1、本文档共31页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Linux2.6.25平臺下的I2C驱动架构分析
Linux2.6.25平台下的I2C驱动架构分析
【摘要】本文以PowerPC+Linux 2.6.25 平台为例,详细分析了I2C总线的驱动架构。首先介绍了I2C的总体架构,从用户的角度将其分为三个层面,不同的开发者只需要关注相应的层面即可。然后分析了主要数据结构及其之间的相互关系,接着分析了不同层的具体实现,最后以一款EEPEOM为例讲述了如何在用户空间访问I2C驱动。对于ARM + Linux平台,只有平台依赖层即总线适配器驱动有差异。
【关键字】PowerPC, I2C, i2c-core, adapter , i2c_algorithm, RTC, EEPROM
目录
1 I2C概述 3
2 I2C总体架构 3
2.1 硬件抽象层 3
2.2 平台依赖层 3
2.3 用户接口层 3
3 主要的数据结构 4
3.1 Adapter 4
3.2 I2c_algorithm 5
3.3 i2c_driver 5
3.4 Client 6
4 平台依赖层-总线适配器驱动 7
4.1 platform device 7
4.2 platform driver 9
4.3 Adapter及algorithm 12
5 硬件抽象层-I2C core 13
5.1 总线初始化 13
5.2 Adapter注册 15
5.3 驱动注册 16
5.4 数据传输 17
6 用户接口层-I2C设备驱动 18
6.1 统一的设备模型 18
6.1.1 关键数据结构 18
6.1.2 初始化 19
6.1.3 Open及release 21
6.1.4 数据收发 22
6.2 特定的设备驱动 26
6.2.1 关键数据结构 26
6.2.2 初始化 27
6.2.3 数据收发 29
7 驱动访问示例 29
7.1.1 写操作 29
7.1.2 读操作 31
8 参考鸣谢 33
1 I2C概述
I2C只有两条线,一条串行数据线:SDA,一条是时钟线SCL。I2C是一种多主机控制总线,同一总线上可允许多个master,即总线上的设备都有主动发起数据传输的可能,依靠线与逻辑来实现无损仲裁。但通常情况是总线上有个带CPU的master,其他设备被master访问。
2 I2C总体架构
在2.6的Linux内核中,I2C的驱动架构分为如下三个层次:硬件抽象层、平台依赖层和用户接口层。
2.1 硬件抽象层
i2c-core.h和i2c-core.c为其主体框架代码,提供了核心数据结构的定义、i2c适配器驱动和设备驱动的注册、注销管理等API。其为硬件平台无关层,向下屏蔽了物理总线适配器的差异,定义了统一的访问策略和接口;其向上提供了统一的接口,以便I2C设备驱动通过总线适配器进行数据收发。
2.2 平台依赖层
i2c总线适配器(adapter)就是一条i2c总线的控制器(所谓控制是相对于本CPU来说的),在物理上连接若干i2c设备。在Linux驱动中,每种处理器平台有自己的适配器驱动,属于平台移植相关层。每一个特定的硬件平台在i2c/busses/目录下都有一个adapter的实现,对于PowerPC平台来说,其是i2c-mpc.c。其按照核心层定义的接口实现了i2c_adapter,提供了具体的访问方式i2c_algorithm。
2.3 用户接口层
设备驱动层为用户接口层,其为用户提供了通过I2C总线访问具体设备的接口。
3 主要的数据结构
3.1 Adapter
Adapter是对某一条I2C总线的抽象,是特定总线的相关属性的集合。
http://lxr.linux.no/#linux+v2.6.25/include/linux/i2c.h#L312
312struct i2c_adapter {
313 struct module *owner;
314 unsigned int id;
315 unsigned int class;
316 const struct i2c_algorithm *algo; /* the al
文档评论(0)