电子说
I2C总线是由Philips公司开发的一种简单、双向二线制同步串行总线。它只需要两根线即可传送信息。它结合了SPI和UART的优点,您可以将多个从机连接到单个主机(如SPI那样),也可以使用多个主机控制一个或多个从机。当您想让多个微控制器将数据记录到单个存储卡或将文本显示到单个LCD时,这将非常有用。
*SDA * (Serial Data) – 数据线。
***SCL ***(Serial Clock) – 时钟线。
I2C是串行通信协议,因此数据沿着SDA一点一点地传输。与SPI一样,I2C也需要时钟同步信号且时钟始终由主机控制。
工作原理
I2C的数据传输是以多个msg的形式进行,每个msg都包含从机的二进制 地址帧 ,以及一个或多个 数据帧 ,还包括开始条件和 停止条件 ,读/写位和数据帧之间的 ACK / NACK位 :
启动条件 : 当SCL是高电平时,SDA从高电平向低电平切换。
停止条件 : 当SCL是高电平时,SDA由低电平向高电平切换。
地址帧 : 每个从属设备唯一的7位或10位序列,用于主从设备之间的地址识别。
读/写位 : 一位,如果主机是向从机发送数据则为低电平,请求数据则为高电平。
ACK/NACK : 消息中的每个帧后均带有一个ACK/NACK位。如果成功接收到地址帧或数据帧,接收设备会返回一个ACK位用于表示确认。
由于I2C没有像SPI那样的片选线,因此它需要使用另一种方式来确认某一个从设备,而这个方式就是 —— **寻址 **。
主机将要通信的从机地址发送给每个从机,然后每个从机将其与自己的地址进行比较。如果地址匹配,它将向主机发送一个低电平ACK位。如果不匹配,则不执行任何操作,SDA线保持高电平。
地址帧的末尾包含一个读/写位。如果主机要向从机发送数据,则为低电平。如果是主机向从机请求数据,则为高电平。
当主机检测到从机的ACK位后,就可以发送第一个数据帧了。数据帧始终为8位,每个数据帧后紧跟一个ACK / NACK位,来验证接收状态。当发送完所有数据帧后,主机可以向从机发送停止条件来终止通信。
传输步骤
由于I2C使用寻址功能,可以通过一个主机控制多个从机。使用7位地址时,最多可以使用128(2 ^7^ )个唯一地址。使用10位地址并不常见,但可以提供1,024(2 ^10^ )个唯一地址。如果要将多个从机连接到单个主机时,请使用4.7K欧的上拉电阻将它们连接,例如将SDA和SCL线连接到Vcc:
I2C支持多个主机同时与多个从机相连,当两个主机试图通过SDA线路同时发送或接收数据时,就会出现问题。因此每个主机都需要在发送消息之前检测SDA线是低电平还是高电平。如果SDA线为低电平,则意味着另一个主机正在控制总线。如果SDA线高,则可以安全地发送数据。如果要将多个主机连接到多个从机,请使用4.7K欧的上拉电阻将SDA和SCL线连接到Vcc:
优劣
与其他协议相比,I2C可能听起来很复杂。以下是一些利弊,可帮助您确定它们是否适合您的项目需求:
全部0条评论
快来发表一下你的评论吧 !