对I2C协议的掌握最重要的是理解:
空闲高电平:SCL,SDA都为高表示I2C总线空闲(高电平要保持一定时间,至少一个时钟周期以上)。
起始条件:SCL为高电平期间,SDA从高变低(即SCL,SDA都为高电平时,SDA变低电平)。
停止条件:SCL为高电平期间,SDA从低变高。也就是,第9个时钟(即ACK时期)后,需要一个时钟,将SDA变低(SCL变低后,SDA接着变低,然后SCL变高,再接着SDA再变高)。
数据有效性:时钟高电平采集数据,低电平把数据放到SDA上。
ACK(应答响应):第9个时钟周期,SCL低电平时,SDA变低电平,在SCL高电平时,SDA保持低电平不变。注意,在发送时,主设备释放SDA线(gpio模拟的话,就是设置成输入表示释放),从设备拉低SDA,然后主机在SCL高电平时,读取SDA(此时读取到低电平,表示成功响应,如果是高,表示设备没有响应);接收时,主机接收完8bit数据后,由主机产生ACK。
字节格式:字节为单位传输,并且先高位后低位传输。
寻址:
主从关系(多主机的有仲裁器,比较少,一般一个主机,一个或者多个从设备);
时钟信号SCL:一直由主机控制(即主机产生时钟SCL)。
另外,需要了解的是:
标准模式速率:0~100kbit/s
快速(F/S )模式速率:最大可达到400kbit/s
高速模式(Hs):最大可达到3.4Mbit/s
I2C网上资料很多,参考下面资料完整可以理解:
I2C总线
I2C总线之(二)—时序
I2C接口
i2c总线协议