news 2026/10/7 15:55:05

IIC 上拉电阻计算:从开漏输出到 Rmin/Rmax 选型实测

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
IIC 上拉电阻计算:从开漏输出到 Rmin/Rmax 选型实测

上周帮朋友看一块板子,IIC 死活不通,示波器一挂上去,SDA 的上升沿像一条懒洋洋的弧线,从 0V 爬到 3.3V 花了将近 2 微秒。他用的 400kHz 速率,按手册要求上升时间不能超过 300ns,这一看就是上拉电阻给大了。把 10k 换成 2.2k,总线立刻活了。这事让我觉得,IIC 总线上拉电阻计算这个问题,虽然老掉牙,但每年都能在新板子上放倒一批人。很多人只知道 IIC 要上拉,却不知道上拉电阻取多大,更不知道这个值背后有两个边界:一个由灌电流决定的下限,一个由总线电容和上升时间决定的上限。这篇文章就把 IIC 总线上拉电阻计算这件事拆开,从开漏输出为什么需要上拉,到公式怎么推,再到实际选型和踩坑排查,争取让刚画板的新手也能直接抄作业,也让调过几年总线的老手能再看一眼那些容易忽略的细节。

1. IIC 总线上拉电阻到底在解决什么问题

1.1 从开漏输出说起:为什么 IIC 不能推挽

IIC 的 SDA 和 SCL 都是双向线,主从设备都可以拉低,但没有任何一个设备会主动输出高电平。这不是设计者偷懒,而是因为 IIC 是多主多从总线,必须支持“线与”逻辑。所谓线与,就是所有设备都通过开漏或者开集电极输出,只要有一个设备把线拉低,总线就是低;只有所有设备都释放总线,线才会被上拉电阻拉高。如果某个设备用推挽输出高,另一个设备同时输出低,那就成了电源对地的直接短路,轻则波形畸变,重则烧引脚。开漏输出只负责拉低,不负责拉高,所以必须有一个外部上拉电阻把总线拉到高电平。这个问题在热搜里经常被人问:“i2c 为什么用开漏输出 + 上拉电阻?”答案就是线与逻辑、双向通信、多设备仲裁和电平转换的便利性,而不是为了省一个推挽管。

上拉电阻在这里扮演的角色,不只是“把线拉高”这么简单。它同时限制了低电平时从电源流进开漏管的电流,这个电流就是灌电流。灌电流不能超过器件手册规定的 IOL 最大值,否则开漏管的导通压降会升高,VOL 变大,严重时低电平会被识别成高电平,通信直接失败。所以上拉电阻不是随便放一个就行,它是在“拉高速度”和“低电平电流”之间做平衡。很多人把上拉电阻当成一个可有可无的默认值,结果出了问题就抓瞎。我见过一块板子,八个从机模块每个都焊了 4.7k 上拉,并联之后等效只有 587Ω,总线低电平时灌电流超过 5mA,有些器件直接扛不住,VOL 抬高到 1V 以上,主控当然收不到正确的低电平。

1.2 上拉电阻的两副面孔:拉高与限流

上拉电阻的第一副面孔是拉高。当总线释放时,电源通过上拉电阻给总线电容充电,电压从低电平向高电平爬升。这个爬升过程不是瞬间完成的,它本质上是一个 RC 充电过程,R 就是上拉电阻的等效阻值,C 是总线上的总电容,包括 PCB 走线电容、器件引脚电容、连接器电容、电缆电容,甚至还包括你示波器探头的电容。R 越大,充电越慢,上升时间越长;R 越小,充电越快,上升沿越陡。第二副面孔是限流。当总线被某个器件拉低时,电源经过上拉电阻和开漏管到地,形成电流。R 越小,这个电流越大,开漏管上的压降越大,VOL 就越高。所以上拉电阻太大,上升沿爬不上去;上拉电阻太小,低电平又压不下去。这个矛盾就是 IIC 总线上拉电阻计算的核心。

