I²C のプルアップ抵抗は、下限と上限の間で選ぶ

4.7kΩ は 5V・100kHz・小さなバスでの経験値です。3.3V の 400kHz で、モジュールを 5 つつないでケーブルを 30cm 伸ばすと、4.7kΩ では立ち上がりが間に合いません。抵抗には下限と上限があり、その両方を計算できます。

最終更新: 2026-09-14 I²Cプルアップ抵抗オープンドレインバス容量

オープンドレインだから、抵抗が立ち上がりを決める

I²C の SDA と SCL はオープンドレイン出力で、デバイスは線を Low に引くことしかできません。High に戻すのはプルアップ抵抗の仕事です。線を Low から High にするとき、抵抗 Rp がバスの容量 Cb を充電するので、立ち上がりは時定数 Rp·Cb で決まります。

抵抗が小さいほど立ち上がりは速くなりますが、Low に引くときにデバイスが流す電流が増えます。抵抗が大きいほど電流は減りますが、立ち上がりが遅くなります。下限は電流で、上限は立ち上がり時間で決まります。

I²C 規格は、Low レベルの出力電圧 VOL = 0.4V のときのシンク電流 IOL を 3mA(Standard / Fast mode)、立ち上がり時間 tr(30%→70%)の最大を Standard mode で 1000ns、Fast mode で 300ns、Fast mode Plus で 120ns と決めています。バス容量の上限は 400pF です。

下限:3mA で 0.4V 以下に引けるか

デバイスが線を Low に引くとき、プルアップから流れ込む電流は (VDD − VOL) ÷ Rp です。これが規格のシンク電流 3mA を超えると、デバイスは VOL を 0.4V 以下に保証できません。

Rp(min) = (VDD − 0.4V) ÷ 3mA。VDD = 3.3V なら 967Ω、5V なら 1.53kΩ です。これより小さい抵抗は使えません。Fast mode Plus 対応のデバイスは 20mA まで引けるので、3.3V で 145Ω まで下げられます。

接続するデバイスの中に、3mA 引けないものがある場合(データシートの IOL が小さい)は、その値で計算し直します。

上限:立ち上がり時間に間に合うか

RC 充電で 30% から 70% まで上がる時間は、tr = Rp · Cb · ln(0.7 ÷ 0.3) ≒ 0.847 · Rp · Cb です。規格の tr 上限から、Rp(max) = tr(max) ÷ (0.847 · Cb)

バス容量が 100pF なら、Standard mode(1000ns)で 11.8kΩ、Fast mode(300ns)で 3.5kΩ、Fast mode Plus(120ns)で 1.4kΩ が上限です。3.3V・Fast mode で 4.7kΩ を使うと、100pF で既に上限を超えています。

バス容量は、各デバイスのピン容量(規格上 10pF 以下、実際は 5〜10pF)、基板配線(0.5〜1pF/cm)、ケーブル(50〜100pF/m)の合計です。デバイス 5 個、配線 20cm、ケーブル 30cm なら 50 + 15 + 25 = 90pF 程度。ESD 保護ダイオードを入れると 1 個あたり数 pF 加わります。

3.3V での Rp の範囲(下限は 3mA、上限は各モードの tr 上限から)
バス容量Standard 100kHzFast 400kHzFast+ 1MHz
50pF0.97k〜23.6kΩ0.97k〜7.1kΩ0.15k〜2.8kΩ
100pF0.97k〜11.8kΩ0.97k〜3.5kΩ0.15k〜1.4kΩ
200pF0.97k〜5.9kΩ0.97k〜1.8kΩ0.15k〜0.7kΩ
400pF0.97k〜3.0kΩ不可*0.15k〜0.35kΩ

* 上限(0.9kΩ)が下限(0.97kΩ)を下回り、成立しません。規格上の最大容量 400pF は、Fast mode では 3mA のシンク電流で立ち上がりを間に合わせられない領域です。実際には 200pF 以下に抑えるか、バスを分割するか、バッファ IC を入れます。

