I2C: ¿Dispositivos de 3.3V y 5V sin cambio de nivel en el bus de 3.3V?

11

¿Realmente necesito un cambiador de nivel si uso dispositivos con alimentación de 5 V en un bus I2C que tiene pull-ups a 3,3 V? Según tengo entendido, los dispositivos solo bajarán las líneas (SDA, SCL) (a tierra) y nunca conducirán su voltaje de alimentación al bus. Por lo tanto, no veo una razón para un cambio de nivel siempre que todos los dispositivos detecten el voltaje de los pull-ups (3.3 V) como alto lógico. Ese debería ser el caso con dispositivos que usan 5V como suministro.

En mi caso, tengo un IC cuyas entradas no son tolerantes a 5V como maestro e podría alimentar a mis esclavos con 3.3V pero usar 5V es más fácil en mi circuito y permite un reloj más alto (interno) -ratas para los esclavos.

    
pregunta Jannis

3 respuestas

13

Según versión 4 del \ $ \ mathrm {I ^ 2C} \ $ spec ,

  

"Debido a la variedad de dispositivos de tecnología diferente (CMOS, NMOS, bipolar) que pueden ser       conectados al bus I2C, los niveles del ‘0’ lógico (BAJO) y el ‘1’ (ALTO) no son fijos       y dependen del nivel asociado de VDD. Los niveles de referencia de entrada se establecen como 30% y       70% de VDD; VIL es 0.3VDD y VIH es 0.7VDD. Vea la Figura 38, diagrama de tiempo. Algunos       los niveles de entrada del dispositivo heredado se fijaron en VIL = 1.5 V y VIH = 3.0 V, pero todos los dispositivos nuevos       requiere esta especificación de 30% / 70%. Consulte la Sección 6 para las especificaciones eléctricas. " (página 9)

Más profundo en la especificación, verá que este \ $ 0.7 \ veces V_ {DD} \ $ es el mínimo alto voltaje lógico:

Para su sistema de 5V:

\ $ 0.7 \ veces 5 V = 3.5 V \ $

\ $ 0.3 \ veces 5 V = 1.5 V \ $

Para mí, el pull-up de 3.3 V parece marginal, especialmente si alguno de sus dispositivos de 5V usa el 'nuevo' estándar de \ $ 0.7 \ veces V_ {DD} \ $ para la lógica ALTA.

Su millaje puede variar, pero siempre es mejor estar dentro de las especificaciones siempre que sea posible ...

    
respondido por el Adam Lawrence
11

La respuesta de Cees es incorrecta, en particular el "siempre" y "cualquiera". Las E / S del microcontrolador pueden necesitar 0.6 Vdd como mínimo para un nivel alto, otras tienen un mínimo de 0.7 Vdd, y como Madmanguruman indica que este es el estándar para I2C. 0.7 Vdd es 3.5 V en una fuente de 5 V, por lo que 3.3 V ya es demasiado bajo.

Pero es aún peor. Los reguladores de voltaje a menudo tienen una tolerancia del 5% en su voltaje de salida nominal, por lo que, en el peor de los casos, 5 V pueden ser de 5,25 V, y luego 0,7 Vdd se convierte en 3,675 V. Entrada mínima para un nivel alto. Si el 3.3 V tiene una tolerancia negativa del 5%, entonces 3.3 V se convierte en 3.135 V. Por lo tanto, teniendo en cuenta las tolerancias, la entrada puede ser la mitad de un voltio demasiado bajo, o el 15%.

Entonces,

  

Por lo tanto, no veo una razón para un cambio de nivel siempre que todos los dispositivos detecten el voltaje de los pull-ups (3.3 V) como alto lógico. Ese debería ser el caso con dispositivos que usan 5V como suministro.

es una conclusión prematura. Siempre revise las hojas de datos y haga el cálculo.

    
respondido por el stevenvh
-1

Siento que las otras respuestas no respondieron realmente a la pregunta de Jannis. Preguntó sobre el uso de dispositivos de 5V en un bus de 3.3V (probablemente de 3.3V MCU). Estoy de acuerdo en que tener los pull-ups atados a 3.3V estará bien, por ejemplo. seguro para el dispositivo maestro, ya que los pines SDA / SCL solo bajarán, como mencionó. Tenga en cuenta que los esclavos y el maestro deberán compartir una conexión a tierra común (pines Vss equipotenciales) para proteger la MCU de la sobretensión, pero probablemente este sería el caso de todos modos. Así que el método de Jannis debería funcionar, sin un cambio de nivel.

    
respondido por el DavidW_10MI

Lea otras preguntas en las etiquetas