Gibt es da draußen eine definitive I2C-Pinbelegung? Nicht auf der Suche nach einem "STANDARD"

16

BEARBEITEN: Dies wurde mehrmals wiederholt, also ganz oben: Ja, es ist bekannt, dass es keinen "Standard" für I2C-Inter-Device-Anschlüsse gibt, aber diese Community kann mit Sicherheit eine Liste von "Leitpunkten" formulieren Solche Verbindungen basieren auf dem Signalverhalten, der Rauschminimierung und der Risikominderung aufgrund falscher Verbindungen.


Nach meinem Verständnis hat NXP den I2C-Standard definiert, ohne eine Pinbelegung für I2C-Steckverbinder anzugeben. Die einzige Anleitung von NXP scheint zu sein, eine Erdung und / oder Vss zwischen SDA und SCL zu platzieren, wenn Vss / Gnd über die Verbindung übertragen werden.

Durch den Kauf von verschiedenen I2C-Modulen habe ich eine Vielzahl von I2C-Pinbelegungen und ein bisschen mehr Zeit, um die verschiedenen kleinen Bändchen-Kabel-Umschalt-Shims nachzuverfolgen, die ich für sie herstellen musste.

z.B

  • Mono-OLED-Modul: SCL, SDA, GND, 5V (offensichtlich nicht ideal, da Takt und Daten nebeneinander liegen.
  • Sensor Shield für Arduino: SDA, SCL, GND, 5V (wieder nicht ideal, plus SCL / SDA-Switch)
  • Farb-LCD-Modul: SCL, GND, 5 V, SDA (Yay!)
  • No-Name-I2C-Repeater: SCL, 5V, GND, SDA

Meine Frage lautet also :
Gibt es eine endgültige / maßgebliche Richtlinie für die Pin-Out-Sequenz des I2C-4-Pin-Steckers, bei der sowohl Vss als auch GND vom Host zum Gerät übertragen werden sollen?

Ist dies nicht der Fall, gibt es ein Verzeichnis der I2C-Module / -Geräte, in dem die Pinbelegung aufgeführt ist, die sie jeweils übernommen haben, auch wenn diese unvollständig ist?

Klarstellung: Suchen Sie nach Richtlinien wie "Vss näher an SCL bringen, weil ..." anstatt nach einem definierten Standard, den es eindeutig nicht gibt.

Anindo Ghosh
quelle
3
Daher die Frage.
Anindo Ghosh
1
Anhand Ihrer eigenen Frage ist klar, dass es keinen Standard gibt ... und wenn ja, folgen die Leute ihm offensichtlich nicht. Du steckst fest und machst Unterlegscheiben. : P
Toby Lawrence
1
@AnindoGhosh heh. Wenn ich es wäre, würde ich wahrscheinlich die vorgekauften Module wegwerfen und meine eigenen Breakout-Boards mit einer standardisierten Pinbelegung unter Verwendung eines polarisierten Headers rollen. Wahrscheinlich so etwas wie 6-polig, mit GND neben SDA, SCL und 5V ... und dann mit einem Kabel mit drei verdrillten Adernpaaren, um die Masse in der Nähe jedes Signals zu halten, um das Rauschen zu verringern und Interferenzen abzulehnen.
Toby Lawrence
3
Es scheint, dass einige Leute beleidigt sind, dass I2C eine beliebte Standardverbindungsoption für viele Module ist, die für Arduino-Benutzer verkauft werden. Auch wenn es nie für den Anschluss von Außenplatinen entwickelt wurde, ist es hier und es verkauft sich und die Bitte um Anleitung, wie der Anschluss für neue Geräte besser hergestellt werden kann, ist nützlich für uns, nicht für Experten und möglicherweise für Experten, die dies nicht mögen.
ExcitingProjects
1
@ExcitingProjects Nein, sie haben Recht damit, was sie sagen. I2C war nicht dafür gedacht und steht in der Geräteverbindung eindeutig vor mehreren Herausforderungen. Es ist nur ein Zufall, dass sich Modulentwickler für I2C entschieden haben. Ich wäre auch "beleidigt", wenn ich die Wahl hätte.
Anindo Ghosh

Antworten:

16

Ich habe vor kurzem meine eigenen so weit wie I2C-Anschlüsse gehen. Der Stecker selbst ist nicht sehr wichtig, im Moment verwende ich nur 100mil Pitch Header (normalerweise weiblich an Bord, es ist also nicht so pokey, wenn nicht verbunden), aber jeder 4plus Pin-Stecker wird ausreichen. Zusätzlich benutze ich den P82B715von TI als I2C-Bus-Extender. Dies überwindet die Kapazitätsprobleme, die mit langen I2C-Drop-Off-Boards verbunden sind, für die I2C ursprünglich nicht vorgesehen war. Ich habe viele verschiedene Kombinationen ausprobiert, wie in den Beispielen, die Sie angegeben haben, und ich habe absolut keinen Unterschied in der Leistung bemerkt. Ich glaube, das liegt daran, dass I2C relativ langsam ist und Interferenzen zwischen SDA und SCL kein großes Problem darstellen. Grundsätzlich ist die Anstiegszeit für Spannungen (wenn Störungen auftreten) auf dem Bus viel geringer als eine Bitlänge. Das ist vielleicht nicht das, was Sie hören möchten, aber es bietet mehr Möglichkeiten. Persönlich habe ich mich für [VCC, SDA, GND, SCL] entschieden, um einfach auf diesen Chip zu geroutet zu werden und auch immun gegen eine Verwechslung von VCC und GND zu sein, wenn ich sie rückwärts einstecke.

Samuel
quelle
2
+1 + Akzeptieren. Vielen Dank, die wahrscheinlich praktischste Antwort bisher: "Interdevice I2C existiert, hier ist, wie ich es benutze und warum". Die Vermeidung von VCC / GND-Verwechslungen ist nützlich. Ich habe versehentlich ein paar Stifte von einigen Sensormodulen abgerissen, um die Verwendung von Stecknadeln an Bord zu vermeiden.
Anindo Ghosh
Dies ist nur eine Antwort, die wirklich hilfreich ist. Wenn ich einen ausreichenden Ruf habe, würde ich @Samuel einen Bonus dafür geben, und ich bevorzuge diese Frage, da ich sehr viele I2C-Module habe und eines Tages I2C-Module bauen werde, die diesen Anleitungen folgen.
ExcitingProjects
11

Als der I2C-Bus (Inter-Integrated Circuit) zum ersten Mal eingerichtet wurde, sollte er nur Chips auf einer einzigen Leiterplattenbaugruppe verbinden. Es war nie vorgesehen, Kabel zum Verbinden mehrerer Platinen miteinander zu verwenden, und daher wurden keine Steckverbinder für diesen Zweck definiert.

Die einzigen "Standard" -I2C-basierten externen Schnittstellen, die mir bekannt sind, sind der kurzlebige ACCESS.bus zum Anschließen von Benutzeroberflächengeräten an Computer und der VESA-Anzeigedatenkanal zum Abrufen von Monitorinformationen über VGA-, DVI- und HDMI-Anschlüsse.

Dave Tweed
quelle
Ich verstehe, dass der ursprüngliche Zweck anders war, aber da I2C jetzt für viele kabelgebundene Module verwendet wird, würde ich hoffen, dass jemand eine kollaborative Datenbank zur Dokumentation der von verschiedenen Produkten verwendeten Pinbelegungen eingerichtet hat, insbesondere für die vielen Produkte, für die es etwas gibt die Arduino und andere Mikrocontroller-Board-Märkte.
Anindo Ghosh
4

Keine Standardbelegung, kein Standardstecker. Der I2C-Standard ist für solche Dinge nicht wirklich geeignet. Es wird auf Busebene angegeben, nicht auf Geräteebene. Wenn Sie beispielsweise ein I2C-Gerät anschließen möchten, wissen Sie anhand des Standards, ob sich die Pullups auf dem Host oder auf dem Gerät befinden? Viele andere Dinge, die Sie auch nicht wissen, wie z. B. wo Ihre Kabelkapazitäten sind, was Vcc sein muss ...

Tatsächlich gibt es sogar I2C-Geräte, die zusätzliche Leitungen für Interrupts und andere einfache alte digitale E / A benötigen. Wie fügt man diese zum Standard hinzu, wenn man sich nicht einig ist, wie viele Pins man benötigt?

Fazit: Wenn Sie Portabilität und Stabilität in Ihren Interconnects suchen, sind I2C und SPI nicht das, wonach Sie suchen müssen.

Scott Seidman
quelle
3
Was ist, wenn man nach einem Leitfaden für die Herstellung seines eigenen Geräts sucht, der mit all den anderen Modulen für den Duino funktioniert (und diese auch mag)? Es gibt dort einen Markt, sehe keinen Grund, ihn zu ignorieren. Im Übrigen sind Klimmzüge am Host und optional am Gerät gemäß der Spezifikation erforderlich.
Anindo Ghosh
5
Das "Schöne" an Standards ist, dass es so viele zur Auswahl gibt! Sie wählen einen Standard mit einem genau definierten Anschluss wie MIDI, USB, RS232 (abgesehen von diesen blöden Nullmodem-Dingen) und bauen einen Übersetzer in Ihr eigenes Gerät ein. Die andere Möglichkeit besteht darin, eine Standardarbeitsgruppe über eine Standardorganisation wie IEEE zu bilden. "Optionale" Pullups auf dem Gerät wirken sich auf das Verhalten des gesamten Busses aus und machen meinen Standpunkt genau. MIDI isoliert jedes Gerät standardmäßig optisch, sodass kompatible Geräte diese Probleme nicht verursachen
Scott Seidman,
1
+1 für den komisch-aber-so-wahren Punkt über Standards! :-)
Anindo Ghosh
4

Viele Menschen verwenden eine Art Stecker, um I²C-Signale und Strom zwischen zwei Leiterplatten zu übertragen. Beispielsweise,

Einige allgemeine Tipps zum Übertragen von I²C-Signalen über größere Entfernungen:

ps: Ich sehe, dass Wikipedia: I²C Circuit Interconnection mit dieser Frage verknüpft ist.

Davidcary
quelle
3

Während es keine I²C-Pinbelegung oder Steckernorm gibt, gibt es eine ganze Reihe von I²C-Einsatzorten, die standardisiert sind. Einige, die mir in den Sinn kommen, sind Speichermodule (DIMM, SO-DIMM), Videoanschlüsse ( DDC in DVI , VGA ) und SM-Bus (ja, ihre Webseite sieht aus wie etwas, das Mitte der 90er Jahre von einem Kind gemacht wurde). Insbesondere der SM-Bus-Anschluss ist verschlüsselt und enthält nur I²C und Strom. SM-Bus unterliegt jedoch zusätzlichen Einschränkungen, sodass technisch nicht jedes I²C-Gerät an einen tatsächlichen SM-Bus angeschlossen werden sollte. Es gibt auch ein paar weitere proprietäre Stecker, wie z. B. Lego NXT-Sensoren.

Yann Vernier
quelle
Es ist eine Selbstverständlichkeit, dass es keinen Standard gibt ... Ich hoffe auf eine kanonische Sammlung von Richtlinien, denen Geräteentwickler möglicherweise folgen. SMBus hat zum Beispiel die + 5V-Leitung auf der Außenseite, während NXP empfiehlt, dass sowohl + V als auch GND zwischen den Signalspuren liegen. Welcher Weg ist besser und warum?
Anindo Ghosh
2

