Vraag:
Is er een definitieve I2C-pin-out-begeleiding die er is? Niet op zoek naar een "STANDAARD"
Anindo Ghosh
2012-11-02 14:42:54 UTC
view on stackexchange narkive permalink

BEWERKEN: dit is meerdere keren herhaald, dus als je het bovenaan plaatst: Ja, het is algemeen bekend dat er geen "standaard" is voor I2C inter-apparaatconnectoren, maar deze gemeenschap kan zeker een lijst opstellen met "richtlijnen" voor het maken van dergelijke verbindingen, gebaseerd op signaalgedrag, ruisminimalisatie en beperking van risico's als gevolg van verkeerde verbindingen.


NXP heeft de I2C-standaard gedefinieerd zonder een pin-out voor I2C-connectoren te specificeren, is mijn begrip. De enige begeleiding van NXP lijkt een vermelding te zijn van het plaatsen van een Ground en / of Vss tussen SDA en SCL als Vss / Gnd over de interconnect wordt gedragen.

Aankopen van verschillende I2C-modules hebben me een verscheidenheid opgeleverd van I2C-pin-outs, en een beetje een taak bij het bijhouden van de verschillende kleine band-kabel-schakelpads die ik voor ze moest maken.

bijv.

  • Mono OLED-module: SCL, SDA, GND, 5V (uiteraard niet ideaal, aangezien klok en data naast elkaar staan.
  • Sensor Shield voor Arduino: SDA, SCL, GND, 5V (opnieuw niet ideaal, plus geschakelde SCL / SDA)
  • LCD-kleurenmodule: SCL, GND, 5V, SDA (Yay!)
  • I2C-repeater zonder naam : SCL, 5V, GND, SDA (au, ze hebben de stroompinnen geschakeld! Laat de magie bijna ontsnappen.)

Dus mijn vraag is deze :
Is er een definitieve / gezaghebbende richtlijn om de I2C 4-pins connector pin-out sequentie te gebruiken, waarbij zowel Vss als GND van host naar apparaat moeten worden overgedragen?

Als dit niet lukt, is er dan een directory, hoe onvolledig ook, van I2C-modules / -apparaten met een opsomming van de pin-out die elk heeft overgenomen?

Verduidelijking: Op zoek naar richtlijnen zoals "zet Vss dichterbij naar SCL omdat ... "in plaats van een gedefinieerde standaard die duidelijk niet bestaat.

Elke gadget die ik heb gezien, heeft verschillende I2C-pinouts.
Vandaar de vraag.
Door uw eigen vraag is het duidelijk om te zien dat er geen standaard is ... en als die er wel was, volgen de mensen die duidelijk niet. Je zit vast met het maken van vulplaten. : P.
@TobyLawrence Die opmerking maakte mijn dag helderder! :-) Het maken van de vulplaat is niet zo hinderlijk als het volgen van de vulplaat. Ik heb nu maar liefst 12 verschillende shims, twee van elk, omdat ik nooit de juiste kon vinden als ik die nodig had.
@AnindoGhosh heh. Als ik het was, zou ik waarschijnlijk de vooraf gekochte modules weggooien en mijn eigen breakout-boards rollen met een gestandaardiseerde pinout met behulp van een gepolariseerde header. Waarschijnlijk zoiets als 6 pinnen, met GND naast SDA, SCL en 5V ... en dan een kabel met drie getwiste paren gebruiken om aarde bij elk signaal te houden om ruis te verminderen en interferentie te onderdrukken.
@TobyLawrence Voor werkende prototypes zouden we het nog beter doen: verplaats de onderdelen naar het moederbord, elimineer de vervelende tussenliggende connectoren en ga terug naar het gebruik van I2C zoals oorspronkelijk bedoeld, voor interconnects aan boord. In de voorbereidende stadia stap ik echter liever de alfabetblokken op dan ze te maken! :-)
Dit wordt gek. Er is u duidelijk verteld dat er geen standaard is, of zelfs maar een veelgebruikte. Kom er overheen. Het herhaaldelijk stellen van dezelfde vraag zal daar niets aan veranderen.
@OlinLathrop Als ik (a) herhaaldelijk heb gesteld en (b) dezelfde vraag, is dat interessant. Vanaf het begin stelde de vraag dat er geen standaard is, dus expertise zoeken in termen van een richtlijn (generiek genoeg, negeer dat het I2C is) ... wat niet 'dezelfde vraag' is die je hebt beantwoord. En het is een enkele vraag die ik nergens anders heb gesteld, dus het kan niet "herhaaldelijk" zijn. Ik heb zojuist een premie toegevoegd.
Het lijkt erop dat sommige mensen beledigd zijn dat I2C een populaire standaardverbindingsoptie is voor veel modules die worden verkocht voor Arduino-gebruikers. Zelfs als het nooit is ontworpen voor connectoren voor externe kaarten, is het hier en het wordt verkocht en om advies te vragen over hoe we de connector beter kunnen maken voor nieuwe apparaten, is het nuttig voor ons, geen experts en mogelijk dat experts dit niet leuk vinden.
@ExcitingProjects Nee, ze hebben gelijk over wat ze zeggen, I2C was hier niet voor bedoeld en staat duidelijk voor verschillende uitdagingen in de verbinding tussen apparaten. Het is toevallig dat moduleontwerpers ervoor hebben gekozen om voor I2C te gaan. Ik zou ook "beledigd" zijn als ik een keuze had.
http://samepins.github.io/doc/i2c.html heeft goede suggesties en links naar deze vraag.
Zeven antwoorden:
Samuel
2012-11-07 02:26:49 UTC
view on stackexchange narkive permalink

Ik heb onlangs de mijne uitgerold wat betreft I2C-connectoren. De connector zelf is niet erg belangrijk, op dit moment gebruik ik alleen een 100mil pitch header (meestal vrouwelijk aan boord, dus het is niet zo klein als hij niet is aangesloten), maar elke 4plus-pin-connector is voldoende. Bovendien gebruik ik de P82B715 van TI als een I2C-busvergroter. Hiermee worden de capaciteitsproblemen overwonnen die gepaard gaan met een lange I2C-uitval, waarvoor, zoals mensen al zeiden, I2C aanvankelijk niet bedoeld was. Ik heb veel verschillende combinaties geprobeerd, zoals in de voorbeelden die je gaf, en ik merkte absoluut geen verschil in prestatie. Ik denk dat dit komt omdat I2C relatief traag is, interferentie tussen SDA en SCL is niet echt een probleem. In principe is de stijgtijd voor spanningen (wanneer er interferentie zal optreden) op de bus veel kleiner dan een bitlengte. Dus dat is misschien niet wat u wilt horen, maar het biedt wel meer opties. Persoonlijk ging ik met [VCC, SDA, GND, SCL] om gemakkelijk van / naar deze chip te worden gerouteerd en ook om immuun te zijn voor een VCC / GND-verwarring wanneer deze achterstevoren werd aangesloten.

+1 + Accepteren. Bedankt, waarschijnlijk het meest praktisch uitvoerbare antwoord tot nu toe, "interdevice I2C bestaat, hier is hoe ik het gebruik en waarom". Het vermijden van VCC / GND-verwarring is nuttig. Goed punt om kleine pin-headers aan boord te vermijden, ik heb per ongeluk een paar pinnen van sommige sensormodules gerukt.
Dit is het enige antwoord dat echt nuttig is en als ik genoeg reputatie heb, zou ik @Samuel er een bonus voor geven en ik ben favoriet bij deze vraag omdat ik veel I2C-modules heb en op een dag I2C-modules zal bouwen volgens deze handleidingen.
Dave Tweed
2012-11-02 16:37:25 UTC
view on stackexchange narkive permalink

