IIC下挂多外设,SCLK频率高导致挂死疑问

版权声明:本文为博主原创文章,未经博主允许不得转载,联系邮箱[email protected] https://blog.csdn.net/w464960660/article/details/85117148

最近做IIC接口下挂多个外设,但是发现SCLK速率设置为400KHz时,系统运行一段时间就卡死,主要是OLED的影响,万用表测量SCL SDA电平为高;查了下IIC相关的资料,某个论坛上的帖子给了很大的启发,权当学习记录应用。目前还有疑问是,SCLK降到100K就OK了,不知道SCLK频率高到底怎么影响IIC挂死的,OLED  手册上最高iiC  SCLK  400k,会不是到临界点导致的,望有经验的兄弟路过留言指点,感谢!

【原贴内容】:

【牛人回复】:

本帖最后由 yang_alex 于 2017-9-26 09:37 编辑

这两个上拉电阻不仅仅是电平匹配!

要真正了解为什么需要这两个电阻的原因,首先要了解这SDA和SCL两个端口的内部电路。
下面这张图就很好的说明了,原来这两个端口内部是OD门(开漏门)。
 

而这个OD门的主要作用是防止I2C总线冲突。其机理是这样的:

I2C总线是一个真正的多主机总线,如果两个或更多主机同时初始化数据传输,就有可能出现总线冲突。SDA 和 SCL 都是双向线路,都通过一个上拉电阻连接到电源VCC。 当总线空闲时这两条线路都是高电平。连接到总线的器件输出级必须是漏极开路或集电极开路才能执行线与的功能。主机只能在总线空闲的时侯启动传输,当 SCL 线是高电平时,仲裁在 SDA 线发生。 这样, 在其他主机发送低电平时, 发送高电平的主机将断开它的数据输出级因为总线上的电平与它自己的电平不相同。

此外,即使在一主多从的系统中,由于SDA 是大家一起使用的,所以当一个设备(或器件)不用的时候,把它固定成0或1都必将导致总线冲突,同时自己在通讯时还要检测总线是否被占用,所以线与功能的OD门是一个很好的选择。

由于OD门具有线与功能,所以不同电压的器件(或器件),也可以连接在一起,从而实现电平匹配的功能。但是需要做一定处理。
 
最后,上拉电阻的选择涉及两个问题,其一是总线的传输速度,其次是总线上设备(或器件)的数量。
I2C总线支持低速模式100kbit/s 、快速模式400kbit/s 和高速模式3.4Mbit/s ,
下图是快速模式下电阻取值图
 

最后,给大家一份资料吧,使用I2C总线,总线协议总是要看一看的。

猜你喜欢

转载自blog.csdn.net/w464960660/article/details/85117148
今日推荐