I2C - interner und externer Pull-Up

Ich habe Zweifel am I2C-Pullup-Widerstand. Eigentlich entwickle ich ein I2C-Modul mit GPIO-Pins. Ich habe einen externen Pull-up-Widerstand (10k) für die SDA- und SCL-Leitungen verwendet. Muss ich den internen Pull-up auch zusammen mit dem externen Pull-up aktivieren, oder ist der externe Pull-up ausreichend? Wie wirkt sich der kombinierte externe und interne Pull-Up auf die Kommunikation aus? antworten Sie bitte

Danke

Welche Chips/Mikrocontroller verwendest du?
Als was soll Ihr I2C-Gerät fungieren? Meister oder Sklave?
i2c-Gerät fungiert als Slave.

Antworten (2)

Dies hängt von der spezifischen Architektur ab, die Sie verwenden. Wenn der Mikrocontroller, auf den Sie abzielen, über interne Klimmzüge verfügt, müssen Sie sicherstellen, dass sie stark genug sind, wenn Sie es ihnen ermöglichen, die externen Klimmzüge wegzulassen.

Wenn es nicht stark genug ist, müssen Sie es nicht aktivieren und Sie können einfach externe Klimmzüge verwenden.

Wenn der Pull-up durch eine verrückte Architektur immer aktiviert ist, können Sie den internen Pull-up effektiv als Widerstand parallel zum externen Pull-up behandeln, da beide auf VCC hochziehen. Beachten Sie, dass der resultierende Widerstand zu niedrig sein kann, wenn sie parallel sind, also stellen Sie sicher, dass das Endergebnis immer noch ein richtiger Klimmzug sein kann.

Ich kann den internen Pullup deaktivieren. Aber warum habe ich das gefragt, weil früher, als ich mit deaktiviertem internen Pull-Up gearbeitet habe, die Daten in der Datenleitung anders beobachtet wurden, als ich mit beiden aktivierten Pull-Ups gearbeitet habe? Selbst wenn ich internen Pull verwende, konnte ich I2C-Kommunikation durchführen.
Welchen Wert hat der interne Pull-up? Denken Sie daran, dass der Gesamtwiderstand geringer ist und möglicherweise unter die erforderliche Stärke fällt, wenn Sie beide Klimmzüge anziehen.
Ich habe das Datenblatt durchgesehen, konnte aber den internen Pull-up-Wert nicht finden.
Auf welchen Controller zielen Sie ab? Dies ist die Art von Informationen, die Sie in die ursprüngliche Frage eingeben würden.
@AksharaPrasad Das hilft nicht im Geringsten. Welche konkret? Dann kann ich selbst durchsehen. Niemand wird Ihre Idee stehlen.
Ich weiß, dass niemand meine Idee stehlen wird. Aber das Handbuch ist nicht im Internet vorhanden.
@AksharaPrasad Interessant, kannst du uns sagen, um welches es sich handelt? Es kann sein, dass Sie nicht an den richtigen Stellen suchen. Unabhängig davon, ob meine Antwort geholfen hat, können Sie gerne positiv abstimmen :)

Wenn ich es richtig verstehe, möchten Sie diesen I2C-Bus bit-bangen. Es gibt ein paar Dinge, die Sie beachten müssen.
1. AVRs und PICs haben ziemlich hochohmige interne Pullups, sodass Sie sowieso einen externen Widerstand benötigen (2k bis 4,7k).
2. Stellen Sie sicher, dass Ihre GPIOs Open-Drain sind, da der I2C-Bus ein Open-Drain-Bus ist. AVRs oder PICs lassen Sie das jedoch nicht zu. Der Weg, dies zu tun, besteht darin, beim Ansteuern des Busses anstelle des Ausgangsregisters das Richtungsregister zu verwenden und den Ausgangswert auf 0 zu setzen. Wenn Sie also den Bus auf Low treiben möchten, stellen Sie die GPIO-Richtung auf Ausgang und wann Sie den Bus ansteuern möchten hoch auf Eingang gesetzt.

Open Drain Enable bedeutet, dass der Transistor des Slave-Geräts das Signal auf LOW treiben sollte ... richtig? Ich mache genau das, was Sie erwähnt haben, wenn ich versuche, den Bus hoch oder niedrig zu fahren. Ja, ich schlage etwas auf den I2C.
Rechts. Sie fahren nur Lows (0s). Wenn Sie eine 1 fahren müssen, lassen Sie einfach die Klimmzüge den Trick machen. Daher ist die Busgeschwindigkeit umso höher, je niedriger der Pullup-Wert ist, da die ansteigenden Flanken durch die Pullups getrieben werden. Bei den üblichen 100kbps sollten Pullups also nicht mehr als 10k betragen. Ich würde noch niedrigere Werte verwenden, wenn es sich nicht um ein verrücktes Low-Power-Design handelt.
Hallo Alexxx, ich habe Ihren Kommentar vom 1. Juli 2015 gelesen. Könnten Sie bitte sagen, warum die Richtung als Eingang eingestellt werden sollte, um den Bus auf HIGH zu fahren. Was passiert, wenn BUS auf HIGH gesetzt wird, indem die Richtung auf Ausgang gesetzt und der Ausgangswert auf 1 geschrieben wird?
Hallo Akshara Prasad. Die HIGH-Leitung wird durch den Pull-Up-Widerstand definiert, sodass jedes Gerät auf der Leitung die Leitung bei Bedarf auf Low treiben kann (indem Sie den Pin als Eingang konfigurieren, lassen Sie die Leitung durch den Pull-Up-Widerstand übernehmen). Wenn Sie den Pin auf der Leitung auf Ausgang setzen, übernimmt dieser Pin die Leitung. Wenn Sie also den Ausgang auf HIGH setzen, bedeutet dies, dass kein anderes Gerät die Leitung auf Low treiben kann.