2861|4

119

帖子

0

TA的资源

一粒金砂(高级)

楼主
 

I2C总线接上拉电阻的原因 [复制链接]

I2C为什么要接上拉电阻?因为它是开漏输出。

为什么是开漏输出?

    I2C协议支持多个主设备与多个从设备在一条总线上,如果不用开漏输出,而用推挽输出,会出现主设备之间短路的情况。所以总线一般会使用开漏输出。

为什么要接上拉电阻?

    接上拉电阻是因为I2C通信需要输出高电平的能力。一般开漏输出无法输出高电平,如果在漏极接上拉电阻,则可以进行电平转换。

    I2C由两条总线SDA和SCL组成。连接到总线的器件的输出级必须是漏极开路,都通过上拉电阻连接到电源,这样才能够实现“线与”功能。当总线空闲时,这两条线路都是高电平。

上拉电阻阻值怎么确定?

 一般IO端口的驱动能力在2mA~4mA量级。

考虑到功耗问题,阻值不能过小

    如果上拉阻值过小,VDD灌入端口的电流将较大,功耗会很大,导致端口输出的低电平值增大(I2C协议规定,端口输出低电平的最高允许值为0.4V)。故通常上拉电阻应选取不低于1K的电阻(当VDD=3V时,灌入电流不超过3mA)。

考虑到速度问题,阻值不能过大

    它取决于上拉电阻和线上电容形成的RC延时,RC延时越大,波形越偏离方波趋向于正弦波,数据读写正确的概率就越低,所以上拉电阻不能过大。

    I2C总线上的负载电容不能超过400pF。当I2C总线上器件逐渐增多时,总线负载电容也相应增加。当总的负载电容大于400pF时,就不能可靠的工作。这也是I2C的局限性。

建议上拉电阻可选用1.5K,2.2K,4.7K。

I2C总线基本操作

    根据I2C总线规范,总线空闲时两根线都必须为高。假设主设备A需要启动I2C,他需要在SCL高电平时,将SDA由高电平转换为低电平作为启动信号。

    主设备A在把SDA拉高后,它需要再检查一下SDA的电平。为什么? 因为线与,如果主设备A拉高SDA时,已经有其他主设备将SDA拉低了,由于 1 & 0 = 0 那么主设备A在检查SDA电平时, 会发现不是高电平,而是低电平。说明其他主设备抢占总线的时间比它早,主设备A只能放弃占用总线。如果SDA是高电平,说明主设备A可以占用总线,然后主设备A将SDA拉低,开始通信。

    因此,模拟I2C一定要将GPIO端口设置为开漏输出并加上拉电阻。

 

 

 

丨 整理文章为传播相关技术,版权归原作者所有丨

丨如有侵权,请联系删除丨

此帖出自单片机论坛

最新回复

有图片看不到了  详情 回复 发表于 2021-6-28 18:52

赞赏

1

查看全部赞赏

点赞(1) 关注
个人签名

嵌入式、汇编语言等免费视频<

 

回复
举报

1942

帖子

2

TA的资源

版主

沙发
 

感谢分享,之前也在好奇为什么IIC不可以用内部上拉电阻,然后学习完就知道了~

此帖出自单片机论坛
 
 

回复

119

帖子

0

TA的资源

一粒金砂(高级)

板凳
 

此帖出自单片机论坛
 
个人签名

嵌入式、汇编语言等免费视频<

 
 

回复

53

帖子

0

TA的资源

一粒金砂(中级)

4
 

来学习了,顶一下

此帖出自单片机论坛
 
 
 

回复

9792

帖子

24

TA的资源

版主

5
 

有图片看不到了

此帖出自单片机论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表