标签:src 必须 之间 strong sda 状态 允许 地址 .com
I2C搭的线少,一根时钟线和一根数据线。搭线也就比用到4根线的SPI更方便。加上I2C比较廉价,所以板上器件之间的通信,I2C用的较多。此外,I2C在传输速度上比较慢,较少用于远距离通信。
SPI,通常有四根线,时钟线、数据输出线、数据输入线、从设备选择线。如果只有一个从设备,就用不上从设备选择线了。
比起SPI的四根线,I2C只有两根线。所以当主机匹配从设备的时候,需要通过I2C协议发送设备地址来选择从设备。I2C比SPI少了的从设备线,用比之更复杂的协议来弥补。
I2C 起始信号与停止信号的比较
空闲状态下,SCL、SDA都是高电平。在SCL为高电平的前提下,SDA从高电平跳变到低电平,和由低电平跳变到高电平,分别完成了I2C的起始信号和停止信号。
这里,只需要一根线的电平跳变,就能和空闲状态区别开。I2C在设计上选择了SDA的跳变来作为起始、停止的信号。
传输数据时序
上图是传输2Bit(2位)数据的时序,在时钟线拉低的时候,允许数据变化。若是在时钟线高电平时,允许数据变化,那数据线传个低电平后传个高电平,就完成了停止信号了。
所以,在起始信号后,需要把时钟线拉低,才能传输数据。
而数据变化后,需要拉高时钟线,此时即便数据线上是1,也不会触发停止信号。停止信号必须先拉高时钟线,这个假设是在数据线拉高后才拉高时钟线,所以并不冲突。时钟线拉高,是为了保持数据稳定,让传输的1位数据不会出错。之后,时钟线再拉低时,稳定的一位数据已经传输成功了。这时候,才允许数据再变化。
标签:src 必须 之间 strong sda 状态 允许 地址 .com
原文地址:https://www.cnblogs.com/zero-cookies/p/9112423.html