I²C プルアップ抵抗の下限と上限横軸バス容量 20〜400pF、縦軸抵抗値 100Ω〜30kΩ の両対数グラフ。下限 967Ω の水平線と、Standard・Fast・Fast mode Plus それぞれの上限曲線を描き、Fast mode の成立領域を塗る。4.7kΩ の位置も示す。 抵抗値は、下限の水平線と上限の曲線の間で選ぶ VDD = 3.3V。下限は IOL = 3mA、上限は各モードの立ち上がり時間から 20pF50pF100pF200pF400pF 100Ω1kΩ10kΩ プルアップ抵抗 Rp バス容量 Cb Standard(1000ns) Fast(300ns) Fast+(120ns) 下限 967Ω(3mA で 0.4V) 4.7kΩ Fast mode で成立 4.7kΩ は Standard mode なら 200pF まで、 Fast mode では 60pF 程度が限界。 Fast mode・100pF なら 上限 3.5kΩ。余裕を見て 1.5〜2.2kΩ を選ぶ。 400pF は Fast mode では上限が下限を割る。 バスを分けるかバッファを入れる。
図1:3.3V での I²C プルアップ抵抗の成立範囲。下限は 3mA のシンク電流で決まる水平線、上限はバス容量が増えるほど下がる曲線。緑は Fast mode で成立する領域。

範囲の中でどこを選ぶか

下限と上限の間なら動きますが、どちらに寄せるかで消費電力とノイズ耐性が変わります。

小さい抵抗(下限寄り)。立ち上がりが速く、外来ノイズに強い。Low のときに流れる電流が増えます。3.3V で 1kΩ なら 2.9mA、SDA と SCL の両方で最大 6mA。クロックはデューティ 50% で Low なので、SCL だけで平均 1.5mA。電池駆動では無視できません。

大きい抵抗(上限寄り)。消費電力は減りますが、立ち上がりが規格ぎりぎりになり、温度やデバイスの追加で外れやすくなります。ハイインピーダンスなのでノイズも拾います。

実務的には、上限の 1/2〜1/3 を選ぶと、バス容量の見積もり誤差やデバイスの追加に対して余裕が持てます。3.3V・Fast mode・100pF なら 1.5〜2.2kΩ、Standard mode なら 4.7kΩ が妥当、という結論になります。

実機で引っかかるところ

  • モジュールに内蔵されたプルアップ。市販のセンサモジュールの多くは基板上に 4.7kΩ や 10kΩ のプルアップを持っています。5 個つなぐと 4.7kΩ が 5 並列で 940Ω になり、下限を割ります。モジュールのプルアップを外すか、マイコン側のプルアップを省きます。
  • マイコンの内蔵プルアップ。GPIO の内蔵プルアップは 20〜50kΩ で、I²C には弱すぎます。400kHz では確実に立ち上がりが間に合いません。外付けにしてください。
  • レベル変換。3.3V と 5V のデバイスを混在させる場合、MOSFET のレベル変換回路(NXP AN10441 の方式)は、両側にそれぞれプルアップが要ります。それぞれの電圧で下限・上限を計算します。
  • 立ち上がりの実測。オシロスコープで SCL の立ち上がりを見て、30%→70% の時間が規格の上限に対して余裕があるか確認します。波形が丸まって High レベルに届く前に次の Low が来ているなら、抵抗を下げるか容量を減らします。
  • SCL のストレッチ。スレーブがクロックを引き伸ばす機能を使う場合、SCL も双方向になり、マスタ側で SCL をプッシュプルで駆動していると衝突します。SCL もオープンドレインにします。

よくある質問

結局、3.3V なら何 kΩ を使えばよいですか。
100kHz で小さなバス(デバイス 2〜3 個、基板内)なら 4.7kΩ で問題ありません。400kHz なら 2.2kΩ、バスが大きい(100pF 超)なら 1.5kΩ を目安にしてください。ケーブルで延ばすなら、バス容量を見積もって上限を計算し直します。
SDA と SCL で違う抵抗値にしてもよいですか。
構いません。SCL のほうが常に動いているので消費電力に効きますが、立ち上がり要件は同じです。通常は同じ値を使いますが、SCL だけ少し小さくしてクロックのエッジを速くする設計もあります。
プルアップをどこに置くべきですか。
電気的にはバス上のどこでも同じです。実装上は、マスタの近くに置いて、バスの他のデバイスが取り外されても(モジュールを抜いても)プルアップが残るようにします。バスが長い場合、両端に分けて置いても構いません(合計の並列値で計算します)。
バス容量が 400pF を超えたらどうしますか。
バスを分割して I²C マルチプレクサやバッファ(PCA9515 など)で中継するか、ケーブル区間を差動化する I²C 延長 IC を使います。抵抗を小さくして無理に立ち上がりを間に合わせようとすると、下限を割ってデバイスが Low に引けなくなります。

参考にした規格・資料

  • NXP UM10204, I²C-bus specification and user manual — VOL / IOL、tr、Cb の規定値、プルアップ抵抗の計算式(Section 7.1)
  • NXP AN10441, Level shifting techniques in I²C-bus design — MOSFET によるレベル変換回路
  • TI SLVA689, I²C Bus Pullup Resistor Calculation — 下限・上限の計算例

← コラム一覧へ