En la actualidad, muchos microcontroladores utilizan 3,3 voltios de alimentación gracias a las modernas tecnologías de fabricación de 0,5 micrómetros. La constante miniaturización ya está entregando dispositivos que trabajan a 2 voltios, 1,8 voltios e incluso 1,35 voltios. La existencia de componentes que trabajan a tensiones normalizadas de 5 voltios obliga a adaptar los niveles de voltaje dentro del bus I2C para lograr un funcionamiento correcto entre dispositivos que utilizan distintas fuentes de tensión. Un problema frecuente; he aquí una solución eficiente.

Si en un circuito no existen dispositivos capaces de adaptar los niveles de los impulsos manejados dentro de un bus I2C entre dos dispositivos alimentados con diferentes tensiones, es muy probable que el que trabaje con la menor tensión se dañe irremediablemente. En el caso inverso, los que utilizan los voltajes de trabajo inferiores corren el riesgo de no ser detectados dentro del bus cuando intentan conectarse a los demás. Sin embargo, algunos componentes, a pesar de operar con tensiones de alimentación de 3,3 voltios, pueden conectarse sin inconvenientes y sin componentes adicionales a un bus I2C que utilice una tensión de 5 voltios. Un circuito de ejemplo de convivencia de elementos de distintas características sería el siguiente:

Adaptador de niveles para bus I2C (3,3V/5V)
Dispositivos de 3,3Volts que pueden operar en un bus I2C de 5Volts

El inconveniente con esta clase de montajes es que, en la gran mayoría de los casos, los dispositivos desarrollados para operar con tensiones de trabajo de 3,3 voltios no son compatibles con un bus I2C de 5 voltios. Los pocos que sí lo hacen y se encuentran en el mercado resultan más caros que un dispositivo estándar, ya que las técnicas de fabricación son más complejas. La manera más habitual de resolverlo es utilizar dos transistores MOS-FET de canal N conectados entre los elementos de distintas tensiones de trabajo, tal como se observa en la imagen.

Adaptador de niveles para bus I2C (3,3V/5V)
Circuito sugerido para el adaptador de tensiones I2C

Como puede deducirse de la imagen, el sector izquierdo se alimenta con 3,3 voltios y las resistencias Pull-Up (Rpl) tienen un valor acorde con esa tensión (3K3), mientras que del lado derecho las resistencias Rph (4K7) son las que se utilizan habitualmente en cualquier disposición de bus I2C con alimentación de 5 voltios. Los transistores MOS-FET de canal N utilizados en el circuito pueden ser cualquier dispositivo capaz de manejar tensiones de 50 voltios y corrientes máximas de 100 mA, como el modelo BSN20 fabricado por NXP.

Funcionamiento del adaptador

Lo elemental que salta a la vista en el diagrama es que la falta de cualquiera de las tensiones de alimentación no significa que el bus I2C deje de funcionar. Por ejemplo, en un equipo alimentado por baterías, donde la preservación, optimización y uso correcto de la energía son prioritarios, podemos “suspender” las secciones que no sean necesarias para el correcto funcionamiento del microcontrolador principal. Es decir, podemos suspender sensores, display, relés, sistemas con microcontroladores que funcionen de manera satelital al principal y todo dispositivo I2C que esté “colgado” del bus y no requiera alimentación permanente porque su intervención continua no es necesaria.

Adaptador de niveles para bus I2C (3,3V/5V)
El microcontrolador principal determina que dispositivos activar a través del bus

Otro ejemplo son los instrumentos que habitan una sonda espacial. No necesitan consumir de manera continua la energía de las baterías: deben hacerlo únicamente en el momento de realizar una tarea, como una toma fotográfica, un análisis químico específico, un movimiento mecánico necesario y muchos otros consumos momentáneos y no continuos. Las autoevaluaciones funcionales de estos vehículos espaciales son un claro ejemplo de consumos que no requieren operatividad continua.

