Combien d'esclaves i2c un maître i2c peut-il prendre en charge?

17

Existe-t-il un nombre maximum d'esclaves i2c qu'un maître i2c peut piloter? Quels sont les facteurs physiques limitants?

user768421
la source
1
Vous avez une adresse 7 bits. Cela signifie que vous pouvez adresser jusqu'à 127 esclaves.
Botnic
Merci. Y a-t-il des facteurs physiques limitants comme le courant, la capacité ou quelque chose comme ça qui empêche le nombre d'esclaves d'atteindre 127?
user768421
1
@Botnic ignore complètement les commutateurs, concentrateurs, tampons, répéteurs i2c et tout périphérique i2c qui vous permet d'étendre un bus.
Passerby

Réponses:

22

Le facteur de limitation logicielle est la taille de l'adresse utilisée pour les esclaves: 7 bits ou 10 bits, qui prennent en charge respectivement 127 et 1023 appareils. Physiquement, il existe deux restrictions. Tout d'abord, la taille physique du bus car le bus est uniquement destiné aux petits trajets (la partie inter IC). Si le bus est trop grand, des effets de charge capacitive et de retard de propagation doivent être traités. Deuxièmement, certains appareils ne peuvent pas prendre en charge la gamme complète des adresses I2C. Par exemple, le gyroscope MPU6050 ne prend en charge que deux adresses, et certains appareils réservent des adresses spécifiques à des fins spéciales.

vini_i
la source
2
Vous avez une erreur au coup par coup. L'adressage 7 bits prend en charge 128 adresses (0 à 127). L'adressage 10 bits prend en charge 1024 adresses (0 à 1023).
CurtisHx
3
Ce n'est pas une erreur d'une erreur. C'est une erreur "off by 6" car il y a 7 adresses réservées et pas une seule.
kruemi
Le schéma d'adressage est dicté par les appareils sur le bus, maître ou esclave. Certains appareils ont des plages d'adresses prédéfinies et des adresses réservées. D'autres appareils, de nombreux microcontrôleurs par exemple, n'ont pas d'adresses réservées et peuvent utiliser n'importe quelle adresse dans un schéma de bits donné.
vini_i
Ces chiffres sont quelque peu corrects, mais une mise en garde s'impose. Il existe quelques adresses réservées telles que 1111 XXX et 0000 XXX. Cela signifie que 7 bits = 2 ^ 7 - 16 = 112 adresses utilisables, 10 bits est le 2 ^ 10 1024 complet. 8 bits n'est pas (ne devrait pas être une chose), il inclut généralement le bit R / W sur 7 bits. nxp.com/docs/en/user-guide/UM10204.pdf
busfault
@busfault Je reconnais que les adresses 8 bits ne sont effectivement pas une chose. Je les ai supprimés de ma réponse. La plupart des microcontrôleurs peuvent choisir d'ignorer une partie ou la totalité des adresses réservées et utiliser la plage d'adresses complète. Je note dans ma réponse que cela est spécifique à l'appareil.
vini_i
10

Le nombre maximal de nœuds est limité par l'espace d'adressage, ainsi que par la capacité totale du bus de 400 pF, ce qui limite les distances de communication pratiques à quelques mètres.

En savoir plus sur I²C

Junior
la source
9

L'adressage limite le nombre d'appareils - certains peuvent utiliser l'adressage 10 bits (assez rarement utilisé), ce qui limite le nombre d'adresses à 1024. Il existe une poignée d'adresses «réservées».

I2C (par opposition à "bus à deux fils" ou tout autre nom que vous souhaitez appeler des bus similaires), doit suivre la norme NXP (née Philips), la spécification UM10204 I2C-bus et le manuel d'utilisation . Cela devrait être votre principal document de référence, et non les diverses interprétations et sous-ensembles qui existent ailleurs.

Le nombre maximum d'appareils sera influencé par la capacité d'entraînement de la sortie la plus faible (qui détermine à son tour la résistance de pullup minimale), le câblage et la capacité d'entrée, et le mode / fréquence de fonctionnement. Voir section 7.2 Fonctionnement au-dessus de la capacité de bus maximale autorisée si la capacité maximale doit être dépassée:

entrez la description de l'image ici

Spehro Pefhany
la source
7

Un bus i2c est principalement limité par la capacité du bus (et donc la vitesse) et les adresses des appareils accessibles. Et l'espace physique du conseil d'administration.

Mais il n'y a pas de véritable limite supérieure, lorsque vous prenez en compte les tampons de bus, les extenseurs, les répéteurs, les concentrateurs, les multiplexeurs, les commutateurs (ou tout autre nom pour un périphérique pouvant basculer entre plusieurs bus). Ceux-ci ajoutent une surcharge i2c, car ils peuvent être accessibles via le même bus i2c. Le PCA9548A, par exemple, est un commutateur de bus 8 bits.

Cette puce unique peut théoriquement quadrupler le nombre d'esclaves i2c (127 * 8) autrement disponibles. Et le PCA9548A peut être configuré pour jusqu'à 8 adresses sur un seul bus, donc 8 * 8 * 127 appareils. (les mathématiques peuvent être désactivées). Et c'est juste avec cet appareil et pas plus.

Franchement, il n'y a pas de limite théorique si vous ajustez la capacité.

Passant
la source
5

I2C spécifie 2 longueurs d'adresse, 7 et 10 bits , ce qui donne un maximum théorique de 128 et 1024 adresses distinctes, respectivement.

Cependant, il existe quelques adresses réservées, telles que 0x00 (appel général). Cela limite encore l'espace d'adressage.

Si vous construisez un système où vous avez un contrôle direct sur les périphériques I2C, vous pouvez utiliser les adresses réservées pour votre propre usage, mais le système ne sera plus conforme à la norme I2C.

En plus de l'adressage, il y a les limitations du bus physique. Chaque périphérique du bus doit pouvoir tirer le bus bas dans un certain laps de temps (en fonction de la vitesse du bus). Si le bus a beaucoup de capacité, les périphériques peuvent ne pas être en mesure de tirer le SDA assez rapidement et les tractions peuvent ne pas ramener le SDA assez rapidement.

Maintenant, les problèmes matériels peuvent être surmontés avec un peu de matériel de pilote. Je travaille actuellement sur un projet qui utilise I2C pour communiquer avec des appareils sur plusieurs dizaines de mètres. Le bus principal utilise 24 V, et chaque carte a un pilote qui le ramène à 3,3 V.

En résumé, la limitation physique de I2C peut être surmontée. L'adressage peut être surmonté, mais uniquement si vous avez un contrôle direct sur l'appareil.

CurtisHx
la source
Cela fait presque trois ans que vous travaillez sur de très longs bus i2c. Ont-ils bien fonctionné?
wallyk
1
@wallyk J'ai quitté cette entreprise peu de temps après avoir publié cette réponse. Je dirai qu'avec le bon matériel, vous pouvez faire communiquer I2C sur de plus longues distances. Cependant, il existe d'autres protocoles de communication qui sont conçus pour les longues distances et seraient probablement un meilleur choix que I2C.
CurtisHx
5

La principale limitation du nombre d'esclaves qu'un maître peut piloter proviendra généralement de facteurs électriques tels que la capacité du bus, les fuites, la force du lecteur, etc. avec des traces de carte à capacité nulle, alors la capacité du bus ne serait pas un facteur, mais dans la pratique aucune des hypothèses ne va tenir.

Par contre, l'adressage d'appareils qui se «connaissent» n'est pas vraiment un problème. Il serait trivial de concevoir un périphérique qui permettrait de connecter des milliards de puces en utilisant une adresse de lecture et une adresse d'écriture. Spécifiez simplement que chaque périphérique doit avoir un identifiant unique de quatre octets et doit écouter l'adresse d'écriture tout le temps, mais doit abandonner chaque transaction dont les quatre premiers octets de données transmis ne correspondent pas à leur identifiant. Précisez en outre que les appareils ne peuvent répondre à l'adresse de lecture que si la dernière transaction d'écriture qu'ils ont entendue correspondait à leur adresse.

