Puertos y Buses 1: I2C y UART

Puertos y Buses 1: I2C y UART
puertos y buses 1

Puertos y Buses. Generalidades

Están ahí, los usamos a diario sin darnos cuenta, hablamos de ellos. Los puertos y los buses son los encargados de que haya comunicación entre dispositivos microncontrolados. Son conceptos muy amplios, y abarcan desde puertos tangibles como los USB a intangibles como puertos internos de un SOC (System on a chip), al igual que tenemos buses como el cable del teclado o buses de fibra óptica. Mucha gente usa el termino "puerto" y "bus" de manera indistinta como si se tratase de lo mismo, de hecho yo he hablado de puerto USB cuando USB significa "Universal serial Bus". Y es que son dos conceptos inherentes el uno del otro.

Tal y como yo lo entiendo el puerto es el punto de entrada y/o salida de los buses. Haciendo una analogía tenemos dos dispositivos que serán mi casa y la casa de mi vecino, los puertos serían las puertas de ambas casa y el bus sería el pasillo.

En qué se diferencia un puerto de otro

Tenemos muchos tipos de puertos y de muchas características distintas. Los puertos paralelos, como su propio nombre indica, tienden a enviar la información en mayor medida de forma paralela, lo cuál hace que usen buses con mayor número de cables o pistas. Los puertos serie son los que más se usan, USB, UART, I2C, CAN bus, RS232 son puertos serie. Por tanto van a tender a usar pocos cables y la información se enviará secuencialmente.

Por otro lado podemos distinguir entre buses síncronos y asíncronos. La diferencia entre ambos reside en que a la hora de comunicar dispositivos que trabajan a frecuencias distintas necesiten o no de una señal de sincronización.

La mayoría de los puertos que vamos a presentar a continuación son puertos serie y asíncronos, en la mayoría se usan buses de 3 ó 4 pistas cómo mínimo más alguna opcional. Entonces, ¿En qué se diferencian? A nivel eléctrico encontramos diferencias en cuanto a voltajes y a nivel computacional encontramos diferentes protocolos de comunicación. Veamos más concretamente las características de cada uno.

Algunos tipos de Buses

Cómo electrónico, los puertos de los que voy a hablar son los principales puertos de comunicación entre microcontroladores, existen otros para redes de Internet, etc...que no voy a tratar. No pretendo hacer un copia y pega de la información que podéis encontrar en Wikipedia, quiero esclarecer las dudas sobre estos puertos que me han ido surgiendo según los he tenido que ir utilizando para que antes de que os veáis en mi situación tengáis varios conceptos claros.

I2C

Es un bus que está formado por 2 cables conocidos como SDA y SCL más 1 para conectar las masas (GND) de los dispositivos, seguramente os suene verlos en Arduino. Con este tipo de bus podéis conectar bastantes dispositivos entre sí. Contructivamente lo único que hace falta es que conectéis una resistencia de 2.2KOhm de algún punto de SDA a Vcc y otra resistencia de 2,2KOhm desde un punto de SCL hasta Vcc, es decir, que las líneas SDA y SCL deben tener una resistencia de pull-up.

También es importante decir que en cada momento uno de los dispositivos toma el papel de maestro y el resto de esclavos. El maestro genera una señal de reloj por SCL que se usará para sincronizar todos los dispositivos. Y por SDA viaja la información propiamente dicha. Cada esclavo debe tener configurada una dirección de esclavo. Esta dirección es una variable de 8 bits donde los 7 primeros son un número en binario y el último bit indica si es una lectura o escritura lo que quiere hacer el maestro.

AN50987

Existen dos escenarios distintos, o bien el maestro es un escritor en los esclavos, o bien el maestro es el que pide a los esclavos que le envíen información. En cualquier caso la comunicación se realiza con la siguiente secuencia:

  • Se configuran todas las direcciones de esclavos
  • El maestro envía una dirección de esclavo más el bit de lectura/escritura e indica además cuantos bytes será de larga de comunicación.
  • El esclavo se prepara enviar la información solicitada o para recibir la siguiente información.
  • O bien el esclavo envía información o bien el maestro envía información.
  • Todos los esclavos vuelven a estar disponibles de nuevo.

UART y USART

Las siglas de estos buses significan "Universal Asynchronous Receiver/Transmitter" y "Universal synchronous Asynchronous Receiver/Transmitter" respectivamente. En general las dos diferencias que hay entre ellos es que el USART puede trabajar en modo síncrono y asíncrono y puede ir más rápido (más baudios) mientras que el UART sólo funciona de manera síncrona.

BAUDIO: Es el número de símbolos por segundo, importante no confundir con tasa de bits por segundo, ya que cada símbolo puede suponer el envío de más de 1 bit.

Estos buses están compuestos por 3 pistas fundamentales: TX, RX y GND.  De tal manera que el pin TX de un dispositivo esté conectado RX del otro dispositivo y viceversa y que las masas de ambos estén conectadas. Si sólo conectamos un TX a un RX, la comunicación puede existir de manera unidireccional, es decir, que sólo 1 envía y sólo 1 recibe. No es el mejor bus para comunicar más de 2 elementos, de hecho no lo recomiendo para esto. Es mejor abrir 1 puerto UART distinto para cada dispositivo al que quieras conectarte. Lo que hace muy útil a este puerto es que trabaja con niveles lógicos TTL (transistor-transistor logic) lo cual hace que dos micros se puedan comunicar sin necesidad de convertir los voltajes con transreceptores/drivers.

bus uart

Es muy utilizado para programar los microprocesadores de sistemas embebidos con un ordenador debido a que no hace falta que los micros traigan un bootloader precargado. Si queremos programar nuestro micro a través de un puerto UART tan sólo necesitamos un cable FTDI (con TX, RX, GND y Vcc conectados a nuestro micro) y un programa adecuado.

Esquema cable FTDI:

cable ftdi

Como me estoy alargando continuaré en otro artículo hablando sobre CAN bus y RS-232.

¡Espero que os haya gustado! Nos vemos en otros artículos y tutoriales.