I2C Bus 提昇電阻之計算
I2C Bus 和 SPI 一樣也是主從式架構, 不過它不同於 SPI 的點對點或點對多點結構, 它是以匯流排型式介接, 同時匯流排上允許有多個 master (主設備) 和多個 slave (從設備). 介接方法如下圖所示:
I2C 介接圖
I2C 的匯流排接線十分簡單, 只有兩條訊號線: 資料線 (SDA, Serial Data Line) 及時脈線 (SCL, Serial Clock Line), 所有 I2C 裝置不管是 master 或 slave 都是開汲極 (Open Drain, CMOS) 或者是開集極 (Open Colloecor, TTL) 的 I/O 接腳並接 (Wired-AND) 在這兩條線路上. 接腳的內部開關在導通時為接地的邏輯低準位 (Low), 而不導通時則形同斷線浮接, 不過 I2C Bus 上必需要加入提升電阻 Rp (SDA, SCL 兩條線都需要), 將浮接狀態轉變為邏輯高準位 (High) 狀態. 如下圖:
I2C 接腳內部 Open Drain 電路圖
上圖中除了一對提升電阻 Rp 之外, 還有每個 I2C 設備依現況的需要可選擇加裝一對抗干擾用的電阻 Rs (尤其是當 SDA, SCL 的佈線繞經特殊干擾源時).
應用 I2C 時, 最麻煩的是計算 Rp 的阻值, 及為各個晶片選擇合適的 Rs 阻值. 尤其是匯流排上繞線長, 又設備多時, 例如: 現今的智慧型手機, 匯流排上少說就有: 羅盤(地磁儀, 多軸), 陀螺儀 (多軸), 加速計 (多軸), 高度計, 溫度計, 濕度計, 環境光線...等等 I2C 晶片.
Rs 需要依照各個晶片實際受干擾的情況選擇, 但阻值一般會限制在 ≦ Rp/10 (或約 330 Ohm). 因為一但 Rs 不為 0, 晶片真正的 Rp(Total) 會變成是 Rp+Rs, 選擇太大的 Rs 會使得 Rp(Total) 偏離 Rp太多, 影響該晶片的運作. Rp 一般為 2K~7K Ohm, Rp 數值小傳輸的波形會比較接近方波, 但比較耗電; Rp 數值大雖然比較省電, 但傳輸的波形就會比較容易受電路上電容充放電的影響而變了樣. 不過因為 Rp 的數值會影響整個匯流排是否可以順暢工作, 一般會需依據 I2C 的規範來計算而不是用試誤法去猜. 下面列出了 Rp 的最大值及最小值公式 (依據 NXP 目前最新的 I2C 規範文件 Page 55)
- Rp(max) = tr/(0.8473 x Cb)
- Rp(min) = (Vdd-VOL(max))/IOL
由這二個式子, 可以看出 Rp(min) 和週邊 IC I/O 接腳的工作電壓 (Vdd) 成正比: 工作電壓提高 Rp(min) 就會提高. 而 Rp(max) 則是依照匯流排的工作速度 (和 tr 有關) 不同, 和實際 I2C Bus 上的線路電容 (Cb) 成反比.
I2C 規範文件 Page 47~48 列出不同規範下各個已知數值如下:
Symbol | 說明 | Standard-mode 100Kbps |
Fast-mode 400Kbps |
Fast-mode+ 1Mbps |
---|---|---|---|---|
tr | 訊號上升時間, 由 0.3 Vdd 上升至 0.7 Vdd | 1000ns | 300ns | 120ns |
Cb(max) | SCL, SDA 線路最大許可電容 | 400pF | 400pF | 550pF |
VOL(max) | 低準位的輸出電壓 | 0.4V | ||
IOL | 低準位的輸出電流 | 3mA (min) | 3mA (min) | 20mA (min) |
將對應的數值代入式子中, 我們很快就可以算出, 在採用 Fast-mode 的情況下: Vdd 為 5Volt 時 Rp(min) = 1.533K Ohm, Vdd 為 3.3Volt 時 Rp(min) = 966 Ohm. Cb 為 50pF 時 Rp(max) = 7.081K Ohm, Cb 為 100pF 時 Rp(max) = 3.541K Ohm.
Vdd vs Rp(min)
其實一般情況下 (週邊晶片只有 2~3 顆, 或者線路總長很短) 我們不用太注意 Rp(max). 需要注意的是佈線長度長, 且週邊晶片較多的時候 Cb接近最大值限制, 這時 Rp(max) 可能和 Rp(min) 差不多, 甚至 Rp(max) 比 Rp(min) 還要小. 這個時候就不得不採用 I2C Repeater/Extender 或者是 I2C Multiplexers/Switches 這類的晶片來將原有的 I2C 線路分成多段, 以降低 Cb 值.
Cb vs Rp(max)
小記
- 我只列出比較常用的 Standard-mode, Fast-mode, Fast-mode+. 至於 High-Speed mode, Ultra Fast-mode 還有 Vdd 小於 2V 的部份要麻煩你自己動手查表及繪製曲線.
- 如有誤謬, 敬請指正.
留言列表