公告版位
從小害怕寫作文, 文筆不佳到現在, 還請各位讀者大大:
1. 發現有錯誤, 請留言告知. (或者你 '覺得' 不對也行)
2. 用字措辭不當, 請留言告知.
3. 有看沒有懂? 幫到忙也好, 幫倒忙也罷, 總之留個言吧.

I2C Bus 提昇電阻之計算


I2C Bus 和 SPI 一樣也是主從式架構, 不過它不同於 SPI 的點對點或點對多點結構, 它是以匯流排型式介接, 同時匯流排上允許有多個 master (主設備) 和多個 slave (從設備). 介接方法如下圖所示:

I2C Bus

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

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.

I2C Rp(min)

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 值.

I2C Rp(max)

Cb vs Rp(max)

小記


  • 我只列出比較常用的 Standard-mode, Fast-mode, Fast-mode+. 至於 High-Speed mode, Ultra Fast-mode 還有 Vdd 小於 2V 的部份要麻煩你自己動手查表及繪製曲線.
  • 如有誤謬, 敬請指正.

創作者介紹
創作者 MagicJackTing 的頭像
MagicJackTing

傑克! 真是太神奇了!

MagicJackTing 發表在 痞客邦 留言(1) 人氣()


留言列表 (1)

發表留言
  • Emerson
  • 感謝大大
  • 不客氣
    :D

    MagicJackTing 於 2019/02/13 18:30 回覆

您尚未登入,將以訪客身份留言。亦可以上方服務帳號登入留言

請輸入暱稱 ( 最多顯示 6 個中文字元 )

請輸入標題 ( 最多顯示 9 個中文字元 )

請輸入內容 ( 最多 140 個中文字元 )

請輸入左方認證碼:

看不懂,換張圖

請輸入驗證碼