I2C通信のプルアップ抵抗を2[KΩ]としています。センサとの接続に使用しているUSBケーブルを30cm,1m,2mとした際に、プルアップ抵抗値が適切か検討しました。以下の資料を参考にしています。資料1*1、資料2*2、資料3*3
(実験は温湿度センサ(AHT25)を使用しました。)
High/Low 信号の作り方
I2C通信のHigh/Low信号は、オープンコレクタ(オープンドレイン)出力でつくります。出力信号のLowは、トランジスタをONしてVccからGNDへ電流(シンク電流)を流して作ります。出力信号のHighは、トランジスタをOFFします。
プルアップ抵抗最小値
プルアップ抵抗値が小さい(プルアップが強い)と電圧が降下しないため、Low出力の電圧を満たせません。規格ではLow出力時の電圧(VOL)=0.4[V]、Low出力時の電流(シンク電流)(IOL)=3[mA]となっています。プルアップ抵抗最小値は資料2の「7.1 プルアップ抵抗のサイジング」式(2)より得られます。
計算式をグラフ化すると、資料3のFig2になります。
実際に計算すると、資料2の「6. I/Oステージとバスラインの電気特性とタイミング」の表9 よりVOL(max)=0.4[V],IOL=3[mA],Vdd=5[V]ですから、
Rmin = (5 - 0.4 )[V]/3[mA] = 1.53 [KΩ] となります。
使用しているプルアップ抵抗(=2[KΩ])は、最小値の条件は満たしています。
プルアップ抵抗最大値
プルアップ抵抗値が大きいと、バス静電容量(配線等のコンデサ分)と掛け合わせた、時定数(CR)も大きくなり、信号の立ち上がり時間(tr)を満せない場合があります。
信号の立ち上がり時間(tr)は、最大1000[nsec](Standard mode)、300[nsec](First mode)となっています。(資料2の表10 )
プルアップ抵抗最大値は資料2の「7.1 プルアップ抵抗のサイジング」式(1)より得られます。
計算式に最大立ち上がり時間(tr)を入れてグラフ化すると、資料3のFig3になります。
立ち上がり時間とバス容量
オシロで信号の立ち上がり時間(tr)を実測すれば、バス容量(Cb)が求まるようです。(資料4*4の「バス容量を測る方法」)
プルアップ抵抗最大値の計算式より、
tr:立ち上がり時間(0.3xVccから0.7xVccまでの時間)を測定し、R=2[KΩ]としてバス容量(Cb)を得ます。
Standard modeとFirst modeで、30[cm],1[m],2[m]の各ケーブル使用時のクロック波形と立ち上がり時間を調べました。
Standard mode
Standard mode(100 [Kbps] )の場合、立ち上がり時間(tr)は1000[nsec]より十分に早い事が期待されます。
2[m]ケーブルを使用した場合でも、立ち上がり時間(tr)は1000[nsec])より十分に早いので、このプルアップ抵抗(2[KΩ])で適切です。
2[m]ケーブル時のバス容量(Cb)を計算してみます。
立ち上がり時間(tr=364[nsec]),R=2[KΩ]より、Cb = 364 / ( 0.8473 x 2 ) = 215
オシロのプローブのバス容量 15pFを引いて、215-15 = 200[pF] となります。
同様に30[cm],1[m]ケーブル使用時のバス容量を計算しました。
2[m]のケーブル使用時、図5から Cb=200[pF]のプルアップ抵抗最大値は6[KΩ]ですから、使用しているプルアップ抵抗(=2[KΩ])は、Standard modeでは最大値の条件も満たしています。
First mode
First mode(400 [Kbps] )の場合、立ち上がり時間(tr)は300[nsec]より十分に早い事が期待されます。
30[cm]ケーブル使用時のみ、立ち上がり時間(tr)が140[nsec]で、300[nsec]より十分に早い(50%以上のマージンがある)といえます。このプルアップ抵抗(2[KΩ])の使用は、First modeでは30[cm]ケーブルに限定されます。