2

I2C 経由でデータを送信しています (1 秒ごとに DMA を使用)。SCK と SDATA に 2 つのプルアップ抵抗を追加しました。スレーブが存在するため、応答がないため、マスターはスレーブ アドレスのみを送信します。

そのテストボードは時々起こったので、しばらくの間これらのプルアップ抵抗を失いました。これが起こったとき、私はそれ以上データを取得できず、SCK はこの周波数で可能な限り速く刻みます。それを修正する方法はありません。プルパップバックは役に立ちませんでした。ボードをリセットする必要があります。

この振る舞いを説明することはできず、バスを完全に殺してしまいます。

4

1 に答える 1

3

既にご覧になったように、i2c バスでは、sda ラインと scl ラインの両方でプルアップ抵抗が不可欠です。通常、sda ラインが双方向であることは明らかですが、スレーブがラインを低く維持してバスの速度を下げることができるため、scl もある程度双方向であることは明らかではありません。

多くの場合、衝突やプルアップの喪失などの物理的な問題が原因でバスがロックされる可能性があります。このような場合、一部のスレーブはまだアドレス指定されていることを認識しているため、バスを適切に解放しません。この状況は、マスターが出力 SCL パルスを送信し、最終的に回線が解放されたときに停止条件を送信することによって修正できます。しかし、奴隷がいないと言うなら、それはおそらくあなたの場合ではありません.

プルアップが一時的に切断されているため、マスターの i2c ペリフェラルが予期したときにラインが高くなることを認識していないことが原因である可能性があります。あなたの場合に私が考えることができる最善の解決策は、それらのプルアップを緩めないようにすることです. これを実現する最善の方法は、各ラインに 2 つまたは 3 つの抵抗器を並列に接続することです。この方法では、バスを「引っ張らない」ままにするために、2 つまたは 3 つすべてを切断する必要があります。SDA 用に 2 つの 10k 抵抗を並列に使用し、SCL 用に別の 2 つを使用します。

于 2011-07-26T20:30:26.330 に答える