一、iic协议为什么一定要加上拉电阻?
1.IIC是半双工,而不是全双工 ,同一时间只可以单向通信;
2.为了避免总线信号的混乱,要求各设备连接到总线的输出端时必须是**漏极开路(OD)输出或集电极开路(OC)输出,即高阻态。**高阻态只能独立输出/输入低电平和高阻状态,无法主动输出高电平,所以需要外部电阻上拉才可以获得高电平。
3.iic传输数据的开始和结束都是将SDA和SCL拉高。
二、上拉电阻的取值范围。
这里有几个概念需要明确:
1.如上图Rp为上拉电阻,那么CL就是线路中等效出的电容。
2.等效电容会与Rp组成RC滤波电路。
3.iic传输有几个速率可以选择,标准速率100KHZ(上升时间1us),高速400KHZ(上升时间0.3us),超高速1000KHZ。
说到这里有人会问了,上拉电阻跟RC滤波器有啥关系?
别急!下面贴一张iic bus的规范:
够直观吧!
tr:信号的上升时间;
Cb:总线的等效电容容值;
例:对于的400kbps速率应用,信号上升时间应小于300ns;假设线上CL为20PF,可计算出对应的Rp(max)值为15KΩ。
这是Rp(max)的取值计算。
那么Rp(min)如何计算呢?
VoL:I2C协议规定,端口输出低电平的最高允许值为0.4V
IoL:一般IO端口的驱动能力在2mA~4mA量级,标准速率和高速率限定的电流为3mA。
VDD:电源电压。
总的来说:电源电压限制了上拉电阻的最小值;负载电容(总线电容)限制了上拉电阻的最大值!
RP不宜过小,一般不低于1KΩ一般IO端口的驱动能力在2mA~4mA量级。如果RP阻值过小,VDD灌入端口的电流将较大,这导致端口输出的低电平值增大(I2C协议规定,端口输出低电平的最高允许值为0.4V);如果灌入端口的电流过大,还可能损坏端口。故通常上拉电阻应选取不低于1KΩ的电阻(当VDD=3V时,灌入电流不超过3mA)。RP不宜过大,一般不高于10KΩ由于端口输出高电平是通过RP实现的,线上电平从低到高变化时,电源通过RP对线上负载电容CL充电,这需要一定的时间,即上升时间。因此一般应用中选取的都是几KΩ量级的上拉电阻,比如都选取4K7的电阻。