I2C通信特点
I2C通信硬件电路
时钟线SCL用于同步主机和从机之间的数据通信;数据线SDA用于在主机和从机之间传输数据;
这里SCL和SDA不能配置为推挽输出(推挽输出具有较强驱动能力),因为从CPU内部直接输出高电平,如果从机拉低SDA或者SCL会导致CPU高电平直接接地断路。
开漏输出特点:只能输出低电平或者浮空高阻态。因此这里SCL和SDA都接弱上拉电阻来传输高电平。
I2C时序基本单元
I2C时序(读写时序)
指定地址读多字节
读多字节时,使用指定地址读时序。在主机读第一个字节后,主机应答,从机寄存器地址会自动加1,从机继续向SDA写入数据;直到最后一个字节写完,主机RA=1非应答,从而从机交回SDA控制权。主机写停止位。主机读多字节时序完毕。
指定地址写多字节
写多字节时,使用指定地址写时序。在主机写完一个字节后,从机应答;从机寄存器地址会自动加1,主机继续向SDA写入数据,直到最后一个字节写完,从机RA=0应答。主机写停止位,主机写多字节时序完毕。
注意:指定地址读多个字节,主机在读SDA期间失去对SDA的控制权,因此需要在读完最后一个字节后非应答RA=1,从而收回从机的SDA控制权。 指定地址写多个字节,由于主机一直有SDA控制权,因此无需从机RA=1,如果RA=1,反而代表从机没收到数据。
参考: