数据帧
当主机检测到从机的ACK位后,就可以发送***个数据帧了。数据帧始终为8位,每个数据帧后紧跟一个ACK / NACK位,来验证接收状态。当发送完所有数据帧后,主机可以向从机发送停止条件来终止通信。
传输步骤
1. 在SCL线为高电平时,主机通过将SDA线从高电平切换到低电平来启动总线通信。
2. 主机向总线发送要与之通信的从机的7位或10位地址,以及读/写位:
3. 每个从机将主机发送的地址与其自己的地址进行比较。如果地址匹配,则从机通过将SDA线拉低一位返回一个ACK位。如果主机的地址与从机的地址不匹配,则从机将SDA线拉高。
4. 主机发送或接收数据帧:
5. 传输完每个数据帧后,接收设备将另一个ACK位返回给发送方,以确认已成功接收到该帧:
6. 随后主机将SCL切换为高电平,然后再将SDA切换为高电平,从而向从机发送停止条件。
单个主机VS多个从机
由于I2C使用寻址功能,可以通过一个主机控制多个从机。使用7位地址时,***多可以使用128(27)个***地址。使用10位地址并不常见,但可以提供1,024(210)个***地址。如果要将多个从机连接到单个主机时,请使用4.7K欧的上拉电阻将它们连接,例如将SDA和SCL线连接到Vcc: