Hallo, bitte nicht gleich shitstormen, aber mir ist das noch nicht zu 100% klar: Wenn ich einen I2C-Bus mit einem Master und mehreren Slaves dran habe, wo auch ein Pullup sitzt beim Master (auf Vcc) - wie muss das Kabel zwischen den Slaves aussehen bzw. vom Master zum ersten Slave? SDA - SCL - GND - VCC??? Muss Vcc mitgeführt werden über das Kabel? Zur Info - die Slaves sind alle auf unterschiedlichen Platinen, generieren alle ihre eigene 5V-Spannung über einen LDO. Diese LDOs hängen jedoch am selben Netzteil. Danke schonmal! Marten
Vcc musst du nicht übergeben, da alle I2C-Teilnehmer nur Richtung GND schalten (wired-and).
Dennis schrieb: > Vcc musst du nicht übergeben, da alle I2C-Teilnehmer nur Richtung GND > schalten (wired-and). dem pullup sollte man VCC übergeben weil echtes I2C OC ist, wenn weder auf der einen Seite der pullup vorhanden ist und kein VCC dann siehts halt schlecht aus mit pullup!
ich tippe auf wired or egal wer den runter zieht, einer oder beide, das Ergebnis ist immer unten also OR
Joachim B. schrieb: > ich tippe auf wired or > > egal wer den runter zieht, einer oder beide, das Ergebnis ist immer > unten also OR Also müssen beide high sein, damit der Bus high ist -> Wired AND
sehe ich anders, nicht die inaktiven Signale gelten sondern die aktiven Signale, aktiv ist LOW und wenn es egal ist welcher LOW ist dann ist es ODER
"Sämtliche daran angeschlossene Geräte haben Open-Collector-Ausgänge, was zusammen mit den Pull-up-Widerständen eine Wired-AND-Schaltung ergibt." https://de.wikipedia.org/wiki/I%C2%B2C#Elektrische_Definition
Joachim B. schrieb: > ich tippe auf wired or Wenn du dich da mal nicht täuscht - ist aber natürlich eine Frage der Betrachtungsweise. Nur wenn alle Teilnehmer ihren Ausgang auf High Z setzen, ist der Bus auf High. Sobald ein Teilnehmer seinen Ausgang auf Low legt, liegt der Bus auf Low. Je nach Zuordnung der Pegel zu TRUE oder FALSE, läuft es dann auf wired OR oder wired AND hinaus.
Verstehe ich das richtig? Ihr beschäftigt euch mit den R vom Bus zu Vcc. So wie ich das verstehe, hat jeder Slave sein eigenes Netzteil. Muss nicht auf jeden Fall GND gleich sein? egal wo die Spannung herkommt?
Mario M. schrieb: > https://de.wikipedia.org/wiki/I%C2%B2C#Elektrische_Definition auch Wiki soll nicht immer fehlerfrei sein. Definieren wir doch mal, 2 Signale und stellen eine Wahrheitstabelle auf 0 & 0 = 0 0 & 1 = 1 1 & 0 = 1 1 & 1 = 1 das wäre für mich ein OR 0 & 0 = 0 0 & 1 = 0 1 & 0 = 0 1 & 1 = 1 das wäre für mich ein AND Es werden immer die aktiven Zustände betrachtet, nur aktiv ist ja bei I2C invertiert my2ct schrieb: > Wenn du dich da mal nicht täuscht - ist aber natürlich eine Frage der > Betrachtungsweise. my2ct schrieb: > Sobald ein Teilnehmer seinen Ausgang auf Low legt, liegt der Bus auf > Low. also OR, egal ob einer oder beide also Ruhepegel = high aktiver Pegel = low und AND mit invertierten Eingängen wird OR da war doch mal was: https://de.wikipedia.org/wiki/Kommutativgesetz man muss bei Wiki auch mal quer und mehr lesen! Fremder schrieb: > Muss > nicht auf jeden Fall GND gleich sein? egal wo die Spannung herkommt? ach und wenn auf beiden Seiten OC ist, wo kommt dann VCC her?
:
Bearbeitet durch User
Die Signale heißen SDA und SCL, wo ist da was negiert. Joachim B. schrieb: > auch Wiki soll nicht immer fehlerfrei sein. Dann lies es beim Erfinder von I²C: https://www.nxp.com/docs/en/user-guide/UM10204.pdf "The output stages of devices connected to the bus must have an open-drain or open-collector to perform the wired-AND function."
Joachim B. schrieb: > Dennis schrieb: >> Vcc musst du nicht übergeben, da alle I2C-Teilnehmer nur Richtung GND >> schalten (wired-and). > > dem pullup sollte man VCC übergeben weil echtes I2C OC ist, wenn weder > auf der einen Seite der pullup vorhanden ist und kein VCC dann siehts > halt schlecht aus mit pullup! Ja der Pullup ist nur beim Master dran, auf sein Vcc. Damit willst du sagen, dass der Vcc auf die anderen Slaves mitgegeben werden muss? Vcc_master, Vcc_slave1. Vcc_slave2 = 5V, aber alle hängen an Vcc_overall=9V. Der LDO isoliert ja nicht die 5V zu 9V, muss dann evtl. vielleicht doch nicht die 5V mitgegeben werden?
Fremder schrieb: > hat jeder Slave sein eigenes Netzteil. Muss > nicht auf jeden Fall GND gleich sein? egal wo die Spannung herkommt? Marten schrieb: > Es liebt überall "der selbe" GND an, egal ob Master oder die Slaves. denkt doch was ihr wollt, bei 2 Netzteilen muss es eben nicht überall den selben GND geben! Gestritten wird wo anders, macht euch die Welt wie sie EUCH gefällt! Mario M. schrieb: > Dann lies es beim Erfinder von I²C: > https://www.nxp.com/docs/en/user-guide/UM10204.pdf blabla, es gilt immer noch wie beim alten Funkverkehr "PTT push to talk" Es kann nur einer Quatschen, der EINE ODER der Andere wenn beide PTT quatschen kommt keine Kommunikation zustande, also entweder oder, also wired OR, wenn beide quatschen AND klappts nicht.
Okay, einigen wir uns auf das folgende: Im offiziellen Standard wird nichts invertiert, und bei Joachim zuhause ist alles andersherum und dort gibt es wired OR. Vermutlich gibt es für Joachim auch spezielle Datenblätter für jeden I2C-tauglichen IC, bei dem die Datentelegramme invertiert sind.
:
Bearbeitet durch User
ich weiss ja wer es schreibt! von Walter T. (nicolas) ein echter Fachmann, der darf es wired AND nennen und alles an der I2C Kommunikation funktioniert bei dem nur wenn BEIDE quatschen also AND. Ich nenne es weiterhin wired OR weil die Kommunikation nur funktioniert wenn der Eine ODER der Andere quatscht, bzw. nichts klappt wenn beide AND still sind. Das Verständnis von positiver und negativer Logik sowie Kommutativgesetz https://de.wikipedia.org/wiki/Kommutativgesetz ist halt nicht jedem einsichtig.
:
Bearbeitet durch User
Ist OK. Ich habe gelernt, das Logik nicht nur verUNDet und verODERt, sondern auch verNICHTet werden kann.
Walter T. schrieb: > Ich habe gelernt fein dann erkläre mir dein Gelerntes Du meinst wired AND, also klappt I2C deiner meinung nach wenn beide zugleich die Leitungen aktiv auf low ziehen, also AND, wenn nur einer das macht gehts ja nicht wegen AND.
Lol, da schreibt man kurz die Antwort und dann kommt das hier raus :-) Hier haben aber einige auch zuviel Freizeit, oder?
Dennis schrieb: > Lol, da schreibt man kurz die Antwort und dann kommt das hier raus :-) Dennis schrieb: > (wired-and) wenn so ein Unfug kommt egal wer low schaltet, EINER genügt kommt low raus also ODER und nicht AND das alle low schalten müssen AND das low rauskommt!
Marten schrieb: > muss dann evtl. > vielleicht doch nicht die 5V mitgegeben werden? Nein, wo willst du denn die 5V verbinden? Damit würdest du alle beteiligten Spannungsquellen parallel schalten. Ich denke nicht, daß das in deinem Sinne wäre. Es ist (eigentlich) egal, wo die PullUp-Widerstände sitzen, solange der Bus bei deaktivierten Ausgangsstufen der beteiligten I2C-Teilnehmer auf high (also +5V) gezogen wird. Du musst nur die Masse untereinander verbinden. Zu dem ganzen OT-Gequatsche: Beim I2C-Bus gilt: High = +5V Also erst wenn alle Teilnehmer den Bus auf High (+5V) lassen, also high ausgeben, ist auch der Bus high. Wenn nur einer der Teilnehmer ein low (GND) ausgibt, ist der Bus low. Dabei ist es vollkommen egal, ob ein High aktiv ausgegeben wird oder sich durch einen offenen (nicht angesteuerten Transitor) selbst einstellt. Demzufolge ist der Bus ein wired and. Das heißt, erst wenn ALLE Teilnehmer high ausgeben, ist auch der Ausgang (Bus) high. Also hat NXP wohl doch Recht.
:
Bearbeitet durch User
Frank B. schrieb: > Beim I2C-Bus gilt: High = +5V nicht beim ESP32 oder anderen mit 3,3V VCC Ich wüsste nun nicht wo bei I2C eine bestimmete Spannung vorgegeben wird, es muss allen schmecken und bei gemischter Versorgung geht nur OC. Frank B. schrieb: > Demzufolge ist der Bus ein wired and. Das heißt, erst wenn ALLE > Teilnehmer high ausgeben, ist auch der Ausgang (Bus) high. sehe ich immer noch anders high ist inaktiv und inaktiv ist keine Verknüpfung am I2C ist aktiv low und nur damit gelten Verknüpfungen überhaupt! Ist als wenn man in die Runde fragt hat einer Hunger und keiner meldet sich und dann zufrieden feststellt, keiner hat Durst! Das war aber nicht gefragt! Die Antworten müssen schon zur Frage passen! Bei PTT schrieb ich ja schon darf auch nur einer antworten also ODER, bei Licht an muss die ganze Kette aktiv werden also AND
:
Bearbeitet durch User
Dennis schrieb: > Lol, da schreibt man kurz die Antwort und dann kommt das hier raus :-) > > Hier haben aber einige auch zuviel Freizeit, oder? Ja, das habe ich mir auch gedacht. Du hättest deine Klammer weglassen sollen :-). Da ist die erste Antwort ausreichend und es wird endlos off-topic weiter diskutiert. Wenn ich eine logische Verknüpfung brauche, kaufe ich kein 'low-aktives' oder 'high-aktives' Gatter, sondern dasjenige, das meine gewünschte Verknüpfung realisiert! Ich bin also verantwortlich, ob das AND oder OR werden muss!
HildeK schrieb: > Ich bin also verantwortlich, ob das AND oder OR > werden muss! und was ist sinnvoll bei I2C? das beide aktiv zur selben Zeit die Leitungen belegen müssen?
:
Bearbeitet durch User
Joachim B. schrieb: > und was ist sinnvoll bei I2C? > > das beide aktiv zur selben Zeit die Leitungen belegen müssen? Mich interessiert dabei doch gar nicht, ob die Logik low- oder high-aktiv ist. Deshalb AND! Wenn das keine wired-Verbindung sein müsste, dann würde ich ein AND-Gatter einsetzen. War früher schon so, z.B. bei der Dekodierung der Adress- und Steuersignale von RAMs. Da kamen NORs zum Einsatz - soweit ich mich erinnere ...
Invertierte Logik, weil: Ruhezustand der beiden Leitungen = 1 Aktiv = 0 Und mit dem Namen hat das nichts zu tun, SDA muss nicht #SDA, /SDA oder nSDA benannt werden...
mws schrieb: > Invertierte Logik, weil: > > Ruhezustand der beiden Leitungen = 1 > Aktiv = 0 versuchte ich lange zu erklären, aber egal........ Durch die Invertierung ist es wired OR, es wird low wenn 1 oder mehr aktiv low werden.
:
Bearbeitet durch User
Joachim B. schrieb: > Durch die Invertierung ist es wired OR, es wird low wenn 1 oder mehr > aktiv low werden. Das Fachwort dafür ist NICHT-Logik.
Joachim B. schrieb: > nicht beim ESP32 oder anderen mit 3,3V VCC > Ich wüsste nun nicht wo bei I2C eine bestimmete Spannung vorgegeben > wird Nein, eine bestimmte Spannung ist nicht vorgegeben, man kann einen I2C-Bus auch mit Devices aufbauen, die alle 1,8V Vcc haben. Aber der TO arbeitet in diesem Fall mit 5V, weshalb ich mich auf diese bezogen habe. Joachim B. schrieb: > high ist inaktiv und inaktiv ist keine Verknüpfung > am I2C ist aktiv low und nur damit gelten Verknüpfungen überhaupt! Ob aktiv oder inaktiv ist vollkommen egal. Solange eine 1 / ein high durch (in diesem Fall!) 5V und eine 0 / ein low 0V oder GND ist, ist es positive logik. Also ist es ein and, ganz egal welcher Zustand dominant ist Joachim B. schrieb: > Durch die Invertierung ist es wired OR, es wird low wenn 1 oder mehr > aktiv low werden. Beim I2C ist aber nichts invertiert. high = 1 = 5V low = 0 = 0V invertiert wäre es anders herum
:
Bearbeitet durch User
Frank B. schrieb: > Also ist es ein and nö bei /Reset oder /IRQ wird es auch wired OR genannt, ich wüsste nun nicht warum ausgerechnet hier andere Regeln gelten sollen! aber jeder wie er will! mws schrieb: > Invertierte Logik, weil: > > Ruhezustand der beiden Leitungen = 1 > Aktiv = 0 dafür
Marten schrieb: > SDA - SCL - GND - VCC??? Muss Vcc mitgeführt werden über das Kabel? > > Zur Info - die Slaves sind alle auf unterschiedlichen Platinen, > generieren alle ihre eigene 5V-Spannung über einen LDO. OK. > Diese LDOs hängen jedoch am selben Netzteil. Aha! Die Platinen werden also noch einmal extra vom zentralen Netzteil versorgt. Dafür gibt es sicher Gründe die wir nicht kennen. Ich nutze für die externen I2C - Busse: SDA # SCL # GND # +8V. Auf jeder Slave - Platine sitzt ein 7805 und gut ist es. mfg klaus
:
Bearbeitet durch User
Marten schrieb: > Wenn ich einen I2C-Bus mit einem Master und mehreren Slaves dran habe, > wo auch ein Pullup sitzt beim Master (auf Vcc) - wie muss das Kabel > zwischen den Slaves aussehen bzw. vom Master zum ersten Slave? > > SDA - SCL - GND - VCC??? Muss Vcc mitgeführt werden über das Kabel? Nein, muss es nicht. Wozu sollte es? Nehmen wir mal an, auf Teilnehmer A und B sitzen Pull-Ups, auf C nicht. Dann fließt (sobald C den Bus auf Low zieht) Strom von VCC-A durch den Pull-Up, die SDA-Leitung, den OC-Transistor von Teilnehmer C und die GND-Leitung zurück zu GND-A. Dazu brauchst du keine VCC-Verbindung. MfG, Arno
Marten schrieb: > > Ja der Pullup ist nur beim Master dran, auf sein Vcc. Damit willst du > sagen, dass der Vcc auf die anderen Slaves mitgegeben werden muss? Nein. Warum auch? Elektrisch reicht jeweils ein Pullup-Widerstand an SCL und SDA. Und es ist in erster Näherung auch egal, wo am Bus der sitzt. Wenn man nur einen Master hat, dann ist es sinnvoll, die beiden Pullups auch am Master anzuschließen. Denn ohne den Master geht ja sowieso nichts. Falls der Master vom Bus getrennt wird, dann ist es auch egal ob die Pullups mit weg sind. > Vcc_master, Vcc_slave1. Vcc_slave2 = 5V, aber alle hängen an > Vcc_overall=9V. Der LDO isoliert ja nicht die 5V zu 9V, muss dann evtl. > vielleicht doch nicht die 5V mitgegeben werden? Aha. Du hast also eine gemeinsame Rohspannung für alle Baugruppen. Die wirst du dann ja wohl auf dem Bus mitführen wollen, oder? Es gibt genau gar keinen Grund, außerdem noch Vcc irgendeiner der Baugruppen (sei es der Master oder ein Slave) auf dem Bus mit herumreichen zu wollen. Selbst dann nicht, wenn man dem Bus mehrere Pullups spendieren wollen würde. Denn auch das ist erlaubt. I²C erlaubt eine recht große Spannweite für den Pullup-Widerstand. Bei 5V dürfen es minimal 1.5kΩ sein, der Maximalwert hängt von der Buskapazität (Leitungslänge) und Geschwindigkeit ab. Bei 100kHz und den üblichen Leitungslängen von einigen Dutzend Zentimetern ist man auch mit 10kΩ noch auf der sicheren Seite. Man könnte sich z.B. auf 2kΩ festlegen. Aber ob man nun 5x 10KΩ Pullups oder 1x 2KΩ Pullup verwendet, ist für die Funktion egal. Bei Hispeed-Bussen kann es sinnvoll sein, an jedem Ende der Leitung jeweils einen Pullup vorzusehen. Der wirkt dann wie eine HF-Terminierung. Und wenn die 5V für die Pullups dann aus verschiedenen 5V Netzteilen kommen, ist auch egal. Beim statischen H-Pegel wird dann das Netzteil mit der höheren Spannung "gewinnen", aber das ist erlaubt.
Joachim B. schrieb: > sehe ich anders, nicht die inaktiven Signale gelten sondern die aktiven > Signale, aktiv ist LOW und wenn es egal ist welcher LOW ist dann ist es > ODER Hier kommt wieder die Dualität der invertierten Logik und der physischen Inversion durch activ low zum Tragen, womit manche ihre Probleme zu haben scheinen. Hier ist es so, dass die invertierten Signale physikalisch verodert sind, was indirekt aber zu einer Verundung in der Logik führt. Das schlägt sich mithin auch in den Gleichungen nieder, denn: (NOT A) AND (NOT B) ist equivalent zu NOT ( A OR B) Um sich das zu vergegenwärtigen, lohnt ein Blick auf die CMOS-Architektur. Dort hat man nämlich stets beides parallel aufgebaut: 1) einen "high side"-Pfad mit negierender Physik (p-Kanal) in normalisierter Logik und 2) einen "low side"-Pfad mit nicht-negierende Physik (n-Kanal) in dazu passend invertierter Logik D.h. einmal sind die Transistoren in UND-Methodik verschaltet, also in Serie, auf der anderen Seite sind sie in ODER-Methodik verdrahtet, also parallel. Durch einmal die Inversion in Logik (Verschaltung) und einmal in Physik (Ausgangspegel des Gates zum Eingangspegel) hebt sich das weg und ist praktisch zweimal exakt die gleiche logische Schaltfunktion. Nur physikalisch ist etwas anderen und sie ergänzen sich. Bei pullups ist es im Grunde exakt das Gleiche, nur dass man sich bei der Realisierung auf jeweils einen aktiven Pfad beschränkt.
:
Bearbeitet durch User
Joachim B. schrieb: > Ich nenne es weiterhin wired OR weil die Kommunikation nur funktioniert > wenn der Eine ODER der Andere quatscht Na dann müßtest es aber konsequenter Weise wired-XOR nennen. ;)
mIstA schrieb: > Na dann müßtest es aber konsequenter Weise wired-XOR nennen ich muss ja nun mal gar nichts, aber egal, alle die es AND nennen haben eh Logikprobleme, denn wenn beide AND schweigen also SCL SDA high würde ich das nicht Kommunikation nennen!
Axel S. schrieb: > Aber ob man nun 5x 10KΩ Pullups oder 1x 2KΩ Pullup verwendet, ist für > die Funktion egal. Bei Hispeed-Bussen kann es sinnvoll sein, an jedem > Ende der Leitung jeweils einen Pullup vorzusehen. Der wirkt dann wie > eine HF-Terminierung. Und wenn die 5V für die Pullups dann aus > verschiedenen 5V Netzteilen kommen, ist auch egal. Vorsicht. Wenn du auf mehreren Prints Pullups zu verschiedenen Spannungen einbaust, dann überlege dir was passiert, wenn eine dieser Spannungsversorgungen ausfällt. Wenn du da die Pullups nicht mit z.B. Dioden entkoppelst, wird sich dieser Print über die Pullups versorgen und deinen restlichen Bus stören. In diesem Zusammenhang auch der Hinweis, I²C Bausteine dürfen auch ohne Versorgung den Bus nicht stören. Früher Allgemeinwissen, aber als dann andere Hersteller als Philips angefangen haben I²C Interfaces einzubauen und "vergessen" haben die interne Schutzbeschaltung entsprechend anzupassen, hat man das dann auch explizit in die Spec reingeschrieben. Ich meine es war so bei FAST.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.