¿Por qué la necesidad de múltiples puertos I²C?


19

El protocolo I²C permite, en teoría y con direccionamiento de 7 bits, conectar hasta 127 dispositivos al maestro. Este es un gran número, entonces, ¿por qué cualquier microcontrolador de bajo costo (por ejemplo, este PIC24 ) tiene más de un puerto I²C? ¿Por qué es necesario?

Respuestas:


23

Disposición del centro del sensor

En este escenario, hay dos autobuses I²C. Llamémoslos autobús local y autobús principal . El propósito del bus local es conectar un grupo de sensores a un microcontrolador (μC). El propósito del μC es sondear los sensores, agregar información de ellos y detectar ciertos eventos. Un μC en tal función se llama sensor hub . El concentrador del sensor no es responsable de las funciones de orden superior; Hay un potente procesador principal para eso. El bus principal conecta el concentrador del sensor al procesador principal. Entonces, el concentrador del sensor μC es un maestro en el bus I²C local y un esclavo en el bus principal I²C.

SPI y I²C

El PIC vinculado en la publicación original no comparte los pines entre SPI e I²C. Sin embargo, hay otros PIC que usan los mismos pines para hardware SPI e I²C, porque ambos se implementan con el mismo periférico MSSP. Si un PIC tiene dos periféricos MSSP separados, uno puede usarse para SPI de hardware, mientras que el otro se usa para hardware I²C.


21

Una razón muy común para necesitar más de un bus es tener dispositivos que funcionen a diferentes velocidades. Originalmente, I²C funcionaba a un máximo de 100 kHz. Más tarde, la velocidad se incrementó a un máximo de 400 kHz, y aún más tarde, a 1 MHz y más.

El problema es que, dado que la dirección de cada dispositivo está incrustada en el protocolo I²C, si tiene dispositivos con diferentes clasificaciones de velocidad en el mismo bus, digamos 100 kHz y 400 kHz, siempre debe ejecutar el bus a la velocidad más baja común a todos los dispositivos en el mismo bus (100 kHz en este caso).

Si ejecutó el bus a la velocidad más alta (400 kHz), obviamente el dispositivo de velocidad más baja no funcionaría correctamente, e incluso podría interpretar la dirección del dispositivo de alta velocidad como propia, causando que el dispositivo de 400 kHz falle como bien. Pero incluso si inicialmente ejecutó el bus a 100 kHz, y luego trató de acelerar el bus a 400 kHz después de abordar un chip de mayor velocidad, sería posible (aunque probablemente improbable) que el chip de menor velocidad interprete uno de los paquetes de datos de alta velocidad incorrectamente como su dirección y, por lo tanto, estropean la comunicación en el bus. En cualquier caso, al final del intercambio con el dispositivo de 400 kHz, el dispositivo de 100 kHz probablemente estaría en un estado desconocido.

Por lo tanto, es más eficiente, si tiene dispositivos que funcionan a diferentes velocidades y tiene múltiples puertos I²C y tiene los pines de repuesto para permitir ese lujo, tener un I²C para dispositivos de 100 kHz, otro para dispositivos de 400 kHz y otro para dispositivos de 1 MHz, según sus necesidades.

Esto no es un problema con SPI porque cada dispositivo está habilitado (direccionado) en el hardware por una línea de selección de chip separada. Por lo tanto, la velocidad del reloj puede coincidir con la velocidad del chip seleccionado (10 MHz, 20 MHz, lo que sea) sin tener ningún efecto en otros chips en el mismo bus, ya que no están habilitados.


19

También podría permitirle admitir dos dispositivos con la misma dirección. Sí, la mayoría de los dispositivos le permiten seleccionar quizás los dos bits inferiores de su dirección con correas. Recientemente tuve que admitir 4 dispositivos que cada uno solo le permitía configurar el LSB de su dirección con una resistencia. Tener dos puertos significa sin costo adicional para mí.

Tal vez quiero que uno sea el maestro de un montón de dispositivos y presente al otro como el puerto esclavo, para que mi maestro no tenga que esperar para tomar el autobús para darme un comando mientras sondeo un sensor de temperatura para el 10,000 hora.

Parece que hay muchas otras buenas respuestas en este hilo, solo agregando mis 2 centavos.


9

Velocidad.

Si necesita acceder a dos dispositivos I2C al mismo tiempo, podría tener un conflicto significativo. O, uno tendría que esperar al otro.


9

En segundo lugar, I²C puede usarse para obtener más ancho de banda (puede recibir o enviar dos bytes al mismo tiempo).

Si tiene algún ADC que funciona continuamente, un I²C está ocupado todo el tiempo.

El cambio de dirección también lleva algún tiempo, por lo que en algunos casos, puede usar dos puertos para dos dispositivos y evitar cambios de dirección para ahorrar tiempo.


0

Otros mencionaron muchas razones para hacer esto, agregaré una:

Tienes un montón de dispositivos I2C de 5V y un montón de dispositivos I2C de 3V3.

Por ejemplo, tengo un micro de 3.3V que tiene dos puertos I2C, uno tolerante a 5V, el otro solo a 3V3.


Por curiosidad, ¿qué micro es?
Nick Alexeev

1
LPC4330, este es un extracto del manual: "Almohadilla de E / S digital tolerante a 5 V de drenaje abierto, compatible con la especificación Fast Mode Plus del bus I2C. Esta almohadilla requiere un pull-up externo para proporcionar funcionalidad de salida. Cuando la alimentación está apagada, esto el pin conectado al bus I2C está flotando y no perturba las líneas I2C ".
peufeu
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.