Toen deze voor het eerst werd opgericht, was de I2C-bus (Inter-Integrated Circuit) alleen bedoeld om chips op een enkele PCB-assemblage aan te sluiten. Het was nooit bedoeld om te worden gebruikt op kabels om meerdere kaarten met elkaar te verbinden, en daarom zijn er geen connectoren voor dat doel gedefinieerd.

De enige "standaard" op I2C gebaseerde externe interfaces die ik ken, zijn de kortstondige ACCESS.bus voor het aansluiten van gebruikersinterfaceapparaten op computers en het VESA Display Data Channel dat wordt gebruikt om monitorinformatie op te halen via VGA-, DVI- en HDMI-connectoren.

Ik begrijp dat het oorspronkelijke doel anders was, maar aangezien I2C nu voor veel kabelverbonden modules wordt gebruikt, hoop ik dat iemand een samenwerkingsdatabase is begonnen voor het documenteren van pin-outs die door verschillende producten worden gebruikt, met name de vele producten voor de Arduino en andere microcontroller board markten.
Scott Seidman
2012-11-02 17:45:03 UTC
view on stackexchange narkive permalink

Geen standaard pin-out, geen standaard connector. De I2C-standaard is niet echt geschikt voor dit soort dingen. Het wordt gespecificeerd op busniveau, niet op apparaatniveau. Als u bijvoorbeeld een I2C-apparaat wilt aansluiten, weet u dan aan de hand van de standaard of de pullups op de host of op het apparaat zijn? Nee. Tal van andere dingen die u ook niet weet, zoals waar uw kabelcapaciteiten zijn, wat Vcc moet zijn ...

In feite zijn er zelfs I2C-apparaten die extra lijnen nodig hebben voor interrupts en andere gewoon oude digitale I / O. Hoe voeg je die toe aan de standaard, als je geen overeenstemming kunt krijgen over hoeveel pinnen je nodig hebt.

Het komt erop neer dat als je op zoek bent naar draagbaarheid en stabiliteit in je interconnects, I2C en SPI dat niet zijn waar u moet zoeken.

Wat als iemand op zoek is naar een richtlijn voor het maken van een eigen apparaat, dat zou werken met (en zoals) al die andere modules die er zijn voor de 'duino? Er is daar een markt, zie geen punt om het te negeren. Overigens zijn pull-ups vereist op de host en optioneel op het apparaat, volgens de specificaties.
Het "leuke" van normen is dat er zoveel zijn om uit te kiezen! Je kiest een standaard met een goed gedefinieerde connector, zoals MIDI, USB, RS232 (afgezien van die stomme nulmodem-dingen), en bouwt een vertaler in je eigen apparaat. De andere optie is het vormen van een standaardwerkgroep via een standaardorganisatie, zoals IEEE. "Optionele" pull-ups op het apparaat beïnvloeden het gedrag van de hele bus, en dat maakt mijn punt precies. MIDI isoleert elk apparaat optisch standaard, dus compatibele apparaten veroorzaken deze problemen niet
+1 voor het grappige maar zo ware punt over normen! :-)
davidcary
2017-08-18 21:10:28 UTC
view on stackexchange narkive permalink

Veel mensen gebruiken een soort connector om I²C-signalen en stroom tussen twee PCB's over te dragen. Bijvoorbeeld

Enkele algemene tips voor het dragen van I²C-signalen over grotere afstanden:

p.s .: Ik zie dat Wikipedia: I²C Circuit interconnection verband houdt met deze vraag.

Yann Vernier
2012-11-06 13:38:58 UTC
view on stackexchange narkive permalink