很多人会问:“iic 上拉电阻取多大?”如果只给一个数,4.7k 是最常见的答案,但这个答案只在 100kHz、3.3V、总线电容不大的情况下比较稳妥。到了 400kHz 或者 1MHz,4.7k 往往就太大了。同样,如果总线电容很大,比如长线或者多器件,4.7k 也可能太大。反过来,如果总线电压是 5V,器件 IOL 又比较小,4.7k 可能又偏小。所以“取多大”这个问题,必须结合速率、电压、总线电容和器件手册来算。别迷信任何单一阻值,包括 4.7k。

1.3 上拉和下拉不是一回事

在讲计算之前,顺手把上拉电阻和下拉电阻的区别说清楚。上拉电阻是把节点在无驱动时拉到高电平,下拉电阻是把节点在无驱动时拉到低电平。IIC 总线用的是上拉,因为总线的空闲状态是高电平,所有设备释放总线时,总线必须保持高,等待下一个起始条件。下拉电阻一般用在使能脚、片选脚、模式选择脚,让这些脚在不驱动时有一个确定的低电平。IIC 总线上如果误加了下拉,总线就永远起不来,因为空闲状态应该是高。还有一些初学者把上拉和下拉同时放在一条线上,那更是灾难,等于电源对地一直有电流,总线电平也被分压在一个中间值,通信肯定不稳定。所以在 IIC 上,只谈上拉,不谈下拉,下拉是另一个话题。

2. 上拉电阻计算的两个边界:Rmin 和 Rmax

2.1 Rmin 怎么算:灌电流与低电平

上拉电阻的最小值,由开漏输出低电平时允许的灌电流决定。器件手册里一般会给出两个参数:VOL 和 IOL。VOL 是在指定灌电流下,输出低电平的最大电压;IOL 是这个引脚在 VOL 条件下能灌入的最大电流。我们要保证总线被拉低时,实际灌电流不超过 IOL,同时 VOL 不超过接收端的 VIL 最大值。对于 IIC,VIL 一般是 0.3VDD,所以 VOL 必须小于 0.3VDD。计算最小上拉电阻的公式是:

Rmin = (VDD - VOLmax) / IOLmax

这个公式看起来简单,但有几个细节容易错。第一,VDD 是上拉电阻所接的电源电压,不是器件供电电压,如果总线上有电平转换,两侧要分别算。第二,VOLmax 和 IOLmax 要从手册里取最坏情况,不要拿典型值。第三,如果总线上有多个器件,每个器件的 IOL 可能不同,要取最严格的那个,也就是 IOL 最小的那个。第四,有些器件手册给的是 IOL 在 VOL=0.4V 时的值,但你的接收端 VIL 要求可能是 0.3VDD,3.3V 下就是 0.99V,0.4V 当然满足;但如果是 5V 总线,0.3VDD 是 1.5V,0.4V 也满足。真正要小心的是,如果上拉电阻太小,灌电流超过 IOL,VOL 会上升,可能超过 0.3VDD,这时低电平就不可靠了。

举个例子:3.3V 总线,某个器件的 IOLmax=3mA,VOLmax=0.4V。那么 Rmin=(3.3-0.4)/0.003=966.7Ω。也就是说,上拉电阻不能小于约 967Ω。如果你用 1k,刚好在边缘,最好留一点余量,用 1.2k 或 1.5k。如果你用 4.7k,Rmin 肯定满足,因为 4.7k 比 967Ω 大得多。所以 Rmin 通常不是问题,除非你为了提速把电阻降到几百欧。我见过有人为了 1MHz 高速,直接上 680Ω,结果灌电流超标,低电平失败。高速模式虽然上升时间要求紧,但也不是无脑减小电阻,要先看器件能不能承受。

2.2 Rmax 怎么算:上升时间与总线电容

上拉电阻的最大值,由总线上升时间要求决定。IIC 规范对不同速率规定了最大上升时间 tr。标准模式 100kHz,tr 最大 1000ns;快速模式 400kHz,tr 最大 300ns;快速+ 模式 1MHz,tr 最大 120ns;高速模式 3.4MHz,tr 最大 60ns 左右。总线释放后,电压从低电平向高电平充电,RC 充电到 VIH 阈值所需的时间就是上升时间。IIC 规范通常定义上升时间从 0.3VDD 到 0.7VDD。根据 RC 充电公式,从 0.3VDD 充到 0.7VDD 所需时间是:

tr = 0.8473 × Rp × Cb

反过来,上拉电阻最大值:

Rmax = tr / (0.8473 × Cb)

其中 Cb 是总线总电容,单位法拉;tr 是规范允许的最大上升时间,单位秒;Rp 是上拉电阻等效值,单位欧姆。这个公式是 IIC 上拉电阻计算里最关键的一个。很多人只知道 4.7k,却不知道这个 4.7k 对应的总线电容和上升时间是多少。如果 Cb 是 100pF,400kHz 下 Rmax=300ns/(0.8473×100pF)=300e-9/(8.473e-11)=3540Ω,4.7k 就超了,所以 400kHz 下 4.7k 可能太大。如果 Cb 是 200pF,Rmax=1770Ω,4.7k 更是远远超标。这就是为什么很多板子在 100kHz 下用 4.7k 没问题,一升到 400kHz 就通信失败,因为上升沿根本没在采样点之前到达 VIH。

2.3 公式里的 0.8473 到底怎么来的

这个 0.8473 不是拍脑袋来的,它来自 RC 充电的指数曲线。假设电容从 0.3VDD 开始充电,目标值是 VDD,充电公式是:

V(t) = VDD - (VDD - 0.3VDD) × e^(-t/RC)

当电压达到 0.7VDD 时,代入:

0.7VDD = VDD - 0.7VDD × e^(-t/RC) 0.7VDD × e^(-t/RC) = 0.3VDD e^(-t/RC) = 0.3/0.7 = 0.4286 -t/RC = ln(0.4286) = -0.8473 t = 0.8473 × RC

所以 tr=0.8473×Rp×Cb。这个推导假设低电平起始点是 0.3VDD,高电平阈值是 0.7VDD。实际低电平可能更低,比如 0.2VDD,那么系数会稍有变化,但 IIC 规范用 0.3VDD 到 0.7VDD 定义上升时间,所以我们就用 0.8473。有些资料用 0.8 或者 0.85 近似,差别不大。记住这个系数,你就能自己推出 Rmax,不用死记硬背。另外,这个公式只考虑了上拉电阻给总线电容充电,没有考虑器件输入漏电流和上拉电阻的容差。实际选型时,要在算出来的 Rmax 上留 20% 到 30% 的余量,因为电阻有 1% 到 5% 的容差,电容也会随温度、电压和批次变化。

2.4 电压、速率、Cb 一起放进去:一个完整算例

光看公式容易飘,我们拿一个实际场景算一遍。假设主控是 3.3V,总线速率 400kHz,总线上挂了 6 个从机,PCB 走线大约 15cm,总线电容估算为 180pF。从机器件手册给出 IOLmax=3mA,VOLmax=0.4V。先算 Rmin:

Rmin = (3.3 - 0.4) / 0.003 = 966.7Ω

再算 Rmax。400kHz 快速模式,tr 最大 300ns,Cb=180pF:

Rmax = 300ns / (0.8473 × 180pF) = 300e-9 / (1.525e-10) = 1967Ω

所以上拉电阻必须在 967Ω 到 1967Ω 之间。标准阻值里,1.2k、1.5k、1.8k 都满足。如果选 1.8k,接近上限,余量不大;选 1.5k 比较稳,但功耗稍大;选 1.2k 更快,灌电流约 (3.3-0.4)/1200=2.4mA,低于 3mA,也安全。实际我会选 1.5k,兼顾速度和余量。如果 Cb 不是 180pF,而是 300pF,Rmax=300ns/(0.8473×300pF)=1180Ω,这时 1.2k 刚好,1.5k 就超了。所以总线电容的估算非常关键,估小了上拉电阻选大,通信失败;估大了上拉电阻选小,灌电流可能超标。后面我会讲怎么估 Cb。

