1.拉电流与灌电流
拉电流(pull current)是指PAD输出为逻辑1时,对外提供的电流,相当于电流是被拉出,所以叫拉电流。灌电流(sink current)是指端口输出为逻辑0时,对外提供的电流,相当于电流是被拉出,所以叫拉电流。
对给定的PAD,PAD内部的输出晶体管是固定的,而输出0和1都各自有自己的允许电压范围,输出0时的范围为0-VOLmax,输出1时的范围为VOHmin-VDD。
拉电流与灌电流一般被用来衡量PAD的驱动能力。例如,当PAD输出逻辑0,存在灌电流时,如果输出允许的最大电压VOLmax,如果灌电流越大,说明晶体管提供的电流越大,等效电阻越小,驱动能力也就越强。 对给定的PAD,VDD固定,VOL提高时(可以理解为通过外接负载的电阻值减小实现),晶体管两端电压增大,灌电流也增大。
2.I2C对IOL的要求
根据NXP的I2C协议,fast mode和fast mode plus下的IOL最小值分别为3mA和20mA,即PAD中驱动输出0的晶体管(在CMOS中就是NMOS)要保证足够的驱动能力以在规定的时间内将SCL/SDA从1下拉至0.
3.I2C上拉电阻Rp的选择
第一节已经提到,PAD已经固定的前提下,如果要保证输出的低电平在合理范围内(<VOLmax),上拉电阻就不能太小,灌电流不能太大(注意这里是PAD固定而Rp和输出电平变化,而考虑驱动能力时PAD变化而输出电平固定),所以上拉电阻的阻值有一个最小值的要求。
根据公式,Rpmin=(VDD-VOLmax)/IOL,考虑到IOL最小为3mA,就可以计算出上拉电阻要求的最小值。(IOL更高时,驱动能力变强,对上拉电阻最小值的要求更低)。
另外,上拉电阻也不能太大,否则会导致open-drain下输出高电平的速度太慢,计算公式已经在协议中给出。