I2C详解(一)_sternlycore的博客-CSDN博客_i2c
I2C协议靠这16张图彻底搞懂(超详细)_GREYWALL-CSDN博客_i2c协议
I2C别人的已经讲得很清楚,我按自己的理解重新写写,加深记忆。
I2C设备间的连接只有两根线,SDA数据线和SDL时钟线,SDA和SDL均结在上拉电阻,平时处于高电平。
I2C的数据构成,8bit(7bit地址+1bit读写或者8bit数据)+1bit应答位
空闲状态:SDA和SDL均处于高电平
启动:SDL处于高电平,SDA拉低
结束:SDL处于高电平,SDA拉高
传输过程:在SDL高电平时,SDA维持稳定,在SDL低电平时,SDA发生变化
应答(ACK):拉低SDA线,并在SCL为高电平期间保持SDA线为低电平
非应答(NOACK):不要拉低SDA线(此时SDA线为高电平),并在SCL为高电平期间保持SDA线为高电平
通信时序: I2C是同步通讯,每步结束都需要应答或者非应答
A.启动
SDL处于高电平,SDA拉低,所有从机即使处于睡眠模式也将变为活动状态,并等待接收地址位。
B.
bye写操作:
主机发送7bit设备地址+1bit写位后释放SDA线,从机把地址位跟自己的ID对比,对上则回复1bit的应答。主机接收到应答,则主从连接上。之后主机每写8bit的数据,从机都做一个应答,数据传输以停止位(P)结束,并且释放I2C总线。
bye读操作:
主机发送7bit设备地址+1bit写位后释放SDA线,从机把地址位跟自己的ID对比,对上则回复1bit的应答。然后主机发送要读的8bit地址给从机,从机应答后,从机发送数据,主机应答,此后主机只要应答,从机就不停发送,直到主机非应答。之后主机传输停止位(P)结束。
除了最基本的bye读和bye写操作,还有页写和随机读操作,具体看时序即可,基本跟bye读和bye写差不多