I2Cバスのプルアップ抵抗の値
図1は,I2Cバスを使用してCPUから複数のICを制御するためのブロック図です.黄色の部分のコンデンサは,SDA,SCLそれぞれの端子の容量と,プリント基板などの寄生容量の合計値です.通信は「Standard-mode(100kbit/s)」で行います.この条件のとき,R1,R2の値として最も適切なのは(a)~(d)のどれでしょうか.ただし,CPUや被制御ICの内部に,プルアップ抵抗は付いていないものとします.
「Standard-mode(100kbit/s)」で通信する場合,R1,R2の値として最も適切な値は何Ω?
(a) ∞(抵抗は付けない) (b) 33kΩ (c) 3.3kΩ (d) 330Ω
I2Cバスは,フィリップス(現在はNXPセミコンダクター)が開発した通信方式です.SCL(Serial Clock)とSDA(Serial Data)の2つの信号線でデータ通信を行います.SCLとSDAの出力は,オープン・コレクタまたはオープン・ドレインとなっています.
SCLラインの立ち上がりでデータを取り込むため,SCLラインには通信速度と同じ周波数のクロック信号が発生します.100kbit/sで正しく通信可能で,I2Cの負荷電流規格を満たしているのはどれか,を考える必要があります.
SCLとSDAの出力は,オープン・コレクタ,または,オープン・ドレインなので,必ずプルアップ抵抗が必要です.そのため「(a) ∞(抵抗は付けない)」は間違いです.また,100kHzのクロック信号の半周期の時間は5μsです.33kΩと150pFの時定数は5μsになり,クロック信号電圧が十分に立ち上がりません.したがって「(b) 33kΩ」も間違いです.
また,I2C出力の規格では,吸い込み電流の最小値が3mAとなっています.そのため,プルアップ抵抗が330Ωでは,信号が十分にロー・レベル("L"レベル)とならないため,「(d) 330Ω」も間違いです.
一方,3.3kΩのときの時定数は0.5μsと小さく,3mAの電流で十分に"L"レベルになるため,適切な抵抗値は3.3kΩということになります.
●I2Cバスの概要
I2Cバスは,2本の信号線で,複数のデバイスと通信できるため,主に,プリント基板に実装されたCPUとIC間の通信に使用されています.また,さまざまなセンサの出力としても使用されています.CPU基板のArduinoやラズベリー・パイにセンサをつないでデータ取得する,といった用途でも活用されています.通信速度を向上させるため,何度か仕様追加があり,現在では以下の5つ通信モードがあり,ここでは,Standard-modeを例に特性を解説します.
・Standard-mode(100kbit/s)
・Fast-mode(400kbps/s)
・Fast-mode Plus (1Mbit/s)
・High-speed(3.4Mbit/s)
・Ultra Fast-mode(5Mbit/s)
SDAがデータ・ラインで,SCLがタイミングをとるためのクロック・ラインです.図2は,I2Cバスのタイミングチャートの一部です.SCLが"L"レベルのときに,SDAのデータを変化させ,SCLの立ち上がりのタイミングで,SDA信号がハイ・レベル("H"レベル)か"L"レベルかを読み取ります.
SCLの立ち上がりのタイミングで,SDAが"H"レベルか"L"レベルかを読み取る.
●I2Cバスの電気的特性
I2Cバスは,さまざまなメーカのIC間でも通信ができるように,電気的特性が定められています.その中で重要なものが,論理レベルや吸い込み電流値,信号立ち上がり時間です.
図3は,ICに内蔵されたI2CバスのSCL端子の簡易等価回路です.IC内部には,バスの信号を読み取るためのシュミット・トリガとオープン・ドレインのMOSトランジスタが内蔵されています.
ノイズ誤動作を防止するためのシュミット・トリガのヒステリシス幅(変化の幅)は,Standard-modeでは規定はありませんが,Fast-modeでは最小値が電源電圧(Vdd)の5%となっています.また,出力用MOSトランジスタの吸い込み電流能力は,ドレイン電圧(出力電圧)が0.4Vのときに,3mA以上流せるようにする必要があります.
シュミット・トリガとオープン・ドレインのMOSトランジスタが内蔵されている.
図4は,図1のI2Cバスを使用した回路のSCL端子の電圧波形の一例です.図4を使用してI2Cバスの電気的特性を確認していきます.SCL端子の電圧はシュミット・トリガで1,0の信号に変換されます.その論理レベルは,電源電圧(Vdd)の30%および70%と定められています.電源電圧を5Vとすると「5*0.7=3.5V」以上の電圧を"H"レベルと認識する必要があります.同様に,「5*0.3=1.5V」以下の電圧を"L"レベルと認識する必要があります.
SCL端子の電圧が"L"レベル入力電圧とクロスしたときの時間をt1とし,"H"レベル入力電圧とクロスしたときの時間をt2とすると,立ち上がり時間(tr)は「tr=t2-t1」となります.立ち上がり時間(tr)は,Standard-modeでは1μs以下,Fast-modeでは0.3μs以下と定められています.
この図を使用してI2Cバスの電気的特性を確認していく.
●プルアップ抵抗の最小値を計算する
I2Cの出力吸い込み電流の仕様から,プルアップ抵抗(RP)の最小値を計算してみます."L"レベルの出力電圧をVOLとすると,プルアップ抵抗に流れる電流(IRP)は式1で計算できます.
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・(1)
I2Cバスの仕様より,出力電圧(VOL)が0.4Vのときの吸い込み電流の最小値が3mAなので,プルアップ抵抗に流せる電流も3mAになります.IRPが3mA以下となるプルアップ抵抗の最小値(RPmin)は式2で計算することができます.
・・・・・・・・・・・・・・・・・・・・・・(2)
●プルアップ抵抗の最大値を計算する
次に,trの仕様から,プルアップ抵抗の最大値を計算してみます.I2Cバスはオープン・ドレイン出力のため,出力が"L"から"H"に変わる立ち上がり時間は,プルアップ抵抗とバス・ラインについている容量で決まります.コンデンサ(C)をVddに接続された抵抗(RP)で充電するときの,コンデンサの電圧の時間的変化は,式3で表すことができます.
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・(3)
出力電圧が,"L"レベル入力電圧(0.3*Vdd)と等しくなる時間をt1とすると,式3は式4のように変形できます.
・・・・・・・・・・・・・・・・・・・・・・・・・・・・(4)
式4から,t1を計算すると,式5になります.
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・(5)
同様に,出力電圧が"H"レベル入力電圧(0.7*Vdd)と等しくなる時間をt2とすると,式3は式6のように変形できます.
・・・・・・・・・・・・・・・・・・・・・・・・・・・・(6)
式6から,t2を計算すると,式7になります.
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・(7)
立ち上がり時間(tr)はt2からt1を引いたものなので,式8のように計算できます.
・・・・・・・・・・・(8)
式8を変形すると,式9のようにプルアップ抵抗の最大値(RPmax)を求めることができます.
・・・・・・・・・・・・・・・・・・・(9)
式2および式9より,図1の回路のプルアップ抵抗は1.5kΩ~7.87kΩの間の値とする必要があることが分かりました.なので,(a)~(d)の中で適切な抵抗値は3.3kΩということになります.
●LTspiceでMOSトランジスタの出力電流能力を調整する
I2Cバスの出力波形をシミュレーションするための準備として,出力電流能力がI2Cバスの仕様に合致したMOSトランジスタを用意します.図5がMOSトランジスタのサイズを検討するためのシミュレーション用の回路図です.NMOSというデフォルトのモデルを使用してlを1μとし,wの値を変えて,ドレイン電流をシミュレーションします.ゲート電圧は5Vとし,ドレイン電圧はI2Cの仕様に合わせ,0.4Vとしています.
wの値を変えて,ドレイン電流をシミュレーションする.
図6は,図5のドレイン電流のシミュレーション結果です.ドレイン電圧が0.4Vのときに,ドレイン電流が3mAになるのは,wが78μのときであることが分かります.実際のICでは,もう少し電流が流せるように余裕を持たせた設定をしますが,今回はwを78μとして,I2Cバスの出力波形をシミュレーションすることにします.
ドレイン電流が3mAになるのは,wが78μのとき.
●I2Cバスの出力波形をシミュレーションする
図7は,I2Cバスの出力波形をシミュレーションする回路です.プルアップ抵抗の値を問題と同じ「抵抗は付けない,33kΩ,3.3kΩ,330Ω」と異なる,4つの回路を1つの回路図にまとめています.MOSトランジスタのサイズは,図5で求めたwの値(78μ)を使用し,ゲートに5V振幅で100kHzの矩形波を入力しています.
プルアップ抵抗の異なる,4つの回路を1つの回路図にまとめている.
図8は,図7の出力波形のシミュレーション結果です.プルアップ抵抗が無い場合(V(a))は"H"レベルが出力されず,プルアップ抵抗が33kΩの場合(V(b))は"H"レベルが十分に立ち上がっていません.また,プルアップ抵抗が330Ωの場合(V(d))は"L"レベルが十分に下がりません.プルアップ抵抗を3.3kΩとした場合(V(c))は,立ち上がり時間は1μs以下で,"L"レベルも十分低くなっています.
プルアップ抵抗を3.3kΩとした場合(V(c))は,仕様を満たしている.
以上,I2Cバスのプルアップ抵抗の値の求め方について解説しました.今回紹介したものは,I2Cバスの仕様のごく一部です.I2Cバスの仕様については,詳細に解説した次の参考資料があります.
◆参考資料◆
https://www.nxp.com/docs/ja/user-guide/UM10204.pdf
解説に使用しました,LTspiceの回路をダウンロードできます.
LTspice8_011.zip
●データ・ファイル内容
NMOS_ID.asc:図5の回路
Tr_Tf.asc:図7の回路
■LTspice関連リンク先
(01) LTspice ダウンロード先
(02) LTspice Users Club
(03) LTspice メール・マガジン全アーカイブs
(04) ◆LTspice電子回路マラソン・アーカイブs
(05) ◆LTspiceアナログ電子回路入門アーカイブs
(06) ◆LTspice電源&アナログ回路入門アーカイブs
(07) ◆IoT時代のLTspiceアナログ回路入門アーカイブs
(08) ◆オームの法則から学ぶLTspiceアナログ回路入門アーカイブs
(09) ◆LTspiceエデュケーショナル・ファイルで学ぶアナログ回路アーカイブs
(10) ◆LTspiceドット・コマンドから学ぶアナログ回路アーカイブs