3. 从手册到选型:一次完整的上拉电阻计算流程

3.1 第一步:先把总线速率和电压定死

计算上拉电阻之前,先明确三个参数:总线速率、总线电压、器件的 IOL/VOL。总线速率决定了 tr 上限,标准模式 100kHz 对应 1000ns,快速模式 400kHz 对应 300ns,快速+ 1MHz 对应 120ns,高速模式 3.4MHz 对应更小的值。总线电压决定了 Rmin 公式里的 VDD,也决定了 VOL 和 VIL 的绝对值。IIC 总线可以是 1.8V、2.5V、3.3V、5V,但同一段总线的上拉电压必须一致,不能有的上拉到 3.3V,有的上拉到 5V,否则高电平不一致,器件可能损坏。如果主控是 3.3V,从机是 5V,不能直接把 5V 上拉接到 3.3V 引脚,必须用电平转换器,比如 MOS 管电平转换电路,两侧各自上拉,上拉电阻分别计算。这一步定错了,后面算得再准也没用。

3.2 第二步:估总线电容 Cb,别只信手册

总线电容 Cb 是 Rmax 公式里最不确定的量。它由很多部分组成:PCB 走线电容、器件引脚电容、连接器电容、电缆电容、探头电容。PCB 走线的电容大约是 1 到 3pF/cm,取决于线宽、线距、层叠和介质。普通 FR4 上,一条 10cm 的 IIC 走线大约 10 到 30pF。每个器件的 SDA/SCL 引脚大约 5 到 10pF,6 个器件就是 30 到 60pF。连接器每个触点大约 1 到 5pF,几个连接器加起来 10 到 20pF。如果是排线或者电缆,每米大约 50 到 100pF,1 米电缆就是 50 到 100pF。示波器探头 10:1 探头大约 10 到 15pF,测量时会额外增加总线电容,所以测量到的上升时间会比实际略慢。把这些加起来,一条 15cm 走线、6 个器件、两个连接器的总线,Cb 大概在 150 到 250pF 之间。如果走线更长或者有电缆,Cb 可能超过 400pF,这时标准模式也会吃力。IIC 规范对标准模式和快速模式的最大总线电容规定是 400pF,快速+ 是 550pF,高速模式是 100pF。超过这个值,就要考虑缓冲器或者降低速率。

3.3 第三步:查器件的 IOL 与 VOL,别拿典型值凑

很多新手从手册里看到 VOL 典型值 0.1V,就以为没问题,其实要看最大值。IOL 也一样,要看最大值,但注意 IOLmax 是器件能承受的最大灌电流,不是实际灌电流。实际灌电流由上拉电阻和电源电压决定,必须小于 IOLmax。通常 IIC 器件的 IOLmax 在 3mA 左右,有些低功耗器件只有 1mA 甚至更小,比如某些传感器。如果总线上有 IOL 只有 1mA 的器件,Rmin=(3.3-0.4)/0.001=2900Ω,这时上拉电阻不能小于 2.9k,否则那个器件拉低时 VOL 会超标。所以计算 Rmin 时,要遍历总线上所有器件,取最小的 IOLmax。同样,VOLmax 也要取最差的值,有些器件在 3mA 下 VOLmax=0.4V,有些在 1mA 下 VOLmax=0.2V,要按实际灌电流对应的 VOL 来判断。如果手册只给了曲线,那就按最坏情况取点。

3.4 第四步:算 Rmin、Rmax,选标准阻值

