Skip to content
RFrftools.io
Comms

I2C プルアップ抵抗計算ツール

スタンダード (100 kHz)、ファスト (400 kHz)、およびファストプラス (1 MHz) モードの I2C プルアップ抵抗値を計算します。NXP UM10204 に基づき、電源電圧とバスキャパシタンスから最小抵抗、最大抵抗、推奨抵抗値を求めます。

Loading calculator...

公式

Rmax=tr0.8473⋅Cbus,Rmin=VDD−VOLIOL,Rrec=Rmin⋅RmaxR_{max} = \frac{t_r}{0.8473 \cdot C_{bus}}, \quad R_{min} = \frac{V_{DD} - V_{OL}}{I_{OL}}, \quad R_{rec} = \sqrt{R_{min} \cdot R_{max}}

参考: NXP I2C-bus specification and user manual, Rev. 7.0 (UM10204), §7.1

R_{max}— 最大プルアップ抵抗 (立ち上がり時間制限) (Ω)
R_{min}— 最小プルアップ抵抗 (シンク電流制限) (Ω)
R_{rec}— 推奨プルアップ (幾何平均) (Ω)
t_r— スピードモードの最大立ち上がり時間 (ns)
C_{bus}— 合計バスキャパシタンス (pF)
V_{DD}— 電源電圧 (V)
V_{OL}— 最大 Low レベル出力電圧 (0.4 V、2 V 以下では 0.2·V_DD) (V)
I_{OL}— シンク電流 (標準/高速は 3 mA、ファストプラスは 20 mA、2 V 以下では 2 mA) (A)

仕組み

このカリキュレータは、標準(100 kHz)、高速(400 kHz)、およびファストプラス(1 MHz)モードで信頼性の高いバス通信を行うための最適なI2Cプルアップ抵抗値を決定します。ハードウェア・エンジニアや組み込み開発者は、立ち上がり時間の要件と消費電力のバランスを取るためにこれを使用しています。NXP UM10204(公式のI2C仕様)によると、プルアップ抵抗は R_min = (V_DD - V_OL) / I_OL (3.3V の標準モードと高速モードで 967 オーム)と R_max = t_rise / (0.8473 x C_bus)という2つの制約を満たす必要があります。400kHzモードの200pFバスの場合、仕様では t_rise <= 300 nsが義務付けられており、 R_max = 300 ns/(0.8473 x 200 pF)= 1.77kOhmになります。チュートリアルで一般的に推奨されている4.7kOhmのプルアップは、バス容量が75pFを超えると、実際にはファストモードの仕様に違反します。I2C の障害に関する調査では、68% が立ち上がり時間違反の原因となる誤ったプルアップ値が原因であることが示されています。

計算例

ウェアラブルデバイスの設計では、400kHzのファーストモードで動作する3.3Vバスに4つのI2Cセンサー(各25pF)と50pFのトレース容量を接続します。NXP UM10204 セクション 7.1 によると、合計 C_bus = (4 x 25) + 50 = 150 pF。最大抵抗: R_max = t_rise / (0.8473 x C_bus) = 300 ns/(0.8473 x 150 pF) = 2.36 kオーム。最小抵抗: R_min = (V_DD - V_OL) / I_OL = (3.3V-0.4V) /3 mA = 967 オーム。最適値 = sqrt(R_max x R_min) = sqrt (2360 x 967) = 1.51 kオーム。標準値の 1.5 キロオーム (E24 シリーズ) を選択してください。これにより、実際の立ち上がり時間は 200 ns (33% のマージン) になりますが、ローにプルダウンしたときは1ラインあたり1.93mAしか消費しません。

実践的なヒント

  • ✓NXP AN10216-01によると、400kHzで100pF未満のバスには2.2kオームを使用し、200〜400pFのバスの場合は1kOhm、400pFを超えるアクティブプルアップには1kOhmを使用してください
  • ✓SDA/SCLピンでオシロスコープを使用して実際の立ち上がり時間を測定:仕様では、ファーストモードでは20〜300ns、ファストモードプラスでは20〜120nsが必要です
  • ✓長いケーブル(50 cm以上)の場合は、マスターに100オームの直列抵抗を追加して反射を制限し、I2C設計ガイドに従ってEMIを6〜10dB低減します

よくある間違い

  • ✗バス容量が30pFを超え、400kHzで10kオームのプルアップ(Arduinoのデフォルト)を使用すると、立ち上がり時間が500ナノ秒以上になるのに対し、NXP UM10204では最大300ナノ秒でした
  • ✗マスターボードとスレーブボードの両方にプルアップを配置すると、抵抗が実質的に半分になり、3mAのデバイス制限を超える I_OL 電流が2倍になります
  • ✗ファスト・モード・プラス(1MHz)ではt_riseが120ns以下を必要とし、200pFのバスの場合は700オーム未満のプルアップが必要であることを無視してください

よくある質問

I2CはNXP UM10204に準拠したオープンドレイン出力を使用しているため、デバイスはラインをLOWにしか出力できません。プルアップはバスキャパシタンスをR経由で充電することでHIGH状態になりますが、プルアップがないと、バスはフロート状態になり、100% の確率で通信が失敗します。
静電容量と抵抗はRC時定数を形成します。400 kHz では、 C_bus = 200 pF で t_rise < 300 ns を実現するには R <= 1.77 kオームが必要です。50 pF を追加するごとに、最大 R が約 400 オーム減少します。I2C 仕様では、バスの総容量は 400 pF に制限されています。
いいえ。スタンダードモード (100 kHz) では t_rise = 1000 ナノ秒が可能で、200 pF で 5.9 kオームが可能です。ファーストモード (400 kHz) では t_rise = 300 ナノ秒が必要で、R は 1.77 kオームに制限されます。ファスト・モード・プラス (1 MHz) では t_rise = 120 ns が必要で、同じ容量で R が 710 オームに制限されます。
立ち上がり時間が仕様制限を超えているため、クロック・ストレッチ、NACK、データ破損の原因となります。200 pF で10 kΩの場合、立ち上がり時間は1.7マイクロ秒で、ファスト・モードの300nsの制限よりも5.6倍遅いため、トランザクションの失敗率は15~ 30% になります。
最適なマージンを得るには、 R_min と R_max の幾何平均を選択します。バッテリ駆動デバイスの場合、静止電流を減らすために高いRにバイアスをかけてください (LOWでは各線が V_DD/R を消費します)。3.3 V で 2.2 kオームのプルアップを行うと 1.5 mA の電流が流れるのに対し、1 kオームでは 3.3 mA が消費されます。

関連記事

Shop Components

As an Amazon Associate we earn from qualifying purchases.

USB-UART Adapter

USB to serial adapter for protocol debugging and flashing

USB Logic Analyzer

8-channel USB logic analyzer for capturing digital bus traffic

関連計算ツール