Si l'on voulait ajouter la possibilité pour le maître de déterminer les ID de tous les esclaves connectés, on pourrait réserver des plages d'ID spéciales à ces fins. Par exemple, on pourrait dire que si le premier octet ID est FF, alors les quatre octets suivants seront un masque et les quatre suivants un ID; un périphérique doit rester connecté (et acquitter le dernier octet d'ID) si la partie de son ID spécifiée par le masque correspond à celle donnée dans la commande. Cela permettrait à un maître d'identifier au moins un périphérique à l'aide de 64 transactions et des périphériques supplémentaires à l'aide de 62 transactions ou moins chacune. Ce n'est peut-être pas le moyen d'identification des appareils le plus rapide, mais pas mal étant donné un espace de recherche de milliards d'ID d'appareils.

supercat
la source
2

Réponse courte: cela dépend

Si vous avez des appareils (communs) avec des adresses 7 bits jusqu'à 104 appareils (128 adresses - adresses réservées (0x00-0x07 et 0xF0-0xFF sont réservées)) (certaines limitations s'appliquent) Si vous avez des appareils (moins courants) qui prennent en charge 10 bits adressant jusqu'à 1024 appareils (vous pouvez mélanger des appareils 7 bits et 10 bits et atteindre jusqu'à 1136 appareils de cette façon)

Maintenant aux limites: la plupart des appareils simples ne peuvent être configurés que sur deux à huit adresses différentes. Vous pouvez surmonter cela en commandant des appareils personnalisés avec différentes adresses de base (mais cela signifie normalement que vous commandez un nombre minimum d'appareils). Il existe également des limitations matérielles (principalement la capacité du bus), mais cela peut être résolu avec des pilotes i2c spéciaux.

Si vous souhaitez connecter de nombreux appareils sur de plus grandes distances, je vous suggère d'utiliser un bus de terrain de toute façon! I2C est destiné à la communication à l'intérieur d'un appareil (comme un téléviseur). J'utilise moi-même I2C avec un RaspberyPi avec des câbles externes jusqu'à 50 cm (même avec des sections en T que vous ne devriez jamais avoir dans un système de bus). Cela fonctionne étonnamment bien.

kruemi
la source
0

Le nombre d'appareils connectés au bus n'est limité que par la capacité totale autorisée du bus de 400 pF. Étant donné que la plupart des circuits intégrés avec une interface I²C utilisent la technologie CMOS basse consommation et haute impédance, de nombreux circuits intégrés peuvent être connectés au bus I²C avant d'atteindre cette capacité maximale.

Ravindra Prajapati
la source
1
Cela ne répond pas à la question du PO dans un manoir complet. Essayez de répondre à tous les aspects de la question, même si vous utilisez des valeurs approximatives. Spécifiez et / ou laissez un lien vers votre source d'informations.
Sparky256
0

Avec des puces de multiplexeur supplémentaires (comme TCA9544A) ou des tampons (comme PCA9515B), vous pouvez surmonter toutes les limites - à la fois la capacité du bus et l'adressage.

Vous pouvez placer 3 appareils avec des adresses identiques derrière un multiplexeur et sélectionner un seul d'entre eux, communiquer avec lui et en sélectionner un autre plus tard. Bien sûr, les logiciels deviennent plus complexes.

Si vous avez un long câblage, vous pouvez placer un tampon au milieu et dépasser la limite de capacité.

filo
la source
Non, vous serez toujours limité: 4 canaux / multiplexeur, par canal, vous avez 4 sous-canaux, puis vous avez des sous-canaux, des sous-sous-canaux et plus encore. Vous avez 3 lignes d'adresse par sélecteur de canaux: soit 4 ^ (2 ^ 3) = 65536 canaux. Par canal, vous avez 2 ^ 8 - 7 - 8 + 2 ^ 10 = 1265 périphériques / canaux (lorsque vous utilisez également des tampons) (les -7 sont pour les adresses réservées et -8 pour les adresses multiplex). 1265 * 65536 = 82903040 Nombre maximal d'appareils.
12431234123412341234123
Modifier: Désolé, une erreur s'est produite: il s'agit de 2 ^ 7 - 7 - 8 + 2 ^ 10 = 1137 périphériques / canal => 1137 * 65536 = 74514432 périphériques. Mais il peut y avoir plus possible lorsque vous utilisez IO-Expander pour activer et désactiver certains tampons (ce qui est loin d'être une utilisation pratique mais une possibilité théorique).
12431234123412341234123