有了 VDD、IOL、VOL、tr、Cb,就可以算 Rmin 和 Rmax。计算出来的范围可能很窄,比如 967Ω 到 1180Ω,这时只能选 1k 或者 1.1k,而且要考虑电阻容差和温度变化。如果范围很宽,比如 967Ω 到 2950Ω,那 1.5k、2.2k、2.7k 都可以,优先选常见的 2.2k 或者 2.7k,兼顾功耗和速度。选标准阻值时,不要选刚好等于 Rmax 的值,要留 20% 余量。比如 Rmax=2950Ω,选 2.2k 比 2.7k 更稳,因为 2.7k 已经接近上限,温度升高或者电容变大就可能超。也不要选刚好等于 Rmin 的值,比如 Rmin=967Ω,选 1k 太边缘,选 1.2k 或 1.5k 更安全。如果算出来 Rmin 大于 Rmax,说明当前条件下无解,必须降低总线速率、减小总线电容、更换 IOL 更大的器件,或者使用 I2C 缓冲器。这种情况在长线、多器件、高速率同时出现时很常见。

3.5 第五步:上电实测上升时间,别省这一步

计算只是纸上谈兵,实际板子上的电容、电阻容差、器件差异都会影响波形。算完选好电阻,一定要上电用示波器测上升时间。测量点选在主控端或者总线一端,探头用 10:1 低电容探头,地线用弹簧地,不要用长鳄鱼夹,否则会引入额外电感和电容。触发方式设为上升沿触发,时基调到 200ns/div 或者 500ns/div,看 0.3VDD 到 0.7VDD 的时间。如果实测上升时间小于规格的 80%,说明余量充足;如果接近规格值,就要考虑减小上拉或者降低速率;如果超过规格,通信肯定不稳定。同时也要看下降沿,下降沿由开漏管拉低,通常很快,但如果出现振铃或者台阶,可能是走线电感或者多器件同时拉低引起的。实测这一步不能省,我见过太多“算出来没问题,实际就是不通”的案例,最后都是 Cb 估小了或者有隐藏的并联上拉。

4. 踩坑实录:上拉电阻小了不通信、大了也不通信

4.1 上拉太小:低电平被抬高,VOL 超标

上拉电阻太小,最直接的后果是灌电流过大。比如 3.3V 总线用了 1k 上拉,低电平时电流 (3.3-0.4)/1000=2.9mA,如果器件 IOL 只有 2mA,那 VOL 就会升高到可能超过 0.3VDD。接收端看到低电平不够低,就会误判为高电平或者不确定,通信失败。有些发热严重的板子,上拉电阻用的是 470Ω,甚至 220Ω,低电平时电流十几毫安,开漏管烫得厉害,长期工作可能损坏。另外,上拉电阻太小会让上升沿非常陡,容易产生过冲和振铃,尤其是走线较长时,过冲可能超过电源电压,导致器件闩锁或者误触发。热搜里“i2c 上拉电阻小了不通信”说的就是这种情况,虽然不如上拉太大常见,但确实存在。解决方法是增大上拉电阻,或者降低总线电压,或者换 IOL 更大的器件。

4.2 上拉太大:上升沿爬不上去,误码和 NACK

上拉电阻太大是更常见的问题。上升沿变缓,电压还没到 VIH 就被采样,主控读到的数据就是错的,表现为随机 NACK、数据错位、设备偶尔掉线。尤其是在 400kHz 和 1MHz 下,采样点靠近上升沿末端,如果上升时间超过规格,通信必然失败。我遇到过一块板子,100kHz 下正常,400kHz 下就不行,示波器一看,上升时间 800ns,远超 300ns 上限。把 10k 换成 2.2k 后,上升时间降到 180ns,通信立刻稳定。上拉太大还会让总线对干扰更敏感,因为高电平驱动能力弱,一点点漏电流或者噪声就能把电平拉下来。如果总线上有多个器件,它们的输入漏电流会在上拉电阻上产生压降,进一步降低高电平。所以上拉电阻不能盲目取大,低功耗应用也要在速率和功耗之间做权衡。

