I2C为什么要接上拉电阻?因为它是开漏输出。

本文讲一下,为什么是开漏输出。
I2C协议支持多个主设备与多个从设备在一条总线上,如果不用开漏输出,而用推挽输出,会出现主设备之间短路的情况。所以总线一般会使用开漏输出。
为什么要接上拉电阻?
接上拉电阻是因为I2C通信需要输出高电平的能力。一般开漏输出无法输出高电平,如果在漏极接上拉电阻,则可以进行电平转换。
I2C由两条总线SDA和SCL组成。连接到总线的器件的输出级必须是漏极开路,都通过上拉电阻连接到电源,这样才能够实现“线与”功能。当总线空闲时,这两条线路都是高电平。
上拉电阻阻值怎么确定?
一般IO端口的驱动能力在2mA~4mA量级。
阻值不能过小
主要是考虑功耗问题。
如果上拉阻值过小,VDD灌入端口的电流将较大,功耗会很大,导致端口输出的低电平值增大(I2C协议规定,端口输出低电平的最高允许值为0.4V)。故通常上拉电阻应选取不低于1K的电阻(当VDD=3V时,灌入电流不超过3mA)。
阻值不能过大
因为兼顾到速度问题。
它取决于上拉电阻和线上电容形成的RC延时,RC延时越大,波形越偏离方波趋向于正弦波,数据读写正确的概率就越低,所以上拉电阻不能过大。
I2C总线上的负载电容不能超过400pF。当I2C总线上器件逐渐增多时,总线负载电容也相应增加。当总的负载电容大于400pF时,就不能可靠的工作。这也是I2C的局限性。
建议上拉电阻可选用1.5K,2.2K,4.7K。
I2C总线基本操作
根据I2C总线规范,总线空闲时两根线都必须为高。假设主设备A需要启动I2C,他需要在SCL高电平时,将SDA由高电平转换为低电平作为启动信号。
主设备A在把SDA拉高后,它需要再检查一下SDA的电平。为什么? 因为线与,如果主设备A拉高SDA时,已经有其他主设备将SDA拉低了,由于 1 & 0 = 0 那么主设备A在检查SDA电平时, 会发现不是高电平,而是低电平。
说明其他主设备抢占总线的时间比它早,主设备A只能放弃占用总线。如果SDA是高电平,说明主设备A可以占用总线,然后主设备A将SDA拉低,开始通信。
因此,模拟I2C一定要将GPIO端口设置为开漏输出并加上拉电阻。
审核编辑:刘清
突破人形机器人控制器性能瓶颈:高效稳定的...
时间:2026-03-05
一文讲懂开关电源的阻尼振荡
时间:2026-03-05
使用过滤器电容器和诱导器来抑制受辐射的EM...
时间:2026-03-05
智能硬件遭遇销量困局 看社区O2O如何破解
时间:2026-03-05
物联网新时代,关于安全的5大错误认知
时间:2026-03-05
智能停车场一体化控制器方案简述
时间:2026-03-05
ZigBee应用于智能家居是否存在严重漏洞?
时间:2026-03-05
推动物联网发展,供电是基础设备的生命线
时间:2026-03-05
楼宇对讲走向标准化 四大发展方向明确
时间:2026-03-05
最帅“黑”科技:让普通手机可扫描3D
时间:2026-03-05
关于STM32WL LSE 添加反馈电阻后无法起振的...
时间:2026-03-05
玻璃釉电容器的结构与特点
时间:2026-03-05
表贴电容的分类
时间:2026-03-05
CB11型聚苯乙烯薄膜电容器
时间:2026-03-05
3PEAK高压零漂放大器契合精密应用
时间:2026-03-05
绝缘电阻表原理_绝缘电阻表的作用
时间:2026-03-05
绝缘电阻用什么来测量_绝缘电阻测量方法
时间:2026-03-05
压敏电阻坏了怎么替代
时间:2026-03-05
绝缘电阻该如何测量功率?如何使用兆欧表测...
时间:2026-03-05
终端电阻的使用方法及作用
时间:2026-03-05