嵌入式系统嵌入式系统/ARM技术中的嵌入式技术中的嵌入式Linux系统下系统下I2C设备驱动程设备驱动程
序的开发序的开发
1 I2C总线简介 I2C (Inter-Integrated Circuit)总线是一种由PHILIPS公司开发的两线式串行总线,用于连接微
控制器及其外围设备。I2C总线最主要的优点就是简单性和有效性。 1.1 I2C总线工作原理 I2C总线是由
数据线SDA和时钟SCL构成的串行总线,各种被控制器件均并联在这条总线上,每个器件都有一个唯一的地址
识别,可以作为总线上的一个发送器件或接收器件(具体由器件的功能决定) [1]。I2C总线的接口电路结构如图1
所示。 图1 I2C总线接口电路 1.2 I2C总线的几种信号状态
1 I2C总线简介
I2C (Inter-Integrated Circuit)总线是一种由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备。I2C总
线最主要的优点就是简单性和有效性。
1.1 I2C总线工作原理
I2C总线是由数据线SDA和时钟SCL构成的串行总线,各种被控制器件均并联在这条总线上,每个器件都有一个唯一的地
址识别,可以作为总线上的一个发送器件或接收器件(具体由器件的功能决定) [1]。I2C总线的接口电路结构如图1所示。
图图1 I2C总线接口电路总线接口电路
1.2 I2C总线的几种信号状态
1. 空闲状态:SDA和SCL都为高电平。
2. 开始条件(S):SCL为高电平时,SDA由高电平向低电平跳变,开始传送数据。
3. 结束条件(P):SCL为低电平时,SDA由低电平向高电平跳变,结束传送数据。
4. 数据有效:在SCL的高电平期间, SDA保持稳定,数据有效。SDA的改变只能发生在SCL的底电平期间。
5. ACK信号: 数据传输的过程中,接收器件每接收一个字节数据要产生一个ACK信号,向发送器件发出特定的低电平脉
冲,表示已经收到数据。
1.3 I2C总线基本操作
I2C总线必须由主器件(通常为微控制器)控制,主器件产生串行时钟(SCL),同时控制总线的传输方向,并产生开始
和停止条件。
数据传输中,首先主器件产生开始条件,随后是器件的控制字节(前七位是从器件的地址,最后一位为读写位 )。接下来
是读写操作的数据,以及 ACK响应信号。数据传输结束时,主器件产生停止条件[1]。具体的过程如图2所示。
图图2 完整的完整的I2C数据传输过程数据传输过程
2 Linux下下I2C驱动程序的分析驱动程序的分析
2.1 Linux系统I2C驱动的层次结构
Linux系统对I2C设备具有很好的支持,Linux系统下的I2C驱动程序从逻辑上可以分为3个部分: