Quanti slave i2c può supportare un master i2c?


17

Esiste un numero massimo di slave i2c che un master i2c può pilotare? Quali sono i fattori fisici limitanti?


1
Hai un indirizzo a 7 bit. Ciò significa che puoi indirizzare fino a 127 schiavi.
Botnic,

Grazie. Esistono fattori di limitazione fisica come l'azionamento attuale, la capacità o qualcosa del genere che impedisce al numero di slave di raggiungere fino a 127?
user768421,

1
@Botnic ignora completamente switch, hub, buffer, ripetitori i2c e qualsiasi dispositivo i2c che consente di espandere un bus.
Passante,

Risposte:


22

Il fattore limitante del software è la dimensione dell'indirizzo utilizzato per gli slave: 7-bit o 10-bit, che supportano rispettivamente i dispositivi 127 e 1023. Fisicamente, ci sono due restrizioni. In primo luogo, la dimensione fisica del bus perché il bus è pensato solo per le corse brevi (la parte inter IC). Se il bus è troppo grande, ci sono effetti di ritardo capacitivo e di caricamento che devono essere affrontati. In secondo luogo, alcuni dispositivi non possono supportare l'intera gamma di indirizzi I2C. Ad esempio, il giroscopio MPU6050 supporta solo due indirizzi e alcuni dispositivi riservano indirizzi specifici per scopi speciali.


2
Hai un errore off-by-one. L'indirizzamento a 7 bit supporta 128 indirizzi (da 0 a 127). L'indirizzamento a 10 bit supporta 1024 indirizzi (da 0 a 1023).
CurtisHx,

3
Questo non è un errore per un errore. È un errore "off by 6" perché ci sono 7 indirizzi riservati, non solo uno.
kruemi,

Lo schema di indirizzamento è dettato dai dispositivi sul bus, master o slave. Alcuni dispositivi hanno intervalli di indirizzi preimpostati e indirizzi riservati. Altri dispositivi, ad esempio molti microcontrollori, non hanno indirizzi riservati e possono utilizzare qualsiasi indirizzo in un determinato schema di bit.
vini_i

Questi numeri sono in qualche modo corretti, tuttavia è necessario un avvertimento. Ci sono alcuni indirizzi riservati come 1111 XXX e 0000 XXX. Ciò significa che 7 bit = 2 ^ 7 - 16 = 112 indirizzi utilizzabili, 10 bit è l'intero 2 ^ 10 1024. 8 bit non è (non dovrebbe essere una cosa) in genere include il bit R / W su 7 bit. nxp.com/docs/en/user-guide/UM10204.pdf
busfault

@busfault Riconosco che gli indirizzi a 8 bit non sono effettivamente una cosa. Li ho rimossi dalla mia risposta. La maggior parte dei microcontrollori può scegliere di ignorare alcuni o tutti gli indirizzi riservati e utilizzare l'intero intervallo di indirizzi. Nella mia risposta noto che questo è specifico del dispositivo.
vini_i

10

Il numero massimo di nodi è limitato dallo spazio degli indirizzi e anche dalla capacità totale del bus di 400 pF, che limita le distanze pratiche di comunicazione a pochi metri.

Maggiori informazioni su I²C


9

L'indirizzamento limita il numero di dispositivi: alcuni possono utilizzare l'indirizzamento a 10 bit (usato abbastanza raramente), il che limita il numero di indirizzi a 1024. Ci sono una manciata di indirizzi "riservati".

I2C (al contrario di "bus a due fili" o qualunque altra cosa voglia chiamare un bus simile), dovrebbe seguire lo standard NXP (née Philips), le specifiche del bus I2C UM10204 e il manuale dell'utente . Questo dovrebbe essere il tuo documento di riferimento principale, non le varie interpretazioni e sottoinsiemi esistenti altrove.

Il numero massimo di dispositivi sarà influenzato dalla capacità di azionamento dell'uscita più debole (che a sua volta determina la resistenza minima di pullup), dal cablaggio e dalla capacità di ingresso e dalla modalità / frequenza operativa. Vedere la sezione 7.2 Funzionamento al di sopra della capacità massima consentita del bus se la capacità massima deve essere superata:

inserisci qui la descrizione dell'immagine


7

Un bus i2c è limitato principalmente dalla capacità del bus (e quindi dalla velocità) e dagli indirizzi dei dispositivi accessibili. E spazio sulla tavola fisica.

Ma non esiste un limite superiore reale, quando si tiene conto di buffer bus, extender, ripetitori, hub, multiplexer, switch (o qualsiasi altro nome per un dispositivo che può passare da più bus). Questi aggiungono un certo sovraccarico di i2c, che può essere accessibile tramite lo stesso bus i2c. Il PCA9548A, ad esempio, è uno switch bus a 8 bit.

Questo singolo chip può teoricamente quadruplicare il numero di slave i2c (127 * 8) altrimenti disponibili. E il PCA9548A può essere configurato per un massimo di 8 indirizzi su un singolo bus, quindi 8 * 8 * 127 dispositivi. (la matematica potrebbe essere disattivata). E questo è solo con questo dispositivo e non di più.

Francamente, non ci sono limiti teorici se ti adegui alla capacità.


5

I2C specifica 2 lunghezze di indirizzo, 7 e 10 bit , che fornisce rispettivamente un massimo teorico di 128 e 1024 indirizzi distinti.

Tuttavia, ci sono alcuni indirizzi riservati, come 0x00 (chiamata generale). Ciò limita ulteriormente lo spazio degli indirizzi.

Se stai costruendo un sistema in cui hai il controllo diretto sui dispositivi I2C, puoi farlo utilizzare gli indirizzi riservati per uso personale, ma il sistema non sarà più conforme allo standard I2C.

Oltre all'indirizzamento, esistono le limitazioni del bus fisico. Ogni dispositivo sul bus deve essere in grado di abbassare il bus in un determinato intervallo di tempo (a seconda della velocità del bus). Se il bus ha molta capacità, i dispositivi potrebbero non essere in grado di tirare SDA abbastanza velocemente e i pull-up potrebbero non riportare SDA abbastanza velocemente.

Ora, i problemi hardware possono essere superati con un po 'di hardware del driver. Sto lavorando a un progetto in questo momento che utilizza I2C per comunicare con dispositivi su diversi 10 metri. L'autobus principale utilizza 24v e ogni scheda ha un driver che scende a 3,3v.

In poche parole, la limitazione fisica di I2C può essere superata. L'indirizzamento può essere superato, ma solo se si ha il controllo diretto sul dispositivo.


Sono passati quasi tre anni da quando lavoravi su autobus i2c molto lunghi. Hanno funzionato bene?
Wallyk,

1
@wallyk Ho lasciato quella compagnia poco dopo aver pubblicato la risposta. Dirò che, dato l'hardware giusto, puoi far comunicare I2C su lunghe distanze. Tuttavia, ci sono altri protocolli di comunicazione progettati per le lunghe distanze e probabilmente sarebbe una scelta migliore di I2C.
CurtisHx,

5

La limitazione primaria sul numero di slave che un master può pilotare generalmente proviene da fattori elettrici come capacità del bus, dispersione, resistenza del convertitore, ecc. Se si possono costruire slave con capacità parassita zero e perdita zero e se è possibile collegarli con tracce di scheda a capacità zero, quindi la capacità del bus non sarebbe un fattore, ma in pratica nessuno dei due presupporterà.

L'indirizzamento di dispositivi che "si conoscono" l'uno dell'altro, invece, non è davvero un problema. Sarebbe banale progettare una periferica che consenta di collegare miliardi di chip usando un indirizzo di lettura e uno di scrittura. Basta specificare che ogni dispositivo deve avere un ID univoco a quattro byte ed è tenuto ad ascoltare sempre l'indirizzo di scrittura, ma deve abbandonare ogni transazione i cui primi quattro byte di dati trasmessi non corrispondono al proprio ID. Specificare inoltre che i dispositivi possono rispondere all'indirizzo di lettura solo se l'ultima transazione di scrittura ascoltata corrisponde al loro indirizzo.

