ATmega16 – SPI

El SPI es una interfase de transferencia de datos de alta velocidad entre uC u otros dispositivos periféricos. Este tipo de interfase que aunque es más rápida que la interfase I²C utiliza mayor cantidad de pines que esta. Su principal desventaja es que no cuenta con señal de asentimiento, es decir, que el “Maestro” podría estar enviando información sin que estuviese conectado algún “Esclavo” y el “Maestro” no tendría conocimiento de esto.

Características:

  • Transmisión de datos síncronos en tres líneas.
  • Comunicación Full Duplex.
  • Operación de Maestro o Esclavo.
  • Opción para transmitir primero el bit más significativo o el menos significativo.
  • Siete pre-escalamientos.
  • Interrupción por Finalización de Transmisión.
  • Bandera de protección de colisión en escritura.
  • Wake-up para Idle Mode.
  • Doble velocidad en Master mode.

El modo de conexión entre un maestro y un esclavo es:

El registro encargado de la comunicación SPI es el SPCR.

SPIE: Bit encargado de la activación de la interrupción cuando es colocado a uno.
SPE: Habilitación de la interfase SPI.
DORD: Si es colocado a uno primero se envía primero el bit menos significativo de lo contrario se enviará el bit más significativo.
MSTR: Bit encargado de la selección como maestro o como esclavo, cuando es colocado a uno se comporta como maestro, caso contrario como esclavo.
CPOL: Selecciona la polaridad del reloj del SPI.
CPHA: Selecciona la fase del reloj SPI.
SPR1, SPR0: Determina el pre escalamiento del Xtal según la siguiente tabla.

SPSR: Registro de estado del SPI.

SPIF: Bandera de interrupción del SPI.
WCOL: Bandera de colisión en la escritura.
SPI2X: Cuando se coloca a uno se dobla la velocidad de transmisión.

Ejemplo:

Descargas: