AndroidI2C精析

上传人:飞****9 文档编号:149213095 上传时间:2020-10-25 格式:DOCX 页数:5 大小:84.30KB
返回 下载 相关 举报
AndroidI2C精析_第1页
第1页 / 共5页
AndroidI2C精析_第2页
第2页 / 共5页
AndroidI2C精析_第3页
第3页 / 共5页
AndroidI2C精析_第4页
第4页 / 共5页
AndroidI2C精析_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《AndroidI2C精析》由会员分享,可在线阅读,更多相关《AndroidI2C精析(5页珍藏版)》请在金锄头文库上搜索。

1、Android I2C精析基于 linux 内核开发的 arm 系统,会用到很多 components。要让这些 components 正常的工作,我们必须了解它们的接口,懂得如何去注册总线,初始化芯片,进而让芯片正常的工作。 下面我会介绍在 arm 开发过程中使用最频繁的一些接口和总线的原理,以及如何在开发的过程中去使用它们。1 I2C 总线与接口I2C 总线具有结构简单,使用方便的特点。下面我会描述构,幷给出 I2C 设备驱动和应用的实现 。linux下 I2C驱动的结1.1 I2C总线概述I 2C(Inter-Integrated Circuit) 总线是由 PHILIPS 公司开发的两

2、线式串行总线,用于连接微控制器及外围设备。 是微电子通信控制领域广泛采用的一种总线标准。它是同步通信的一种特殊形式,具有接口线少,控制方式简单,器件封装形式小,通信速率较高等优点。I2C 总线是由数据线 SDA和时钟 SCL构成的串行总线,可发送和接收数据,每个器件都有一个惟一的地址识别。 I2C 规程运用主 / 从双向通讯。器件发送数据到总线上, 则定义为发送器, 器件接收数据则定义为接收器。 主器件和从器件都可以工作于接收和发送状态。总线必须由主器件(通常为微控制器)控制,主器件产生串行时钟( SCL)控制总线的传输方向,并产生起始和停止条件。 SDA 线上的数据状态仅在 SCL为低电平的

3、期间才能改变, SCL为高电平的期间, SDA 状态的改变被用来表示起始和停止条件。从理论上说一根 I2C 总线上可以挂载 128 个 I2C 设备,但是通常情况下,由于有些设备在传输数据时占用的 I2C 总线带宽频繁,所以我们在一根 I2C 总线上挂载的设备是越少越好。下面给出 I2C 总线的连线图:1.2 I2C总线工作原理1.2.1 I2C通信专业术语发送器:发送数据到总线的器件;接收器:从总线接收数据的器件;主机:初始化发送产生时钟信号和终止发送的器件;从机:被主机寻址的器件;多主机:同时有多于一个主机尝试控制总线但不破坏传输;仲裁:是一个在有多个主机同时尝试控制总线但只允许其中一个控

4、制总线并使传输不被破坏的过程;同步:两个或多个器件同步时钟信号的过程。1.2.2 I2C接口电路结构前面我们说过 I2C 总线是由数据线 SDA和时钟 SCL 构成的串行总线,在现实的产品开发过程当中,各种被控制器件均并联在这条总线上,每个器件都有一个唯一的地址识别,可以作为总线上的一个发送器件或接收器件 ( 具体由器件的功能决定 ) 。 I2C 总线的接口电路结构如图所示:1.2.3 I2C总线信号状态I2C 总线有下面几种信号状态:1空闲状态: SDA和 SCL都为高电平。2开始条件 (S) :SCL为高电平时, SDA由高电平向低电平跳变,开始传输数据。3结束条件 (P) :SCL为高电

5、平时, SDA由低电平向高电平切换,表示传输结束。4数据有效:在 SCL的高电平期间, SDA保持稳定,数据有效。5ACK信号 : 数据传输的过程中, 接收器件每接收一个字节数据要产生一个 ACK 信号,向发送器件发出特定的低电平脉冲,表示已经收到数据。1.2.4 I2C总线基本操作I2C 总线必须由主器件(通常为微控制器)控制,主器件产生串行时钟( SCL),同时控制总线的传输方向,并产生开始和停止条件。数据传输中, 首先主器件产生开始条件, 随后是器件的控制字节 (前七位是从器件的地址,最后一位为读写位 )。接下来是读写操作的数据,以及 ACK 响应信号。数据传输结束时,主器件产生停止条件

6、。具体的过程如下图所示:1.3 Linux内核的 I2C 驱动架构1.3.1 I2C驱动架构Linux 系统对 I2C 设备具有很好的支持,辑上可以分成 3 个部分:1I2C 总线的驱动 I2C core:实现对 I2Clinux系统下的 I2C 驱动程序从逻总线、 I2C adapter及 I2C driver的管理。2I2C 控制器的驱动I2C adapter:针对不同类型的I2C控制器 ,实现对I2C总线访问的具体方法。3I2C 设备的驱动 I2C driver:针对特定的I2C 设备,实现具体的功能,包括 read, write以及 ioctl等对用户层操作的接口。这三个部分的层次关系

7、下图所示:1.3.2 I2C总线驱动I2C coreI2C core是 Linux 内核用来维护和管理的I2C 的核心部分,其中维护了两个静态的 List ,分别记录系统中的I2C driver结构和 I2C adapter 结构。I2C core提供接口函数,允许一个I2C adatper , I2C driver和 I2C client初始化时在I2C core中进行注册,以及退出时进行注销。同时还提供了I2C 总线读写访问的一般接口(具体的实现在与 I2C 控制器相关的 I2C adapter 中实现),主要应用在 I2C 设备驱动中。1.3.3I2C 控制器的驱动 I2C adapte

8、rI2C adapter 是针对不同类型I2C 控制器硬件,实现比较底层的对I2C 总线访问的具体方法。 I2C adapter构造一个对 I2C core层接口的数据结构,并通过接口函数向 I2C core注册一个控制器。1.3.4 I2C设备的驱动 I2C driverI2C driver中提供了一个通用的I2C 设备的驱动程序,实现了字符类型设备的访问接口,对设备的具体访问是通过I2C adapter来实现的。 I2C driver构造一个对 I2C core层接口的数据结构,通过接口函数向I2C Core注册一个设备驱动。同时 I2C driver 构造一个对用户层接口的数据结构,并通

9、过接 I2C口函数向内核注册一个字符类型设备。I2C driver实现用户层对 I2C 设备的访问,包括 open,read ,write ,ioctl,release 等常规文件操作, 我们可以通过open 函数 打开 I2C 的设备文件,通过ioctl函数设定要访问从设备的地址,然后就可以通过read 和 write函数完成对 I2C 设备的读写操作。通过 I2C driver提供的通用方法可以访问任何一个I2C 的设备,但是其中实现的 read ,write 及 ioctl 等功能完全是基于一般设备的实现, 所有的操作 数据都是基于字节流,没有明确的格式和意义。 为了更方便和有效地使用 I2C 设备,我们可以为一个具体的 I2C 设备开发特定的 I2C 设备驱动程序,在驱动中 完成对特定的数据格式的解释以及实现一些专用的功能。(注:专业文档是经验性极强的领域,无法思考和涵盖全面,素材和资料部分来自网络,供参考。可复制、编制,期待你的好评与关注)

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 职业教育

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号