中断,GPIO,I2C等一般都是OC或者OD门,芯片内部无上拉电阻时,则外部必须加上拉电阻才能输出高电平。一般I/O端的驱动能力在2~4mA量级,OC或者OD门的导通电压为0.4V左右,手机中加在上拉电阻上的电压一般都是2.8V,上拉电阻的最小值不能低于800R(2.8-0.4V/3mA=0.8K),5V电压时,则不能低于1.5K(5-0.4V/3mA=1.5K)。中断和GPIO信号本身,只需要产生一个高电平即可,不需要驱动设备,上拉电阻可以取大点,减小功耗,但须注意上拉电阻不能太大,否则会和PCB走线,器件等负载电容影响信号上升时间。经验值一般在4.7~100K之间。
I2C上拉电阻阻值计算:
I2C的接口一般都是OD机制,同样需要加上拉电阻才能输出高电平。上拉电阻的最小值须符合上文。下面计算下上拉电阻的最大值。
I2C总线图
I2C总线的传输速率分为标准模式(100Kbit/s)和快速模式(400Kbit/s),负载的最大容限分别是400pF和200pF,根据I2C总线协议,上拉电阻的最大值被总线电容所限制。
下面两个图可以看出上拉电阻的取值(Rs是I2C设备串联在I2C总线上的电阻,可以防止SDA和SCL的高电压毛刺波,例如电视的显像管击穿产生的高压毛刺)
由上图可以看出,上拉电阻的最小值由上拉电源决定,最大值由总线电容决定。
最大值网上有个计算公式,Rmax=T/0.874*C,C=200pF时,T=1us;C=400pF时,T=0.3us。但是根据这个公式计算出来的值都不怎么对,另外常数0.874怎么来的?请懂得人指教下。手机等低功耗设备一般选择4.7K。
如果上拉电阻值过小,VDD灌入端口的电流(Ic)将较大,这样会导致MOS管(三极管)不完全导通(Ib*β