Hoewel er geen I²C-pinout- of connectorstandaard is, zijn er nogal wat plaatsen waar I²C wordt gebruikt die gestandaardiseerd zijn. Denk hierbij bijvoorbeeld aan geheugenmodules (DIMM, SO-DIMM), videoconnectoren ( DDC in DVI, VGA) en SM-Bus (ja, hun webpagina ziet eruit als iets dat een kind halverwege de jaren 90 heeft gemaakt). Met name de SM-bus-connector is gecodeerd en bevat alleen I²C en voeding, maar SM-Bus legt extra beperkingen op, zodat technisch gezien niet elk I²C-apparaat op een echte SM-Bus moet worden aangesloten. Er zijn ook nog een paar eigen pluggen in de buurt, zoals Lego NXT-sensoren.

Het is een gegeven dat er geen standaard is ... Waar ik op hoop is een canonieke verzameling richtlijnen die apparaatontwerpers dan kunnen volgen. SMBus heeft bijvoorbeeld de + 5V-lijn aan de buitenkant, terwijl NXP zowel + V als GND aanbeveelt om tussen de signaalsporen te staan. Welke manier is beter, en waarom?
Connor Wolf
2012-11-06 14:16:22 UTC
view on stackexchange narkive permalink

Zoals gebruikelijk voor elk bericht waarin wordt gevraagd waarom iets [nt] gestandaardiseerd is:
Fortunately, the charging one has been solved now that we've all standardized on mini-USB. [Or is it micro-USB? Shit.
Van XKCD

Als je de vraag of de vele commentaarthreads had gelezen, zou je misschien hebben gemerkt dat er geen ** standaard ** naar wordt gezocht, maar een verzameling wijsheid in de vorm van canonieke richtlijnen.
@AnindoGhosh - Ik zie niet in hoe dat enig verschil maakt. Als je standaard vervangt door richtlijn in de bovenstaande strip, is deze even geldig. Elke situatie waarin er meerdere manieren zijn om iets te doen, leidt er over het algemeen toe dat veel mensen het genoemde ding op verschillende manieren doen. Zelfs als het geen formele "standaard" is.
Olin Lathrop
2012-11-07 03:08:28 UTC
view on stackexchange narkive permalink

Er is geen norm.

Er is geen gangbare praktijk.

Met betrekking tot kwesties om zelf te beslissen wat u moet doen:

  1. Bewaar de signalen op één bord zoals ze in de eerste plaats bedoeld waren. De IIC-lijnen hebben een vrij hoge impedantie, zijn single-ended en zijn daarom gevoelig voor ruis en sluiten transmissielijnen niet goed af. IIC is gewoon niet bedoeld om van boord te gaan.

  2. Als je toch van boord gaat, houd de bus dan kort. Een paar centimeter is waarschijnlijk OK. Een meter of meer vraagt ​​echt om problemen.

  3. Houd lijnen uit de buurt van ruisbronnen. Wikkel ze bijvoorbeeld niet om een ​​motor, en probeer er zelfs niet in de buurt te komen.

  4. Gebruik een connector die niet achterwaarts kan worden aangesloten. Als iemand het achterstevoren kan aansluiten, doet iemand dat.

  5. Lintkabel is waarschijnlijk het gemakkelijkst te gebruiken. U hebt minimaal drie draden nodig: SCL, SDA en aarde. Kracht toevoegen is waarschijnlijk een goed idee. Zorg er in ieder geval voor dat de aardingsdraad tussen SCL en SDA ligt om overspraak te voorkomen. De voedingskabel mag geen lawaai maken, dus plak hem aan één kant, het maakt niet uit welke.

  6. Nadat je hebt geknoeid met connectoren en potentiële problemen hebt gezocht, besef je dat punt 1 eigenlijk het enige was. een die je moest kennen.

Dus we moeten de kop in het zand steken voor alle honderden I2C-dingen die mensen hebben gemaakt en verkocht voor beginners van arduino en andere microcontrollers?


Deze Q&A is automatisch vertaald vanuit de Engelse taal.De originele inhoud is beschikbaar op stackexchange, waarvoor we bedanken voor de cc by-sa 3.0-licentie waaronder het wordt gedistribueerd.
Loading...