2.1起始和停止条件
起始(S)和停止(P)条件一般由主机产生,总线在起始条件后被认为处于忙的状态。在停止条件的某段时间后,总线被认为再次处于空闲状态。
起始条件:在 SCL 线是高电平时,SDA 线从高电平向低电平切换
停止条件:当 SCL 是高电平时,SDA 线由低电平向高电平切换
起始(S)和停止(P)条件时序图如下:
起始条件表示开始交互,停止条件表示交互结束,主机释放总线,在一次交互中主机可以发起多次起始条件(如读数据)。
2.2应答(ACK)和不应答(NACK)
应答:
数据传输必须带响应,相关的响应时钟脉冲由主机产生,在响应的时钟脉冲期间,发送器释放 SDA 线(高),接收器必须将 SDA 线拉低,使它在这个时钟脉冲的高电平期间保持稳定的低电平 。
数据的每个字节(包括地址字节)后面跟着一个来自接收端的ACK位。ACK位允许接收端向发送端发送已成功接收的字节和可以发送的另一个字节。
不应答:
当SDA线在ACK/NACK相关的时钟周期内保持高电平时,这被解释为不应答(NACK)。
有以下几种情况会产生不应答(NACK):
当从机不能响应从机地址时(例如它正在执行一些实时函数不能接收或发送)从机必须使数据线保持高电平。主机然后产生一个停止条件终止传输或者产生重复起始条件开始新的传输。
如果从机-接收器响应了从机地址但是在传输了一段时间后不能接收更多数据字节,主机必须再一次终止传输。这个情况用从机在第一个字节后没有产生响应来表示。从机使数据线保持高电平,主机产生一个停止或重复起始条件。
如果传输中有主机接收器,它必须通过在从机不产生时钟的最后一个字节不产生一个响应,向从机发送器通知数据结束。从机-发送器必须释放数据线,允许主机产生一个停止或重复起始条件。
总结为:
(1)从机无法接收或发送,因为它正在执行一些实时功能,并没有准备好开始与主机通信。
(2)在传输过程中,从机无法接收更多的数据字节。
(3)主机机完成了读取数据并通过NACK指示从机。
(4)在传输过程中,主机获取了它不理解的数据或命令。
应答(ACK)和不应答(NACK)时序图:
2.3写数据
给从机写数据,主机将在总线先发送起始条件,再发送一个带有写标志的从机地址,在最后一个位(R/W位)设置为0,表示写。 在从机发送应答位后,主机将发送它希望写入的寄存器的寄存器地址。 从机会再次应答,让主人知道它准备好了。 在此之后,主机将开始向从机发送寄存器数据,直到主机发送了它需要的所有数据(有时只是一个字节),并且主机将用STOP条件终止传输,如图所示:
2.4读数据
在第一个字节后,主机立即读从机如图,在第一次响应时,主机——发送器变成主机——接收器,从机——接收器变成从机——发送器。第一次响应仍由从机产生。之前发送了一个不响应信号的主机产生停止条件