I2C 总线能挂多少设备?
理论上:
7-bit address :2 的 7 次方,能挂 128 个设备。
10-bit address :2 的 10 次方,能挂 1024 个设备。
当然要去掉预留设备的地址,7 bit 协议规定了 普通厂家不能使用8个预留地址。保留地址如下:

但是 I2C 协议规定,总线上的电容器不得超过 400pF。管脚有输入电容,PCB 寄生电容生电容,所以会有限制。实际设计中的经验值可能是
总线规定电容大小的原因是,I2C 使用的 GPIO 为了泄漏结构,泄漏结构不能输出高电平,需要外部拉电阻拉高。电阻和总线电容产生一个 RC 电容器越大,信号边缘越慢,可能会带来信号质量风险。
传输速度越快,信号窗口越小,上升下降时间越短越陡,所以 RC 乘积必须更小。
I2C 架构
我们知道 I2C 速度模式不同,标准(100KHz)、快速(400KHz)、快速plus(1MHz)、高速(3.4MHz)。
Vdd 可以采用 5V、3.3V、1.8V 电源电压不同,上拉电阻值也不同。
一般总线认为低于 0.3Vdd 高于低电平 0.7Vdd 为高电平。
上拉电阻计算
1.上拉电阻过小,总线电流增大,端口输出低电平增大。
2.上拉电阻过大,上升沿时间增加,方波可能变成三角波。
因此,计算精确的上拉电阻值是非常重要的。
计算上拉电阻的电阻值有明确的计算公式:
最大电阻和上升时间 tr 、总线电容 Cb 、标准上升时间 0.8473 有关。
最小电阻和电源 Vdd 电压、GPIO 口本身最大输出电压 Vol、 GPIO口本身最大电流 Vol 有关。
查《I2C-bus specification and user manual.pdf》7.1节:
查《I2C-bus specification and user manual.pdf》表10:
从上表可知:
标准模式:0~100KHz,上升沿时间 tr = 1us
2.快速模式:1000~400KHz,上升沿时间 tr = 0.3us
三、高速模式:up to 3.4MHz,上升沿时间 tr = 0.12us
假设这个公式 Vdd 是 1.8V 供电,Cb 总线电容是200pF虽然协议规定负载电容最大 400pF,实际上超过 200pF 波形很差,我们认为 200pF 来计算)
(Vdd上拉电阻越大):
note:在高速模式下,一般采用电源电压 1.8 V,不会采用 3.3V,因为如果用 3.3V 你会发现最小电阻大于最大电阻。
不同速率使用的电阻一般如下:1.5K、2.2K、4.7K。
一般大家采用 I2C 使用标准模式,也就是 100KHz,推荐上拉电阻 4.7K,当然可以用示波器看传输波形,适当调整。
结论:I2C 上拉电阻值与电源电压、传输速度、总线电容器(负载因素)有关。您可以根据自己的板计算,选择最佳电阻值,以获得最佳的传输波形。
最大电阻 Rp 和总线电容 Cb 关系图:
note:建议保持总线电容 100pF 以下。
关于 I2C 我在我的博客上写了各个方面,包括 10 篇,包括 I2C 传输协议和Linux 下 I2C 您可以查看软件驱动框架。网站如下:
http://www.linuxer.vip/i2c-bus-spec/
也可以在左下角点击阅读原文,电脑端阅读更方便。
··················END··················
点击关注微信官方账号,免费获取学习资料