1. ACK
由接收方(主或从)发送,表示已经成功接收到地址或数据,它在第9个时钟脉冲期间拉低SDA。
主机写操作:
1. 主机发送带有写命令的从机地址,从机收到后会发送ACK给主机,表明已收到该地址;
2. 主机发送待写入的数据地址,从机收到后会发送ACK给主机,表明已收到该地址;
3. 主机发送数据,从机在收到每个字节之后会发送ACK给主机,表明从机已收到该字节数据,同时还可以接收更多的数据(接收方buffer未满);
主机读操作:
1. 主机发送带有读命令的从机地址,从机收到后会发送ACK给主机,表明已收到该地址;
2. 主机发送待读取的数据地址,从机收到后会发送ACK给主机,表明已准备好发送数据给主机;
3. 从机发送数据,主机在收到每个字节之后会发送ACK给从机,表明主机已收到该字节数据,还要继续读取后续数据。
2. NACK
由接收方(主或从)发送,表示没有成功接收到地址或不想接收更多数据,SDA在第9个时钟脉冲期间保持高电平。
主机写操作:
1. 主机发送带有写命令的从机地址,与总线上任何从机地址不同,将没有从机回复ACK,那么SDA在第9个时钟脉冲期间会保持高电平,相当于NACK;
2. 主机发送待写入的数据地址,从机收到后发现该地址不属于它的有效地址,则会返回NACK给主机,表明无效的数据地址;
3. 当主机向从机写数据时,从机收到该字节数据后,不想接收更多数据时会向主机发送NACK(接收方buffer已满);
主机读操作:
1. 主机发送带有读命令的从机地址,与总线上任何从机地址不同,将没有从机回复ACK,那么SDA在第9个时钟脉冲期间会保持高电平,相当于NACK;
2. 主机发送待读取的数据地址,从机收到后发现该地址不属于它的有效地址,则会返回NACK给主机,表明无效的数据地址;
3. 当主机从从机读取数据时,主机在读到最后一个字节后发送一个NACK给从机,通知从机主机不再需要更多的数据,这通常发生在主机发出STOP条件以结束通信之前。