Comunicación Serie: SCI Síncrono
COMUNICACIÓN SERIE
PARA SISTEMAS BASADOS EN MICROCONTROLADORES PIC
MÓDULO SCI EN MODO SÍNCRONO
1
Microcontroladores PIC ©ATE-Universidad de Oviedo
Fernando Nuño García
Comunicación Serie: SCI Síncrono
SCI MODO SÍNCRONO Dos líneas:
SYNC = 1 (TXSTA<4>) DT: datos
SPEN=1 (RCSTA<7>) CK: reloj
Modo MAESTRO:
CSRC = 1 (TXSTA<7>)
Semi dúplex
EMITIENDO uno de los RECIBIENDO
TXEN=1 (TXSTA<5>) 2 estados CREN y/o SREN (RCSTA<5:4>)
(no simultáneos) DT
DT
MAESTRO MAESTRO
EMISOR CK RECEPTOR CK
En modo Maestro, la línea de reloj es siempre de salida
la línea de datos es de salida o entrada dependiendo de TXEN y CREN/SREN
prevalece la definición de entrada sobre la de salida
2
Microcontroladores PIC ©ATE-Universidad de Oviedo
Comunicación Serie: SCI Síncrono
SCI MODO SÍNCRONO Dos líneas:
SYNC = 1 (TXSTA<4>) DT: datos
SPEN=1 (RCSTA<7>) CK: reloj
Modo ESCLAVO:
CSRC = 0 (TXSTA<7>)
Semi dúplex
EMITIENDO uno de los RECIBIENDO
TXEN=1 (TXSTA<5>) 2 estados CREN = 1 (RCSTA<4>)
DT (no simultáneos) DT
ESCLAVO ESCLAVO
EMISOR CK RECEPTOR CK
En modo Esclavo, la línea de reloj es siempre de entrada,
la línea de datos es de salida o entrada dependiendo de TXEN y CREN
prevalece la definición de entrada (CREN) sobre la de salida (TXEN)
3
Microcontroladores PIC ©ATE-Universidad de Oviedo
Comunicación Serie: SCI Síncrono
Generador de Relación de Baudios (BRG)
sólo tiene sentido en Modo Maestro
porque en modo Esclavo el reloj es el que entre por CK
• Se determina la frecuencia de reloj para la transmisión y la recepción
en modo Maestro: se genera y envía la señal de reloj
• Valor X cargado en el registro SPBRG (dirección 0x99)
Registro TXSTA
Modo Síncrono (1) No importa BRGH
como sucedía en el modo
Asíncrono
Velocidad de transmisión (baudios) = fosc /(4*(X+1))
4
Microcontroladores PIC ©ATE-Universidad de Oviedo
Comunicación Serie: SCI Síncrono
TRANSMISIÓN SÍNCRONA COMO MAESTRO
TXREG “carga” TSR
(registro de transmisión)
TSR no es accesible directamente
DT
CK
Control
Durante el Estado Inactivo (sin transmisión) no hay flancos en el reloj (CK)
Cuando se inicia una transmisión, empiezan a aparecer flancos en el reloj.
Al finalizar el envío del dato, desaparecen los flancos
¡Ahora no hay bit de START ni de STOP como en el caso Asíncrono!
5
Microcontroladores PIC ©ATE-Universidad de Oviedo
Comunicación Serie: SCI Síncrono
• TSR no se “carga” hasta que no se haya enviado el último bit de una carga previa,
en cuanto este bit es enviado, TSR se carga con un nuevo dato almacenado en TXREG
(si es que ya estaba disponible)
• Una vez que TXREG carga a TSR, TXREG queda vacío y el flag TXIF=1
(posible interrupción si se activaron las máscaras),
TXIF=0 cuando TXREG vuelva a estar ocupado
(OJO: TXIF es de sólo lectura y no se puede poner a 0 por software)
• TRMT es bit de sólo lectura e indica estado de TSR (a 1 si TSR vacío y 0 si lleno)
no existe ninguna interrupción asociada el estado de este bit
Dato1 Dato2 Fin del envío
a TXREG a TXREG de Dato1
TXREG: vacío vacío Dato2 vacío
TSR: vacío Dato1 Dato1 Dato2
TXIF = 1 TXIF = 1 TXIF = 0 TXIF = 1
TRMT = 1 TRMT = 0 TRMT = 0 TRMT = 0
6
Microcontroladores PIC ©ATE-Universidad de Oviedo
Comunicación Serie: SCI Síncrono
INICIO DE UNA TRANSMISIÓN SÍNCRONA
Existen dos posibilidades:
1ª Posibilidad.- Se habilita TXEN=1 y a continuación se carga TXREG
Cronograma de envío de dos bytes seguidos
(los bits “salen” en los flancos de subida de CK y estarán estables en flancos de bajada)
7
Microcontroladores PIC ©ATE-Universidad de Oviedo
Comunicación Serie: SCI Síncrono
2ª Posibilidad.- Se carga TXREG primero y luego se pone TXEN=1
El inicio de la transmisión es más rápido porque ahora el dato ya está
cargado y disponible en el registro de desplazamiento TSR para el envío
Mientras TXEN=0 el generador de relación de baudios permanecerá
parado y reseteado
8
Microcontroladores PIC ©ATE-Universidad de Oviedo
Comunicación Serie: SCI Síncrono
TXEN bit de activación de transmisión:
• Este bit junto con CREN y/o SREN define si la línea de datos es de transmisión
(TXEN=1) o de recepción (CREN=1 recepción continua, SREN=1 recepción simple).
Si están activos simultáneamente, prevalece recepción sobre transmisión
•Si TXEN se pone a cero durante una transmisión, ésta se interrumpe y se resetea
el bloque de transmisión
• Si TXEN está a cero, y no está activa la recepción (CREN=0, SREN=0), las líneas
DT y CK se sitúan en un estado de alta impedancia respecto a los pines del PORTC
(DT y CK no salen al exterior)
• Si se activa una recepción (CREN=1 ó SREN=1) durante una transmisión, se aborta
la transmisión y la línea de datos del registro TSR pasa a un estado de alta
impedancia (desconexión de la línea exterior). El módulo transmisor no se
resetea, sólo queda desconectado de la línea de datos.
Si se volvieran anular CREN ó SREN, volvería a transmitir saliendo de alta impedancia:
la salida de TSR se conectaría de nuevo a la línea de datos exterior DT.
• Sólo se resetea la transmisión si TXEN=0
9
Microcontroladores PIC ©ATE-Universidad de Oviedo
Comunicación Serie: SCI Síncrono
Pasos a dar para realizar una Transmisión Serie Síncrona
como Maestro:
1.- Cargar SPBRG para una velocidad de transmisión dada (baudios)
2.- Activar módulo SCI (SPEN=1), definirlo como Síncrono (SYNC=1)
y Maestro (CSRC=1)
3.- Si se quiere detectar buffer vacío por interrupción TXIE=1,
PEIE=1, GIE=1
4.- Si se desea tamaño de datos de 9 bits configurar TX9=1
5.- Activar transmisión (TXEN=1)
6.- Si se seleccionaron 9 bits, cargar el 9º en TX9D
7.- Cargar el dato en TXREG (se inicia la transmisión)
Los pasos 5 y 7 podrían intercambiarse
10
Microcontroladores PIC ©ATE-Universidad de Oviedo
Comunicación Serie: SCI Síncrono
Registros Asociados
con Transmisión Síncrona
en Modo Maestro
11
Microcontroladores PIC ©ATE-Universidad de Oviedo
Comunicación Serie: SCI Síncrono
RECEPCIÓN SÍNCRONA COMO MAESTRO
CK
Control SREN SREN: para recibir sólo un dato
CREN: para recepción continua de datos
CREN
b8
DT
No hay bits
de START
ni STOP
Cuando se inicia una recepción se generan
flancos en CK y entran los datos por DT
12
Microcontroladores PIC ©ATE-Universidad de Oviedo
Comunicación Serie: SCI Síncrono
RECEPCIÓN DEL MAESTRO
• Por tratarse de Maestro, se genera la señal de reloj cuando se inicie recepción
que puede ser:
a) Para recibir un solo dato (SREN=1):
Se generan 8 ó 9 flancos en el reloj y se para éste al completarse el dato,
SREN se pone a 0 por hardware
b) Para recibir datos de manera continua (CREN=1).
Si CREN=1 y SREN=1 simultáneamente, prevalece la recepción continua
Se generan flancos en el reloj de manera continua hasta que CREN=0
8 periodos de reloj
Recepción de un dato con SREN=1
13
Microcontroladores PIC ©ATE-Universidad de Oviedo
Comunicación Serie: SCI Síncrono
• Tras entrar el último bit en RSR, el dato completo se transfiere a RCREG
(si no hay error: OERR=0), el flag RCIF (solo lectura) se pone a 1 (¿interrupción?)
• RCREG es un doble buffer de tipo FIFO.
Cuando el buffer esté vacío, RCIF se pondrá a 0 por hardware
• Pueden estar dos datos en el buffer y recibiéndose un tercer dato en RSR, pero
si se completa el tercer byte con RCREG doble lleno, se pierde RSR y se da error
de overrun (OERR=1). Se podrían leer los dos datos de RCREG pero se debe eliminar
el error para desbloquear pasos de RSR a RCEG.
¿Cómo? -> CREN=0 -> OERR=0 ¡ OERR = 1 !
Se completa Se completa Se completa Bloqueo
Dato1 Dato2 Dato3 RSR->RCREG
Entrando... Entrando... Entrando... Dato3
RSR:
vacío vacío Dato2 Dato2
RCREG: vacío Dato1 Dato1 Dato1
RCIF = 0 RCIF = 1 RCIF = 1 RCIF = 1
14
Microcontroladores PIC ©ATE-Universidad de Oviedo
Comunicación Serie: SCI Síncrono
Pasos para preparar Recepción Serie Síncrona como Maestro:
1.- Inicializar SPBRG para una velocidad de transmisión dada (baudios)
2.- Activar módulo SCI (SPEN=1), definirlo como Síncrono (SYNC=1)
y Maestro (CSRC=1)
3.- Borrar CREN y SREN al principio
4.- Si se desean interrupciones, activar máscaras RCIE, PEIE, GIE
5.- Si se desea tamaño de datos de 9 bits configurar RX9=1
6.- Si se desea recibir un dato (SREN=1), si recepción continua (CREN=1)
7.- Al completarse un dato RCIF=1 (¿interrupción?)
8.- Si el dato es de 9 bits, recoger RX9D en registro RCSTA
9.- Recoger los 8 bits del dato en RCREG
10.- Si se dio algún error (OERR=1), resetear poniendo CREN=0
15
Microcontroladores PIC ©ATE-Universidad de Oviedo
Comunicación Serie: SCI Síncrono
Registros Asociados
con Recepción Síncrona
en Modo Maestro
16
Microcontroladores PIC ©ATE-Universidad de Oviedo
Comunicación Serie: SCI Síncrono
TRANSMISIÓN SÍNCRONA COMO ESCLAVO
• En Modo Esclavo, la señal de reloj es una entrada externa por el pin CK,
podría transmitir o recibir incluso en modo SLEEP
DT
CK
Se cargará TSR a través de TXREG pero sin capacidad de iniciar transferencia.
Se debe esperar a que aparezcan flancos en la línea CK para el envío
17
Microcontroladores PIC ©ATE-Universidad de Oviedo
Comunicación Serie: SCI Síncrono
• La transferencia TXREG -> TSR es idéntica a la del modo Maestro y los
flags indicadores (TXIF y TRMT) también
• En modo Maestro, la carga de TXREG desencadenaba la aparición de flancos en CK
•Se podrían cargar dos datos en TXREG, el primero pasaría a TSR y el segundo
quedaría a la “espera” en TXREG. Podriamos mandar a modo de bajo consumo (SLEEP)
al micro. En cuanto se haya enviado el primer dato, TXREG le “pasa” el segundo a TSR
y queda vacío TXREG, provocando TXIF=1 (pudiendo despertarse el microcontrolador
para que sitúe el siguiente dato en TXREG)
Cargamos
Dato1 Despierta
Dato2
enviado y cargamos
y SLEEP
Dato3
TXREG: vacío Dato2 vacío Dato3
TSR: Dato1 Dato1 Dato2 Dato2
TXIF = 1 TXIF = 0 TXIF = 1 TXIF = 0
TRMT = 0 TRMT = 0 TRMT = 0 TRMT = 0
18
Microcontroladores PIC ©ATE-Universidad de Oviedo
Comunicación Serie: SCI Síncrono
Pasos a dar para realizar una Transmisión Serie Síncrona
como Esclavo:
1.- Activar módulo SCI (SPEN=1), definirlo como Síncrono (SYNC=1)
y Esclavo (CSRC=0)
2.- Asegurar que CREN=0 y SREN=0
3.- Si se desean interrupciones, activar máscaras TXIE, PEIE, GIE
4.- Si se desean enviar datos de 9 bits configurar TX9=1
5.- Si se seleccionaron 9 bits, cargar el 9º en TX9D
6.- Cargar el dato en TXREG
7.- Permitir transmisión poniendo TXEN=1
19
Microcontroladores PIC ©ATE-Universidad de Oviedo
Comunicación Serie: SCI Síncrono
Registros Asociados
con la Transmisión Síncrona
en Modo Esclavo
20
Microcontroladores PIC ©ATE-Universidad de Oviedo
Comunicación Serie: SCI Síncrono
RECEPCIÓN SÍNCRONA COMO ESCLAVO
En modo Esclavo, la señal de reloj (CK) es entrada externa
CK
CREN
b8
SREN sin sentido en modo esclavo
Se podrían recibir datos estando dormido el microcontrolador
21
Microcontroladores PIC ©ATE-Universidad de Oviedo
Comunicación Serie: SCI Síncrono
• Tras entrar el último bit en RSR, el dato completo se transfiere a RCREG (si está
vacío), el flag RCIF (solo lectura) se pone a 1 y puede generar una interrupción
• RCREG es un doble buffer de tipo FIFO, cuando esté vacío RCIF=0 (hardware)
• Pueden estar dos datos en el buffer y recibiéndose un tercer dato en RSR,
si se completa el tercer byte con RCREG doble lleno, se pierde RSR y error
(OERR=1). Se podrían leer los dos datos de RCREG pero se debe eliminar el error
para desbloquear el paso de RSR a RCEG. ¿Cómo? CREN=0 -> OERR=0
¡ OERR = 1 !
Se completa Se completa Se completa Bloqueo
Dato1 Dato2 Dato3 RSR->RCREG
RSR:
Entrando... Entrando... Entrando... Dato3
RCREG: vacío vacío Dato2 Dato2
vacío Dato1 Dato1 Dato1
RCIF = 0 RCIF = 1 RCIF = 1 RCIF = 1
22
Microcontroladores PIC ©ATE-Universidad de Oviedo
Comunicación Serie: SCI Síncrono
Pasos a dar para preparar Recepción Serie Síncrona como Esclavo:
1.- Activar módulo SCI (SPEN=1), definirlo como Síncrono (SYNC=1)
y Esclavo (CSRC=0)
2.- Si se desean interrupciones activar máscaras RCIE, PEIE, GIE
3.- Si se desea tamaño de datos de 9 bits configurar RX9=1
4.- Activar recepción con CREN=1
5.- Al completarse un dato RCIF=1 (¿interrupción?)
6.- Si el dato es de 9 bits, recoger RX9D en registro RCSTA
7.- Recoger 8 bits del dato en RCREG
8.- Si se dio algún error (OERR=1) -> resetear poniendo CREN=0
23
Microcontroladores PIC ©ATE-Universidad de Oviedo
Comunicación Serie: SCI Síncrono
Registros Asociados
con Recepción Síncrona
en Modo Esclavo
24
Microcontroladores PIC ©ATE-Universidad de Oviedo