Comunicacion Serial Sincrona

24
1 Comunicación Serie: SCI Síncrono Microcontroladores PIC ©ATE-Universidad de Oviedo COMUNICACIÓN SERIE PARA SISTEMAS BASADOS EN MICROCONTROLADORES PIC MÓDULO SCI EN MODO SÍNCRONO Fernando Nuño García

Transcript of Comunicacion Serial Sincrona

Page 1: Comunicacion Serial Sincrona

1

Comunicación Serie: SCI Síncrono

Microcontroladores PIC ©ATE-Universidad de Oviedo

COMUNICACIÓN SERIE PARA SISTEMAS BASADOS EN MICROCONTROLADORES PIC

MÓDULO SCI EN MODO SÍNCRONO

Fernando Nuño García

Page 2: Comunicacion Serial Sincrona

2

Comunicación Serie: SCI Síncrono

Microcontroladores PIC ©ATE-Universidad de Oviedo

SCI MODO SÍNCRONOSYNC = 1 (TXSTA<4>)SPEN=1 (RCSTA<7>)

Modo MAESTRO:CSRC = 1 (TXSTA<7>)

MAESTROEMISOR

DT

CKMAESTRORECEPTOR

DT

CK

Dos líneas: DT: datosCK: reloj

RECIBIENDOCREN y/o SREN (RCSTA<5:4>)

EMITIENDOTXEN=1 (TXSTA<5>)

En modo Maestro, la línea de reloj es siempre de salidala 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

Semi dúplexuno de los2 estados

(no simultáneos)

Page 3: Comunicacion Serial Sincrona

3

Comunicación Serie: SCI Síncrono

Microcontroladores PIC ©ATE-Universidad de Oviedo

SCI MODO SÍNCRONOSYNC = 1 (TXSTA<4>)SPEN=1 (RCSTA<7>)

Modo ESCLAVO:CSRC = 0 (TXSTA<7>)

Dos líneas: DT: datosCK: reloj

RECIBIENDOCREN = 1 (RCSTA<4>)

EMITIENDOTXEN=1 (TXSTA<5>)

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 CRENprevalece la definición de entrada (CREN) sobre la de salida (TXEN)

Semi dúplexuno de los2 estados

(no simultáneos)ESCLAVOEMISOR

DT

CKESCLAVORECEPTOR

DT

CK

Page 4: Comunicacion Serial Sincrona

4

Comunicación Serie: SCI Síncrono

Microcontroladores PIC ©ATE-Universidad de Oviedo

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)

Velocidad de transmisión (baudios) = fosc /(4*(X+1))

Modo Síncrono (1) No importa BRGHcomo sucedía en el modo

Asíncrono

Registro TXSTA

Page 5: Comunicacion Serial Sincrona

5

Comunicación Serie: SCI Síncrono

Microcontroladores PIC ©ATE-Universidad de Oviedo

TRANSMISIÓN SÍNCRONA COMO MAESTRO

DT

Control

CK

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!

TXREG “carga” TSR(registro de transmisión)

TSR no es accesible directamente

Page 6: Comunicacion Serial Sincrona

6

Comunicación Serie: SCI Síncrono

Microcontroladores PIC ©ATE-Universidad de Oviedo

• 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

Dato1a TXREG

Dato2a TXREG

Fin del envíode Dato1

vacío

vacío

TXREG:

TSR:

TXIF = 1TRMT = 1

vacío

Dato1

TXIF = 1TRMT = 0

Dato2

Dato1

TXIF = 0TRMT = 0

vacío

Dato2

TXIF = 1TRMT = 0

Page 7: Comunicacion Serial Sincrona

7

Comunicación Serie: SCI Síncrono

Microcontroladores PIC ©ATE-Universidad de Oviedo

INICIO DE UNA TRANSMISIÓN SÍNCRONA

Existen dos posibilidades:

1ª Posibilidad.- Se habilita TXEN=1 y a continuación se carga TXREG

(los bits “salen” en los flancos de subida de CK y estarán estables en flancos de bajada)

Cronograma de envío de dos bytes seguidos

Page 8: Comunicacion Serial Sincrona

8

Comunicación Serie: SCI Síncrono

Microcontroladores PIC ©ATE-Universidad de Oviedo

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

Page 9: Comunicacion Serial Sincrona

9

Comunicación Serie: SCI Síncrono

Microcontroladores PIC ©ATE-Universidad de Oviedo

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 reseteael 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 abortala 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

Page 10: Comunicacion Serial Sincrona

10

Comunicación Serie: SCI Síncrono

Microcontroladores PIC ©ATE-Universidad de Oviedo

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

Page 11: Comunicacion Serial Sincrona

11

Comunicación Serie: SCI Síncrono

Microcontroladores PIC ©ATE-Universidad de Oviedo

Registros Asociados con Transmisión Síncrona

en Modo Maestro

Page 12: Comunicacion Serial Sincrona

12

Comunicación Serie: SCI Síncrono

Microcontroladores PIC ©ATE-Universidad de Oviedo

RECEPCIÓN SÍNCRONA COMO MAESTRO

CKControl SREN

CREN

Cuando se inicia una recepción se generan flancos en CK y entran los datos por DT

DT

SREN: para recibir sólo un datoCREN: para recepción continua de datos

b8

No hay bitsde STARTni STOP

Page 13: Comunicacion Serial Sincrona

13

Comunicación Serie: SCI Síncrono

Microcontroladores PIC ©ATE-Universidad de Oviedo

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 hardwareb) Para recibir datos de manera continua (CREN=1). Si CREN=1 y SREN=1 simultáneamente, prevalece la recepción continuaSe generan flancos en el reloj de manera continua hasta que CREN=0

Recepción de un dato con SREN=1

8 periodos de reloj

Page 14: Comunicacion Serial Sincrona

14

Comunicación Serie: SCI Síncrono

Microcontroladores PIC ©ATE-Universidad de Oviedo

• 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 errorde overrun (OERR=1). Se podrían leer los dos datos de RCREG pero se debe eliminarel error para desbloquear pasos de RSR a RCEG.

¿Cómo? -> CREN=0 -> OERR=0Se completa

Dato1Se completa

Dato2Se completa

Dato3

Entrando...RSR:

RCREG:

RCIF = 0 RCIF = 1

vacíovacío

Entrando...

RCIF = 1

Dato1vacío

Entrando...

Dato1Dato2

Dato3

RCIF = 1

Dato1Dato2

¡ OERR = 1 !Bloqueo

RSR->RCREG

Page 15: Comunicacion Serial Sincrona

15

Comunicación Serie: SCI Síncrono

Microcontroladores PIC ©ATE-Universidad de Oviedo

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

Page 16: Comunicacion Serial Sincrona

16

Comunicación Serie: SCI Síncrono

Microcontroladores PIC ©ATE-Universidad de Oviedo

Registros Asociados con Recepción Síncrona

en Modo Maestro

Page 17: Comunicacion Serial Sincrona

17

Comunicación Serie: SCI Síncrono

Microcontroladores PIC ©ATE-Universidad de Oviedo

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

Page 18: Comunicacion Serial Sincrona

18

Comunicación Serie: SCI Síncrono

Microcontroladores PIC ©ATE-Universidad de Oviedo

• La transferencia TXREG -> TSR es idéntica a la del modo Maestro y losflags 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 TSRy queda vacío TXREG, provocando TXIF=1 (pudiendo despertarse el microcontrolador para que sitúe el siguiente dato en TXREG)

vacío

Dato1

TXREG:

TSR:

CargamosDato2

y SLEEP

Dato1enviado

Despiertay cargamos

Dato3

TXIF = 1TRMT = 0

Dato2

Dato1

TXIF = 0TRMT = 0

vacío

Dato2

TXIF = 1TRMT = 0

Dato3

Dato2

TXIF = 0TRMT = 0

Page 19: Comunicacion Serial Sincrona

19

Comunicación Serie: SCI Síncrono

Microcontroladores PIC ©ATE-Universidad de Oviedo

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

Page 20: Comunicacion Serial Sincrona

20

Comunicación Serie: SCI Síncrono

Microcontroladores PIC ©ATE-Universidad de Oviedo

Registros Asociados con la Transmisión Síncrona

en Modo Esclavo

Page 21: Comunicacion Serial Sincrona

21

Comunicación Serie: SCI Síncrono

Microcontroladores PIC ©ATE-Universidad de Oviedo

RECEPCIÓN SÍNCRONA COMO ESCLAVO

Se podrían recibir datos estando dormido el microcontrolador

CREN

b8

En modo Esclavo, la señal de reloj (CK) es entrada externa

CK

SREN sin sentido en modo esclavo

Page 22: Comunicacion Serial Sincrona

22

Comunicación Serie: SCI Síncrono

Microcontroladores PIC ©ATE-Universidad de Oviedo

• 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

Se completaDato1

Se completaDato2

Se completaDato3

Entrando...RSR:

RCREG:

RCIF = 0

vacíovacío

Entrando...

RCIF = 1

Dato1vacío

Entrando...

RCIF = 1

Dato1Dato2

Dato3

RCIF = 1

Dato1Dato2

¡ OERR = 1 !Bloqueo

RSR->RCREG

Page 23: Comunicacion Serial Sincrona

23

Comunicación Serie: SCI Síncrono

Microcontroladores PIC ©ATE-Universidad de Oviedo

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

Page 24: Comunicacion Serial Sincrona

24

Comunicación Serie: SCI Síncrono

Microcontroladores PIC ©ATE-Universidad de Oviedo

Registros Asociados con Recepción Síncrona

en Modo Esclavo