Pull-up Resistors For I2C Bus
前言
I2C Bus 和 SPI 一樣也是主從式架構, 不過它不同於 SPI 的點對點或點對多點結構, 它是以匯流排型式介接, 同時匯流排上允許有多個 master (主設備) 和多個 slave 。I2C Bus其中最重要的是其外加電阻,但外加電阻需要加多少?這個問題是許多人的疑問,我不加或亂加會怎樣?這邊會一一解答這些問題並說明計算方式,讓閱讀完後能清楚明白我需要多少速度的傳輸需要搭配多少電阻
I2C Bus 結構
上圖中除了一對提升電阻 Rp 之外, 還有每個 I2C 設備依現況的需要可選擇加裝一對抗干擾用的電阻 Rs (尤其是當 SDA, SCL 的佈線繞經特殊干擾源時).應用 I2C 時, 最麻煩的是計算 Rp 的阻值, 及為各個晶片選擇合適的 Rs 阻值
Rs 需要依照各個晶片實際受干擾的情況選擇, 但阻值一般會限制在 ≦ Rp/10 (或約 330 Ohm). 因為一但 Rs 不為 0, 晶片真正的 Rp(Total) 會變成是 Rp+Rs, 選擇太大的 Rs 會使得 Rp(Total) 偏離 Rp太多, 影響該晶片的運作. Rp 一般為 2K~7K Ohm,
- Rp 數值小傳輸的波形會比較接近方波, 但比較耗電;
- Rp 數值大雖然比較省電, 但傳輸的波形就會比較容易受電路上電容充放電的影響而變了樣
深入探討I2C Bus結構
- Output Low電路其實可以解讀成 I2C 裝置裡的 low-side driver 在「對抗」pull-up 電阻 RP ,因爲當它想要把 SCL 或 SDA 拉到 low 時,RP 會在那邊從中作梗,想要把訊號拉到 high,而 low-side driver 能將訊號拉多低,則取決於它可以流過多少電流。
- Output High就是個典型的 RC 定電壓充電電路
Output High這個電路中,電容器上的電壓可以用一個看起來很恐怖但其實很簡單的數學式來表示:
V(t)= VCC(1 − e−(t / RC))
VCC 的電壓是固定的,而隨著電容上的電壓越來越高,電阻上的壓差就會越來越小,因此流過電阻對電容充電的電流就會越來越小,越到後來,電容的電壓上升的速度就會越慢。
Pingback: Inter-Integrated Circuit(I2C) - AMS and STM32