4.3 多个模块并联上拉:等效电阻变小

这是最隐蔽的坑之一。很多从机模块出厂时自带 4.7k 上拉,你插了 8 个模块,就相当于 8 个 4.7k 并联,等效 587Ω。这时灌电流可能超标,低电平失败。更麻烦的是,你如果只按单个模块算,根本想不到总线上有这么多上拉。解决办法是检查每个模块的原理图,把多余的上拉电阻去掉,只保留一组,通常放在主控端。如果模块上的上拉不能拆,可以换成大阻值,或者用 I2C 开关把模块分段,避免所有上拉同时并联。还有一种情况是主控端已经有一个 4.7k,你又在外围加了一个 4.7k,并联后 2.35k,虽然可能还能工作,但已经偏离了原设计。所以画板时最好明确:整条总线只有一组上拉,放在主控端或者总线一端。

4.4 常见问题速查表

现象可能原因排查方法解决
完全无应答上拉太大、总线电容过大、器件没供电示波器看 SCL/SDA 是否有波形,测上拉电压减小上拉,检查供电,降低速率
100kHz 正常,400kHz 失败上升时间超规格测 0.3VDD 到 0.7VDD 上升时间减小上拉,降低速率,减小 Cb
随机 NACK上拉偏大、干扰、多器件并联看波形是否有台阶、毛刺减小上拉,增加滤波,去掉多余上拉
低电平偏高上拉太小、灌电流超标测 VOL,算实际灌电流增大上拉,换 IOL 更大的器件
某个模块插上就失败模块自带上拉并联断电量等效电阻去掉模块上拉,或用 I2C 开关
长线通信不稳定总线电容大、反射测上升时间,看振铃用缓冲器,降低速率,加终端
上电偶尔失败上拉太小导致 VOL 高,或电源时序多次上电测波形调整上拉,加复位,检查时序

4.5 示波器测量的几个细节

测 IIC 波形时,探头电容会加载到总线上,10:1 探头大约 10 到 15pF,如果总线电容本来只有 100pF,加上探头就变成 115pF,上升时间会变慢 15%。所以测出来的上升时间比实际略大,这是正常的,但心里要有数。如果测出来刚好在规格边缘,实际可能还有余量;如果测出来超标,实际肯定超标。地线要尽量短,用探头自带的弹簧地,不要用长鳄鱼夹,否则高频振铃会掩盖真实波形。触发方式可以用 SCL 下降沿触发,看 SDA 的建立时间;也可以看起始条件的波形。如果总线出现台阶,可能是多个上拉并联或者走线分支太长。测量点选在总线末端和最远端各测一次,末端波形通常最差,因为电容最大。如果只有一台示波器,优先测最远端的从机引脚。

5. 不同场景下的上拉策略:速率、电压、长线和低功耗

5.1 标准、快速、快速+与高速模式

不同速率下,上拉电阻的取值范围差别很大。标准模式 100kHz,tr 上限 1000ns,Cb 400pF 时 Rmax=1000ns/(0.8473×400pF)=2950Ω,所以 2.2k 到 2.7k 很常见,4.7k 在 Cb 较小时也能用。快速模式 400kHz,tr 上限 300ns,Cb 200pF 时 Rmax=1770Ω,1.5k 到 2.2k 比较合适,4.7k 通常太大。快速+ 模式 1MHz,tr 上限 120ns,Cb 100pF 时 Rmax=1416Ω,1k 到 1.2k 比较合适,2.2k 就太大了。高速模式 3.4MHz,tr 上限更小,Cb 要求 100pF 以内,上拉电阻可能低到几百欧,但这时灌电流也大,必须确认器件的 IOL 足够。很多器件支持高速模式,但需要主控先发高速模式命令,并且上拉电阻和总线电容都要满足更严的要求。

5.2 3.3V 与 5V 混压总线

