I2Cがプルダウン抵抗ではなくプルアップ抵抗で動作するように設計されているのはなぜですか?


22

I2Cでは、SCLおよびSDAラインはプルアップ抵抗を使用し、ピンドライバーはピンをグランドに駆動できるオープンコレクターNPNデバイスであることを理解しています。これにより、同じバスを複数のスレーブと共有できるようになり、2つ以上のスレーブが誤って同時にバスをドライブしようとしてもシステムに損傷を与えないというI2Cの利点が得られます。

ただし、これは、SDAおよびSCLラインでPNPオープンドレインドライバープルダウン抵抗を使用して行うこともできます。これにより、クロックストレッチングやマルチマスター調停のようなことも実現できます。

I2Cプロトコルの現在の実装は、上記の提案された代替実装よりも利点がありますか?


1
80年代のICでは、オープンコレクタトランジスタが大半を占めるようでした。
PlasmaHH

9
@PlasmaHH理由は、NPN(漠然と覚えている限り)は、基板内の電子移動度が高いため、面積あたりの電流容量が大きいためだと思います。そのため、「強力な」出力ステージを簡単に構築できます。
マーカスミュラー

7
@MarcusMüller確かに、それは本当でした(そして今でもそうです)。NPNとNMOSフェットは、同じサイズを指定すると「より強く」なります。CMOSでは、係数2〜3が一般的です。PNP対NPNの場合、製造プロセスに依存しますが、ほとんどの場合、PNPはNPNよりもはるかに困難で複雑です。また、Pドープ基板から始めて(ほとんどのプロセスがそうであるように)、これを強調しています(より良いNPN)。
Bimpelrekkie

@Bimpelrekkie固体物理学クラスからこの日付までの2.3の係数を覚えています:
winny

1
既存のI2Cバスが何らかの理由で誤って接地された場合、プルアップ抵抗電流のみが流れます。アクティブHighのドライバーとプルダウン抵抗の補完的な配置により、I2Cの数年から単純なドライバーが損傷します。ボード間を移動する場合、シャーシへの短絡が考慮事項です。しかし、それはドライブロープルハイになる多くの理由の1つに過ぎず、他の人が以下で答えています。
トニーM

回答:


30

電気的には理にかなっています。これは、IICバス上のすべてのデバイスへの共通接続がグラウンドであるためです。ラインがハイに駆動され、プルダウンを介してローにフロートされた場合に必要となるように、すべてのIICデバイスへの共通接続である電力を強制するよりも制限がはるかに少なくなります。

IICデバイスは、すべて同じネットまたは同じ電圧から給電される必要はありません。両方のバスラインを単一の共通電源電圧に駆動する必要がある場合、これは当てはまりません。


5
私のダウンボットではなく、あなたは私と同じくらいの長さのI2C経験を持っている必要があるので、ここでの私のポイントは誤解である可能性がありますが、「IICデバイスはすべて[...]同じ電圧から給電される必要はありませんかもしれません」 5V電源と3V電源のI2Cデバイス(たとえば)が追加のコンポーネントや予防策なしで同じI2Cバスを共有できることを意味するものと見なされます(レベル変換器については言及しなかったため)。そしてもちろん、各デバイスのI2Cロジックのしきい値は独自のVccを参照しているため、それはできません。おそらく、レベル変換器の明示的な言及の欠如がダウン投票を引き起こしたのでしょうか?
サムギブソン

13
使用されるプルアップとI / Oピンに応じて、I2Cスタイルの通信は5Vデバイスと3.3Vデバイス間でスムーズに動作できます。たとえば、5Vに10Kのプルアップを使用すると、5V許容のクランプされていない入力がある場合、または保護ダイオードに150uAを許容できる場合、3.3Vデバイスを使用できます。また、少なくとも低速では、2.5V以下の入力上限しきい値を持つ5Vデバイスとのインターフェイスには、3.3Vへのプルアップを使用すると動作します。
supercat

7
@Sam:実際には、5 Vと3.3 VのIICデバイス同じIICバス上に配置できます。電源電圧に関係なく電圧レベルが固定されたデバイスは、IIC仕様で具体的に言及され、認可されています。
オリンラスロップ

