¿Que son los puertos de E/S de baja velocidad? I2C, SPI y UART

Todos conocemos las interfaces tanto de entrada como de salida que envían una gran cantidad de datos en ambas direcciones, tanto en un sentido como simultáneamente. Pero existen una serie de interfaces utilizadas especialmente en microcontroladores y dispositivos que no necesiten un alto ancho de banda para funcionar. Es por ello que os vamos a hablar de las tres interfaces de baja velocidad más utilizadas: I2C, SPI y UART.

Antes de dar un vistazo a los tres tipos de interfaces de E/S de baja velocidad más utilizadas vamos a dar un repaso rápido acerca de la diferencia entre una interfaz en paralelo y una interfaz en serie:

  • La interfaz en serie transmite un solo bit por ciclo de reloj.
  • La interfaz en paralelo transmite varios bits por ciclo de reloj.

Un ciclo de reloj es un pulso que se envía en intervalos regulares de tiempo, siendo la inversa del tiempo la frecuencia o velocidad de reloj. En las tres interfaces que vamos a dar la velocidad de reloj es diferente en cada sistema, por lo que existen varias velocidades de reloj para las interfaces I2C, SPI y UART.

I2C (Inter-Integrated Circuit)

I2C

El bus I2C es un bus del tipo serial que utiliza dos pines: SDA (Slave Data Adress) y SCL (Slave Clock) y funciona de la siguiente manera:

  1. Se envía una señal al pin SCL para indicar que se quiere iniciar una transferencia.
  2. Los siguientes 7 bits que se envían es la dirección del dispositivo subordinado, hay un limite de 128 dispositivos subordinados.
  3. Los siguientes 8 bits son la transferencia de datos entre el dispositivo maestro y el subordinado.

La mayoría de dispositivos con una interfaz I2C la utilizan para realizar actualizaciones del firmware interno o simplemente para iniciar el protocolo de comunicación entre dos dispositivos. Por ejemplo puede ser que la CPU necesite enviar datos a un periférico en el sistema, pues justo antes de utilizar los puertos de alta velocidad puede enviar un bit a través del I2C para informar al dispositivo subordinado que quiere empezar una transferencia de datos.

SPI (Serial Port Interface)

SPI

SPI es un protocolo de comunicación ampliamente utilizado por una gran cantidad de dispositivos, por ejemplo los lectores de tarjetas RFID, las tarjetas SD y microSD de baja velocidad y los dispositivos Bluetooth utilizan este tipo de interfaz de manera interna.

Al igual que el I2C se trata de un bus de un solo bit entre el dispositivo maestro y el subordinado , pero es diferente en la forma en la que transmite los datos ya que funciona con los siguientes pines:

  • MOSI (Master Out Slave In): Este pin indica que el dispositivo maestro es el que envía el dato hacía el dispositivo subordinado.
  • MISO (Master In Slave Out): Si este pin esta activo entonces son los dispositivos subordinados quienes envían los datos hacía el dispositivo mestro.
  • SCLK: Envía la señal se reloj, la cual es necesaria para enviar los datos tanto desde la interfaz SPI maestro como desde la interfaz SPI subordinada. La velocidad de reloj indica la cantidad de datos que se van a enviar por segundo.
  • CS (Chip Select): Si este pin esta activo entonces se pueden enviar los datos a ese dispositivo subordinado. Un dispositivo SPI maestro va a tener tantos pines CS como dispositivos SPI subordinados. haya en el sistema.

La ventaja del SPI es que pese a que un bus serial, podemos conectar varios SPI subordinados. en serie, pero emular un bus en paralelo, pero no es tan eficiente en lo que a la cantidad de pines se refiere por el hecho que cada interfaz SPI requiere tener 3 pines, de de ellos para marcar la dirección

UART (Universal Asynchronous Receiver-Transmitter)

UART

La interfaz UART es diferente a las anteriores por el hecho de que estamos ante una interfaz que no tiene pines de maestro/subordinado y al contrario de los dos anteriores se trata de un puerto de comunicación en paralelo, por lo que transfiere varios bits por ciclo de reloj.

  • Una colección de pines que se encargan de enviar datos en un extremo
  • Una colección de pines que se encargan de recibir datos en el otro extremo
  • Un pin de reloj que controla cuando se ha de transmitir la señal y cuando no.

El USB a finales de los 90 empezó a reemplazar el uso de las interfaces de comunicación basadas en UART, pero si sois lo suficientemente veteranos recordaréis los puertos LPT1 y COM que había en los ordenadores de antaño, pues bien, esos puertos eran interfaces UART.

En realidad muchas de las interfaces tanto de entrada como de salida utilizadas hoy en día y que transmiten en paralelo son evoluciones de la interfaz UART de una manera u otra. Desde los puertos PCIe hasta la conexión HDMI.

Uso de las interfaces I2C, SPI y UART en el PC

SPI I2C UART Board

Aunque este tipo de interfaces son más comunes en placas de microcontroladores como Arduino y sistemas como Arduino, en realidad todas las CPUs x86 en sus controladores de E/S integrados así como en diferentes chipsets que las integran. Pese a que muchas placas base no tienen activos estos puertos otras si que disponen de este tipo de puertos.