Ich versuche, eine kleine Schaltung zu produzieren, und ich versuche, die Anzahl der Teile zu reduzieren. Ich habe kürzlich ein I²C- EEPROM hinzugefügt, das einmal verwendet wird, wenn das System hochfährt, zusammen mit diesem EEPROM habe ich zwei Widerstände für Pullups hinzugefügt.
Auf diese möchte ich nach Möglichkeit verzichten und nur auf interne Pull-up-Widerstände setzen.
Diese Frage scheint darauf hinzudeuten, dass es möglich ist, aber nicht empfohlen wird: Was passiert, wenn ich die Pullup-Widerstände in I2C-Leitungen weglasse?
Ich verwende einen ATmega328 und das EEPROM befindet sich neben dem Gerät mit Trancen von etwa 10 mm.
Hat jemand an einem Projekt gearbeitet, bei dem die externen Pull-up-Widerstände absichtlich weggelassen wurden, oder ist das eine wirklich schlechte Idee?
I²C erfordert Pullups auf den Daten- und Taktleitungen. Wie Sie diese Klimmzüge bereitstellen, liegt bei Ihnen.
Klimmzüge sollten im Bereich von 3,3 KΩ liegen, aber der genaue Wert ist nicht so wichtig, solange er irgendwo in der Nähe liegt.
Sie können die internen Pullups der MCU verwenden, wenn und nur wenn Sie sehr wenige (ein oder zwei) Elemente auf dem I²C-Bus haben und die Buslänge sehr kurz ist (nur wenige Zentimeter).
Sie sollten in dieser Situation auch sicherstellen, dass der Bus nicht zu viele Störungen aufnimmt, da die Rauschunterdrückung der schwächeren Klimmzüge schlechter ist. Stellen Sie sicher, dass alle Gleise, die Ihren Bus kreuzen, dies in einem Winkel von 90° tun, um die Geräuschinduktion zu reduzieren. Stellen Sie eine Massespur bereit oder gießen Sie zwischen den Takt- und Datenleitungen, um das Übersprechen zwischen den Takt- und Datenleitungen zu reduzieren.
Das heißt, zwei Widerstände sind nicht wirklich eine große Ausgabe ...! 0402- oder 0603-Widerstände nehmen fast keinen Platz ein. Ich würde bei den richtigen Klimmzügen bleiben.
Zuerst müssen Sie verstehen, warum Sie sie brauchen. Dann können Sie klarer beurteilen, ob Sie sie brauchen oder nicht, oder ob Sie die internen verwenden können.
Die I2C-Busspezifikation besagt, dass die an diesen Bus angeschlossenen Dinge in der Lage sein müssen, die Leitungen niedrig zu ziehen. Aber sie sollten nicht in der Lage sein, sie hoch zu ziehen. Dies ist die Rolle des Pull-up-Widerstands auf diesen Leitungen.
Wenn zwei oder mehr Dinge den Bus gleichzeitig benutzen wollen, besteht auf diese Weise kein Risiko, dass einer versucht, die Leitung nach unten zu ziehen, während ein anderer versucht, sie nach oben zu drücken. Was zu einem Buskonflikt, sehr hohen Strömen in den IO der Dinge und einer möglichen Zerstörung derselben führen würde.
Verwenden Sie Pull-up, wenn einer versucht, nach unten zu ziehen, während ein anderer versucht, die Leine zu "lösen". Die Leitung würde niedrig gehen und nichts Ernstes passiert.
Das gleiche Prinzip gilt für das ACK, das ein Slave an den Master sendet. Der Master muss die SDA-Leitung „freigeben“, wenn ein ACK empfangen werden muss. Zu diesem Zeitpunkt zieht der Slave die SDA-Leitung auf Low, um das ACK zu signalisieren.
Stellen Sie sich ein System ohne Klimmzüge vor. Es sollte eine Möglichkeit geben, die Leitungen auf hohem Niveau zu halten. (Eine konstante Low-Level-Leitung hat keinen sehr hohen Durchsatz.... ;-) ) Und wir haben ja schon gesehen, dass die Verwendung von Push-Pull-Ausgängen hier nicht funktioniert, ohne das Protokoll zu verschrauben.
Über die internen Klimmzüge? Ja es könnte funktionieren. Aber angenommen:
Sie benutzen einen sehr langsamen Bus. Der durch die Leitungskapazität gebildete RC und der Pull-up definieren, wie lange es dauert, bis die Leitung von Low auf High übergeht. Wenn die Widerstände groß sind. Was normalerweise bei eingebetteten Klimmzügen der Fall ist, dann kann die Zeit sehr groß sein. Oder Sie sorgen, wie von @Majenko erklärt, dafür, dass die Kapazität Ihres Busses sehr gering bleibt. (sehr kurze Leitungen, keine 10+ Slaves verwenden, etc.)
Sie überprüfen, ob die Slaves und der Master in Ordnung sind, um mit einem sehr langsamen Bus zu arbeiten. Einige akzeptieren beliebige Busgeschwindigkeiten, sobald sie unter dem maximal zulässigen Wert liegen. (dasselbe gilt für die Anstiegszeit der Leitung)
Sie benutzen keinen sehr langen Bus in einer lauten Umgebung.
Sie akzeptieren, dass der Bus, den Sie benutzen, außerhalb der Spezifikationen liegt. Ich meine, es wird keine Bedingung sein, gegen die die von Ihnen verwendeten I2C -Dinge getestet wurden. Ohne eigene Tests an einem Prototypen unter allen Betriebsbedingungen können Sie nicht sicher garantieren, dass es funktioniert.
Aus dem ATmega328-Datenblatt:
Die einzige externe Hardware, die zur Implementierung des Busses benötigt wird, ist ein einzelner Pull-up-Widerstand für jede der TWI-Busleitungen.
Wie später im selben Abschnitt über TWI mit dem 328 angegeben wird:
beide Busleitungen sind über Pull-up-Widerstände mit der positiven Versorgungsspannung verbunden. Die Bustreiber aller TWI-konformen Geräte sind Open-Drain oder Open-Collector. Dies implementiert eine verdrahtete UND-Funktion, die für den Betrieb der Schnittstelle wesentlich ist. Ein Low-Pegel auf einer TWI-Busleitung wird erzeugt, wenn ein oder mehrere TWI-Geräte eine Null ausgeben. Ein High-Pegel wird ausgegeben, wenn alle TWI-Geräte ihre Ausgänge im Tristate-Zustand befinden, wodurch die Pull-Up-Widerstände die Leitung auf High ziehen können.
Die Pullup-Widerstände sind notwendig, um die notwendigen Logikwerte zu erzeugen, um mit dem EEPROM-Gerät zu sprechen.
Markt
Wouter van Ooijen
Benutzer20088
Benutzer20088
ArthurGuy
ArthurGuy