5
フィリップスの古い文書「The I2C-bus and how to use」では、セクション10.0に初期の(通常はNMOS)5V I2Cデバイスの固定入力しきい値が記載されています。次に、「VDDに関連する入力レベルのI2Cバスデバイスには、プルアップ抵抗も接続されている共通の電源ラインが1つ必要です」(太字)が表示されます。@supercat-「2.5V以下の入力高しきい値を持つ5Vデバイス」と言いましたが、そのようなデバイスの例を挙げてください。古いI2Cのドキュメントを読むと、古い5Vデバイスについては、固定の3V I2C Vihの最小値に関する言及しか見つかりません。ありがとう。
サムギブソン

2
@SamGibson:VDDに関連する入力レベルを持つデバイス、互いに特定の範囲内の電圧で動作する必要がある場合があります。どれだけ近づけなければならないかは、電圧がVDDにどのように関係しているかに依存します。PIC16F877(任意に選択された5Vパーツ)のMicrochipデータシートには、通常のピンのV(IH)が0.25VDD + 0.8Vとしてリストされていますが、シュミットトリガー入力の場合ははるかに高くなります。VDD = 5.2Vでは、通常の入力は2.1 Vの指定V(IH)になります。ハードウェアI2C V(IH)の仕様は見当たりませんでしたが、典型的なパフォーマンスグラフは、通常の入力とST入力の間にあることを示しています。
supercat

24

古き良き時代では、TTLドライバは信号をプルアップするよりもプルダウンするのがはるかに優れていました。したがって、I2Cのようなプロトコルだけでなく、割り込みライン、リセットなどもすべて、分散プルダウン付きのプルアップを使用して実装されました。


8
より良い現代では、半導体の固有の特性であるため、同じことが依然として当てはまります。今日では、同じ電流を処理するためのより強力なプルアップトランジスタを取得するのにそれほど費用はかかりません。
アーセナル

2
CMOSを使用すると、電源レール電圧に近づけるのもはるかに簡単になると言われました。TTLが苦労していた別の「問題」。(それは3V3 CMOSはTTLとインターフェースするために許可され多分、我々はそのために幸運自分自身をカウントしなければならない)
Oldfart

14

電源電圧が変動する可能性のあるサブシステム間で共通の基準としてグラウンドを使用する方が簡単です。PNPトランジスタを使用して電源電圧にプルアップする場合、すべてのサブシステムを同じ電源に接続する必要があります。


8

ここには良い答えがたくさんありますが、別の理由もあります。

バスの静止状態が地面にある場合、バスが接続されているのか、単に空間にぶら下がっているのかを判断する方法はありません。

プルアップがマスターデバイスに配置されるのは正常です。通常、スレーブにはプルアップがありません。これは、低レベルをアサートするために必要なプルダウン電流が、バスに接続されているデバイスの数とともに増加するためです。

スレーブは、バスに接続されると、ラインがハイになっていることを検出し(使用されていない場合)、バスが実際にそこにあり、静かであることを知ることができます。グランドバイアスバスの場合はそうではありません。


バスがハイにプルされていることを検出するために、スレーブは最初にバスをローにプルする必要があります。同様の手順が反対の極性では不可能な理由はわかりません。
ドミトリーグリゴリエフ

@DmitryGrigoryevなぜ既に高い低値のものをプルする必要があるのですか?
Trevor_G

5

質問を正しく理解している場合、1つの側面は次のとおりです。

  • なぜプルダウン抵抗とPNPトランジスタの代わりにプルアップ抵抗とNPNトランジスタを使用するのですか?

まず、バイポーラトランジスタ(NPN、PNP)ではなく、MOSFET(4種類のバリエーションがある)を使用することに注意してください。

プルアップおよびNPN」バリアントを使用するデバイスは、nチャネル拡張を使用します MOSFETを使用します。このMOSFETのソースはグランドに接続されているため、ゲート-ソース間電圧(電流の流れを制御)はゲートとグランド間の電圧に等しくなります。したがって、MOSFETは0〜Vddの電圧を使用して制御できます。