3.3V 和 5V 混压是常见场景。如果主控是 3.3V,从机是 5V 开漏器件,理论上可以把总线统一上拉到 3.3V,因为 5V 开漏器件只负责拉低,不输出高,只要它的 VIL 能识别 3.3V 的低电平和高电平即可。很多 5V 器件的高电平输入阈值是 0.7×5V=3.5V,3.3V 高电平可能不够,所以不能简单统一到 3.3V。这时需要电平转换,或者把总线上拉到 5V,但主控 3.3V 引脚不能承受 5V,所以必须用电平转换器。常见的 MOS 管电平转换电路,低压侧上拉到 3.3V,高压侧上拉到 5V,栅极接 3.3V,源极接低压侧,漏极接高压侧。两侧的上拉电阻要分别按各自的 VDD、Cb 和 tr 计算,不能共用一个。如果使用专用 I2C 电平转换芯片,手册通常会给出推荐上拉值,按手册来即可。

5.3 长线、多板卡与缓冲器

当总线走线很长,比如超过 30cm,或者通过排线、连接器连接到多块板卡,总线电容很容易超过 400pF。这时不管上拉电阻怎么选,标准模式都可能失败,因为 Rmax 会变得很小,甚至小于 Rmin,无解。解决办法是降低速率、使用 I2C 缓冲器、使用 I2C 开关或者差分延长芯片。I2C 缓冲器可以把总线分成两段,每段各自有上拉电阻,电容不累加,上升时间容易满足。缓冲器还会重新驱动总线,提高抗干扰能力。如果只是两块板卡,也可以用 I2C 多路复用器,按需切换。长线还要注意地线回流和串扰,SCL 和 SDA 尽量靠近地线走,或者用双绞线,每根信号配一根地。上拉电阻在长线场景下通常取 1.5k 到 2.2k,但具体还是要算。

5.4 低功耗设备的上拉取舍

电池供电的设备希望上拉电阻大一些,因为总线低电平时电流 I=VDD/R,R 越大,静态功耗越小。但 R 越大,上升时间越长,速率就上不去。所以低功耗设备通常跑 100kHz 甚至更低,上拉电阻可以取 10k、22k 甚至 47k,前提是总线电容小、器件漏电流小。如果 Cb 只有 50pF,100kHz 下 Rmax=1000ns/(0.8473×50pF)=23600Ω,47k 就太大了,22k 可以。但如果 Cb 有 200pF,Rmax=5900Ω,10k 就超了,只能用 4.7k。所以低功耗不是无脑加大电阻,而是先满足上升时间,再在范围内选大值。有些低功耗器件支持 1.8V 总线,Rmin 会更小,因为 VDD 低了,Rmin=(1.8-0.2)/0.002=800Ω,但 Rmax 不变,所以范围可能更窄。低功耗设计还要考虑上拉电阻在总线空闲时没有电流,只有通信时才有,平均功耗取决于通信占空比。

6. 个人常用参数表与最后几个提醒

6.1 快速选型表(3.3V/5V)

下面这张表是我在一般 PCB 走线、总线电容 100 到 200pF、器件 IOL 3mA 的情况下常用的上拉电阻参考值。注意这只是起点,实际还要按公式算和实测。

总线电压速率总线电容约 100pF总线电容约 200pF总线电容约 400pF
3.3V100kHz4.7k 到 10k2.7k 到 4.7k1.5k 到 2.7k
3.3V400kHz2.2k 到 3.3k1.5k 到 2.2k1.0k 到 1.5k
3.3V1MHz1.0k 到 1.5k0.82k 到 1.2k不推荐
5V100kHz4.7k 到 10k2.7k 到 4.7k2.2k 到 3.3k
5V400kHz2.2k 到 3.3k1.8k 到 2.7k1.2k 到 1.8k
5V1MHz1.2k 到 1.8k1.0k 到 1.5k不推荐

