I2C器件一定要加上拉电阻吗?

来源:互联网 发布:奶酪发苦 知乎 编辑:程序博客网 时间:2024/05/01 21:55

I2C器件一定要加上拉电阻吗?最近碰到i2c器件的上拉电阻接错,导致通讯不正常,那么i2c需要上拉电阻么,多大合适

从网上搜集了一些回答:

1).最近看一些关于AT24C02的电路图,发现有些在SDA,SCL这两个脚上接了4.4K或者10K的上拉电阻。有些没有加上拉电阻。
根据AT24C02的数据手册来看,是建议在实际使用中加上拉电阻的。
但一般情况下,在51单片机系统中,不加上拉电阻也是可以用的,也能够正确读写数据。

据我个人经验,我曾经有一次在板子上没有给24C02加上拉电阻,发现会出现数据读写不正确的情况,尤其是对新的芯片第一次读写的时候,可能会出现问题。当时一直很奇怪,不过由于懒惰,没有仔细检查到底是什么原因引起的。也不知道到底是不是因为没加上拉电阻的问题。

以51单片机为例,除了P0口,另外3个口内部都有弱上拉。所以似乎外部不用再加上拉电阻也可以。但是毕竟单片机内部上拉电阻能力有限,只能微弱上拉。


另外对于很多单片机,其内部有上拉电阻,但是无一例外,其上拉电阻的组织是比较大的,也就是说其上拉能力有限

2).

1、根据I2C总线规范,总线空闲时两根线都必须为高;
这是规定,动不了的,不然什么叫标准呢?其实所谓的这个神圣的标准也并不是多么邪乎,你想啊,只有是高的才能拉成低的,难道谁可以把低的拉成高的吗?所以这是之所以规定空闲时必须为高的一个原因,要是保持“低”的话,那是不可能成为“多主”总线的。
这是首先应该理解的。
2、上拉电阻的问题;
其实各个I2C接口工作时只检测高、低电平,管你有没有什么上拉电阻呢!
但问题是,你要是直接接电源的来实现高的话,一旦其他器件拉低时岂不危险?
所以,这个上拉电阻有保护作用。如果你确信直接接电源没问题(比如有短路保护等,呵呵),也可以试一试,问题的关键是主器件要能正确的拉低或置高,从器件要能明确地区分高、低就可以了,这是问题的关键,当然,还有时序问题,不能混乱!
但你设计产品时不能这样,玩玩可以的,哈!
3、电阻大小的问题;

最直接的,牵涉到两方面的问题,首先是功耗的问题,其次是速度的问题,二者是矛盾的!如果你想尽量提高速度,那么就牵涉到总线电容的问题,其实很容易理解,上拉电阻与总线的电容形成了RC,高速时将直接影响通讯!因为总线拉高时有个充电时间以及高电平的阀值,如果还没有充电到足以保证从器件可以识别的高电平的阀值时主器件就以为完成了一个总线动作的话,那么通讯肯定是不能进行的!

如果你想尽可能降低功耗,那么就要尽可能增大电阻以最大可能的减小电路各部分的消耗电流从而实现整体降低功耗!但不可能无限大,否则充电时间你会受不了的!

3)。

因为,IIC的工作原理是:1。stop: SDA=H,SCL=H , 2 。start : SDA=H-->L,SCL=H 
所以,在起始条件下,应该是stop 。那么就必须上拉。


4)。

 I2C上拉电阻确定有一个计算公式:
Rmin={Vdd(min)-o.4V}/3mA
Rmax=(T/0.874) *c,   T=1us 100KHz, T=0.3us 400KHz
C是Bus capacitance


关于iic的上拉电阻,个人最好的方式就是看参考设计,如果走线长了或好总线上有好几个芯片,就把电阻改小一些。如果参考设计没有就在1.5K~5k左右里面选一个就是了。像19楼说的确实有计算公式可以计算,但实际的时候我们没有去测量总线的电容问题,只能在选件/走线时候给与些许的关注。


如果只有一个设备10K是没关系,设备多了就要考虑驱动能力,用1k,1.5k,2.2K都比较好


低速100khz的I2C上拉一般是10K,高速I2C(400kz)上拉选择1k


0 0