Tienes una dirección de 7 bits. Eso significa que puedes abordar hasta 127 esclavos.
Botánico
Gracias. ¿Existen factores limitantes físicos como el manejo actual, la capacitancia o algo así que impide que el número de esclavos alcance hasta 127?
user768421
1
@Botnic ignora por completo los interruptores, concentradores, buffers, repetidores y cualquier dispositivo i2c que le permita expandir un bus.
Passerby
Respuestas:
22
El factor limitante del software es el tamaño de la dirección utilizada para los esclavos: 7 bits o 10 bits, que admiten 127 y 1023 dispositivos, respectivamente. Físicamente, hay dos restricciones. Primero, el tamaño físico del bus porque el bus solo está diseñado para tiradas cortas (la parte entre IC). Si el bus es demasiado grande, hay efectos de carga capacitiva y retardo de propagación 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 fines especiales.
Tiene un error off-by-one. El direccionamiento de 7 bits admite 128 direcciones (0 a 127). El direccionamiento de 10 bits admite 1024 direcciones (0 a 1023).
CurtisHx
3
Esto no es un error por un error. Es un "error por 6" porque hay 7 direcciones reservadas, no solo una.
kruemi
El esquema de direccionamiento lo dictan los dispositivos en el bus, maestro o esclavo. Algunos dispositivos tienen rangos de direcciones preestablecidos y direcciones reservadas. Otros dispositivos, muchos microcontroladores, por ejemplo, no tienen direcciones reservadas y pueden usar cualquier dirección en un esquema de bits dado.
vini_i
Estos números son algo correctos, sin embargo, se necesita una advertencia. Hay algunas direcciones reservadas, como 1111 XXX y 0000 XXX. Esto significa que 7 bits = 2 ^ 7 - 16 = 112 direcciones utilizables, 10 bits es el 2 ^ 10 1024 completo. 8 bits no es (no debería ser una cosa) normalmente incluye el bit R / W en 7 bits. nxp.com/docs/en/user-guide/UM10204.pdf
busfault
@busfault Reconozco que las direcciones de 8 bits no son efectivamente una cosa. Los he eliminado de mi respuesta. La mayoría de los microcontroladores pueden elegir ignorar algunas o todas las direcciones reservadas y usar el rango completo de direcciones. Noto en mi respuesta que esto es específico del dispositivo.
vini_i
10
El número máximo de nodos está limitado por el espacio de direcciones y también por la capacitancia total del bus de 400 pF, lo que restringe las distancias prácticas de comunicación a unos pocos metros.
El direccionamiento limita el número de dispositivos; algunos pueden usar direccionamiento de 10 bits (se usa con bastante poca frecuencia), lo que limita el número de direcciones a 1024. Hay un puñado de direcciones 'reservadas'.
I2C (en oposición al "bus de dos hilos" o lo que otros quieran llamar buses similares), debe seguir el estándar NXP (née Philips), la especificación UM10204 del bus I2C y el manual del usuario . Ese debería ser su documento de referencia principal, no las diversas interpretaciones y subconjuntos que existen en otros lugares.
El número máximo de dispositivos estará influenciado por la capacidad de conducción de la salida más débil (que a su vez determina la resistencia de pullup mínima), el cableado y la capacitancia de entrada y el modo / frecuencia de funcionamiento. Consulte la sección 7.2 Funcionamiento por encima de la capacidad máxima permitida del bus si se debe exceder la capacidad máxima:
Un bus i2c está limitado principalmente por la capacitancia del bus (y, por lo tanto, la velocidad) y las direcciones accesibles del dispositivo. Y espacio físico en el tablero.
Pero no hay un límite superior real, cuando se tienen en cuenta los búferes de bus, extensores, repetidores, concentradores, multiplexores, conmutadores (o cualquier otro nombre para un dispositivo que puede cambiar entre múltiples buses). Estos agregan algo de sobrecarga de i2c, ya que se puede acceder a través del mismo bus i2c. El PCA9548A, por ejemplo, es un conmutador de bus de 8 bits.
Teóricamente, este chip único puede cuadruplicar el número de esclavos i2c (127 * 8) disponibles de otro modo. Y el PCA9548A se puede configurar 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 límite teórico si ajusta la capacitancia.
I2C especifica 2 longitudes de dirección, 7 y 10 bits , lo que proporciona 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á creando 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.
Además del direccionamiento, existen las limitaciones físicas del bus. Cada dispositivo en el bus debe ser capaz de tirar del bus hacia abajo en un período de tiempo determinado (dependiendo de la velocidad del bus). Si el bus tiene mucha capacitancia, es posible que los dispositivos no puedan tirar del SDA lo suficientemente rápido y que los pull-ups no hagan que el SDA vuelva a funcionar lo suficientemente rápido.
Ahora, los problemas de hardware pueden superarse con un poco de hardware de controlador. Estoy trabajando en un proyecto en este momento que usa I2C para comunicarse con dispositivos de más de 10s de metros. El bus principal usa 24v, y cada placa tiene un controlador que lo reduce a 3.3v.
En pocas palabras, la limitación física de I2C se puede superar. El direccionamiento se puede superar, pero solo si tiene control directo sobre el dispositivo.
Han pasado casi tres años desde que trabajabas en autobuses i2c muy largos. ¿Funcionaron bien?
wallyk
1
@wallyk Dejé esa compañía poco después de publicar esa respuesta. Diré que con el hardware adecuado, puede hacer que I2C se comunique a distancias más largas. Sin embargo, hay otros protocolos de comunicación diseñados para larga distancia y probablemente serían una mejor opción que I2C.
CurtisHx
5
La limitación principal en la cantidad de esclavos que un maestro puede manejar generalmente vendrá de factores eléctricos como la capacitancia del bus, las fugas, la fuerza de la unidad, etc. Si uno pudiera construir esclavos con capacitancia parásita cero y cero fugas, y si uno pudiera conectarlos con trazas de placa de capacitancia cero, entonces la capacitancia del bus no sería un factor, pero en la práctica ninguna suposición se mantendrá.
El direccionamiento de dispositivos que "se conocen" entre sí, por otro lado, no es realmente un problema. Sería trivial diseñar un periférico que permitiera conectar miles de millones de chips utilizando una dirección de lectura y una de escritura. Simplemente especifique que cada dispositivo debe tener una ID única de cuatro bytes y debe escuchar la dirección de escritura todo el tiempo, pero debe abandonar cada transacción cuyos primeros cuatro bytes de datos transmitidos no coincidan con su ID. Además, especifique 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 capacidad de que el maestro determine las ID de todos los esclavos conectados, podría 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 siguientes una ID; un dispositivo debe permanecer conectado (y reconocer 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 que un maestro identifique 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 del dispositivo, pero no está mal dado un espacio de búsqueda de miles de millones de ID de dispositivos.
Si tiene dispositivos (comunes) con direcciones de 7 bits hasta 104 dispositivos (128 direcciones - direcciones reservadas (0x00-0x07 y 0xF0-0xFF están reservadas)) (se aplican ciertas limitaciones) Si tiene dispositivos (menos comunes) que admiten 10 bits direccionamiento de hasta 1024 dispositivos (puede mezclar 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 en dos a 8 direcciones diferentes. Puede superar esto ordenando dispositivos personalizados con diferentes direcciones base (pero esto normalmente significa que solicita una cantidad mínima de dispositivos) También hay limitaciones de hardware (principalmente capacitancia de bus), pero esto se puede resolver con controladores i2c especiales.
¡Si desea conectar muchos dispositivos a distancias más grandes, le sugiero que use un bus de campo de todos modos! I2C está destinado a la comunicación dentro de un dispositivo (como un televisor). Yo mismo uso I2C con un RaspberyPi con cables externos de hasta 50 cm (incluso con secciones en 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 esa capacidad máxima
Esto no responde a la pregunta del OP en una mansión completa. Intente responder a todos los aspectos de la pregunta, incluso si usa valores aproximados. Especifique y / o deje un enlace a su fuente de información.
Sparky256
0
Con chips multiplexores adicionales (como TCA9544A) o memorias intermedias (como PCA9515B) puede superar todos los límites , tanto la capacitancia 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 un cableado largo, puede colocar un búfer en el medio y superar el límite de capacitancia.
No, todavía estará limitado: 4 canales / multiplexor, por canal tiene 4 subcanales, luego tiene subcanales, subcanales y más. Tiene 3 líneas de dirección por conmutador de canales: es 4 ^ (2 ^ 3) = 65536 canales. Por canal tiene 2 ^ 8 - 7 - 8 + 2 ^ 10 = 1265 Dispositivos / Canales (cuando también usa Buffers) (-7 son para direcciones reservadas y -8 para direcciones multiplex). 1265 * 65536 = 82903040 Máximo de dispositivos.
12431234123412341234123
Editar: Lo siento, tuve un error: es 2 ^ 7 - 7 - 8 + 2 ^ 10 = 1137 Dispositivos / Canal => 1137 * 65536 = 74514432 Dispositivos. Pero puede haber más posibilidades cuando usa IO-Expander para encender y apagar algunos Buffers (lo que está lejos del uso práctico pero es una posibilidad teórica).
Respuestas:
El factor limitante del software es el tamaño de la dirección utilizada para los esclavos: 7 bits o 10 bits, que admiten 127 y 1023 dispositivos, respectivamente. Físicamente, hay dos restricciones. Primero, el tamaño físico del bus porque el bus solo está diseñado para tiradas cortas (la parte entre IC). Si el bus es demasiado grande, hay efectos de carga capacitiva y retardo de propagación 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 fines especiales.
fuente
Más información en I²C
fuente
El direccionamiento limita el número de dispositivos; algunos pueden usar direccionamiento de 10 bits (se usa con bastante poca frecuencia), lo que limita el número de direcciones a 1024. Hay un puñado de direcciones 'reservadas'.
I2C (en oposición al "bus de dos hilos" o lo que otros quieran llamar buses similares), debe seguir el estándar NXP (née Philips), la especificación UM10204 del bus I2C y el manual del usuario . Ese debería ser su documento de referencia principal, no las diversas interpretaciones y subconjuntos que existen en otros lugares.
El número máximo de dispositivos estará influenciado por la capacidad de conducción de la salida más débil (que a su vez determina la resistencia de pullup mínima), el cableado y la capacitancia de entrada y el modo / frecuencia de funcionamiento. Consulte la sección 7.2 Funcionamiento por encima de la capacidad máxima permitida del bus si se debe exceder la capacidad máxima:
fuente
Un bus i2c está limitado principalmente por la capacitancia del bus (y, por lo tanto, la velocidad) y las direcciones accesibles del dispositivo. Y espacio físico en el tablero.
Pero no hay un límite superior real, cuando se tienen en cuenta los búferes de bus, extensores, repetidores, concentradores, multiplexores, conmutadores (o cualquier otro nombre para un dispositivo que puede cambiar entre múltiples buses). Estos agregan algo de sobrecarga de i2c, ya que se puede acceder a través del mismo bus i2c. El PCA9548A, por ejemplo, es un conmutador de bus de 8 bits.
Teóricamente, este chip único puede cuadruplicar el número de esclavos i2c (127 * 8) disponibles de otro modo. Y el PCA9548A se puede configurar 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 límite teórico si ajusta la capacitancia.
fuente
I2C especifica 2 longitudes de dirección, 7 y 10 bits , lo que proporciona 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á creando 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.
Además del direccionamiento, existen las limitaciones físicas del bus. Cada dispositivo en el bus debe ser capaz de tirar del bus hacia abajo en un período de tiempo determinado (dependiendo de la velocidad del bus). Si el bus tiene mucha capacitancia, es posible que los dispositivos no puedan tirar del SDA lo suficientemente rápido y que los pull-ups no hagan que el SDA vuelva a funcionar lo suficientemente rápido.
Ahora, los problemas de hardware pueden superarse con un poco de hardware de controlador. Estoy trabajando en un proyecto en este momento que usa I2C para comunicarse con dispositivos de más de 10s de metros. El bus principal usa 24v, y cada placa tiene un controlador que lo reduce a 3.3v.
En pocas palabras, la limitación física de I2C se puede superar. El direccionamiento se puede superar, pero solo si tiene control directo sobre el dispositivo.
fuente
La limitación principal en la cantidad de esclavos que un maestro puede manejar generalmente vendrá de factores eléctricos como la capacitancia del bus, las fugas, la fuerza de la unidad, etc. Si uno pudiera construir esclavos con capacitancia parásita cero y cero fugas, y si uno pudiera conectarlos con trazas de placa de capacitancia cero, entonces la capacitancia del bus no sería un factor, pero en la práctica ninguna suposición se mantendrá.
El direccionamiento de dispositivos que "se conocen" entre sí, por otro lado, no es realmente un problema. Sería trivial diseñar un periférico que permitiera conectar miles de millones de chips utilizando una dirección de lectura y una de escritura. Simplemente especifique que cada dispositivo debe tener una ID única de cuatro bytes y debe escuchar la dirección de escritura todo el tiempo, pero debe abandonar cada transacción cuyos primeros cuatro bytes de datos transmitidos no coincidan con su ID. Además, especifique 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 capacidad de que el maestro determine las ID de todos los esclavos conectados, podría 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 siguientes una ID; un dispositivo debe permanecer conectado (y reconocer 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 que un maestro identifique 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 del dispositivo, pero no está mal dado un espacio de búsqueda de miles de millones de ID de dispositivos.
fuente
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 reservadas)) (se aplican ciertas limitaciones) Si tiene dispositivos (menos comunes) que admiten 10 bits direccionamiento de hasta 1024 dispositivos (puede mezclar 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 en dos a 8 direcciones diferentes. Puede superar esto ordenando dispositivos personalizados con diferentes direcciones base (pero esto normalmente significa que solicita una cantidad mínima de dispositivos) También hay limitaciones de hardware (principalmente capacitancia de bus), pero esto se puede resolver con controladores i2c especiales.
¡Si desea conectar muchos dispositivos a distancias más grandes, le sugiero que use un bus de campo de todos modos! I2C está destinado a la comunicación dentro de un dispositivo (como un televisor). Yo mismo uso I2C con un RaspberyPi con cables externos de hasta 50 cm (incluso con secciones en T que nunca debería tener en un sistema de bus). Funciona sorprendentemente bien.
fuente
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 esa capacidad máxima
fuente
Con chips multiplexores adicionales (como TCA9544A) o memorias intermedias (como PCA9515B) puede superar todos los límites , tanto la capacitancia 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 un cableado largo, puede colocar un búfer en el medio y superar el límite de capacitancia.
fuente