Esiste una guida ai pin I2C definitiva là fuori? Non cerco uno "STANDARD"


16

EDIT: questo è stato ripetuto più volte, quindi mettendolo in cima: Sì, è ben noto che non esiste uno "standard" per i connettori tra dispositivi I2C, ma sicuramente questa comunità può formulare un elenco di punti "guida" per rendere tali interconnessioni, basate sul comportamento del segnale, sulla riduzione al minimo del rumore e sulla mitigazione del rischio a causa di connessioni errate.


NXP ha definito lo standard I2C senza specificare un pin-out per i connettori I2C, è la mia comprensione. L'unica guida di NXP sembra essere una menzione del posizionamento di un Ground e / o Vss tra SDA e SCL se Vss / Gnd sono trasportati attraverso l'interconnessione.

Gli acquisti di vari moduli I2C mi hanno lasciato con una varietà di pin-out I2C e un po 'di un compito per tenere traccia dei vari piccoli spessori di commutazione del cavo a nastro che ho dovuto fare per loro.

per esempio

  • Modulo OLED mono: SCL, SDA, GND, 5V (ovviamente non ideale, poiché orologio e dati sono uno accanto all'altro.
  • Sensor Shield per Arduino: SDA, SCL, GND, 5V (di nuovo non ideale, più switch SCL / SDA)
  • Modulo LCD a colori: SCL, GND, 5V, SDA (Yay!)
  • Ripetitore I2C senza nome: SCL, 5V, GND, SDA (ahi, hanno scambiato i pin di alimentazione! Quasi lasciano uscire il fumo magico.)

Quindi la mia domanda è questa :
esiste una linea guida definitiva / autorevole da utilizzare per la sequenza di pin-out del connettore I2C a 4 pin, in cui sia Vss che GND devono essere trasportati da host a dispositivo?

In caso contrario, esiste qualche directory, per quanto incompleta, di moduli / dispositivi I2C che elenca il pin-out adottato da ciascuno?

Chiarimento: cercare linee guida come "avvicinare Vss a SCL perché ..." piuttosto che uno standard definito che chiaramente non esiste.


3
Da qui la domanda.
Anindo Ghosh

1
Per tua stessa domanda, è chiaro che non esiste uno standard ... e se ci fosse, ovviamente la gente non lo sta seguendo. Sei bloccato a fare degli spessori. : P
Toby Lawrence,

1
@AnindoGhosh heh. Se fossi in me, probabilmente abbandonerei i moduli pre-acquistati e arrotolerei le mie schede breakout con un pinout standardizzato usando un'intestazione polarizzata. Probabilmente qualcosa come 6 pin, con GND vicino a SDA, SCL e 5V ... e quindi usando un cavo con tre coppie intrecciate per mantenere la massa vicino a ciascun segnale per aiutare a ridurre il rumore e rifiutare le interferenze.
Toby Lawrence,

3
Sembra che alcune persone siano offese che I2C sia una popolare opzione di connessione predefinita per molti moduli venduti per gli utenti di Arduino. Anche se non è mai stato progettato per il connettore della scheda esterna, è qui e vende e chiede indicazioni su come rendere migliore il connettore per i nuovi dispositivi è utile per noi non esperti e possibili che agli esperti non piaccia.
ExcitingProjects

1
@ExcitingProjects No, hanno ragione su quello che dicono, I2C non era pensato per questo, e affronta chiaramente diverse sfide nella connessione interdispositivo. È solo un caso che i progettisti di moduli abbiano scelto di utilizzare I2C. Sarei "offeso" anche se avessi una scelta.
Anindo Ghosh

Risposte:


16

Di recente ho lanciato il mio per quanto riguarda i connettori I2C. Il connettore in sé non è molto importante, in questo momento sto solo usando un header da 100mil pitch (di solito femmina a bordo quindi non è così difficile quando non è collegato), ma qualsiasi connettore a 4 pin lo farà. Inoltre, sto usando il P82B715da TI come extender del bus I2C. Ciò risolve i problemi di capacità associati all'esecuzione di lunghi drop I2C fuori bordo, ai quali, come si è detto, l'I2C inizialmente non era destinato. Ho provato molte combinazioni diverse, come negli esempi che hai dato e non ho notato alcuna differenza nelle prestazioni. Credo che questo perché I2C sia relativamente lento, l'interferenza tra SDA e SCL non è un grosso problema. Fondamentalmente i tempi di salita delle tensioni (quando si verificano interferenze) sul bus sono molto più piccoli di una lunghezza di bit. Quindi, potrebbe non essere quello che vuoi sentire, ma offre più opzioni. Personalmente sono andato con [VCC, SDA, GND, SCL] per essere instradato facilmente verso / da questo chip ed essere immune da un mix VCC / GND quando collegato all'indietro.


2
+1 + Accetta. Grazie, probabilmente la risposta più realmente possibile finora, "esiste I2C interdevice, ecco come lo uso e perché". L'evitamento di confusione VCC / GND è utile. Un buon punto per evitare le intestazioni di spille a bordo, ho accidentalmente strappato un paio di spille da alcuni moduli del sensore.
Anindo Ghosh,

Questa è l'unica risposta che è davvero utile e se avessi abbastanza reputazione darei un bonus a @Samuel per questo e ho preferito questa domanda perché ho molti molti moduli I2C e costruirò moduli I2C un giorno dopo questa guida.
ExcitingProjects

11

Quando è stato istituito per la prima volta, il bus I2C (Inter-Integrated Circuit) era progettato solo per collegare i chip su un singolo assieme PCB. Non è mai stato progettato per essere utilizzato su cavi per collegare più schede tra loro, pertanto non sono stati definiti connettori a tale scopo.

Le uniche interfacce esterne "standard" basate su I2C di cui sono a conoscenza sono il ACCESS.bus di breve durata per il collegamento dei dispositivi dell'interfaccia utente ai computer e il canale dati display VESA utilizzato per recuperare informazioni sul monitor tramite connettori VGA, DVI e HDMI.


Comprendo che lo scopo originale era diverso, ma dato che I2C è attualmente utilizzato per molti moduli collegati via cavo, spero che qualcuno abbia avviato un database collaborativo per documentare i pin-out utilizzati da vari prodotti, in particolare i numerosi prodotti destinati a i mercati di schede Arduino e altri microcontrollori.
Anindo Ghosh

4

Nessun pin-out standard, nessun connettore standard. Lo standard I2C non è molto adatto a questo genere di cose. È specificato a livello di bus, non a livello di dispositivo. Ad esempio, quando desideri collegare un dispositivo I2C, sai dallo standard se i pullup sono sull'host o sul dispositivo ?? No. Un sacco di altre cose che non conosci, come ad esempio dove sono le tue capacità dei cavi, cosa deve essere Vcc ....

In effetti, ci sono anche dispositivi I2C che necessitano di linee extra per gli interrupt e altri semplici I / O digitali. Come aggiungerli allo standard, se non riesci ad ottenere un accordo su quanti pin hai bisogno.

In conclusione, se stai cercando portabilità e stabilità nelle tue interconnessioni, I2C e SPI non sono dove devi cercare.


3
E se si cercasse una linea guida per creare il proprio dispositivo, che funzionerebbe (e piacesse) a tutti quegli altri moduli là fuori per il 'duino? C'è un mercato lì, non vedo il punto di ignorarlo. Per inciso, sono richiesti pull-up sull'host e facoltativi sul dispositivo, come da specifica.
Anindo Ghosh

5
La cosa "bella" degli standard è che ce ne sono così tanti tra cui scegliere! Scegli uno standard con un connettore ben definito, come MIDI, USB, RS232 (a parte quello stupido modem null) e costruisci un traduttore sul tuo dispositivo. L'altra opzione consiste nel formare un gruppo di lavoro sugli standard attraverso un'organizzazione di standard, come IEEE. I pullup "opzionali" sul dispositivo influiscono sul comportamento dell'intero bus, sottolineando esattamente il punto. Il MIDI isola otticamente ogni dispositivo di serie, quindi i dispositivi conformi non causano questi problemi
Scott Seidman,

1
+1 per il punto divertente ma vero sugli standard! :-)
Anindo Ghosh

4

Molte persone usano una sorta di connettore per trasportare segnali I²C e alimentazione tra due PCB. Per esempio,

  • il 10 pin UEXT a porta I²C e +3,3 V di potenza (e SPI);
  • il 10 pin iPack a porta I²C e +5 V di potenza;
  • il 4 pin Molex SEMCONN ACCESS.bus a porta I²C e +5 V di potenza;
  • alcune persone usano i connettori 8p8c e il cavo CAT5 normalmente utilizzati per lo strato fisico Ethernet per trasportare segnali I²C con codifica differenziale e alimentazione +12 V ( invio affidabile I2C su cavi Cat5 ) o segnali I²C single-ended potenziati e alimentazione +12 V ( il "Pond Electronics Bus" );
  • tutti i connettori e i cavi HDMI e DVI e VGA trasportano dati DDC2 su I²C;
  • alcuni altri connettori che portano I²C sono elencati in "Connettori e cavi bus I2C"

Alcuni consigli generali per trasportare segnali I²C su lunghe distanze:

ps: vedo che Wikipedia: I²C Circuit interconnession ha collegato a questa domanda.


3

Sebbene non ci sia piedinatura o connettore I²C standard, ci sono alcuni posti in cui viene utilizzata I²C standardizzati. Alcuni che vengono in mente sono moduli di memoria (DIMM, SO-DIMM), connettori video ( DDC in DVI , VGA ) e SM-Bus (sì, la loro pagina web sembra qualcosa che un bambino ha realizzato a metà degli anni '90). In particolare, il connettore del bus SM è codificato e contiene solo I²C e alimentazione, ma SM-Bus pone ulteriori restrizioni, quindi tecnicamente non tutti i dispositivi I²C devono essere collegati a un vero SM-Bus. Ci sono anche altre prese proprietarie, come i sensori Lego NXT.


È un dato di fatto che non esiste uno standard ... Quello che spero è una raccolta canonica di linee guida, che i progettisti di dispositivi potrebbero quindi seguire. SMBus, ad esempio, ha la linea + 5V all'esterno, mentre NXP consiglia sia + V che GND tra le tracce del segnale. In che modo è meglio e perché?
Anindo Ghosh,

2

Non esiste uno standard

Non esiste una pratica comune.

Per quanto riguarda le questioni per decidere cosa fare:

  1. Tieni i segnali su una scheda come se fossero stati pensati per essere in primo luogo. Le linee IIC hanno un'impedenza abbastanza elevata, sono single-ended e sono quindi sensibili al rumore e non terminano bene le linee di trasmissione. IIC semplicemente non è pensato per andare fuori bordo.

  2. Se stai andando fuori bordo comunque, mantieni l'autobus corto. Qualche pollice è probabilmente OK. Un metro o più chiede davvero problemi.

  3. Tenere lontano dalle linee di bordo fonti di rumore. Non avvolgerli attorno ad un motore, per esempio, o nemmeno provare ad avvicinarti a uno di essi.

  4. Utilizzare un connettore che non può essere collegato all'indietro. Se qualcuno può collegarlo all'indietro, qualcuno lo farà.

  5. Il cavo a nastro è probabilmente il più semplice da usare. Sono necessari almeno tre fili, SCL, SDA e terra. Aggiungere potenza è probabilmente una buona idea. In ogni caso, assicurarsi che il filo di terra sia compreso tra SCL e SDA per evitare la diafonia. Il cavo di alimentazione non dovrebbe essere rumoroso, quindi attaccalo da un lato, non importa quale.

  6. Dopo aver fatto casino con i connettori e aver inseguito potenziali problemi, renditi conto che il punto 1 era in realtà l'unico che dovevi conoscere.


Quindi dobbiamo mettere la testa nella sabbia per tutte le centinaia di cose I2C che le persone hanno fatto e venduto per i principianti di Arduino e altri microcontrollori?
ExcitingProjects

1

Come al solito per qualsiasi post che chiede perché qualcosa è [nt] standardizzato:
Fortunatamente, quello di ricarica è stato risolto ora che tutti abbiamo standardizzato su mini-USB.  [O è micro-USB?  Merda.
da XKCD


Forse se avessi letto la domanda più attentamente, o i numerosi thread di commento, potresti aver notato che non si tratta di uno standard ricercato ma di una raccolta di saggezza sotto forma di linee guida canoniche.
Anindo Ghosh,

1
@AnindoGhosh - Non vedo come questo possa fare la differenza. Se sostituisci lo standard con le linee guida nel fumetto sopra, è ugualmente valido. Ogni situazione in cui ci sono molti modi per fare qualcosa in genere porta molte persone a fare la cosa in molti modi. Anche se non è uno "standard" formale.
Connor Wolf,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.