Es gibt keinen Standard.

Es gibt keine gängige Praxis.

Fragen zur Entscheidung, was zu tun ist:

  1. Bewahren Sie die Signale auf einer Platine so auf, als ob sie an erster Stelle stehen sollten. Die IIC-Leitungen haben eine ziemlich hohe Impedanz, sind single ended und daher anfällig für Rauschen und terminieren Übertragungsleitungen nicht gut. IIC ist einfach nicht zum Aussteigen gedacht.

  2. Wenn Sie trotzdem von Bord gehen, halten Sie den Bus kurz. Ein paar Zentimeter ist wohl OK. Ein Meter oder mehr fordert wirklich Ärger.

  3. Halten Sie Bordleitungen von Geräuschquellen fern. Wickeln Sie sie beispielsweise nicht um einen Motor und versuchen Sie nicht einmal, in die Nähe eines Motors zu kommen.

  4. Verwenden Sie einen Stecker, der nicht rückwärts angeschlossen werden kann. Wenn jemand es rückwärts einstecken kann, wird es jemand tun.

  5. Das Flachbandkabel ist wahrscheinlich das am einfachsten zu verwendende. Sie benötigen mindestens drei Drähte, SCL, SDA und Masse. Das Hinzufügen von Leistung ist wahrscheinlich eine gute Idee. Stellen Sie in jedem Fall sicher, dass sich das Erdungskabel zwischen SCL und SDA befindet, um ein Übersprechen zu vermeiden. Das Stromkabel sollte nicht laut sein, kleben Sie es also auf eine Seite, egal welche.

  6. Nachdem Sie mit Steckverbindern herumgespielt und potenziellen Problemen nachgegangen sind, stellen Sie fest, dass Punkt 1 der einzige war, den Sie kennen mussten.

Olin Lathrop
quelle
Also müssen wir den Kopf in den Sand stecken für alle Hunderte von I2C-Dingen, die Menschen für Anfänger von Arduino und anderen Mikrocontrollern hergestellt und verkauft haben?
ExcitingProjects
1

Wie üblich für jeden Post, der fragt, warum etwas [nt] standardisiert ist:
Zum Glück ist das Problem mit dem Aufladen gelöst, da wir alle auf Mini-USB standardisiert sind.  [Oder ist es Micro-USB?  Scheisse.
Von XKCD

Connor Wolf
quelle
Wenn Sie die Frage oder die vielen Kommentarthreads genauer gelesen hätten, wäre Ihnen vielleicht aufgefallen, dass es sich nicht um einen gesuchten Standard handelt , sondern um eine Sammlung von Weisheiten in Form von kanonischen Richtlinien.
Anindo Ghosh
1
@AnindoGhosh - Ich verstehe nicht, wie das einen Unterschied macht. Wenn Sie Standard durch Richtlinie im obigen Comic ersetzen, gilt dies ebenfalls. Jede Situation, in der es mehrere Möglichkeiten gibt, etwas zu tun, führt im Allgemeinen dazu, dass viele Menschen das Gesagte auf viele Arten tun. Auch wenn es kein formaler "Standard" ist.
Connor Wolf