Se si desidera aggiungere la possibilità che il master determini gli ID di tutti gli slave collegati, è possibile riservare alcuni intervalli di ID speciali per tali scopi. Ad esempio, si potrebbe dire che se il primo byte ID è FF, i successivi quattro byte saranno una maschera e i quattro successivi un ID; un dispositivo dovrebbe rimanere connesso (e acquisire l'ultimo byte ID) se la parte del suo ID specificata dalla maschera corrisponde a quella indicata nel comando. Ciò consentirebbe a un master di identificare almeno un dispositivo che utilizza 64 transazioni e dispositivi aggiuntivi che utilizzano 62 o meno transazioni ciascuno. Forse non è il mezzo più veloce possibile per l'identificazione del dispositivo, ma non è male dato uno spazio di ricerca di miliardi di ID dispositivo.


2

Risposta breve: dipende

Se si dispone di dispositivi (comuni) con indirizzi a 7 bit fino a 104 dispositivi (128 indirizzi - indirizzi riservati (0x00-0x07 e 0xF0-0xFF sono riservati)) (si applicano alcune limitazioni) Se si dispone di dispositivi (meno comuni) che supportano 10 bit indirizzare fino a 1024 dispositivi (è possibile combinare dispositivi a 7 bit e 10 bit e raggiungere fino a 1136 dispositivi in ​​quel modo)

Ora ai limiti: la maggior parte dei dispositivi semplici può essere configurata solo da 2 a 8 indirizzi diversi. È possibile ovviare a ciò ordinando dispositivi personalizzati con indirizzi di base diversi (ma ciò normalmente significa che si ordina un numero minimo di dispositivi) Esistono anche limitazioni hardware (principalmente capacità del bus) ma questo può essere risolto con speciali driver i2c.

Se si desidera collegare molti dispositivi su distanze maggiori, suggerirei comunque di utilizzare un bus di campo! I2C è destinato alla comunicazione all'interno di un dispositivo (come un televisore). Sto usando I2C me stesso con un RaspberyPi con cavi esterni fino a 50 cm (anche con sezioni a T che non dovresti mai avere in un sistema di bus). Funziona sorprendentemente bene.


0

Il numero di dispositivi collegati al bus è limitato solo dalla capacità totale consentita del bus di 400 pF. Poiché la maggior parte dei circuiti integrati con un'interfaccia I²C utilizza la tecnologia CMOS a bassa potenza e ad alta impedenza, è possibile collegare molti circuiti integrati al bus I²C prima che venga raggiunta la capacità massima


1
Ciò non risponde alla domanda del PO in un maniero completo. Prova a rispondere a tutti gli aspetti della domanda, anche se usi valori approssimativi. Specifica e / o lascia un link alla tua fonte di informazioni.
Sparky256

0

Con chip multiplexer aggiunti (come TCA9544A) o buffer (come PCA9515B) è possibile superare tutti i limiti , sia la capacità del bus che l'indirizzamento.

È possibile posizionare 3 dispositivi con indirizzi identici dietro un multiplexer e selezionarne solo uno, comunicare con esso e successivamente selezionarne un altro. Naturalmente il software diventa più complesso.

Se si dispone di un cablaggio lungo, è possibile posizionare un buffer nel mezzo e superare il limite di capacità.


No, sarai ancora limitato: 4 canali / multiplexer, per canale hai 4 canali secondari, quindi hai canali secondari, canali secondari e altro ancora. Sono disponibili 3 righe di indirizzo per commutatore di canali: 4 ^ (2 ^ 3) = 65536 canali. Per canale hai 2 ^ 8 - 7 - 8 + 2 ^ 10 = 1265 Dispositivi / Canali (quando usi anche i buffer) (i -7 sono per gli indirizzi riservati e -8 per gli indirizzi multiplex). 1265 * 65536 = 82903040 Dispositivi massimi.
12431234123412341234123,

Modifica: Siamo spiacenti, si è verificato un errore: sono 2 ^ 7 - 7 - 8 + 2 ^ 10 = 1137 Dispositivi / Canale => 1137 * 65536 = 74514432 Dispositivi. Ma potrebbe esserci più possibilità quando si utilizza IO-Expander per attivare e disattivare alcuni buffer (che cosa è di gran lunga un uso pratico ma una possibilità teorica).
12431234123412341234123,
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.