I2C总线设备驱动解析
1. I2C 协议 1.1 I2C总线工作原理 I2C总线是由数据线SDA和时钟SCL构成的串行总线,各种被控制器件均并联在这条总线上,每个器件都有一个唯一的地址识别,可以作为总线上的一个发送器件或接收器件(具体由器件的功能决定),I2C总线的接口电路结构如图1所示。 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响应信号。数据传输结束时,主器件产生停止条件,具体的过程如图2所示。 2. Linux I2C 结构分析 2.1 层次分析 1. I2C Core