Una de las características necesarias para el correcto funcionamiento del bus es que los pines SDA y SCL de los circuitos conectados sean de colector abierto, para garantizar un drenaje correcto de la corriente a través del bus. Como se ve en el esquema, las puertas (o Gate) de los transistores MOS-FET deben estar conectadas directamente a la tensión de alimentación más baja. Además, las fuentes (Source) deben estar orientadas hacia los sistemas de menor tensión, y los drenadores (Drain) hacia los de mayor tensión de alimentación.

Adaptador de niveles para bus I2C (3,3V/5V)
Un transistor MOS-FET puede funcionar como una resistencia variable

Al polarizar la puerta con una tensión positiva en un MOS-FET de canal N, se crea una región de deplexión (canal de conducción electrónica) en la región que separa la fuente y el drenador. Si esa tensión crece lo suficiente, aparecen portadores minoritarios (electrones en un MOS-FET de canal N) en la región de deplexión, que dan lugar a un canal de conducción. El transistor pasa entonces a estado de conducción, de modo que una diferencia de potencial entre fuente y drenador genera una corriente. El transistor, en este caso, se comporta como una resistencia controlada por la tensión de puerta y, como los pines (Vg) están conectados a VCC1, los transistores quedan polarizados para conducir cuando se hacen presentes las condiciones de diferencias de potencial mencionadas (intercambio de datos).

Los tres estados posibles del bus

Los tres estados posibles dentro del circuito son muy sencillos de comprender. El primero se produce cuando no hay actividad en el bus de datos; es decir, cuando ningún dispositivo de ninguna de las ramas de alimentación pone a cero las líneas SDA o SCL. En ese caso, el diodo de protección que trae cada transistor impide la conducción desde las zonas de tensión alta (5 voltios) hasta las zonas de tensión baja (3,3 voltios), brindando la protección necesaria a los dispositivos que trabajan con menor tensión. Además, la tensión de puerta (G) es la misma que la de la fuente (S) en cada rama, así que no hay diferencia de potencial G-S y, en consecuencia, ningún transistor entra en conducción, lo que mantiene aisladas las secciones del bus. Ambas ramas mantienen un estado ALTO gracias a sus respectivas resistencias Pull-Up.

Adaptador de niveles para bus I2C (3,3V/5V)
Un estado bajo se hace presente en la zona de los 3,3Volts

El segundo estado se produce cuando hay un estado bajo en alguna de las líneas del lado de los 3,3 voltios. La fuente (S) del transistor involucrado pasa a estado bajo, mientras que la puerta (G) se mantiene polarizada a 3,3 voltios. Esa diferencia de potencial inicia la conducción del transistor. En esta situación, del lado de alta tensión la línea también es inducida a un estado bajo y es arrastrada por la conducción del MOS-FET. Por lo tanto, ambas secciones del bus pasarán a un estado BAJO y al mismo nivel de tensión.

Adaptador de niveles para bus I2C (3,3V/5V)
Un estado bajo se hace presente en la zona de los 5Volts

El tercer y último estado se produce cuando una línea pasa a un estado BAJO en la zona de 5 voltios. Inicialmente, el diodo interno del transistor entra en conducción desde las líneas polarizadas a 3,3 voltios hacia el potencial cercano a cero existente en la otra sección, que se puso en estado BAJO. De esta forma, la fuente (S) pasa a un estado bajo inducida por la conducción del diodo y, en consecuencia, vuelve a aparecer la diferencia de potencial entre la puerta (G), que siempre estará a 3,3 voltios, y la fuente (S) del transistor, comenzando la conducción a través del mismo y asegurando el estado BAJO a ambos lados del bus. Recordemos que, cuando se polariza correctamente, el MOS-FET se comporta como un resistor variable entre el drenador (D) y la fuente (S).

Adaptador de niveles para bus I2C (3,3V/5V)
Adaptador de niveles para bus I2C (3,3V/5V)

De esta forma quedan definidos los tres estados posibles dentro del bus y su funcionamiento correcto. Como último dato, las tensiones a ambos lados del bus pueden ser muy distintas entre sí y variar entre 2 y 10 voltios sin problemas. El único requisito que debe mantenerse es que las puertas (G) de los transistores deben conectarse a la menor alimentación existente en el circuito.

Fuente: