I2C总线上的上拉电阻的解析
首先我们来聊聊,为啥I2C总线的SCL,SDA需要接上拉电阻?这个电阻有啥作用?选多大的电阻合适?
1)上拉电阻的作用
我们看I2C的内部框架可以知道,I2C是开漏输出的,I2C总线协议支持多主多从,若不是开漏输出的话,可能会出现别的问题,比如若使用推挽输出,会出现主设备之间短路的情况,所以一般总线会用开漏输出。开漏输出的话,若想实现输出高电平,就必须接上拉电阻来实现,通过上拉电阻接到电源,可实现"线与"功能,且总线空闲时,SCL,SDA这两条线可以高电平。电路大概如下:
2)阻值的选择
我们都知道一般IO口的驱动能力一般在2mA~4mA左右,若阻值太小,电源VCC灌入端口的电流较大,功耗会较大,导致端口输出的低电平值增大;而实际I2C协议规定,端口输出的低电平不能大于0.4V。若VCC=3.3V,灌入电流约3mA左右时,上拉电阻要选择≥1KΩ的电阻。但是阻值不能选太大,若电阻过大,可能导致RC延时增大,波形会偏离方波,甚至会偏向正弦波,数据读写可能会不正确,且会影响读写的速度。一般上拉电阻选用1.5K~4.7K。
3)I2C总线负载电容
I2C总线协议规定负载电容不能超过400pF;当I2C总线上器件增多时,总线的负载电容也会越来越大,,当总线的负载电容超过400pf时,可能会出现工作异常。
I2C总线工作的基本原理:当总线空闲时两根线均为高电平,假设主设备B需要启动I2C,它需要在SCL为高电平时,将SDA由高转低时作为启动信号,主设备B拉高SDA后需要检查下SDA电平,因线与,可能有其他设备拉低SDA,说明有其他设备抢占总线比它早,主设备B只能放弃使用总线,若SDA为高电平,说明主设备B可以使用总线,可以将SDA拉低来进行通信。
全部0条评论
快来发表一下你的评论吧 !