Post on 16-Jan-2016
description
GAMA ALTA DE MICROCONTROLADORES
COMPILADOR C CCS SISTEMAS EMBEBIDOS
DIGITALES III: 1
PROTOCOLO SPI
PROTOCOLO SPI
Principio de funcionamiento
SPI se conoce como Serial Peripheral Interface.
El modo de comunicación serial SPI, permite el envió y recepción simultanea de 8 bit, en donde el bits mas significativo (MSB) se transmite primero. Esta comunicación se realiza entre diferentes microcontroladores.
Existen cuatro modos de configuración que dependen de la polaridad y fase del reloj (CKP y CKE).
Cada esclavo es seleccionado por un nivel lógico bajo (‘0’) a través de la línea (CS = Chip Select o SS Slave Select ). Los datos sobre este bus pueden ser transmitidos a una razón de casi cero bits /segundo hasta 1 Mbits/ segundo.
Modos del Reloj
Todos la transferencia de los datos, son sincronizados por la línea de reloj de este bus. Un BIT es transferido por cada ciclo de reloj. La mayoría de las interfaces SPI tienen 2 bits de configuración, llamados:
CPOL (Clock Polarity = Polaridad de Reloj)CPOL determina si el estado detenido de la línea de reloj esta en bajo (CPOL=0) o si se encuentra en un estado alto (CPOL=1).
CPHA (Clock Phase = Reloj de Fase). CPHA determina en que flanco de reloj los datos son desplazados hacia dentro o hacia fuera. Si CPHA=0 los datos sobre la línea MOSI(maestro salida – esclavo entrada) son detectados cada flanco de bajada y los datos sobre la línea MISO(maestro entrada – esclavo salida) son detectados cada flanco de subida.
Cada BIT tiene 2 estados, lo cual permite 4 diferentes combinaciones, las cuales son incompatibles una de la otra. Por lo que si dos dispositivos SPI desean comunicarse entre si, estos deben tener el mismo la misma Polaridad de Reloj (CPOL) y la misma Fase de Reloj (CPHA).
Modos del Reloj
bit 6 CKE: SPI Clock Edge Select (Figure 9-2, Figure 9-3 and Figure 9-4)SPI mode:
For CKP = 01 = Data transmitted on rising edge of SCK0 = Data transmitted on falling edge of SCK
For CKP = 11 = Data transmitted on falling edge of SCK0 = Data transmitted on rising edge of SCK
SSPSTAT
bit 4 CKP: Clock Polarity Select bitIn SPI mode:1 = Idle state for clock is a high level0 = Idle state for clock is a low level
SSPCON
bajada flanco
subida flanco
bajada flanco
subida flanco
detenido
PROTOCOLO SPI - SSPSTAT(BANCO 1)
Bit de muestra
Escribe MOSILee MISO
Se debe misma Polaridad de Reloj (CPOL) y la misma Fase de Reloj (CPHA).
PROTOCOLO SPI - SSPSTAT(BANCO 1)
Bit de muestra
bajada flanco
subida flanco
Modos del Reloj
Modos del Reloj
En el esclavo
PROTOCOLO SPI
Principio de funcionamiento
Para la comunicación se requieren tres pines del microcontrolador:
SDO (Serial Data Out) - RC5
SDI (Serial Data In) - RC4
SCK (Serial Clock) - RC3
Adicionalmente para la operación en modo de Esclavo, se usa la terminal, Slave Select (SS') - RA5.
Cuando un microcontrolador se configura como esclavo se conecta la línea SS a negativo.
PROTOCOLO SPI
Registros Utilizados en el protocolo
Los registros que se utilizan para configurar y establecer la comunicación SPI son:
•SSPCON1 - Control Register
•SSPSTAT - Status Register
•SSPBUF - Buffer Register
•SSPSR - Shift Register (no implementado fisicamente, pero se puede direccionar)•
PROTOCOLO SPI - SSPSTAT(BANCO 1)
Muestra el Status de la transmisión , el bit BF indica cuando la transmisión del dato esta completa si este es igual a 1, en caso contrario aun esta pendiente; El bit 7 permite establecer si el micro es maestro o es esclavo; los bit que no están indicados en la figura no se usan en modo SPI.
Bit de muestra
SSPCON1(BANCO 0)
SSPCON1. Es el registro de control para la comunicación SPI, indica si hay una colisión de información, ademas informa si existe overflow el cual indica que se pierde. Cuenta con un bit de habilitación SSPI, el bit 4 establece la polaridad del reloj, y otras configuraciones en los bits 0 a 3, entre ellas como Master o Slave, y velocidad de transmisión.
PROTOCOLO SPI
•Inicio de comunicación.
Para iniciar la comunicación SPI, deben ser configuradas varias opciones, tales como:
•micro maestro: Master Mode - SCK es salida
•Micro esclavo: Slave Mode - SCK es entrada
•Clock Polarity - Polaridad del Clock
•Sample Phase Data Input - Al inicio o final del tiempo de salida
•Clock Edge - Salida de información al subir o bajar SCK
•Clock Rate - Solo se configura en el microcontrolador Master Mode
•Slave Select Mode - Solo para Slave Mode
PROTOCOLO SPI
Inicio de operación.
La información a transmitir es escrita en el registro SSPBUF, y pasa al SSPSR. El SSPSR transmite el byte mandando primero al bit MSb. Si mientras esta enviando se trata de escribir otro byte a SSPBUF, se pone en uno el bit WCOL indicando una colisión de información (limpiar por software)
En la recepción conforme el SSPSR recibe los 8 bits, los va pasando uno a uno al SSPBUF, cuando termina de enviar el byte, se pone en uno el bit BF (Buffer Full) y la bandera de interrupción SSPIF.
REGISTROS ASOCIADOS A LA OPEACION SPI
CONEXIÓN TIPICA EN SPI
Para configurar los microcontroladores es necesario recordar que estos se encuentran en el registro SSPCON1, bit del 0 al 3. Tal como se observa en la siguiente figura:
CONEXIÓN TIPICA EN SPI - SSPCON1
bit 3-0 SSPM3:SSPM0: Synchronous Serial Port Mode Select bits0000 = SPI Master mode, clock = FOSC/40001 = SPI Master mode, clock = FOSC/160010 = SPI Master mode, clock = FOSC/640011 = SPI Master mode, clock = TMR2 output/2
0100 = SPI Slave mode, clock = SCK pin. SS pin control enabled.0101 = SPI Slave mode, clock = SCK pin. SS pin control disabled. SS can be used as I/O pin.
0110 = I2C Slave mode, 7-bit address0111 = I2C Slave mode, 10-bit address1000 = I2C Master mode, clock = FOSC / (4 * (SSPADD+1))1011 = I2C Firmware Controlled Master mode (slave idle)1110 = I2C Firmware Controlled Master mode, 7-bit address with START and STOP bit interrupts enabled1111 = I2C Firmware Controlled Master mode, 10-bit address with START and STOP bit interrupts enabled
1001, 1010, 1100, 1101 = Reserved
GAMA ALTA DE MICROCONTROLADORES
PIC18F4550
SPI
DIGITALES III: 19
SPI EN CCS
CCS simplifica el proceso de configuración de los diferentes registros cuando se trabaja con ensamblador, para ello cuenta con una opción en el asistente en la cual se puede configurar este protocolo.
Esta opción le permite configurar fácilmente si el micro es maestro o esclavo, además de la selección del reloj, el modo de funcionamiento SPI y las opciones de configuración cuando se trabaja como esclavo
SPI EN CCS - WIZARD
La gráfica siguiente ilustra la pantalla desplegada por CCS:
DIGITALES III: 21
SPI EN CCS
En CCS cuando se elige la opción de esclavo se habilitan las casillas de verificación para determinar si la línea RA5 se establece como selector de esclavo, se deshabilita la configuración de reloj y el modo SPI.
SPI EN CCS
SPI MAESTROEn una aplicación maestro se deben seleccionar el modo y el divisor de frecuencia, para ello cree un nuevo proyecto con el asistente y establezca estos valores.Una vez presiona el botón OK CCs despliega un código de configuracion similar al siguiente:
SPI EN CCS
Una vez se establece el modo de trabajo es necesario utilizar las funciones de lectura y escritura.
spi_read( )spi_write( )spi_data_is_in( )
SPI EN CCS
SPI_READ( )Sintaxis: value = spi_read (data)Permite leer un dato por el pin correspondiente, siempre y cuando este listo, en caso contrario se mantiene en espera.Este comando se acompaña de spi_data_is_in( ).Ejemplo:Valor=spi_read();
SPI_WRITE( )Sintaxis: spi_write (data)
Permite enviar un dato por el pin correspondiente. El valor a enviar es un entero de 8 bits.Ejemplo:spi_write(dato);
SPI EN CCS
SPI_DATA_IS_IN( )Sintaxis: resultado = spi_data_is_in()
Retorna true si existe un valor que ingreso por la linea de entrada.Ejemplo:
/* ( !spi_data_is_in() && input(PIN_B2) );*/ if( spi_data_is_in() ) data = spi_read();
SPI
APLICACIONESENVIAR DATOS DE UN MAESTRO A UN ESCLAVO
SPI