CapacitorPro
Q

I2C 上拉電阻該選多少?計算方法與訊號完整性分析

A

I2C 匯流排上的 SDA 和 SCL 線需要接上拉電阻,這是因為 I2C 採用「開汲極(Open-Drain)」架構——匯流排可以被裝置主動拉低(pull to ground),但無法主動拉高,必須依賴上拉電阻將匯流排拉回高電位。

I2C 上拉電阻的兩大約束

約束 1:上拉電阻不能太大(最小值限制)

當某一裝置將匯流排拉低時,電流從 VCC 通過上拉電阻流入該裝置的汲極:

I_OL = (VCC – V_OL) / R_pullup

I2C 規格要求 I_OL(MAX) 通常為 3mA(標準模式)或 6mA(快速模式)。因此:

R_min = (VCC – V_OL_min) / I_OL_max

例如 VCC=3.3V、V_OL_max=0.4V、I_OL_max=3mA:

R_min = (3.3 – 0.4) / 0.003 ≈ 967Ω

約束 2:上拉電阻不能太小(最大值限制)

上拉電阻越大,匯流排電容(C_bus)充電越慢,上升時間 t_r 越長。I2C 規格要求:

  • 標準模式(100kHz):t_r ≤ 1000ns
  • 快速模式(400kHz):t_r ≤ 300ns

上升時間近似:t_r = R_pullup × C_bus × 2.2

R_max = t_r(MAX) / (2.2 × C_bus)

一個計算範例

假設條件:VCC=3.3V,C_bus=100pF(包括所有裝置輸入電容 + PCB 走線電容),100kHz I2C

R_min = (3.3 – 0.4) / 0.003 ≈ 967Ω

R_max = 1000ns / (2.2 × 100pF) ≈ 4.5kΩ

→ 合法的 R_pullup 範圍:967Ω ~ 4.5kΩ,典型值約 4.7kΩ ✅

常見錯誤:上拉電阻放在錯誤位置

I2C 的上拉電阻應該放在匯流排的兩端(bus termination),而非放在每個裝置的分支上。放在每個分支上相當於並聯多個電阻,會把等效上拉電阻變小,導致 V_OL 過高。

另外要注意的是:如果 I2C 匯流排上有超過一個 VCC 電壓(如 3.3V 與 5V 混合),上拉電阻必須連接到該匯流排的最低電壓(如 3.3V),而不是最高電壓,否則會造成低電壓裝置被高電壓損壞。

相關分類:電阻
I2C 上拉電阻該選多少?計算方法與訊號完整性分析|CapacitorPro