I2Cラインのプルアップ抵抗を省略するとどうなりますか?


33

たった今、I 2 Cデータとクロックライン(SDAとSCL)にプルアップ抵抗が必要であることに気付きました。

さて、以下の回路図に従って、DS1307 RTC(データシートを参照)を使用していくつかのクロックを作成しました。両方のプルアップ抵抗が省略されていることに注意してください。

I2Cラインにプルアップ抵抗なしのクロックの回路図

どちらの時計も正常に動作し、そのうちの1つは現在3か月以上動作しています。そんなことがあるものか?いずれにせよ、私は知りたいと思いました:

  1. I 2 Cプルアップが省略されるとどうなりますか?

  2. プルアップがないと、ボードのこれら2つのICのいずれかが損傷する可能性がありますか?

私が提供した回路図のようにATmega328PをDS1307 RTCに接続する私の特定のケースに対処する答えを求めていますが、質問が広すぎない場合、プルアップが一般的に省略されたときに何が起こるかを知ることは役立ちます、つまり、I 2 C操作の他のシナリオで。

PS。ネットで検索して答えを見つけましたが、プルアップの寸法に関する記事を見つけることができました。

更新:私はArduino IDE 1.03を使用しており、ファームウェアはDS1307RTC Arduino libを使用してRTCを処理します(その機能RTC.read()とを通じてRTC.write())。そのライブラリはWire.h、RTCとの対話に使用されます。

更新2:以下は、外部プルアップなしでI 2 Cがどのように動作するかを説明するために撮影した一連のスコープショットです。

スコープショット1 スコープショット2

更新3(I 2 Cプルアップを追加した後):適切な(4K7)プルアップ抵抗を(同じボードの)I 2 Cラインに追加した後に撮影した別のスコープショットです。立ち上がり時間は約5 µsから290 nsに低下しました。I 2 Cは今ではずっと幸せです。

スコープショット3 スコープショット4


2
コードはこれらのピンのプルアップを無効にしますか?
イグナシオバスケス-エイブラムス

@ IgnacioVazquez-Abrams私のコードではSDAおよびSCDピン(18および19)に直接言及していません。DS1307RTC lib Arduino libとその関数RTC.read()およびRTC.write()を使用してRTCを処理します。
リカルド14年

そのライブラリはWire.hを使用してRTCと通信します。
リカルド14年

3
ええ、間違いなく内部プルアップを使用しています。鋭いエッジではなく曲線に注意してください。
イグナシオバスケス-アブラムス

回答:


28

1)I2Cプルアップが省略されるとどうなりますか?

I 2 Cバスでの通信はありません。まったく。MCUはI 2 C開始条件を生成できません。MCUはI 2 Cアドレスを送信できません。

なぜ3ヶ月間機能したのだろうか?読む。

2)プルアップがないため、ボードの2つのICのいずれかが損傷する可能性がありますか?

おそらくない。この特定のケース(MCU、RTC、他に何もない)では、間違いではありません。

3)MCUが最初にI 2 Cスレーブデバイスと通信できたのはなぜですか?I 2 Cにはプルアップ抵抗が必要です。しかし、それらは回路図には含まれていません。

おそらく、ATmegaで内部プルアップが有効になっています。私が読んだ1から、ATmegaには20kΩの内部プルアップがあり、ファームウェアから有効または無効にできます。20kΩは、I 2 Cプルアップには弱すぎます。ただし、バスの静電容量が小さく(物理的に小さい)、通信が十分に遅い場合でも、20kΩでバスを機能させることができます。ただし、これはディスクリートプルアップ抵抗を使用する場合と比較して、信頼性の高い設計ではありません。

1私自身はATmegaの男ではありません。

更新:応答として、OPに追加されたI 2 C波形OP
の波形の立ち上がり時定数は非常に長くなります。I 2 Cの波形は通常次のようになります

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

PIC18F4550、Vcc = + 5V、2.2kΩプルアップ。波形はSCLを示しています。SDAの立ち上がり時間はほぼ同じです。バスの物理的なサイズは中程度です:2つのスレーブデバイス、PCBの長さ≈100mm。


ご回答有難うございます!はい、ATmegaにはプルアップがあり、私の場合は有効にする必要があります。コードと使用しているライブラリを再確認し、ボードをスコープに配置します。それが少し物事をクリアすることを願っています。
リカルド14年

