浅谈IIC(I2C)

一、简介
I2C总线是由Philips公司开发的一种简单、双向二线制同步串行总线。它只需要两根线即可在连接于总线上的器件之间传送信息。
I2C总线是一个真正的多主机总线,如果两个或多个主机同时初始化数据传输,可以通过冲突检测和仲裁防止数据破坏,每个连接到总线上的器件都有唯一的地址,任何器件既可以作为主机也可以作为从机,但同一时刻只允许有一个主机。
SDA(串行数据线)和SCL(串行时钟线)都是双向I/O线,接口电路为开漏输出.需通过上拉电阻接电源VCC。
浅谈IIC(I2C)_第1张图片
二、协议格式
浅谈IIC(I2C)_第2张图片
1.开始条件
由主机产生,SCL线是高电平时,SDA线从高电平向低电平切换。
1.1 重复开始条件
和起始条件相似,重复起始条件发生在停止条件之前。主机想继续给从机发送消息时,一个字节传输完成后可以发送重复起始条件,而不是产生停止条件。
2.8bit数据位
SDA数据线上的每个字节必须是8位,每次传输的字节数量没有限制。每个字节后必须跟一个响应位(ACK)。首先传输的数据是最高位(MSB),SDA上的数据必须在SCL高电平周期时保持稳定,数据的高低电平翻转变化发生在SCL低电平时期。
浅谈IIC(I2C)_第3张图片
3.应答位
每个字节传输必须带响应位,相关的响应时钟也由主机产生,在响应的时钟脉冲期间(第9个时钟周期),发送端释放SDA线,接收端把SDA拉低。
当在SCL第9位时钟高电平信号期间,SDA仍然保持高电平,这种情况定义为NACK非响应位。这种情况下,主机可以直接产生STOP条件终止以后的传输或者继续重新START开始一个新的传输。以下情况会导致出现NACK位:
(1)接收机没有发送机响应的地址,接收端没有任何ACK发送给发射机
(2)由于接收机正在忙碌处理实时程序导致接无法接收或者发送
(3)传输过程中,接收机识别不了发送机的数据或命令
(4)接收机无法接收
(5)主机接收完成读取数据后,要发送NACK结束告知从机
浅谈IIC(I2C)_第4张图片
4.停止条件
由主机产生,SCL线是高电平时,SDA线从低电平向高电平切换。

参考文档
[1] https://blog.csdn.net/sternlycore/article/details/85600668

你可能感兴趣的:(硬件/接口)