码迷,mamicode.com
首页 > 其他好文 > 详细

裸机上I2C的设计

时间:2018-05-30 19:19:08      阅读:159      评论:0      收藏:0      [点我收藏+]

标签: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位数据不会出错。之后,时钟线再拉低时,稳定的一位数据已经传输成功了。这时候,才允许数据再变化。

 

裸机上I2C的设计

标签:src   必须   之间   strong   sda   状态   允许   地址   .com   

原文地址:https://www.cnblogs.com/zero-cookies/p/9112423.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!