一.I2C 硬件连接
I2C 总线在硬件上的连接非常简单,由 SDA、SCL 和上拉电阻构成, 在空闲状态下,SDA 和 SCL 一般被上拉电阻拉高,保持高电平状态,在需要进行数据传输 的时候,通过 SCL 和 SDA 的高低电平来产生 I2C 总线所需要的信号进行数据传递。
二.接上拉电阻的作用
(1)保证总线空闲时保持高电平
I2C 总线采用开漏/开集电极输出,当没有设备驱动总线时,总线会处于高阻态。如果不接上 拉电阻,总线电平将不确定,很容易受到噪声干扰。接上拉电阻可以确保总线空闲时保持稳定的 高电平。
(2)实现线与功能
I2C 总线允许多个设备挂载在同一总线上。当一个设备拉低总线时,其他设备的输出也会被 拉低。这就是线与功能,实现总线仲裁。如果不接上拉电阻,当总线空闲时电平不确定,一个设备 拉低总线时其他设备无法感知到总线电平变化,无法实现线与功能。
而这里的上拉电阻也并不能随意进行取值,需要考虑总线电容的影响。I2C 总线上存在各种 寄生电容,可以等效成一个 RC 充电电路。
当总线从低电平转为高电平时,需要通过上拉电阻为总线供电,充电总线电容,如果上拉电阻 取值过大,充电时间过长,会导致上升沿过慢,可能影响通信,如果上拉电阻取值过小,则无法产生 低电平,所以在 I2C 规范中要求总线电容不能超过 400PF,通常建议在 1k 至 10k 欧姆之间选择, 能够既保证上升沿速度,又能够可靠拉低总线电平。
三.I2C 上拉电阻阻值计算
上拉电阻的最小值计算:
(1)公式: Rp(min) = (VDD - VOL(max)) / IOL
(2)各参数解释: VDD: 通常为 5V 或 3.3V 等常用的供电电压,在RK3568开发板上为 3.3V.
VOL(max): 表示器件在低电平时的最大输出电压, 由于 VDD 为 3.3V,所以 VOL 的最大值为 0.4
IOL: 器件在低电平时的最大灌入电流.
Rp(min) 为上拉电阻的最小值.
上拉电阻的最大值计算:
(1)公式 Rp(max) = 0.8473 * Cb / tr
(2)各参数解释: Rp(max) 是上拉电阻的最大值 Cb 是总线电容.
tr 是高电平上升时间,一般上升时间是从 0.3VDD 到 0.7VDD.