なぜ出力漏れなのか。
I2Cプロトコルは、複数のマスタと複数のスレーブが1つのバス上にあることをサポートしており、出力漏れを行わずにプッシュプルで出力すると、マスタ間が短絡する場合があります。したがって、バスは一般的にオープンリーク出力を使用します。
なぜプルアップ抵抗を接続するのですか。
プルアップ抵抗を接続するのは、I2C通信にはハイレベルを出力する能力が必要があります。一般的にオンドレイン出力はハイレベルを出力することができず、ドレインに抵抗を引っ張るとレベル変換が可能になります。I2Cは2つのバスSDAとSCLから構成されています。バスに接続されたデバイスの出力段は、ドレインオープンでなければならず、プルアップ抵抗を介して電源に接続されているため、「線と」機能を実現することができます。バスがアイドルの場合、両方の回線はハイレベルです。
図1 抵抗
一般的なIOポートの駆動能力は2 mA〜4 mAのオーダーです。
1.電力消費の問題を考慮すると、抵抗値は小さすぎることはできません。
プルアップ抵抗値が小さすぎると、VDD注入ポートの電流が大きくなり、消費電力が大きくなり、ポート出力のローレベル値が増大します(I2Cプロトコルでは、ポート出力のローレベルの許容値は0.4 V)。したがって、通常、プルアップ抵抗は1 K以上の抵抗を選択しなければなりません(VDD=3 Vの場合、注入電流は3 mAを超えない)。
2.速度の問題を考慮すると、抵抗値は大きすぎることはできません。
それはプルアップ抵抗と線上容量形成のRC遅延に依存し、RC遅延が大きいほど、波形が方形波から外れて正弦波に向かう傾向があり、データの読み書きが正しい確率は低いため、プルアップ抵抗は過大にはできません。I2Cバス上の負荷容量は400 pFを超えてはなりません。I2Cバス上のデバイスが徐々に増加すると、バス負荷容量も増加します。総負荷容量が400 pFを超えると、確実な動作ができません。これもI2Cの限界です。プルアップ抵抗は1.5 K、2.2 K、4.7 Kを選択できることを提案しました。
I2Cバス基本動作
I2Cバス仕様によると、バスがアイドルの場合は2本のラインがハイトする必要があります。メインデバイスAがI2Cを起動する必要があると仮定し、SCLハイレベル時にSDAをハイレベルからローレベルに変換して起動信号とする必要があります。マスタAはSDAを引き上げた後、SDAのレベルをもう一度チェックする必要があります。どうして?ワイヤアンドのため、マスタAがSDAを引き上げれば、他のマスタがSDAを引き下げることができ、1&0=0のためマスタAがSDAレベルをチェックしているときに、ハイレベルではなくローレベルであることがわかります。他のプライマリデバイスがバスを占有する時間がそれよりも早く、プライマリデバイスAはバスの占有を放棄するしかないことを示します。SDAがハイレベルである場合は、マスタAがバスを占有することができ、マスタAがSDAを下げて通信を開始することができます。したがって、シミュレーションI 2 CはGPIOポートをオープンリーク出力に設定し、プル抵抗を加えなければなりません。