Capítulo 19.0 Módulo Maestro
Puerto Serie Síncrono (MSSP)
19.1 Descripción del Módulo maestro
SSP (MSSP)
El módulo Maestro Puerto Serie Síncrono
(MSSP) es una interfaz serial, útil para
comunicar otros dispositivos periféricos o
microcontroladores. Estos dispositivos pueden
ser EEPROMs, registros de desplazamiento
(shift register), controladores de display,
convertidores A/D, etc.
El módulo MSSP puede funcionar en uno de
dos modos:
Serial Peripheral Interface (SPI)
(Interfaz Periférica Serial)
Inter-Integrated Circuit (𝐼2𝐶) (Inter-
Circuitos Integrados)
Modo completamente maestro
Modo esclavo (con llamada
general de dirección)
La interfaz 𝐼2𝐶 soporta los siguientes modos
en hardware:
Modo maestro
Modo multi-maestro
Modo esclavo
19.2 Registros de Control
El módulo MSSP tiene asociados tres registros
de control. Estos incluyen un registro de
estado (status register) (SSPSTAT) y dos
registros de control (SSPCON1 y SSPCON2).
El uso de estos registros y su configuración
individual de bits difieren significativamente
dependiendo de si el módulo MSSP es
operado en modo SPI o 𝐼2𝐶.
Los detalles adicionales son provistos de bajo
de cada sección individual.
19.3 Modo SPI
El modo SPI admite 8 bits de datos para ser
transmitidos sincrónicamente y recibidos
simultáneamente. Los cuatro modos del SPI
son compatibles. Para lograr la comunicación,
generalmente son usados tres pines:
Serial Data Out (SDO)
Serial Data In (SDI)
Serial Clock (SCK)
Además, un cuarto pin puede ser usado
cuando este en operación un modo esclavo:
Slave Select (!SS)
La figura 19-1 muestra el diagrama de bloques
del módulo MSSP cuando funciona en modo
SPI.
19.3.1 Registros
El módulo MSSP posee cuatro registros para
la operación del modo SPI. Estos son:
Registro de control MSSP1 (SSPCON1)
Registro de estado MSSP (SSPSTAT)
Registro serie recepción/transmisión de
memoria (Buffer) (SSPBUF)
Registro de desplazamiento MSSP
(SSPSR) No accesible directamente
SSPCON1 y SSPSTAT son los registros de
control y de estado en el modo de operación
SPI. El registro SSPCON1 es de lectura y
escritura. Los seis bits bajos de SSPSTAT son
de solo lectura. Los dos bits más altos de
SSPSTAT son lectura/escritura.
SSPRS es el registro de desplazamiento
usado para desplazar los datos dentro o fuera.
SSPBUF es el registro de la memoria
intermedia al que bytes de datos se escriben o
leen.
En las operaciones de recepción, SSPRS y
SSBUF juntos crean un receptor de doble
almacenamiento intermedio (Buffer). Cuando
SSPRS recibe un byte completo, este es
transferido a SSPBUF y la interrupción de
SSPIF es activada.
Durante la transmisión, el SSPBUF no es un
doble buffer. Una escritura de SSPBUF
escribirá tanto en SSPBUF como en SSPSR.
Bit 7 SMP: bit de muestro
SPI en modo maestro:
1 = los datos de entrada muestreados al final del tiempo de salida de datos
0 = los datos de entrada muestreados en medio del tiempo de salida de datos
SPI en modo esclavo:
SMP debe ser borrado cuando el SPI es usado en modo esclavo.
Bit 6 CKE: Bit de selección del reloj en SPI (*1)
1 = la transmisión ocurre en la transición del estado activo al estado inactivo del reloj
0 = la transmisión ocurre en la transición del estado inactivo al estado activo del reloj
Bit 5 D/!A: bit de Datos/!Dirección
Usados en el modo de 𝐼2𝐶 solamente
Bit 4 P: bit detener
Usados en el modo de 𝐼2𝐶 solamente. Este bit es borrado cuando el módulo MSSP es
deshabilitado, SSPEN es borrado.
Bit 3 S: bit iniciar
Usados en el modo de 𝐼2𝐶 solamente
Bit 2 R/!W: bit de leer/!escribir información
Usados en el modo de 𝐼2𝐶 solamente
Bit1 UA: Bit actualizador de dirección
Usados en el modo de 𝐼2𝐶 solamente
Bit 0 BF: bit de estado lleno de buffer (memoria) (en modo de recepción solamente)
1 = Recepción completa, SSPBUF está lleno.
0 = Recepción incompleta, SSPBUF está vacío
Nota 1:
La polaridad del estado del reloj es activada por el bit CKP (SSPCON1<4>).
Bit 7 WCOL: bit de detección de colisión de escritura (en modo de transmisión solamente)
SPI en modo maestro:
1 = El registro SSPBUF se escribe cuando todavía está transmitiendo la palabra anterior
(debe ser borrado en el software)
0 = No hay colisión
Bit 6 SSPOV: Bit indicador de recepción de desbordamiento (*1)
SPI en modo esclavo solamente:
1 = Un nuevo byte es recibido mientras el registro SSPBUF está resguardando un dato previo. En caso de desbordamiento, el dato en SSPSR se pierde. El desbordamiento
solo puede ocurrir en modo esclavo. El usuario debe leer el SSPBUF, incluso si solo se transmiten datos, para evitar la activación del desbordamiento (debe ser borrado por
software).
0 = No hay desbordamiento
Bit 5 SSPEN: bit para habilitar el Puerto Serial Síncrono Maestro
1 = Habilita el puerto serial y configura SCK, SDO, SDI y !SS como pines del puerto serial (*2)
0 = Deshabilita el puerto serial y configura estos pines como I/O
Bit 4 CKP: bit selector de polaridad del reloj
1 = Estado inactivo para el reloj es un nivel alto
0 = Estado inactivo para el reloj es un nivel bajo
Bit 3-0 SSPM3:SSPM0: bit selector del Modo Puerto Serial Síncrono Maestro
0101 = SPI en modo esclavo, clock= pin SCK, pin de control deshabilitado !SS, el pin !SS puede ser usado como pin de I/O (*3)
0100 = SPI en modo esclavo, clock= pin SCK, pin de control habilitado !SS (*3)
0011 = SPI en modo maestro, clock= TMR2 output/2 (*3-4)
0010 = SPI en modo maestro, clock= FOSC/64 (*3)
0001 = SPI en modo maestro, clock= FOSC/16 (*3)
0000 = SPI en modo maestro, clock= FOSC/4 (*3)
Nota
1: En el modo maestro, el bit de desbordamiento no se ha establecido, ya que cada
nueva recepción (y transmisión) es iniciado por escrito al registro SSPBUF.
2: Cuando están activados, estos pines deben estar correctamente configurados como
entradas o salidas.
3: Las combinaciones de bits no mencionados expresamente aquí son reservados o
implementados en modo I2C ™ solamente.
4: PR2 = 0x00 no se admite cuando se ejecuta el módulo SPI en modo TMR2 Output/2.
19.3.2 Operación
Cuando inicializamos el SPI, algunas opciones
necesitan estar especificadas. Esto se realiza
mediante la programación de los apropiados
bits de control SSPCON1 <5:00> y SSPSTAT
<7:06>). Estos bits de control permiten que se
especifique lo siguiente:
Modo maestro (SCK es el reloj de
salida)
Modo esclavo (SCK es el reloj de
entrada)
Polaridad del reloj/Clock Polarity (estado
inactivo de SCK)
Flanco de reloj (dato de salida en flanco
de subida/bajada de SCK)
Velocidad del reloj (Modo maestro
solamente)
Modo de Selector de Esclavo o !SS (en
modo esclavo solamente)
El módulo MSSP consiste en una transmisión
transmisor/receptor de registros (SSPSR) y un
registro de memoria (buffer) (SSPBUF). El
SSPSR desplaza los datos dentro y fuera de
un dispositivo, el MSB (Most Significative Bite
o Bit más Significativo) primero. El SSPBUF
contiene los datos que fueron escritos en el
SSPSR hasta que los datos recibidos están
listos. Una vez que se han recibido los ocho
bits de datos, el byte es movido al registro
SSPBUF. Entonces, el bit de detección de
memoria (buffer) llena, BF (SSPSTAT<0>) y el
bit de bandera de interrupción, SSPIF, son
activados. Esta doble memoria de recepción
de datos (SSPBUF) permite al siguiente byte
comenzar la recepción antes de leer los datos
que acaba de recibir. Cualquier escritura al
registro SSPBUF durante la
transmisión/recepción de datos será ignorada
y el bit de detección de colisión de escritura,
WCOL (SSPCON1<7>), será activado. El
software del usuario debe borrar el bit WCOL
de modo que se puede determinar si la
siguiente escritura(s) en el registro SSPBUF se
complete exitosamente.
El bit de Buffer lleno, BF (SSPSTAT<0>),
indica cuando SSPBUF ha sido cargado con
los datos recibidos (transmisión completa).
Cuando se lee el SSPBUF, el bit BF se borra.
Estos datos pueden ser irrelevantes si el SPI
es un transmisor. Generalmente, la
interrupción MSSP es usada para determinar
cuándo la transmisión/recepción ha sido
completada. Si el método de interrupción no se
va a utilizar, el software puede sondear para
garantizar que no se produce una colisión de
escritura. El ejemplo 19-1 muestra la carga del
SSPBUF (SSPSR) para los datos de
transmisión.
El SSPSR no es directamente legible o
escribible y solo se puede acceder abordando
el registro SSPBUF.
Además, el registro de estado MSSP
(SSPSTAT) indica las diversas condiciones de
estado.
Nota: Cuando el software de aplicación
está a la espera de recibir datos válidos,
el SSPBUF debe leerse antes de que el
siguiente byte de datos a transferir se
escriba en el SSPBUF. El software de
aplicación debe seguir este proceso
incluso cuando el contenido actual de
SSPBUF no sea importante.
Nota: El registro SSPBUF no puede ser usado
con las instrucciones leer-modificar-escribir,
tales como BCF, BTFSC y COMF.
Ejemplo 19-1: Cargando el Registro SSPBUF (SSPSR)
19.3.3 Habilitando I/O SPI
Para habilitar el puerto serial, el bit habilitador
del modo MSSP, SSPEN (SSPCON1<5>),
debe ser activado. Para restablecer o volver a
configurar el modo SPI, desactive el bit
SSPEN, reinicia el registro SSPCON y luego
activa el bit SSPEN. Este configura los pines
de SDI, SDO, SCK y !SS como pines del
puerto serie. Para que los pines se comporten
con la función del puerto serie, algunos de
ellos deben tener bits de datos de dirección (en
el registro TRIS) apropiadamente programado
de la siguiente manera:
SDI debe tener el bit TRISB<0>
activado (configurar como digital en
ADCON1) SDO debe tener el bit
TRISC<7> desactivado
SCK (modo maestro) debe tener el bit
TRISB<1> desactivado
SCK (modo esclavo) debe tener el bit
TRISB<1> activado (configurar como
digital en ADCON1)
SS debe tener el bit TRISA<5> activado
(configurar como digital en ADCON1)
Cualquier función del puerto serie que no se
desee puede ser remplazada mediante los
bits de datos de dirección correspondientes
(TRIS) del registro con el valor contrario. Las
funciones de entrada que no se van a utilizar
no necesitan ser configurados como entradas
o salidas digitales.
19.3.4 Ejemplo de conexión
La Figura 19-2 muestra la conexión típica entre
dos microcontroladores. El controlador
principal (Procesador 1) inicia la transferencia
mediante el envió de la señal de SCK. Los
datos se desplazan fuera de ambos registros
de desplazamiento sobre sus flancos de reloj
programados y asegurados sobre el flanco
opuesto del reloj. Ambos procesadores deben
programados a la misma polaridad del reloj
(CKP), a continuación, los dos controladores
deben enviar y recibir datos al mismo tiempo.
Si los datos son significativos (o datos de
prueba) dependerá del software de aplicación.
Esto conduce a tres escenarios para la
transmisión de datos:
Maestro envía datos – Esclavo envía
datos de prueba
Maestro envía datos – Esclavo envía
datos
Maestro envía datos de prueba –
Esclavo envía datos
19.3.5 Modo Maestro
El maestro puede inicializar la transferencia de
datos porque controla el SCK. El maestro
determina cuando el esclavo (Procesador 2,
Figura 19-2) transmitirá los datos por el control
del software.
En modo maestro, los datos son
transmitidos/recibidos tan pronto como se
escriben en el registro SSPBUF. Si el SPI sólo
va a recibir, la salida SDO puede ser
desactivado (programado como entrada). El
registro SSPSR seguirá desplazándose en la
señal en el pin SDI en la velocidad programada
para el reloj. A medida que cada byte es
recibido, será cargado en el registro SSPBUF
como si un byte como si se hubiera recibido un
byte normal (interrupciones y bits de estado
ajustados correctamente). Esto podría ser útil
en aplicaciones de recepción como un modo
“Monitor de Línea de Actividad”.
La polaridad del reloj se selecciona
adecuadamente programando el bit CKP
(SSPCON<4>). Este, entonces, daría forma de
onda para la comunicación SPI como se
muestra en la Figura 19-3, Figura 19-5 y la
Figura 19-6, donde el bit más significativo
(MSB) se transmite primero. En el modo
maestro, la velocidad del reloj SPI (bit de
velocidad) es programable por el usuario como
una delos siguientes sigue:
FOSC/4 (o Tcy)
FOSC/16 (o 4*Tcy)
FOSC/64 (o 16*Tcy)
TMR2 output/2
Esto permite una velocidad máxima del dato
(en 48MHz) de 12.00 Mbps. Cuando se utiliza
el modo en TMR2 output/2, el bit de velocidad
puede ser configurado utilizando el registro de
periodo PR2 y el prescaler del Timer 2. Sin
embargo, al escribir en SSPBUF no se borra el
valor actual del TMR2 en el hardware.
Dependiendo del valor actual del TMR2
cuando el firmware de usuario escriba a
SSPBUF, este puede resultar en un ancho de
bits MSB impredecible, a menos que se utilice
el procedimiento del ejemplo 19-2.
La figura 19-3 muestra las formas de onda
para el modo maestro. Cuando se activa el bit
CKE, los datos del SDO son válidos antes de
que haya un flanco del reloj sobre SCK. El
cambio en las muestras de entrada se
presenta basándose en el estado del bit SMP.
El momento en el que el SSPBUF se carga se
muestra con los datos recibidos.
Ejemplo 19-2: Cargando el Registro SSPBUF con el modo de reloj TMR2/2
19.3.6 Modo Esclavo
En el modo Esclavo, los datos se transmiten y
se reciben como los pulsos de reloj externos
que aparecen en SCK. Cuando el último bit se
retiene, se activa el bit de bandera de
interrupción SSPIF. En el modo esclavo, el
reloj externo es suministrado por la fuente de
reloj externa en el pin SCK. Este reloj externo
debe cumplir con los tiempos mínimos en alto
y bajo especificados en las especificaciones
eléctricas.
En el modo de espera (SLEEP), el esclavo
puede transmitir/recibir datos. Cuando se
recibe un byte, se puede configurar al
dispositivo para despertar del sueño.
19.3.7 Selección de Sincronización de
Esclavo
El pin SS permite sincronizar un modo esclavo.
El SPI debe estar en modo esclavo con el pin
de control SS habilitado
(SSPCON1<3:0>=04h). Cuando el pin SS esta
en bajo, la transmisión y la recepción son
habilitados y el pin SDO es impulsado. Cuando
el pin SS esta en alto, el pin SDO ya no es
accionado, incluso si esta en medio de la
transmisión de un byte y se convierte en una
salida flotante. Las resistencias externas pull-
up/pull-down pueden ser ideales dependiendo
de la aplicación.
Cuando se restablece el módulo SPI, el
contador de bits es forzado a ‘0’. Esto se
puede hacer por cualquier pin SS forzándolo a
un nivel alto o borrando el pin SSPEN. Para
emular la comunicación entre dos hilos, el pin
SDO puede ser conectado al pin SDI. Cuando
el SPI necesita operar con un receptor, el pin
SDO se puede configurar como entrada. Esto
deshabilita las transmisiones desde SDO. El
SDI siempre se puede dejar como una entrada
(función SDI) ya que no puede crear un
conflicto en el bus.
Nota: 1: Cuando el módulo SPI está en modo
esclavo con el pin de control SS activado
(SSPCON1<03:00>=0,100), el módulo SPI se restablecerá si el pin SS se activa en VDD.
2: Si el SPI se utiliza en modo esclavo con
CKE activado, el pin de control SS debe ser
habilitado.
19.3.8 Funcionamiento en modo
administrador de energía (Power-
Managed)
SPI en modo maestro, el módulo de reloj
puede estar operando a una velocidad
diferente que cuándo esta en modo de máxima
potencia (Full-Power); en el caso del modo
SLEEP, todos los relojes se detienen.
En la mayoría de los modos de reposo, se
proporciona un reloj para los periféricos. Ese
reloj debe venir de la fuente de reloj principal,
el reloj secundario (oscilador de Timer1) o la
fuente INTOSC. Consulte la sección 2.4
“Fuentes de reloj y oscilador de conmutación”
para obtener información adicional.
En la mayoría de los casos, la velocidad a la
que el maestro sincroniza los datos SPI no es
importante, sin embargo, este debe ser
evaluado para cada sistema.
Si la interrupción MSSP está habilitada, puede
activar el controlador desde el modo SLEEP o
uno de los modos de reposo cuando el
maestro termina el envío de datos, si no se
desea una salida del modo SLEEP, la
interrupción MSSP debe estar deshabilitada.
Si selecciona el modo de reposo (SLEEP)
todos los relojes del módulo estarán detenidos
y la transmisión/recepción permanecerá en ese
estado hasta que el dispositivo despierte.
Después de que el dispositivo regresa al modo
RUN, se reanudará el módulo de transmisión y
recepción de datos.
En modo esclavo SPI, el SPI transmite/recibe
registro de desplazamiento funcionando de
forma síncrona con el dispositivo. Esto permite
al dispositivo estar ubicado en cualquier modo
de administración de energía (Power-
Managed) y los datos a ser movidos en el SPI
transmitiendo/recibiendo registros de
desplazamiento. Cuando los ocho bits han sido
recibidos, se activará el bit indicador de
interrupción MSSP y si se activa, despertará el
dispositivo.
19.3.9 Efectos de un Reset
Un reset deshabilita el módulo MSSP y termina
la corriente de transferencia.
19.3.10 Compatibilidad del modo BUS
La Tabla 19-1 muestra la compatibilidad ente
el modo SPI estándar y los estados de los bits
de control CKP y CKE.
Hay también un bit SMP que controla cuando
los datos son muestreados.
Leyenda: - = no implementado, leído como '0'. Las celdas sombreadas no son utilizadas por el MSSP en
modo SPI.
Nota 1: Estos bits no están implementadas en los dispositivos de 28 pines, siempre mantienen estos bits
borrados.
2: RA6 está configurado como un pin del puerto en base a varios modos de oscilador principal. Cuando el pin
del puerto se desactiva, todos los bits asociados leen '0'.
Top Related