¿Cómo funciona el protocolo SPI?

1
5851
Estructura general del protocolo SPI.
SPI es un acrónimo para referirse al protocolo de comunicación serial Serial Peripherical Interface. Este protocolo nace casi a principios de 1980 cuando Motorola lo comienza a introducir y desarrollar en el primer microcontrolador derivado de la misma arquitectura del microcontrolador 680000. SPI se ha convertido es uno de los más populares protocolos para trabajar con comunicación serial debido a su velocidad de transmisión, simplicidad, funcionamiento y también gracias a que muchos dispositivos en el mercado como pantallas LCD, sensores, microcontroladores pueden trabajar con el.

El SPI es un protocolo síncrono que trabaja en modo full duplex para recibir y transmitir información, permitiendo que dos dispositivos pueden comunicarse entre sí al mismo tiempo utilizando canales diferentes o líneas diferentes en el mismo cable. Al ser un protocolo síncrono el sistema cuenta con una línea adicional a la de datos encarga de llevar el proceso de sincronismo. Veamos cómo funciona:

Estructura general del protocolo SPI.
Estructura general del protocolo SPI.

Dentro de este protocolo se define un maestro que será aquel dispositivo encargado de transmitir información a sus esclavos. Los esclavos serán aquellos dispositivos que se encarguen de recibir y enviar información al maestro. El maestro también puede recibir información de sus esclavos, cabe destacar. Para que este proceso se haga realidad es necesario la existencia de dos registros de desplazamiento, uno para el maestro y uno para el esclavo respectivamente. Los registros de desplazamiento se encargan de almacenar los bits de manera paralela para realizar una conversión paralela a serial para la transmisión de información.

Existen cuatro líneas lógicas encargadas de realizar todo el proceso:

  • MOSI (Master Out Slave In):. Línea utilizada para llevar los bits que provienen del maestro hacia el esclavo.
  • MISO (Master In Slave Out):. Línea utilizada para llevar los bits que provienen del esclavo hacia el maestro.
  • CLK (Clock):. Línea proviniente del maestro encarga de enviar la señal de reloj para sincronizar los dispositivos.
  • SS (Slave Select):. Línea encargada de seleccionar y a su vez, habilitar un esclavo.

Se presenta una imagen donde se tienen todas estas líneas con sus respectivos registros de desplazamiento y su dirección de flujo:

Distintos modos en SPI.
Distintos modos en SPI.

Existen cuatro modos en el cual se puede enviar información dependiendo de dos párametros basados en la señal de reloj. El primer de ellos es la polaridad y el segundo es la fase. Al tener dos parámetros donde cada uno puede tomar dos estados se tendrá entonces cuatro modos distintos de poder llevar a cabo el proceso de transmisión y envío de información.

  • Modo 0: CPOL = 0 y CPHA = 0. Modo en el cual el estado del reloj permanece en estado lógico bajo y la información se envía en cada transición de bajo a alto, es decir alto activo.
  • Modo 1: CPOL = 0 y CPHA = 1. Modo en el cual el estado del reloj permanece en estado lógico bajo y la información se envía en cada transición de alto a bajo, es decir bajo activo.
  • Modo 2: CPOL = 1 y CPHA = 0. Modo en el cual el estado del reloj permanece en estado lógico alto y la información se envía en cada transición de bajo a alto, es decir alto activo.
  • Modo 3: CPOL = 1 y CPHA = 1. Modo en el cual el estado del reloj permanece en estado lógico alto y la información se envía en cada transición de alto a bajo, es decir bajo activo.

Esta puede puede brindarle una idea más intuitiva de los modos explicados anteriormente.

La configuración de modos es independiente para cada esclavo con esto quiere decir que cada esclavo puede tener una configuración de CPOL y CPHA distinta a la de otros esclavos, inclusive una frecuencia de trabajo distinta y entonces para esto, el maestro deberá adaptarse a la configuración de cada esclavo. Por esta razón es recomendable que el sistema trate de trabajar con los mismo parámetros de ser posible porque sino, será un dolor de cabeza.

En este protocolo se define únicamente un maestro y varios esclavos. La manera en la cual estos dispositivos se conectan pueden ser de dos tipos: encadenado o paralelo. El de tipo encadenado las entrada del mosi de cada esclavo va conectada con el mosi del master para el primer caso o de su esclavo anterior para el resto. Además, se utiliza un único de selección de esclavo proveniente del maestro en forma paralela hacia cada esclavo.

Por otro lado, en el tipo paralelo se utiliza un único mosi proviente del maestro en forma paralela hacia cada esclavo. Además, se adiciona una línea de selección de esclavo proveniente del maestro por cada esclavo que exista en el sistema.

Para tener un mejor entendimiento de estas conexiones, se presenta una imagen ilustrativa:

Tipo encadenado.
Tipo encadenado.
Tipo paralelo.
Tipo paralelo.

La transmisión de información puede darse de muchas maneras dependiendo del fabricante, en muchos casos la línea SS habilita un esclavo cuando ésta se pone en estado lógico cero pero eso puede cambiar. La transimisión de bits se puede dar comenzando con el LSB o con MSB dependiendo también del fabricante, es muchos casos se comienza por el bit más significativo. Un bit es transmitido cada ciclo de reloj.

¿Ventajas? Existe una serie de ventajas que ofrece este protocolo, entre ellas está la velocidad de transmisión ya que es configurable a través de software y dependerá también de los dipositivos utilizados en el sistema. Con respecto a otros protocolos seriales que trabajan a modo half duplex, el SPI tiene velocidades de transmisión mucho mayores debido a que éste trabaja en modo full duplex. Otros parámetros configurables a través de software son la frecuencia del reloj, la configuración de fase (CPHA) y polaridad (CPOL). Si solo existe un esclavo, puede colocarse la línea SS fija si el esclavo lo permite. No se limitan a trabajar con palabras de ocho bits. Es ampliamente utilizado cuando se necesita comunicar con equipos a distancias cortas.

Espero que les haya gustado este artículo y si te ha gustado, por favor, ayúdanos a esparcir el conocimiento compartiendo esta entrada a través de las redes sociales.

Fuentes en las cuales me he inspirado:

Imágenes:

  • Tania Alexa

    Hola tengo una pregunta, ¿puedo realizar comunicacion desde el max6675 hacia un microcontrolador atmega 16? como habilito la comunicacion, realizo la programacion en basic.
    De antemano agradezco su respuesta