找回密码
 注册
关于网站域名变更的通知
查看: 480|回复: 3
打印 上一主题 下一主题

I2C总线为什么要接上拉电阻?

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2021-6-8 09:29 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x

1 z% s; h( i+ u/ c1 `为什么是开漏输出?
& m$ _$ R9 [' k$ ^# S/ o: V+ w0 [
I2C协议支持多个主设备与多个从设备在一条总线上,如果不用开漏输出,而用推挽输出,会出现主设备之间短路的情况。所以总线一般会使用开漏输出。# |& p3 n( d, a; N. P# j+ e
为什么要接上拉电阻?
' d8 U2 p2 G  U
8 x% M. ?/ c7 b; [& h
接上拉电阻是因为I2C通信需要输出高电平的能力。一般开漏输出无法输出高电平,如果在漏极接上拉电阻,则可以进行电平转换。
. ]) S4 i1 w* ~# W
3 ~0 N4 K! m. r' _' L  ]& W
I2C由两条总线SDA和SCL组成。连接到总线的器件的输出级必须是漏极开路,都通过上拉电阻连接到电源,这样才能够实现“线与”功能。当总线空闲时,这两条线路都是高电平。. @4 `9 G" c6 j0 R  K: H

& A! B- M$ t( _
上拉电阻阻值怎么确定?8 U5 [$ {% p$ F5 ]0 k1 \

  h$ |( O  }( G) M
一般IO端口的驱动能力在2mA~4mA量级。
& ^0 }/ S/ @8 n
" O7 v8 t1 K! \1 G9 u6 A
阻值不能过小。
6 A% Z" u# d+ [+ D
% ~' C" \8 @& A6 a3 h6 i) a
功耗问题。如果上拉阻值过小,VDD灌入端口的电流将较大,功耗会很大,导致端口输出的低电平值增大(I2C协议规定,端口输出低电平的最高允许值为0.4V)。故通常上拉电阻应选取不低于1K的电阻(当VDD=3V时,灌入电流不超过3mA)。7 o# L' G3 Q+ ^5 p: `2 K9 e2 g% J( v6 L

( [8 E( @! i6 [# C/ Q# ^
阻值不能过大。" j+ ]0 ?3 w/ w8 f. X

+ X- C, _  \+ ~
速度问题。它取决于上拉电阻和线上电容形成的RC延时,RC延时越大,波形越偏离方波趋向于正弦波,数据读写正确的概率就越低,所以上拉电阻不能过大。% i! [8 [9 {1 N' R4 s5 P% g3 G

  h; w8 t7 J4 F8 Q2 CI2C总线上的负载电容不能超过400pF。当I2C总线上器件逐渐增多时,总线负载电容也相应增加。当总的负载电容大于400pF时,就不能可靠的工作。这也是I2C的局限性。
6 c0 Z/ h# W. A, e8 [: T" i8 o: y, |/ e
建议上拉电阻可选用1.5K,2.2K,4.7K。
5 n5 S1 R$ o) Z' x* C. f
3 C5 P  T" o1 t9 |
I2C总线基本操作
: s  ]( n) S5 P9 M0 r+ m- O) k
7 b0 K, l  W) `$ C4 N
根据I2C总线规范,总线空闲时两根线都必须为高。假设主设备A需要启动I2C,他需要在SCL高电平时,将SDA由高电平转换为低电平作为启动信号。6 H8 ^( U6 [9 a( Q8 W9 X
主设备A在把SDA拉高后,它需要再检查一下SDA的电平。为什么? 因为线与,如果主设备A拉高SDA时,已经有其他主设备将SDA拉低了,由于 1 & 0 = 0 那么主设备A在检查SDA电平时, 会发现不是高电平,而是低电平。说明其他主设备抢占总线的时间比它早,主设备A只能放弃占用总线。如果SDA是高电平,说明主设备A可以占用总线,然后主设备A将SDA拉低,开始通信。
& C4 k, x" h* s9 e) [  G, c因此,模拟I2C一定要将GPIO端口设置为开漏输出并加上拉电阻。
* `4 ?$ C- ^4 V+ @1 C  r2 L! d9 ^

该用户从未签到

2#
发表于 2021-6-8 10:55 | 只看该作者
接上拉电阻是因为I2C通信需要输出高电平的能力。一般开漏输出无法输出高电平,如果在漏极接上拉电阻,则可以进行电平转换。

该用户从未签到

3#
发表于 2021-6-8 16:08 | 只看该作者
I2C由两条总线SDA和SCL组成。连接到总线的器件的输出级必须是漏极开路,都通过上拉电阻连接到电源,这样才能够实现“线与”功能。当总线空闲时,这两条线路都是高电平。
  • TA的每日心情
    开心
    2020-7-28 15:35
  • 签到天数: 2 天

    [LV.1]初来乍到

    4#
    发表于 2021-6-8 16:21 | 只看该作者
    I2C总线上的负载电容不能超过400pF。当I2C总线上器件逐渐增多时,总线负载电容也相应增加。当总的负载电容大于400pF时,就不能可靠的工作。这也是I2C的局限性。
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    推荐内容上一条 /1 下一条

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-10-31 18:51 , Processed in 0.140625 second(s), 26 queries , Gzip On.

    深圳市墨知创新科技有限公司

    地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

    快速回复 返回顶部 返回列表