Comunicación entre Microcontroladores: Bus SPI

Enviado por Javi y clasificado en Informática

Escrito el en español con un tamaño de 55,22 KB

Definición de comunicación serie:

En telecomunicaciones y computación, la comunicación serie es el proceso de envío de datos de un bit por vez, secuencialmente, sobre un canal de comunicación o un bus de computadora. Contrasta con la comunicación paralela, donde todos los bits de cada símbolo (la más pequeña unidad de datos transmitida por vez) son enviados juntos.

La comunicación serie es utilizada en casi todas las comunicaciones y redes de computadoras, porque los costos de los cables y las dificultades de sincronización hacen a la comunicación paralela poco práctica.

Información básica sobre el bus SPI:

El bus de interfaz con periféricos serie (SPI) fue desarrollado originalmente por Motorola en los últimos años de los 80 para sus microcontroladores de la serie 68000. Debido a la simplicidad y al renombre del bus, muchos otros fabricantes han adoptado el estándar a lo largo de los años. Ahora se puede encontrar en una amplia variedad de componentes usados comúnmente en el diseño de sistemas embebidos. El bus SPI se utiliza sobre todo entre los microcontroladores y sus dispositivos periféricos inmediatos. Se encuentra comúnmente en los teléfonos móviles, PDAs y otros dispositivos móviles que comunican datos entre la CPU, el teclado, la pantalla y los chips de memoria.

Bus SPI (Serial Peripheral Interface)

El Bus SPI es un bus de tres líneas, sobre el cual se transmiten paquetes de información de 8 bits. Cada una de estas tres líneas porta la información entre los diferentes dispositivos conectados al bus. Cada dispositivo conectado al bus puede actuar como transmisor y receptor al mismo tiempo, por lo que este tipo de comunicación serie es full dúplex. Dos de estas líneas trasfieren los datos (una en cada dirección) y la tercer línea es la del reloj. Algunos dispositivos solo pueden ser transmisores y otros solo receptores, generalmente un dispositivo que tramite datos también puede recibir.

Un ejemplo podría ser una memoria EEPROM, el cual es un dispositivo que puede transmitir y recibir información.

Los dispositivos conectados al bus son definidos como maestros y esclavos. Un maestro es aquel que inicia la transferencia de información sobre el bus y genera las señales de reloj y control.

Un esclavo es un dispositivo controlado por el maestro. Cada esclavo es controlado sobre el bus a través de una línea selectora llamada Chip Select ó Select Slave, por lo tanto un esclavo es activado solo cuando esta línea es seleccionada. Generalmente una línea de selección es dedicada para cada esclavo.

En un tiempo determinado T1, solo podrá existir un maestro sobre el bus. Cualquier dispositivo esclavo que no esté seleccionado, debe deshabilitarse (ponerlo en alta impedancia) a través de la línea selectora (chip select).

El bus SPI emplea un simple registro de desplazamiento para transmitir la información.

En otras palabras, permite la comunicación entre circuitos integrados de equipos electrónicos.

Este bus también es utilizado en algunas ocasiones para transmisión de datos, ya que su configuración de 4 pines (entrada de datos, salida de datos, reloj y selector de chip) permite implementar un sistema full dúplex de manera sencilla.

Dentro del mercado de los dispositivos de memoria EEPROM (Memorias ROM borrables eléctricamente), el bus SPI ha experimentado un crecimiento acelerado a últimas fechas, debido que ofrecen ventajas en cuanto a velocidad e interconexión con microcontroladores sobre otras tecnologías.

300px-ISPUSBEl hardware consiste en señales de reloj, data in, data out y chip select para cada circuito integrado que tiene que ser controlado. Casi cualquier dispositivo digital puede ser controlado con esta combinación de señales. Los dispositivos se diferencian en un número predecible de formas. Unos leen el dato en el flanco de subida del reloj y otros en el flanco de bajada. Escribir es casi siempre en la dirección opuesta de la dirección de movimiento del reloj. Algunos dispositivos tienen dos relojes. Uno para capturar o mostrar los datos y el otro para el dispositivo interno.    

Pros y contras del bus SPI

Ventajas

  • comunicación Full Dúplex                                                    Adaptador SPI<->USB [1]
  • mayor velocidad de transmisión que con I²C o SMBus
  • protocolo flexible en que se puede tener un control absoluto sobre los bits transmitidos
      • no está limitado a la transferencia de bloques de 8 bits
      • elección del tamaño de la trama de bits, de su significado y propósito
  • su implementación en hardware es extremadamente simple
      • consume menos energía que I²C o que SMBus debido que posee menos circuitos (incluyendo las resistencias pull-up) y estos son más simples
      • no es necesario arbitraje o mecanismo de respuesta ante fallos
      • los dispositivos esclavos usan el reloj que envía el maestro, no necesitan por tanto su propio reloj
      • no es obligatorio implementar un transceptor (emisor y receptor), un dispositivo conectado puede configurarse para que solo envíe, sólo reciba o ambas cosas a la vez
  • usa muchos menos terminales en cada chip/conector que una interfaz paralelo equivalente
  • como mucho una única señal específica para cada esclavo (señal SS), las demás señales pueden ser compartidas

