I2Cプルアップ抵抗の正しい抵抗値はありますか?


72

24LC256 EEPROM のデータシートには、次のことが記載されています。

SDAバスには、VCCへのプルアップ抵抗が必要です(通常、100 kHzでは10kΩ、400 kHzおよび1 MHzでは2kΩ)。

私は、kΩ値の抵抗があればうまくいくと思っていました(そして、私のEEPROMは、10kΩの抵抗で異なる周波数でうまく動作するようです)。

私の質問は:

  • プルアップ抵抗の正しい値はありますか?
  • この値を決定する法律/規則はありますか?
  • 異なる抵抗値はI²Cデータバスにどのように影響しますか?

回答:


66

I 2 Cバスの正しいプルアップ抵抗は、バスの総容量とバスを動作させる周波数に依存します。

ATmega168データシート(私は公式Iから来ていると信じて2 C仕様)があります-

Freq<100kHzRmin=Vcc0.4V3mA,Rmax=1000nsCbus

Freq>100kHzRmin=Vcc0.4V3mA,Rmax=300nsCbus

Microchip 24LC256は、10pFの最大ピン容量を指定しています(これはかなり一般的です)。バス上に並列にあるデバイスの数をカウントアップし、上記の式を使用して、機能する値の範囲を計算します。

バッテリーの電源を切っている場合、範囲の上限にある値を使用します。電源の電力制限やICの電力消費の問題がない場合、範囲の下限の値を使用します。

I 2 C RTC(DS1337)付きのキットを販売しています。キットには4K7抵抗器が含まれていますが、これはほとんどのユーザーにとって妥当な妥協案のようです。


通常、バスはほとんどの時間アイドル状態(デアサート)であると想像します。そのため、バッテリアプリケーションの場合、I2Cプルアップを最適化しようとするよりも重要な問題があります:P
Nick T

5
私が追加するのは、バス上のデバイスの合計静電容量より上のバッファだけです。パッド自体からピンへのはんだ接合だけでなく、トレース自体にもある程度のインピーダンスがあります。長いバスでは、トレース/ワイヤの静電容量はデバイスのピン静電容量よりも大きくなる可能性があります。プロダクションボードを設計するとき、プロトタイプを手に入れてさまざまな値でバスをスコープできるまで、通常は最終的なプルアップ値を決定しません。
マーク

14

周波数が高くなると抵抗値の低いプルアップが必要になることは理にかなっています。抵抗値が低いとケーブルの静電容量の充電/放電が速くなり、エッジが急峻になります。低周波の幅の広いパルスでは、急峻でないエッジはパルスの形状にそれほど影響しません。

したがって、I2C仕様は、3つの速度クラスのバス容量の関数としてプルアップ抵抗の最大値を提供します。

ここに画像の説明を入力してください

最小値はバス電圧の関数で定義され、ドライバーを流れる電流を制限する必要があります。


3
3年後、Texas Instrumentsは、この答えに非常に近いアプリケーションノート作成しました
ニックアレキセフ

EDNの記事:堅牢なI2C通信の設計計算。[参考資料を積み重ねるだけ]
ニック・アレクセエフ

11

値の正しい範囲がありますが、その範囲が何であるかを正確に記述することは困難です。一般的に、10kが機能します。

デジタル出力には、電流をソースまたはシンクする特定の機能があります。出力が5 mAをシンクでき、出力がプルアップを介して5 Vに接続され、その後0に設定された場合、最低1kの抵抗が必要になります。1k未満を使用すると、出力はピンを0Vに引き下げるのに十分な電流をシンクできなくなります。10kなどのより大きな値を使用する場合、ピンは0.5 mAをシンクするだけでよく、定格よりもはるかに小さくなります。

デジタル入力には、指定された漏れ電流があります。これは、入力で0または1を「維持」するのにかかる電流の量に似ています。プルアップ抵抗が大きすぎると、漏れ電流に打ち勝つことができません。漏れ電流をほとんど克服できない場合、回路のノイズは入力を変更するのに十分な可能性があります。

電流をシンクおよびソースできるデジタル出力(「トーテムポールドライバー」、「プッシュプルドライバー」)を使用する場合、プルアップまたはプルダウン抵抗を使用しないように誘惑されることがあります。ただし、CMOS入力がフロート状態にならないようにしたり、過剰な電流を引き込んだりすることは非常に重要です...そして、通常、双方向MCUピンが入力として現れることを忘れがちです!