1
最初にスレーブデバイスのデータシートを確認してください。私の記憶が正しければ、ATMegaのプルアップは30k〜60kのどこでもかまいません(Vcc、温度、および他の多くの要因に依存します。信頼できる抵抗を実際に当てにすることはできません)。適切なロジック1を確保するために、十分な電流をスレーブに送信していることを確認する必要があります。抵抗が大きすぎる場合、スレーブデバイスは十分な電流を取得できず、同じ場所にいます今。
audiFanatic 14年

4
@audiFanatic +1。ところで、ブレイクアウトボードにプルアップ抵抗を含め、デフォルトでそれらをインストールすることはエラーです。1人のI2Cバスに複数のブレイクアウトボードがある場合、どうなるかを想像してください。各プルアップは通常2.2kΩ程度です。すべてのブレークアウトボードのプルアップ抵抗は並列に表示されます。結合されたプルアップはI2Cには硬すぎます。[この潜在的な問題の詳細はこちらこちら。]
ニックアレクセエフ

2
@Ricardoこれは、スコープショット[OPのスコープショットの最初のセット]での幸せなI2Cバスではありません。私も答えにスコープショットを追加しました。
ニックアレキセフ

3
この記事には、良いおよび悪いi2c信号の波形がいくつかあります:dsscircuits.com/index.php/articles/…-
フォード

16

使用するライブラリ、およびそれが依存するライブラリ(Wire)は、ATMegaの内部プルアップを有効にします。これらは弱いプルアップであり、通常の使用では、外部プルアップ(並列に接続された2つの抵抗)を補完します。20kから70kの比較的高い抵抗のため、使用中の外部の問題に問題があったとしても、それらはあまり発生しません。

I2Cプルアップが省略されるとどうなりますか?

現在、外部抵抗なしで、ラインをハイに駆動するのは弱い内部プルアップのみです。ボードレイアウト、i2cラインの速度、アクセス頻度、外部干渉などに応じて、動作する場合と動作しない場合があります。運が良かった。プルアップはありますが、期待したものではありません。

プルアップの欠如は、私のボードのこれら2つのICのいずれかを損傷する可能性がありますか?

内部プルアップがなくても、プルアップがなくてもどちらのICも損傷しません。i2cデバイスの内部ビルドSClおよびSDAラインは、NPNトランジスタに似ています。それらはオープンコレクターであり、本質的に電流制御/スイッチダイオードです。

ただし、ATMegaが5vで、i2cデバイスが3.3vのみのデバイスである場合、内部プルアップをオンにすると、最後に注意することが問題を引き起こす可能性があります。または、内部プルアップをオンにし、外部抵抗を3.3vまたは他の電圧に接続すると、問題が発生する可能性があります。基本的に、これはWireライブラリの意図的に無視されたバグです。


4
+ You do have pull-ups, just not ones you expected.1--釘付けしたと思います。ありがとう!
リカルド14年

ちょうどあなたが私のセットアップで何が起こっているのかを明確にするのに役立ついくつかのスコープショットを追加したことを知っています。
リカルド14年

2
@リカルドうん、それらを見ます、33khzで。最も低いi2c仕様の3分の1の速度で、信号はまだ非常に悪いです。100kHzまたは400khzでは、コミュニケーションは機能しません。素晴らしいことは、多くのi2cデバイスが最大速度のほんの一部で動作することです。ただ覚えている、内部プルアップが70Kオームまですることができ、典型的なI2C抵抗は4.7Kである
通行人

8

一般に、I 2 Cインターフェース回路にはプルアップ抵抗が必要です。インターフェイスがワイヤの両端で本当に完全な仕様のI 2 Cである場合、抵抗のない信号ラインは決して高レベルになりません。それらは低いままであるか、各端の部品の漏れ電流によって決定される中間レベルになることがあります。これは、真のI 2 Cがオープンドレインバスであるためです。

一部のデバイスでは、デバイスのI 2 Cインターフェイスが使用されていないときにインターフェイスピンを高い非アクティブレベルに保持するために、実際に20K〜100Kオームの範囲のオンチッププルアップ抵抗があります。シンプルで短いインターフェイスの場合、これらのプルアップ抵抗は、クロックやデータの信号が送られている間、ラインをプルアップするのに必要な電流を供給するのに十分かもしれません。