Desventajas

  1. consume más terminales en cada chip que I²C, incluso en la variante de 3 hilos
  2. el direccionamiento se hace mediante líneas específicas (señalización fuera de banda) a diferencia de lo que ocurre en I²C que se selecciona cada chip mediante una dirección de 7 bits que se envía por las mismas líneas del bus
  3. no hay control de flujo por hardware
  4. no hay señal de asentimiento. El maestro podría estar enviando información sin que estuviese conectado ningún esclavo y no se daría cuenta de nada
  5. no permite fácilmente tener varios maestros conectados al bus
  6. sólo funciona en las distancias cortas a diferencia de, por ejemplo, RS-232, RS-485, o Bus CAN

SPI más a fondo:

El sistema SPI como ya indica su nombre, es un sistema de comunicación serie entre periféricos, es un sistema de bajo coste y baja velocidad para comunicaciones de corta distancia, como por ejemplo, entre pequeños procesadores y sus periféricos.

Es un sistema full dúplex, muy fácil de implementar entre dos hosts. Si este sistema se utiliza para más de dos hosts, empieza a perder sus ventajas pero el sistema de bus, basado en el protocolo I2C, funciona mejor. Sin embargo, SPI es capaz de ofrecer ratios mucho mayores, pudiendo llegar a las decenas de megahercios.

Interfície del sistema SPI

El sistema está formado por un componente maestro y uno o más componentes esclavos. El maestro, se define normalmente como un microcomputador provisto de un reloj SPI (SPI clock), y los esclavos, como cualquier circuito integrado, reciben el reloj SPI del maestro. El ASIC (Application-Specific Integrated Circuit) en los productos de la tecnología VTI siempre opera, como componentes esclavos en modo de operación maestroesclavo.

SPI, es una interface serie síncrona de 4 hilos, la comunicación de datos se activa mediante una señal baja, aplicada en la entrada Slave Select (SS) o en el Chip Select (CSB). Los datos, se transmiten mediante 3 conexiones:

  1. conexión para la entrada de datos serie (MOSI).
  2. la de salida de datos (MISO).
  3. la señal de reloj (SCK).

Especificaciones del sistema SPI

ZEn el sistema SPI, existe un Master (sistema encargado de la comunicación) y uno o más esclavos, como podemos ver en estos diagramas.

Fig. 1 Caso de Master con un esclavo [2]

XvX6qxeAAAAAElFTkSuQmCC

Tabla: Señales del sistema SPI (Signal Name Description)

SCLK Clock

MOSI Master out - Slave in

MISO Master in - Slave out

SS Slave select

Fig2. Caso de Master con más de un esclavos [3]

Comunicación entre periféricos

El master, genera una señal de reloj y la envía a los esclavos. La línea de selección, slave line, se utiliza para indicar con que esclavo se esta intentando comunicar el Master.

Como se puede ver, todas las señales excepto la de selección de esclavo son comunes a todos los esclavos, por eso, el master debe indicar cuál de los esclavos esta activo durante la comunicación.

Podemos imaginar, que con más de uno o dos esclavos, el número de salidas del master y el número de pistas en la placa, serian demasiadas para justificar el uso de este protocolo.

SPI usa un par de parámetros llamados clock polarity (CPOL) y clock phase (CPHA), para determinar, cuando los datos son validos dependiendo del señal de reloj. Estos deben establecerse, tanto en el dispositivo maestro como en los esclavos, para que la comunicación funcione correctamente. Mediante estos dos parámetros, determinamos cual es el momento idóneo de muestreo.

Podemos ver un ejemplo de los 4 modos distintos que podemos tener.

Tabla: Modos de transmisión sobre SPI

CPOL/CPHA Leading Edge Trailing Edge SPI Mode

0/0 Sample, rising Setup, falling 0

0/1 Setup, rising Sample, falling 1

1/0 Sample, falling Setup, rising 2

1/1 Setup, falling Sample, rising 3

lQzRkfy+TDul7uvIE93RHv3RIB3SIj3SJF3SJm1tAQEAOw==

43tO5kEBrhggw+mDWGFF2a4YYcfhjhiiSemeLeAAAA7Fig3. SPI Transfer Format with CPHA = 0 [4]

Fig4. SPI Transfer Format with CPHA = 1 [5]

En este ejemplo (figuras 3 y 4), se puede observar que tanto el MSB como el LSB se pueden transmitir en primer lugar, dependiendo de cómo está configurado el hardware SPI.

La comunicación entre el master y los esclavos funciona como procede:

1. El Master pone en nivel bajo la línea slave select del esclavo con el que quiere interactuar. Esto indica al esclavo, que debe prepararse para iniciar la comunicación.

2. El master, genera la señal de clock de acuerdo con el modo SPI. Tanto el master como el esclavo transmiten un bit por ciclo de reloj.

3. Después de un byte, el Master pone la línea slave select en nivel alto.

Referencias Visuales:

[1] http://www.ucontrol.com.ar/wiki/index.php/Imagen:ISPUSB.jpg

[2] http://es.wikipedia.org/wiki/Archivo:SPI_single_slave.svg

[3] http://es.wikipedia.org/wiki/Archivo:SPI_three_slaves.svg

[4] y [5] https://upcommons.upc.edu/pfc/bitstream/2099.1/3524/2/35753-1.pdf

Entradas relacionadas: