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

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

1、根据I2C总线规范,总线空闲时两根线都必须为高;
这是规定,动不了的,不然什么叫标准呢?其实所谓的这个神圣的标准也并不是多么邪乎,你想啊,只有是高的才能拉成低的,难道谁可以把低的拉成高的吗?所以这是之所以规定空闲时必须为高的一个原因,要是保持“低”的话,那是不可能成为“多主”总线的。
2、上拉电阻的问题;
其实各个I2C接口工作时只检测高、低电平,管你有没有什么上拉电阻呢!
但问题是,你要是直接接电源的来实现高的话,一旦其他器件拉低时岂不危险?
所以,这个上拉电阻有保护作用。如果你确信直接接电源没问题(比如有短路保护等,呵呵),也可以试一试,问题的关键是主器件要能正确的拉低或置高,从器件要能明确地区分高、低就可以了,这是问题的关键,当然,还有时序问题,不能混乱!
STM32f103的I2C例程:
在这里插入图片描述
理论上,软件IIC可以使用任何通用引脚
有人用PA2和PA3进行IIC通信。
在这里插入图片描述

3、电阻大小的问题;
最直接的,牵涉到两方面的问题,首先是功耗的问题,其次是速度的问题,二者是矛盾的!如果你想尽量提高速度,那么就牵涉到总线电容的问题,其实很容易理解,上拉电阻与总线的电容形成了RC,高速时将直接影响通讯!因为总线拉高时有个充电时间以及高电平的阀值,如果还没有充电到足以保证从器件可以识别的高电平的阀值时主器件就以为完成了一个总线动作的话,那么通讯肯定是不能进行的!
如果你想尽可能降低功耗,那么就要尽可能增大电阻以最大可能的减小电路各部分的消耗电流从而实现整体降低功耗!但不可能无限大,否则充电时间你会受不了的!

备注:

I2C的上拉电阻可以是1.5K,2.2K,4.7K, 电阻的大小对时序有一定影响,对信号的上升时间和下降时间也有影响,一般接1.5K或2.2K

I2C上拉电阻确定有一个计算公式:
Rmin={Vdd(min)-o.4V}/3mA
Rmax=(T/0.874) *c, T=1us 100KHz, T=0.3us 400KHz
C是Bus capacitance
Rp最大值由总线最大容限(Cbmax)决定,Rp最小值由Vio与上拉驱动电流(最大取3mA)决定;
于是 Rpmin=5V/3mA≈1.7K(@Vio=5V)或者2.8V/3mA≈1K(@Vio=2.8V)
Rpmax的取值:参考周公的I2C总线规范中文版P33图39与P35图44
总的来说:电源电压限制了上拉电阻的最小值 ; 负载电容(总线电容)限制了上拉电阻的最大值
补充: 在I2c总线可以串连300欧姆电阻RS可以用于防止SDA和SCL线的高电压毛刺
: I2c从设备的数量受总线电容,<=400pF的限制

做过I2C碰到过各种问题,多半是上拉电阻或者控制器时钟的问题。没上拉电阻或者上拉电阻过大,都会导致不稳定而出现寻址不到的问题。控制器时钟主频的话,主频667M八分频就可以

  • 3
    点赞
  • 73
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值