¿Hay un número máximo de esclavos i2c que un maestro i2c pueda manejar? ¿Cuáles son los factores limitantes físicos?
¿Hay un número máximo de esclavos i2c que un maestro i2c pueda manejar? ¿Cuáles son los factores limitantes físicos?
El factor limitante del software es el tamaño de la dirección utilizada para los esclavos: 7 bits o 10 bits, que admiten dispositivos 127 y 1023, respectivamente. Físicamente, hay dos restricciones. Primero, el tamaño físico del bus porque el bus solo está diseñado para recorridos cortos (la parte entre circuitos integrados). Si el bus es demasiado grande, hay efectos de retardo de carga y propagación capacitivos que deben tratarse. En segundo lugar, algunos dispositivos no pueden admitir la gama completa de direcciones I2C. Como ejemplos, el giroscopio MPU6050 solo admite dos direcciones, y algunos dispositivos reservan direcciones específicas para propósitos especiales.
El direccionamiento limita el número de dispositivos; algunos pueden usar el direccionamiento de 10 bits (muy poco utilizado), lo que limita el número de direcciones a 1024. Hay un puñado de direcciones "reservadas".
I2C (a diferencia de "bus de dos hilos" o cualquier otro que quiera llamar buses similares), debe seguir el estándar NXP (née Philips), UM10204 Especificación del bus I2C y manual del usuario . Ese debe ser su documento de referencia principal, no las diversas interpretaciones y subconjuntos que existen en otros lugares.
El número máximo de dispositivos se verá afectado por la capacidad del variador de la salida más débil (que a su vez determina la resistencia de extracción mínima), el cableado y la capacitancia de entrada, y el modo de operación / frecuencia. Consulte la sección 7.2 Funcionamiento por encima de la capacidad de bus máxima permitida si se debe exceder la capacidad máxima:
Un bus i2c está limitado principalmente por la capacidad del bus (y, por lo tanto, por la velocidad) y las direcciones de dispositivo accesibles. Y espacio físico en el tablero.
Pero no hay un límite superior real, cuando se toman en cuenta los búferes de bus, extensores, repetidores, concentradores, multiplexores, conmutadores (o cualquier otro nombre para un dispositivo que puede cambiar entre varios buses). Estos agregan algunos gastos generales de i2c, ya que pueden ser accesibles a través del mismo bus i2c. El PCA9548A, por ejemplo, es un conmutador de bus de 8 bits.
Este único chip puede, en teoría, cuadruplicar el número de esclavos i2c (127 * 8) de lo contrario disponible. Y el PCA9548A puede configurarse para hasta 8 direcciones en un solo bus, por lo que 8 * 8 * 127 dispositivos. (las matemáticas pueden estar apagadas). Y eso es solo con este dispositivo y no más.
Francamente, no hay un límite teórico si ajustas la capacitancia.
I2C especifica 2 longitudes de dirección, 7 y 10 bits , lo que da un máximo teórico de 128 y 1024 direcciones distintas , respectivamente.
Sin embargo, hay algunas direcciones reservadas, como 0x00 (llamada general). Esto limita aún más el espacio de direcciones.
Si está construyendo un sistema en el que tiene control directo sobre los dispositivos I2C, puede usar las direcciones reservadas para su propio uso, pero el sistema ya no cumplirá con el estándar I2C. / p>
Además del direccionamiento, existen las limitaciones físicas del bus. Cada dispositivo en el bus debe poder bajar el bus en un lapso de tiempo determinado (dependiendo de la velocidad del bus). Si el bus tiene mucha capacitancia, es posible que los dispositivos no puedan bajar el SDA lo suficientemente rápido, y que los pull-ups no hagan que el SDA vuelva a estar lo suficientemente rápido.
Ahora, los problemas de hardware se pueden superar con un poco de hardware de controladores. Estoy trabajando en un proyecto en este momento que utiliza I2C para comunicarse con dispositivos a través de varios 10s de metros. El bus principal usa 24v, y cada placa tiene un controlador que baja a 3.3v.
En una cáscara de nuez, se puede superar la limitación física de I2C. El direccionamiento puede ser superado, pero solo si tiene control directo sobre el dispositivo.
La limitación principal en el número de esclavos que un maestro puede manejar generalmente provendrá de factores eléctricos como la capacitancia del bus, las fugas, la potencia del variador, etc. Si uno pudiera construir esclavos con una capacitancia parásita cero y una fuga cero, podría conectarlos con trazas de tablero de capacitancia cero, entonces la capacitancia del bus no sería un factor, pero en la práctica ninguna de las suposiciones se mantendrá.
La dirección de los dispositivos que se "conocen" unos de otros, por otro lado, no es realmente un problema. Sería trivial diseñar un periférico que permitiera la conexión de miles de millones de chips utilizando una dirección de lectura y de escritura. Simplemente especifique que cada dispositivo debe tener un ID de cuatro bytes único, y se requiere que escuche la dirección de escritura todo el tiempo, pero debe abandonar todas las transacciones cuyos primeros cuatro bytes de datos transmitidos no coincidan con su ID. Especifique además que los dispositivos solo pueden responder a la dirección de lectura si la última transacción de escritura que escucharon coincide con su dirección.
Si uno quisiera agregar la posibilidad de que el maestro determine los ID de todos los esclavos conectados, se podrían reservar algunos rangos de ID especiales para tales propósitos. Por ejemplo, se podría decir que si el primer byte de ID es FF, los siguientes cuatro bytes serán una máscara y los cuatro posteriores una ID; un dispositivo debe permanecer conectado (y aceptar el último byte de ID) si la parte de su ID especificada por la máscara coincide con la dada en el comando. Esto permitiría a un maestro identificar al menos un dispositivo con 64 transacciones y dispositivos adicionales con 62 o menos transacciones cada uno. Quizás no sea el medio más rápido posible de identificación de dispositivos, pero no está mal dado un espacio de búsqueda de miles de millones de ID de dispositivos.
Respuesta corta: depende
Si tiene dispositivos (comunes) con direcciones de 7 bits hasta 104 dispositivos (128 direcciones - direcciones reservadas (0x00-0x07 y 0xF0-0xFF están reservados)) (se aplican ciertas limitaciones) Si tiene dispositivos (menos comunes) que admiten direccionamiento de 10 bits hasta 1024 dispositivos (puede combinar dispositivos de 7 bits y 10 bits y alcanzar hasta 1136 dispositivos de esa manera)
Ahora a las limitaciones: La mayoría de los dispositivos simples solo se pueden configurar de dos a ocho direcciones diferentes. Puede superar esto ordenando dispositivos con diferentes direcciones base (pero esto normalmente significa que usted solicita una cantidad mínima de dispositivos) También hay limitaciones de hardware (principalmente capacitancia del bus), pero esto se puede resolver con controladores i2c especiales.
¡Si quiere conectar muchos dispositivos en distancias más grandes, sugeriría usar un bus de campo de todos modos! I2C está diseñado para la comunicación dentro de un dispositivo (como un televisor). Estoy usando I2C con un RaspberyPi con cables externos de hasta 50 cm (incluso con las secciones T que nunca debería tener en un sistema de bus). Funciona sorprendentemente bien.
El número de dispositivos conectados al bus solo está limitado por la capacitancia total permitida del bus de 400 pF. Debido a que la mayoría de los circuitos integrados con una interfaz I²C utilizan tecnología CMOS de baja potencia y alta impedancia, muchos circuitos integrados pueden conectarse al bus I²C antes de alcanzar la capacidad máxima
Con los chips multiplexores agregados (como TCA9544A) o los búferes (como PCA9515B) puede superar todos los límites , tanto la capacidad del bus como el direccionamiento.
Puede colocar 3 dispositivos con direcciones idénticas detrás de un multiplexor y seleccionar solo uno de ellos, comunicarse con él y luego seleccionar otro. Por supuesto, el software se vuelve más complejo.
Si tiene cableado largo, puede colocar un búfer en el medio y superar el límite de capacidad.
Lea otras preguntas en las etiquetas i2c
Como dije antes, i2c en hardware real es esencialmente 64 pines (16 bits). Pero hay una conexión / upass / desconexión de salida analógica de 1 bit aquí y allá. Imagine una salida / entrada lateral "w" independiente a diferentes partes del dispositivo. Y un dispositivo lateral separado "b". Usando USB otros dispositivos potencialmente 3-4, puede combinar partes y de esta manera obtendrá un mejor soporte para i2c en una gama de dispositivos y dispositivos. Si agrega antenas potentes, 64 canales i2c por tarjeta... Lees verder