¿Cuántas resistencias pull up por bus I2C?

Estoy diseñando una PCB que necesito para hablar con 13 IC en un bus I2C. Me pregunto cuántas resistencias pull up debo poner en el autobús. Los chips son MAX9611 y aquí está el diseño actual del área de la placa I2C (continúa en el lado derecho):

ingrese la descripción de la imagen aquí

Como puede ver, R17 y R18 son resistencias limitadoras de corriente y R21 y R22 son resistencias pull up (1 para SCL y otra para SDA). La traza SCL pasa por encima de la capa superior y SDA va por la capa inferior).

Acabo de ver algunos ejemplos en la guía de bus TI I2C , y me pregunto si lo que ya he diseñado está mal, porque parece que para cada dispositivo hay una resistencia de extracción local en las líneas SDA y SCL:ingrese la descripción de la imagen aquí

¡Realmente agradecería su sugerencia, antes de fallar miserablemente con el costo de un mal diseño de PCB!

Respuestas (3)

Mira más cerca...

Solo hay un par de resistencias pull-up para cada bus . Su diagrama muestra cuatro buses I2C separados. El multiplexor y el repetidor aíslan los segmentos.

Por lo tanto, dado que solo tiene un bus, solo necesita dos resistencias: una para SCL y otra para SDA.

Una cosa que creo que estoy viendo es que todos sus chips parecen tener la misma huella, lo que me hace pensar que todos son el mismo chip. Si son el mismo chip, todos deben tener una dirección única; de lo contrario, todos intentarán responder a los mismos comandos dados. Esto está algo bien si todos necesitan comportarse al mismo tiempo, no tan bien si necesitan actuar de forma independiente. Sin embargo, si tienen la misma dirección, si uno de ellos se rompe, falta, no recibió un comando, etc., entonces su código no lo sabrá.

En cuanto a los pull-ups, la tubería es absolutamente correcta, solo desea usar un par de pull-ups por autobús. La imagen que publicó muestra cuatro buses completamente separados (micro a multiplexor, multiplexor a expansores IO y luces intermitentes LED, repetidor Hub a más expansores IO y multiplexor a convertidor de datos, eeprom, etc.).

La sección 7.1 del estándar I2C (www.nxp.com/documents/user_manual/UM10204.pdf) muestra cómo dimensionar los pull-ups. En la tabla 10 del apartado 6.1 se especifican los tiempos de subida para las distintas velocidades.

Un truco que he aprendido para dimensionar correctamente los pull-ups es especificar una resistencia de rango medio (~5k) como pull-up, luego medir las formas de onda en la unidad prototipo. La resistencia real requerida será igual a CurrentResistor * (TargetRiseTime / MeasuredRiseTime). Una resistencia más pequeña que el número especificado le dará el tiempo de subida para cumplir con las especificaciones. Si la resistencia es más pequeña que el pull-up mínimo calculado (de la sección 7.1), es posible que deba dividir su bus en múltiples segmentos usando repetidores, multiplexores u otra cosa. Hay dos ventajas de medir y luego calcular, la primera es que siento que es más rápido que tratar de calcular la capacitancia de su bus, especialmente porque muchos factores pueden afectarlo, la segunda es que realmente puede ver la forma de onda y puede generar un bandera roja si la señal se ve mal.

Gracias. Sí, conozco el direccionamiento, he asignado diferentes direcciones (VCC, GND, Vcc/2 y Vcc*2/3) en los pines 8 y 9 de los chips.

Solo se necesitan dominadas en el maestro. (I2C no es un bus rápido, no utiliza resistencias de terminación y no tiene una impedancia igualada).

PERO Debe asegurarse de que los segmentos de bus después de los mux/interruptores permanezcan levantados cuando están apagados. Dependiendo de cómo implemente muxes, es posible que necesite pullups en los segmentos de bus aislados. Estos pueden ser R altos, son solo para mantener las líneas altas, no para levantarlas durante la operación, por ejemplo, los pullups maestros podrían ser 1k5 y los pullups de segmento 100k. Verá esto en nuestro tablero de interruptores de bus: http://www.i2cchip.com/pdfs/BusSwitch_MUX3.pdf

Hay una segunda razón para la extracción de segmentos: un segmento aislado es más largo/de alta capacitancia y necesita más corriente, es decir, R más bajo. Por cierto, este caso, un segmento, es una muy buena razón para usar interruptores de bus, ya que aísla los problemas ( por ejemplo, ruido) al chip/s en ese segmento, mientras que el resto del sistema será confiable.

ver también: http://www.i2cchip.com/i2c_connector.html#Crosstalk