回路図から判断するのは困難ですが、場合によっては、I 2 Cインターフェイスが汎用I / Oポートピンを使用して実装され、その後ソフトウェアでビットバンギングされます。実装者は、この構成でオープンドレイン手法を使用してI / Oピンを操作しない場合があり、これがプルアップ抵抗なしのインターフェイスが機能するように見える要因に影響する場合があります。

一日の終わりには、おそらくオシロスコープを使用して以前のクロックの1つで信号をチェックし、インターフェイスの1と0が仕様電圧レベル内で機能しているかどうかを確認する必要があります。そうすれば、その実装で信じられないほど幸運だったのか、上記の要因の1つが働いているのかを確実に知ることができます。


4

I2Cプルアップが省略されるとどうなりますか?

ほとんどの場合、I2Cバスは単に機能しません。

プルアップの欠如は、私のボードのこれら2つのICのいずれかを損傷する可能性がありますか?

ほとんどないでしょう。


3

I2Cラインはまったく機能しません。間違っていない場合、I2Cはロー信号をアサートするだけですが、ハイ状態に戻すことはありません。そのため、これらの抵抗が必要です。

プルアップがなくても、ICが損傷することはありません。


I2Cピンはオープンドレインです。
マットヤング14年

1

I2CはTTLロジックプロトコルです。したがって、データおよびクロックラインはオープンドレインです。つまり、I2CハードウェアはこれらのラインをLowにしか駆動できません。ゼロ以外の場合はフローティングのままになります。それがプルアップ抵抗の出番です。これは単純化された図ですが、少しの間私と協力してください。

回路図

この回路のシミュレーション –を使用して作成された回路 CircuitLab


ご覧のように; TTLロジックが出力をLowに駆動していないときに出力にロジック1が見えるようにするために、プルアップ抵抗が必要です。既に述べたように、TTLロジックはラインをハイに駆動できません。これが存在しない場合、出力はフローティングのままになり、出力で表示されるものを予測できません(知っているすべての場合、電子レンジまたは同僚の特定の無糖のグミのクマが発生する可能性があり変動する値)。

さて、マイクロコントローラを備えたソフトウェアにI2Cを実装する場合、出力を高または低の両方で駆動できるCMOSロジックを使用する可能性が高いため、これはあまり問題ではないでしょう。


1
喜んでくれました。
audiFanatic 14年

2
デバイスがTTLまたはCMOSロジックのどちらを使用するかは問題ではありません。通常のTTLおよび通常のCMOS出力は、信号を上下にプルします。I2C信号は、オープンコレクタTTLまたは(可能性が高い)オープンドレインCMOSのいずれかです。どちらの場合も、信号をHighに引き上げるトランジスタがソースの出力段から欠落しているため、プルアップ抵抗が必要です。信号をハイにします。マイクロコントローラがこれらのパイントに内部プルアップを持っている可能性があります。
ピーターベネット14年

3
-1ピーター・ベネットが言ったように、この答えの多くは間違っています。TTL信号を「オープンドレイン」と呼ぶのは無料です。
ジョーハス14年

TTLを使用してI2Cを実行することには利点があることに注意してください。つまり、同じバスに接続された異なる供給電圧のコンポーネントを処理するためにレベル変換器が必要ないことがよくあります。TTL 入力段では、プルアップ電圧を最低電圧チップの最高許容入力電圧に設定するだけで十分です。CMOSでは、それは機能しません。
ベンフォークト

@BenVoigt:いいえ-「プルアップ抵抗が必要」構成「TTL」の呼び出しは間違っています。この配置はCMOSまたはTTLのいずれかで作成でき、DS1307はCMOSパーツです。マキシムのデータシートには、出力がオープンドレインであることが明記されており、ブロック図には1つの出力に対するFETが示されています。
ピーターベネット

0

クロックを供給するマスターとしてマイクロを使用してI2Cをバングすると、プルアップなしでSCLを駆動できました。

ただし、スレーブデバイスがプルダウンして適切に応答できるように、SDAはプルアップでOCである必要があります。

よろしく

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.