I2Cおよびその他のプロトコルは、「オープンドレイン」(または「オープンコレクタ」)出力を使用します。プルアップおよびプルダウン可能な出力を持つ代わりに、オープンドレイン出力はプルダウンのみ可能です。そのため、外部プルアップ抵抗が必要です。プルアップ抵抗器の範囲には追加の制限があります。プルアップ値は、バス容量とともにRC回路を形成します。値が小さすぎると、出力ドライバがピンを0に引き下げるのに十分な電流をシンクできなくなります。ただし、値が大きすぎると、バス容量を充電するのに時間がかかりすぎます。

違反が許可されていないセットアップ/ホールドタイムがある場合、RC時定数を決定するのに役立ちます。バス容量は主にPCBレイアウトによって決定されるため、デジタル入力のセットアップ/ホールド時間内で快適な値を提供するために、Cと組み合わされるR値を選択できます。


7

低いプルアップ値(低い抵抗)は信号遷移のエッジを改善できますが、時には硬すぎる場合があります-バス上のデバイスがプルアップ電流をシンクできない場合、実際にはそれほど低くないロジック「ロー」になります、通信エラーを引き起こす可能性があります

信頼できる通信を可能にする最高のプルアップ抵抗を使用します。


5

低周波数の場合、値は実際には重要ではありませんが、高周波数の場合は、回路内の他の容量と組み合わせて、信号にフィルター効果があります。そのため、速度ごとに異なる値を推奨します。


2

私がまだ言及していない問題は、電力消費です。3.3ボルトの電源を使用している場合、グランドへの3.3K抵抗は、出力が低いときは常に1mAの電流(3.3mWの電力)を浪費します。10Kの抵抗を使用すると、電流と電力の両方が3分の1に削減されます。I2Cバス上で多くの通信が行われる場合、特にバスが長時間にわたって低い状態にある場合、その電力消費は全体的な電力消費のかなりの部分になる可能性があります。たとえば、1秒あたり100バイトを読み取っているが、各バイトを読み取った後、次のバイトの最初のビットを出力するデバイスがバスに残り、それらのバイトのほとんどにMSBがクリアされている場合、バスは90% SCLおよびSDAが低い時間。システムが他に何をしているかによっては、消費電力が大幅に増加する可能性があります。

電力を節約するには、VDDではなくI / Oピンに「プルアップ」抵抗を接続すると便利です。ハードウェアI2C実装がこれをサポートするのを見たことはありませんが、オープンコレクタードライバーと固定プルアップ抵抗を使用するのではなく、抵抗を介してバスに接続された個別のI / Oピンにマスター出力データを持たせることで、マスターが「0」を出力したいときに電流を無駄にします。さらに、マスターがSDAの内容を気にせずにSCKをしばらくLowにしようとする場合、マスターは、通信の準備ができるまでプルアップを無効にすることができます。どのデバイスもクロックストレッチングを使用する必要がない場合、マスターはSCKに直接出力を使用するだけで、そのワイヤのプルアップに煩わされることはありません。

高速なプロセッサでソフトウェアビットバンギングを使用しており、バス容量が大きいにもかかわらず良好なパフォーマンスを実現したい場合は、上記のアプローチをプロセッサの組み込みの弱いプルアップの使用と組み合わせることができます。データを読み取るときは、SCKの各立ち下がりエッジの直後に、非常に強いプルアップを短時間オンにしてから、弱いプルアップに切り替えます。強力なプルアップは、静電容量に関係なくラインを高く引き上げます。ラインが高く引き上げられると、弱いプルアップはそれを高く保つことができます。デバイスが強力なプルアップに対してラインをローにプルするのに問題がある場合でも、強力なプルアップがオフにされると、そうすることができます。



-1

以下は、400キロビット/秒の波形です(200KHz 101010波形)。RCは4.7Kオーム、212pFです。RC値により、2 TAUの整定が可能です。

ここに画像の説明を入力してください


この答えは間違っています。200 kHzクロックは400ではなく200 kb / sになります。プルアップ抵抗の影響を受けるのは立ち上がりエッジのみです。ある種の変調が行われているように、プロットは混乱して見えます。物理量とその単位は、間にスペース(または薄いスペース)を使用して書き込まれます。タウは略語ではなく、シンボルです。
ベニー

@vennyこれは、整定時間に対して高速すぎるバスの典型的な波形です。わずか2 TAUのセトリングで、波形にフラットトップが存在しないため、「何らかの変調」が発生します。これが疑似ランダムパターンであれば、整定のばらつきは非常に明白です。「データアイ」を参照してください。最後に、200KHzクロックは2.5uSでハイになり、2.5uSでローになります。2.5uSの周期はまさに私が述べた400KHzデータです。
analogsystemsrf
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.