Existe-t-il un nombre maximum d'esclaves i2c qu'un maître i2c peut piloter? Quels sont les facteurs physiques limitants?
Existe-t-il un nombre maximum d'esclaves i2c qu'un maître i2c peut piloter? Quels sont les facteurs physiques limitants?
Réponses:
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.
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:
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é.
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.
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.
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.
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.
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é.