这张表里的“不推荐”不是说完全不能用,而是说 Cb 400pF 加 1MHz 时,Rmax 会小到和 Rmin 冲突,除非器件 IOL 很大、电压很低,否则最好用缓冲器分段。表中的阻值是近似范围,实际要按公式算。比如 3.3V、400kHz、Cb=200pF,Rmax=1770Ω,所以 1.5k 到 1.8k 比较稳,2.2k 已经接近上限,3.3k 就超了。5V、400kHz、Cb=200pF,Rmax 一样是 1770Ω,但 Rmin=(5-0.4)/0.003=1533Ω,所以范围只有 1533Ω 到 1770Ω,非常窄,只能选 1.6k 或 1.8k,1.5k 会低于 Rmin。这就是 5V 总线的麻烦之处,电压高,灌电流大,Rmin 抬高,可选范围变窄。

6.2 最后几个提醒

第一个提醒,上拉电阻只放一组,不要每个器件都放。我拆过太多模块,上面自带 4.7k,插多了等效电阻小得离谱,低电平直接失败。画板时最好在原理图上标注“IIC 上拉只此一处”,避免后来的人重复添加。

第二个提醒,示波器测上升时间时,一定要用低电容探头和短地线。探头电容会额外增加总线电容,测出来的上升时间偏大,但这是保守的,可以接受。如果看到波形有台阶,先怀疑多个上拉并联或者走线分支。

第三个提醒,降低速率永远是最快的临时手段。如果板子已经贴片,没法换电阻,先把 400kHz 降到 100kHz,很多通信问题会立刻消失。这不是长久之计,但可以帮你判断问题是不是出在上升时间上。

第四个提醒,不要忽略器件的 IOL 和 VOL。有些低功耗传感器 IOL 只有 1mA,上拉电阻不能太小;有些器件 VOL 在 3mA 下高达 0.6V,如果 VIL 是 0.3VDD=0.99V,还能用,但如果电源电压降到 2.5V,VIL=0.75V,0.6V 就接近极限了。所以低压总线要特别小心。

第五个提醒,长线或者多板卡优先考虑 I2C 缓冲器,不要硬算上拉电阻。缓冲器把电容分段,每段独立上拉,计算简单,抗干扰也好。如果非要用长线,速率降到 50kHz 以下,上拉取小一点,同时加 TVS 或者 RC 滤波。

第六个提醒,电阻封装功率也要看一眼。虽然大多数情况下功耗很小,但 0402 电阻额定 0.063W,如果上拉电阻取 220Ω、总线 5V,低电平时电流 22mA,功耗 0.11W,已经超过 0402 的额定值,电阻会发烫甚至失效。所以极小阻值只在高速、低 Cb 且短时间内使用,或者换更大封装。

写到这里,IIC 上拉电阻计算这件事基本就拆完了。我自己的习惯是:先按公式算出 Rmin 和 Rmax,选一个中间偏小的标准阻值,上电测上升时间,再看通信是否稳定。如果稳定且余量够,就定稿;如果不稳,优先减小上拉或者降低速率,而不是盲目换大。上拉电阻不大,但它决定的是总线能不能在正确的时间到达正确的电平,这才是 IIC 通信的根基。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/7 15:54:13

FOC无感控制实战指南:从启动失败到稳定运行

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/7 15:53:28

从.brd到S参数提取:PowerSI仿真避坑指南与完整流程

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/7 15:52:46

整数划分算法:递归、动态规划与回溯的工程选型指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/7 15:52:46

FPGA+GPU异构计算:嵌入式AI落地的高效架构与实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/7 15:52:06

WorkBuddy+Hypit:轻量级AI工作流实现视频智能结构化处理

1. 项目本质与真实价值:这不是“AI剪辑”,而是轻量级智能工作流的平民化落地“一句话复刻爆款视频”这个标题,乍看像短视频平台常见的流量话术,但拆开来看,它背后藏着一个被严重低估的技术拐点:企业级AI能力…

作者头像 李华
网站建设 2026/10/7 15:51:50

浏览器即开即用:ESP32在线开发工具全解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华