浅谈I2C总线,I2C接口和SPI接口的作用相同

网友投稿 301 2022-11-12

浅谈I2C总线,I2C接口和SPI接口的作用相同

图1. I2C总线连线图

SDA和SCL都是双向的。SPI 总线有两根单独的线,分别用于两个方向的通信,而 I2C 总线不同,它使用同一根线来完成主机发送数据和接收从机响应。另外,与 SPI 总线具有多个工作模式不同,I2C 总线只有一个工作模式,时钟线 SCL 和数据线 SDA 之间的时序关系很简单直观:当空闲的时候,SDA 和 SCL 都是高电平,只有 SDA 变为低电平,接着 SCL 也变为低电平时,才开始 I2C 总线的数据传输。当 SDA 和 SCL 都变为低电平时,就是告诉总线上的所有接收设备数据包的传输开始了,在 SCL 变为低电平后,SDA 才发送第一个有效数据位,这称为开始条件。对于被传输的每一位,当 SCL 为低电平时在 SDA 上必须变为有效,该位是在 SCL 的上升沿对 SDA 上的数据位进行采样的,也必须一直保持有效直到 SCL 再次变为低电平,然后 SDA 就在 SCL 再次变为高电平之前传输下一位。最后,SCL 变为高电平,接着 SDA 也变为高电平,数据传输结束。这被称为结束条件。

图2. I2C总线传输的开始条件和结束条件

无论多大的数据包都可以通过 I2C 总线进行传输。像 SPI 总线一样,I2C 也是高位先传输。如果数据接收者无法再接收更多的数据,它可以通过将SCL保持低电平来中断传输,这样可以迫使数据发送者等待,直到 SCL 被重新释放。发送方发出的每个字节都必须经过接收方确认,每个字节的第8位数据一旦传送结束,发送方就释放数据线 SDA,然后主机在 SCL 上产生一个额外的时钟脉冲,这会触发接收方通过将 SDA 置为低电平来表示接收到的字节进行确认。如果接收方没有能将 SDA 置为低电平,发送方就会中断传输,并且采取适当的错误处理措施。

图3. 带有接收方确认的I2C数据包

由于 I2C 是多主机总线,因此存在同一时刻会有多个主机试图开始数据传输的可能。SPI 总线使用一个独立的片选端来使接收从机有效,每个 SPI 从机都有一个单独的片选端,由主机驱动。I2C 没有这样的选择机制,不过总线上的每个设备都有一个唯一的地址,数据包传输时先发送地址位,接着才是数据。一个地址字节由7个地址位和1个指示位组成。如果指示位是0,意味着这个传输是一个写操作,被选中的从机将接收数据并将其作为输入;如果指示位是1,就要求从机将数据发送回主机。

I2C 总线还支持一个扩展的10位寻址模式,可连接的外设数量可达1024个,使用7位寻址模式的设备和10位寻址模式的设备可以在同一个系统中混合使用。10位寻址时,使用2个字节来保存地址。如果第1个地址字节以0b11110xx_开始,就会产生一个10位地址,第1个字节的第1、2位(第0位是读写指示位)和第2个字节的8位合起来构成10位的地址。而7位设备将会忽略这个过程。

图4. I2C普通的和带重复开始条件的7位地址格式

图5. I2C总线10位地址格式

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:usb-c接口是什么意思_usb-c接口有什么用
下一篇:nginx-php配置动静分离
相关文章

 发表评论

暂时没有评论,来抢沙发吧~