#######I2C#######
I2C is a two wire protocol used to connect one or more "masters" with one or more "slaves". salve devices包括了温度,湿度,运动感应器,以及EEPROMs.
和SPI相比,在软件编写方面,I2C要更复杂,因为I2C需要处理很多错误情况,SPI不需要。而且SPI比I2C快很多,(1-3Mbit/sec vs 100-400kbit/sec). I2C最大的优点就是
不论有多少设备,两条线就够了(因为设备并联),而SPI需要为每个设备一条线。而且和SPI的选择线不同,每个I2C设备都有internal addresses and are selected by a master through the transmission of this address over the bus. 所以当有大量设备时,I2C是个很好的选择。
I2C总线是由数据总线SDA和时钟SCL构成的串行总线,各种被控制器件均并列在这条总线上,每个器件都有一个唯一的地址识别,可以作为总线上的一个发送或接收器件。
I2C总线的几种信号状态:1. 空闲状态:SDA和SCL都为高电平。2.开始条件(S):SCL为高电平时,SDA由高电平向低电平跳变,开始传送数据。
3. 结束条件(P):SCL为低电平时,SDA由低电平向高电平跳变,结束传送数据。4. 数据有效:在SCL的高电平期间,SDA保持稳定,数据有效,SDA的改变只能发生在SCL低电平期间。
5. ACK信号:数据传输的过程中,接收器件每接收一个字节数据,要产生一个ACK信号,向发送器件发出特定的低电平脉冲,表示已经接收到数据。
总体来说就是:刚开始的时候SCL和SDA都是高电平,想要传输数据时,SDA拉低,并在SCL低电平期间,传输数据,一直保持到SCL高电平结束,在SCL低电平时,再次改变数据,进行传输。当结束传输时,在SCL低电平时,将SDA拉高。
write Transcation: S + Slave Address + R/W(-)=0 + A + Data + A + Data + A/A(-) + P
Read Transaction: S + Slave Address + R/W(-) =1 + A + Data + A + Data + A(-) + P