プルダウンおよびPNP」バリアントを実装するには、次の3つの可能性があります。

  • 用いたpチャネルエンハンスメントMOSFETを

    NMOSまたはCMOS ICでは、同等の特性(抵抗など)を備えたpチャネルMOSFETは、nチャネルMOSFETよりも多くのスペースを必要とします。

    マイクロエレクトロニクスの分野ではお金がかかるため、可能な限りpチャネルMOSFETを使用しないでください。

  • 用いたnチャネルエンハンスメント MOSFET

    これには、トランジスタを駆動する論理回路の出力に、供給電圧の「低」電圧(例えば+ 5V)と供給電圧を超える「高」電圧(例えば、回路の残りの部分が供給されたときの+ 10V)が必要です。 + 5V)。

    理由:MOSFETが導通しているとき、ソース-グランド電圧はVddになります。ゲート-ソース間電圧は正である必要があるため、ゲートとグランド間の電圧はさらに高くなければなりません。

    2つの電圧供給が必要になります-論理回路の出力を0 ... + 5Vから+ 5V ... + 10V ...にシフトする回路

  • nチャネル空乏型 MOSFET を使用する

    残念ながら、このソリューションについてはあまり説明できません。しかし、グーグルを使用して、デプレッションMOSFETはエンハンスメントMOSFETよりも製造が難しく、この理由で回避されると言っているページを見つけました。

    パワーエレクトロニクス(マイクロエレクトロニクスではない)から、上記の「2電源」のバリエーションは、デプレッションMOSFETよりも好ましいことを知っています。(しかし、その理由を説明することはできません。)

    編集 nチャネル空乏MOSFETを使用すると、おそらく負の電圧(たとえば-5V)が必要になるため、2つの供給電圧も必要になります...


0

また、共通のグランドおよびプルアップデータラインを使用することによるもう1つの追加の利点があります(共通のVCCおよびプルダウンを使用するよりも)。

元の目的が同じPCB上のデバイスを数インチのスパンでのみ接続することであったとしても、十分な成功を収めたので、コンピューターや同等のものである可能性のある「デバイス」を接続することは珍しくありません一部のデバイスは独自の電源を備えているため、品質が異なります(たとえば、壁のコンセントに接続されたものにバッテリーで接続されたものを接続するとします)。理想的ではなく、仕様外の条件でも接続が「少なくとも良好」に機能する場合は、より適切です。

そして、そのような接続されたデバイスの多くは、何らかの方法で他の手段によっても接続されている可能性があり、その後はI2C通信のみです。通常、デバイスを一緒に接続するときは、それを接続しますcommon ground-時には他の機能の一部として、時には金属ケースに取り付けられており、デバイスもケースに(または一般的なクーラーなど)接地されているため接地されたシールドが内側にあるシールドケーブル-アースも接続します。

そのようなデバイスの電力線(VCC)も直接接続すると、それらの線が自然に異なる電圧になると問題が発生します(確かに、電源の構造と部品の許容範囲に応じて5Vと言うことがありますが、 4.9Vまたは5.2Vである場合もあります。バッテリー駆動で、場合によっては一部のモーターが動作している場合は、時間とともに電力が低下して上昇する場合もあります)。

そのような場合、一部のボルトの電源間で効果的に短絡が発生し、電源(および経路の抵抗)に応じて、比較的高い電流が流れ、エネルギーの浪費と熱の上昇だけでなく、損傷(またはそれらのソースの一部の寿命を短縮します。それは良くありません。

共通のグランドとプルアップを使用することで、このような問題を回避できます。グランドはグランドで、プルアップ抵抗は、デバイス間でVCCが大きく異なる場合でも、非常に小さなクロス電流しか許容しません。


1
これは、基本的にDave Tweedの答えと同じです。
ヤンカ

-2

チップがプルアップされていれば、チップを通してそれほど多くの電力を送る必要はありません。

チップは何も駆動しないため、バスを0にするにはショートを作成し、バスを1にするにはオープンを行います。

プルダウンされた場合、チップを介してバスを1に駆動するために電力を送信する必要があります。バスが偶発的にショートした場合、それをプッシュしようとすると、そのチップを介して駆動する多くの電力があります1まで

免責事項:私はこの時点でかなりお粗末なEEです。


3
EE.SEへようこそ。「プルアップする場合、チップにそれほど多くの電力を送る必要はありません。プルアップ抵抗とプルダウン抵抗が同じサイズの場合、電流は同じになります。プルアップでは、駆動チップから電流を供給し、駆動チップにシンクする必要があります。プルダウンでは、駆動チップから電流を供給し、駆動チップでシンクする必要があります。偶発的な短絡は、V +またはグランドへの可能性があります。
トランジスタ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.