You are on page 1of 29

Lenguaje C aplicado a microcontroladores PIC

MCU Conversores A/D Registros despl.

EEPROM serie

LCD con SPI


Comunicacin Serie Sncrona
ATE-Universidad de Oviedo-Fernando Nuo

Lenguaje C aplicado a microcontroladores PIC

MDULO SSP (SYNCHRONOUS SERIAL PORT)


Puerto Serie Sncrono: Interface de Comunicacin Serie Sncrona Pensado para comunicacin con otros Microcontroladores o Perifricos: EEPROM serie (almacenamiento de datos no voltiles) Registros de Desplazamiento (expansin de entradas y/o salidas) Drivers de Displays (reduccin de conexiones) Conversores A/D (digitalizacin externa de seales) .... Modos de Operacin posibles del mdulo SSP: - SPI (Serial Peripheral Interface): Interface de Perifricos Serie
SPI: Es una Marca Registrada de Motorola Corporation

- I2C (Inter-Integrated Circuit): Entre Circuitos Integrados


I2C: Es una Marca Registrada de Philips

Comunicacin Serie Sncrona

ATE-Universidad de Oviedo-Fernando Nuo

Lenguaje C aplicado a microcontroladores PIC

1.- Interface SPI en el mdulo SSP


Permite la transmisin y recepcin sncrona simultnea de datos de 8 bits Para la comunicacin debe existir un dispositivo Maestro (genera la seal de reloj) y uno o varios esclavos (reciben la seal de reloj) En los microcontroladores PIC hay 3 pines asociados con la comunicacin SPI: Salida Serie de Datos (SDO) Serial Data Output Entrada Serie de Datos (SDI) Serial Data Input Reloj de comunicacin Serie (SCK) Serial Clock -> RC5 -> RC4 -> RC3

De manera adicional, hay un 4 pin que se puede utilizar cuando el microcontrolador se configura como dispositivo Esclavo: Seleccin de Esclavo (SS) Slave Select -> RA5

La inicializacin del Interface SPI se realiza mediante la configuracin de los bits de control SSPCON<5:0> y SSPSTAT<7:6>

Comunicacin Serie Sncrona

ATE-Universidad de Oviedo-Fernando Nuo

Lenguaje C aplicado a microcontroladores PIC

Diagrama de Bloques del Mdulo SSP en modo SPI

Registro de Buffer (lectura/escritura) Entrada serie de bits Salida serie Registro de Desplazamiento de transmisin/recepcin (no accesible)

Seleccin Esclavo

(opcional si es Esclavo)

Reloj de Entrada (Esclavo) Reloj de Salida (Maestro) Comunicacin Serie Sncrona

ATE-Universidad de Oviedo-Fernando Nuo

Lenguaje C aplicado a microcontroladores PIC

ENVO/RECEPCIN SIMULTNEA Situacin Inicial ESCLAVO SPI


SDI a0 a1 a2 a3 a4 a5 a6 a7 SDO SCK

MAESTRO SPI b0 b1 b2 b3 b4 b5 b6 b7 SDO


SDI

Reloj

SCK

Flanco 1 en reloj SCK MAESTRO SPI a7 b0 b1 b2 b3 b4 b5 b6 SDO


SDI

ESCLAVO SPI
SDI b7 a0 a1 a2 a3 a4 a5 a6 SDO SCK

Reloj

SCK

Comunicacin Serie Sncrona

ATE-Universidad de Oviedo-Fernando Nuo

Lenguaje C aplicado a microcontroladores PIC

Situacin Inicial MAESTRO SPI b0 b1 b2 b3 b4 b5 b6 b7 SDO


SDI

ESCLAVO SPI
SDI a0 a1 a2 a3 a4 a5 a6 a7 SDO SCK

Reloj

SCK

Flanco 8 en SCK MAESTRO SPI a0 a1 a2 a3 a4 a5 a6 a7 SDO


SDI

ESCLAVO SPI
SDI b0 b1 b2 b3 b4 b5 b6 b7 SDO SCK

Reloj

SCK

Situacin Final Intercambiados los 8 bits de datos


Comunicacin Serie Sncrona
ATE-Universidad de Oviedo-Fernando Nuo

Lenguaje C aplicado a microcontroladores PIC

SSPSR (registro de desplazamiento) enva y recoge los bits simultneamente SSPBUF tiene doble funcin: para cargar el registro SSPSR para envo de datos y para recoger los datos recibidos en SSPSR SSPIF=0 por software SSPBUF SSPBUF b0 b1 b2 b3 b4 b5 b6 b7 SSPSR a4 a5 a6 a7 b0 b1 b2 b3
2.- SSPSR enviando/recibiendo

b0 b1 b2 b3 b4 b5 b6 b7 SSPSR b0 b1 b2 b3 b4 b5 b6 b7
1.- Carga de SSPSR a travs de SSPBUF

SSPBUF b0 b1 b2 b3 b4 b5 b6 b7 SSPSR a0 a1 a2 a3 a4 a5 a6 a7
3.- Completada recepcin/envo
Comunicacin Serie Sncrona

SSPIF=1

SSPBUF

a0 a1 a2 a3 a4 a5 a6 a7 SSPSR a0 a1 a2 a3 a4 a5 a6 a7
4.- SSPSR carga SSPBUF con recepcin

ATE-Universidad de Oviedo-Fernando Nuo

Lenguaje C aplicado a microcontroladores PIC

SSPIF = PIR1<3> (Completada transmisin) Lectura/escritura Indica que se ha completado un envo/recepcin en SSPSR Se debe poner a 0 por software, puede generar interrupcin

Flags Indicadores en modo SPI

BF = SSPSTAT<0> (Buffer de recepcin lleno) Slo lectura Se pone a 1 cuando se ha completado la recepcin de un dato se pone a 0 por hardware cuando se lee el registro SSPBUF Se emplear normalmente nicamente en modo de recepcin

WCOL = SSPCON<7> (Colisin de Escritura) Lectura/escritura Indica que se ha intentado escribir en SSPBUF mientras se est transmitiendo un dato previo. Si se da tal situacin, se debe poner a 0 por software

SSPOV = SSPCON<6> (Desbordamiento en Recepcin) Lectura/escritura Indica que se ha recibido un byte nuevo mientras SSPBUF contiene un dato recibido anteriormente no leido. El nuevo dato se pierde y ya no se actualiza SSPBUF. Se pondr a 0 por software

Comunicacin Serie Sncrona

ATE-Universidad de Oviedo-Fernando Nuo

Lenguaje C aplicado a microcontroladores PIC

El mdulo SPI puede utilizarse (independientemente de modo Maestro o Esclavo): a) Para envo y recepcin simultnea (SDI y SDO) SSPBUF debe leerse antes de cargarlo con el nuevo dato a enviar b) Slo para enviar datos (SDO) SSPBUF se puede cargar con un nuevo dato nicamente despus de haberse completado el envo del anterior dato Si se pretende cargar un dato en SSPBUF durante una transmisin se produce una colisin y dicha carga ser ignorada c) Slo para recibir datos (SDI) Slo en este caso SSPBUF se utilizara como buffer intermedio de recepcin, se puede iniciar la recepcin de un nuevo dato antes de leer el dato que se acaba de recibir

Comunicacin Serie Sncrona

ATE-Universidad de Oviedo-Fernando Nuo

Lenguaje C aplicado a microcontroladores PIC

a) Para envo y recepcin simultnea Envo de un dato SSPBUF

Antes de cargar un nuevo envo debemos leer recepcin (1) (2) Recepcin dato SSPBUF

b0 b1 b2 b3 b4 b5 b6 b7 SDI SSPSR b0 b1 b2 b3 b4 b5 b6 b7 b) Slo para enviar datos Carga de un dato SSPBUF b0 b1 b2 b3 b4 b5 b6 b7 SSPSR b0 b1 b2 b3 b4 b5 b6 b7 SDO SDO SDI

a0 a1 a2 a3 a4 a5 a6 a7 SSPSR a0 a1 a2 a3 a4 a5 a6 a7 SDO

Intento de carga de Dato2 en SSPBUF durante envo

COLISIN WCOL=1 SSPBUF

b0 b1 b2 b3 b4 b5 b6 b7 SSPSR a4 a5 a6 a7 b0 b1 b2 b3 SDO

Comunicacin Serie Sncrona

ATE-Universidad de Oviedo-Fernando Nuo

10

Lenguaje C aplicado a microcontroladores PIC

c) Slo para recibir datos Se completa la recepcin de un dato (BF=1) SSPBUF b0 b1 b2 b3 b4 b5 b6 b7 SDI SSPSR b0 b1 b2 b3 b4 b5 b6 b7 No se escribe nada en SSPBUF (slo recibimos) y se inicia una nueva recepcin Se lee el dato recibido (BF=0) SSPBUF b0 b1 b2 b3 b4 b5 b6 b7 SDI SSPSR a4 a5 a6 a7 b0 b1 b2 b3

Si antes de leer el dato anterior se completa la recepcin de un nuevo dato, se perdera el dato previamente recibido, se da error de OVERFLOW (SSPOV=1). Este error slo es posible si el dispositivo es ESCLAVO
Comunicacin Serie Sncrona

Un microcontrolador MAESTRO inicia una nueva transferencia cargando el dato en SSPBUF ATE-Universidad de Oviedo-Fernando Nuo

11

Lenguaje C aplicado a microcontroladores PIC

ESPECIFICACIN DEL MODO SPI EN LA INICIALIZACIN * Modo de funcionamiento: * Polaridad del Reloj: Maestro (SCK salida) o Esclavo (SCK entrada) Estado Inactivo del Reloj (SCK) a 1 a 0

* Flancos activos del Reloj: Salida de bits en flancos de subida o bajada en SCK * Muestreo bits de datos: * Frecuencia de Reloj: * Modo de Seleccin: Muestreo de entrada en el centro o al final del bit SLO SI ES MAESTRO, frecuencia en salida SCK SLO SI ES ESCLAVO - Control externo de SDI y SDO con entrada SS - Sin control externo con pin SS
Comunicacin Serie Sncrona
ATE-Universidad de Oviedo-Fernando Nuo

12

Lenguaje C aplicado a microcontroladores PIC

El dispositivo Maestro inicia la transferencia enviando la seal de reloj SCK, los datos salen en los flancos programados y se capturan las entradas en el momento indicado con el bit SMP si es Maestro.

Ejemplo de Conexin Los dos dispositivos deben ser programados con la misma POLARIDAD DE RELOJ para que reciban y emitan a la vez
Comunicacin Serie Sncrona 13

ATE-Universidad de Oviedo-Fernando Nuo

Lenguaje C aplicado a microcontroladores PIC

HABILITACIN DE LOS PINES DE ENTRADA/SALIDA de SSP Para habilitar el mdulo SSP, es necesario que el bit SSPEN se encuentre a 1. Si se desea resetear el mdulo SSP, se debe poner a 0 este bit y luego volverlo a 1 Para que la funcionalidad de los pines SDI, SDO, SCK y /SS sea la determinada por los bits de configuracin, es necesario adems que los bits de direccin de datos (en TRISA y en TRISC) tengan la direccin adecuada: SDI (RC4) debe tener TRISC<4> = 1 para ser entrada de datos SDO (RC5) debe tener TRISC<5> = 0 para que sea salida de datos SCK (RC3) debe tener TRISC<3> = 0 si el microcontrolador es MAESTRO y TRSC<3> = 1 si se define como ESCLAVO /SS (RA5) debe ser TRISA<5> = 1 si es ESCLAVO y tiene control externo Cualquier funcin no deseada en el puerto serie puede ser omitida si en el registro de direccin de datos (TRIS) se configura el valor opuesto
P.ej.: Si en modo Maestro slo se van a enviar datos, SDI puede usarse como una salida de propsito general del microcontrolador cargando TRISC<4>=0
ATE-Universidad de Oviedo-Fernando Nuo

Comunicacin Serie Sncrona

14

Lenguaje C aplicado a microcontroladores PIC

Funcionamiento como MAESTRO El Maestro puede iniciar la transferencia en cualquier momento puesto que controla la lnea SCK. El protocolo software determinar cundo el Esclavo est en condiciones de enviar datos. En modo Maestro, la transmisin/recepcin se inicia tan pronto como se escribe en el registro SSPBUF. Si se desea slo recibir, la lnea SDO puede desactivarse definindola como entrada, los datos presentes en la lnea SDI irn entrando al registro SSPSR a la velocidad marcada por el reloj de transferencia La velocidad de transferencia del modo SPI es programable entre los valores: Fosc/4 Fosc/16 Fosc/64 Frecuencia de Salida de TMR2/2 siendo por tanto la mxima velocidad de transferencia: 5Mbps (con Fosc=20MHz) La polaridad del reloj y los flancos activos se configuran con los bits CKP y CKE
Comunicacin Serie Sncrona
ATE-Universidad de Oviedo-Fernando Nuo

15

Lenguaje C aplicado a microcontroladores PIC

Escritura en SSPBUF

CRONOGRAMA SPI MAESTRO

Muestreo caso SMP=0 Muestreo caso SMP=1

BYTE COMPLETO SSPIF=1


16

Comunicacin Serie Sncrona

ATE-Universidad de Oviedo-Fernando Nuo

Lenguaje C aplicado a microcontroladores PIC

Funcionamiento como ESCLAVO sin Seleccin Externa Para el esclavo, el dato es transmitido/recibido cuando aparecen los pulsos en la entrada SCK Cuando el ltimo bit termina de ser muestreado, el flag SSPIF se pone a uno La polaridad del reloj y los flancos activos se configuran con los bits CKP y CKE El muestreo de los bits de datos se realiza siempre en la mitad de un bit en el modo Esclavo (SMP=0 siempre en modo Esclavo) La seal de reloj debe cumplir las especificaciones mnimas de tiempos mnimos en los estados alto y bajo En modo de bajo consumo (SLEEP) el Esclavo puede transmitir y recibir datos puesto que el registro de desplazamiento es asncrono con el oscilador. Al completar una transferencia de un byte, el dispositivo podra despertarse si se encontraba dormido
Comunicacin Serie Sncrona
ATE-Universidad de Oviedo-Fernando Nuo

17

Lenguaje C aplicado a microcontroladores PIC

CRONOGRAMA SPI ESCLAVO SIN SELECCIN EXTERNA


Esperando a que el Maestro genere flancos

CKE=0
F.subida F.bajada

Muestreo siempre con SMP=0 (en mitad del bit) con el flanco opuesto al de salida de los datos
Comunicacin Serie Sncrona
ATE-Universidad de Oviedo-Fernando Nuo

BYTE COMPLETO SSPIF=1

18

Lenguaje C aplicado a microcontroladores PIC

Funcionamiento como ESCLAVO con Seleccin Externa El pin /SS (nivel activo bajo) permite la conexin de varios esclavos con un Maestro, habilitando en cada instante nicamente la transferencia con un Esclavo El dispositivo Maestro debe seleccionar para la transferencia nicamente uno de los Esclavos mediante la activacin de la seal /SS (a cero) del elegido, permaneciendo el resto en estado alto Se debe configurar el modo SSP Esclavo con SSPCON<3:0> = 0100 y adems definir el pin /SS/RA5 como entrada con TRISA<5>=1 Cuando /SS est a 0, se permite transmisin/recepcin y el pin SDO se maneja internamente por parte del registro dedesplazamiento Si el pin /SS est a 1, el pin SDO se sita en alta impedancia respecto al registro de desplazamiento (podran necesitarse resistencias de polarizacin). Adems, con /SS a 1 (Vdd) el mdulo SPI permanecer reseteado igual que si SSPEN=0 y el contador de bits entrantes permanecer a cero
Comunicacin Serie Sncrona
ATE-Universidad de Oviedo-Fernando Nuo

19

Lenguaje C aplicado a microcontroladores PIC

CRONOGRAMA SPI ESCLAVO CON SELECCIN EXTERNA


Necesaria seal /SS a 0

Muestreo siempre con SMP=0 (en mitad del bit) con el flanco opuesto al de salida de los datos
Comunicacin Serie Sncrona 20

ATE-Universidad de Oviedo-Fernando Nuo

Lenguaje C aplicado a microcontroladores PIC

Interface SPI: Posibilidades de conexin A).- Un Maestro y un Esclavo con conexin a 3 hilos, SDO MAESTRO SDI 3 hilos SCK SDI SDO ESCLAVO SCK

Transmisin/recepcin simultnea B).- Un Maestro y un Esclavo con conexin a 2 hilos, SDO MAESTRO SDI SCK 2 hilos SDI SDO ESCLAVO SCK Conflicto en las Salidas !

Transmisin/recepcin pero no simultneas


Comunicacin Serie Sncrona
ATE-Universidad de Oviedo-Fernando Nuo

21

Lenguaje C aplicado a microcontroladores PIC

B).- Un Maestro y un Esclavo con conexin a 2 hilos SDO MAESTRO SDI SCK 2 hilos SDI

Conflicto en las Salidas !

SDO ESCLAVO SCK

Slo puede haber una salida activa, el receptor anula su salida de datos SDO por software mediante el registro de direccin de datos (TRISC<5>=1 define SDO como entrada) Estado1: Maestro emite (y recibe lo mismo que est emitiendo), Esclavo recibe SDO
(TRISC<5>=0)

SDI 2 hilos SCK


(TRISC<5>=1)

MAESTRO

SDI SCK

ESCLAVO

Comunicacin Serie Sncrona

ATE-Universidad de Oviedo-Fernando Nuo

22

Lenguaje C aplicado a microcontroladores PIC

B).- Un Maestro y un Esclavo con conexin a 2 hilos, SDO MAESTRO SDI SCK 2 hilos SDI

Conflicto en las Salidas !

SDO ESCLAVO SCK

Slo puede haber una salida activa, el receptor anula su salida de datos SDO por software mediante el registro de direccin de datos (TRISC<5>=1 define SDO como entrada) Estado 2: Maestro recibe, Esclavo emite (y recibe lo mismo que est emitiendo) SDI
(TRISC<5>=1)

MAESTRO

SDI SCK

2 hilos

SDO ESCLAVO SCK

(TRISC<5>=0)

Comunicacin Serie Sncrona

ATE-Universidad de Oviedo-Fernando Nuo

23

Lenguaje C aplicado a microcontroladores PIC

C).- Un Maestro emitiendo y varios Esclavos recibiendo, conexin a 2 hilos

SDO SCK

SDI

SCK SDI

SCK ......

SDI

SCK ESCLAVO n

MAESTRO

ESCLAVO 1

ESCLAVO 2

SDI

SDO

SDO

SDO

No sera necesario el control de la seleccin del esclavo, todos tendran la entrada de datos activa
24

Comunicacin Serie Sncrona

ATE-Universidad de Oviedo-Fernando Nuo

Lenguaje C aplicado a microcontroladores PIC

D).- Un Maestro y varios Esclavos con posibilidad de emisin, 3 h. y lneas de seleccin

SDO SCK

SDI

SCK SDI

SCK ......

SDI

SCK ESCLAVO n

MAESTRO

ESCLAVO 1

ESCLAVO 2

SDI

SDO /SS

SDO /SS

SDO /SS

Circuito de Seleccin de Esclavo (directo o decodif.)

PORT?

. . .

Slo un Esclavo Seleccionado que maneja la lnea SDO y que recibe por SDI (/SS=0, resto /SS=1)
25

Comunicacin Serie Sncrona

ATE-Universidad de Oviedo-Fernando Nuo

Lenguaje C aplicado a microcontroladores PIC

COMUNICACIN SPI en C (compiladores de CCS) Existen 4 funciones asociadas con el mdulo SPI, pero todas ellas son utilizables nicamente si el microcontrolador seleccionado dispone de mdulo hardware SSP. No existe implementacin software del mdulo SPI Communications El asistente de C permite configurar: si el micro va a ser dispositivo Maestro o Esclavo, los flancos de transferencia, la frecuencia del reloj que se va a utilizar en el supuesto de que sea dispositivo Maestro y el empleo o no del pin de seleccin si se trata de un dispositivo Esclavo Tiene efecto en la funcin setup_SPI( )
Comunicacin Serie Sncrona
ATE-Universidad de Oviedo-Fernando Nuo

26

Lenguaje C aplicado a microcontroladores PIC

Las Funciones Integradas para la Comunicacin mediante SPI setup_SPI(modos) Esta funcin sirve para inicializar y configurar el Interface de Puerto Serie (SPI) ya que define el modo de trabajo de esta comunicacin. Al contrario que la comunicacin serie asncrona, aqu no hay directiva de configuracin. En el fichero de cabeceras del dispositivo microcontrolador (.h) estn definidas una serie de etiquetas que estn asociadas a los modos de funcionamiento y que se separan en 3 grupos: a) Modo: SPI_MASTER SPI_SLAVE b) Flanco: SPI_L_TO_H SPI_H_TO_L c) Frecuencia: SPI_CLK_DIV_4 SPI_CLK_DIV_64 SPI_SS_DISABLED SPI_CLK_DIV_16 SPI_CLK_T2

Las etiquetas anteriores se enlazan mediante el operador OR (|): p.e.: setup_spi(SPI_MASTER | SPI_L_TO_H | SPI_CLK_DIV_16);
Comunicacin Serie Sncrona
ATE-Universidad de Oviedo-Fernando Nuo

27

Lenguaje C aplicado a microcontroladores PIC

spi_write()

-> spi_write(caracter)

Esta funcin se utilizar si el dispositivo es Maestro y originar que se generen los correspondientes 8 flancos en la seal de reloj saliente spi_read() -> valor=spi_read(dato)

Esta funcin tiene distinto efecto en funcin de que el dispositivo sea Maestro o Esclavo en SPI. La funcin devuelve un dato ledo a travs del SPI y puede llevar un dato como parmetro o no. Si el dispositivo es Maestro SPI, se puede realizar una llamada a la funcin SPI_WRITE(dato) [con el dato a enviar] y despus una llamada con SPI_READ() [sin parmetro] o bien una llamada del tipo SPI_READ(dato). En ambos casos el efecto ser el mismo, se coloca el dato en SSPSR y se generan 8 flancos en la seal de reloj Si el dispositivo acta como Esclavo, cargar el dato en el registro de salida y esperar por la llegada de los flancos en la entrada de reloj
Comunicacin Serie Sncrona
ATE-Universidad de Oviedo-Fernando Nuo

28

Lenguaje C aplicado a microcontroladores PIC

spi_data_is_in()

-> resultado = spi_data_is_in()

Esta funcin devuelve TRUE si se ha recibido un dato a travs del SPI Ejemplos de las funciones para SPI: spi_write(dato_salida); dato_entrada = spi_read( ); Equivale a dato_entrada = spi_read(dato_salida); Otros ejemplos: if(spi_data_is_in( )) dato=spi_read( ); while (!spi_data_is_in( )); //Esperamos a que llegue un dato dato_entrante = spi_read( );
Comunicacin Serie Sncrona
ATE-Universidad de Oviedo-Fernando Nuo

29

Lenguaje C aplicado a microcontroladores PIC

2.- Interface I2C


Es un interface sncrono a 2 hilos pensado para la comunicacin entre C.I. y desarrollado por Philips Corporation. Es un bus estndar para muchos equipos de consumo y telecomunicaciones Las dos lneas de comunicacin corresponden a reloj (SCL) y datos (SDA). Las transferencias son por tanto semi-dplex. En el bus debe existir al menos un dispositivo Maestro que genera la seal de reloj y uno o varios Esclavos que reciben tal seal SCL. El dispositivo Maestro es el nico que tiene capacidad de iniciar la transferencia, decidir con quin se realiza, el sentido de la misma (envo o recepcin del Maestro) y cundo se finaliza Cada dispositivo esclavo conectado al bus tiene asignada una direccin nica codificada en 7 ( en 10 bits de manera opcional) Se admite la presencia de varios Maestros en el bus (sistema multi-Maestro) con un arbitraje que asegura que en cada instante slo hay uno dominante
Comunicacin Serie Sncrona
ATE-Universidad de Oviedo-Fernando Nuo

30

Lenguaje C aplicado a microcontroladores PIC

Ventajas del BUS I2C


Definido inicialmente a mediados de los 80 para trabajar a 100kbit/s y en 1995 se defini un modo rpido de funcionamiento que permita transferencias de hasta 400kbit/s (algunos dispositivos grficos llegan a 3,4MHz). Presenta una transferencia lenta en comparacin con el modo SPI y mucho ms con la lectura/escritura directa de los puertos de un microcontrolador Es til y se emplea en muchas aplicaciones en las que la velocidad de transferencia es mucho mayor de lo que el caso requiere (p.e. Medida de temperaturas con constantes de tiempo de segundos) Su principal ventaja, es que una vez disponible el microcontrolador con sus funciones de interface con bus I2C, la inclusin de un dispositivo I2C adicional slo necesitara su conexin a las dos lneas del bus (SDA y SCL que son las mismas para todos) y asignarle una direccin. Los intercambios se realizaran utilizando los mismos subprogramas para todos La tensin de funcionamiento va de 2,5V a 5,5V y no es necesaria la presencia de drivers de adaptacin de tensin externos (integracin en los propios dispositivos)
Comunicacin Serie Sncrona
ATE-Universidad de Oviedo-Fernando Nuo

31

Lenguaje C aplicado a microcontroladores PIC

BUS I2C

MAESTRO

(direccin n1)

ESCLAVO

(direccin ni)

MAESTRO o ESCLAVO

(direccin n2)

ESCLAVO

Nmero mx. de dispositivos por capacidad en el bus: Cmax=400pF Transferencias:

Es posible que un Maestro tras perder el control del bus en un arbitraje pase a ser Esclavo

(direccin n3)

ESCLAVO

SCL (reloj) SDA (datos)

100 kHz, 400 kHz 1MHz

Comunicacin Serie Sncrona

ATE-Universidad de Oviedo-Fernando Nuo

32

Lenguaje C aplicado a microcontroladores PIC

Resistencias de polarizacin

Resistencias serie opcionales (Rs<<Rp)

Las etapas de Salida deben ser de Drenador abierto (para que exista wire-and) sin conflicto en las salidas
Lnea de Datos (SDA) Lnea de Reloj (SCL)

ESCLAVO

ESCLAVO

MAESTRO/ESCLAVO

MAESTRO/ESCLAVO

Slo uno de los Maestros puede estar manejando la lnea SCL


Comunicacin Serie Sncrona
ATE-Universidad de Oviedo-Fernando Nuo

33

Lenguaje C aplicado a microcontroladores PIC

ESTADOS EN EL BUS I2C: Inicio y Final de transferencia En el ESTADO INACTIVO, las lneas SDA y SCL se encuentran a 1: los transistores de las etapas de salida de todos los dispositivos se encuentran en corte El INICIO de transferencia se produce cuando aparece una transicin de 1 a 0 en la lnea SDA mantenindose la lnea de reloj SCL a 1 SDA SCL 1 1 Inicio de transferencia (START) 0

Bus Inactivo El FIN de transferencia es por transicin de 0 a 1 en SDA cuando SCL est a 1 En una transmisin, SDA slo puede cambiar cuando SCL=0 si no, se interpretara como START STOP
Comunicacin Serie Sncrona

SDA SCL

0 1

Fin de transferencia (STOP)

Bus Activo

t
34

ATE-Universidad de Oviedo-Fernando Nuo

Lenguaje C aplicado a microcontroladores PIC

Condicin de START (S) seguida de Transferencia

START y STOP slo pueden ser generados por el Maestro

Transferencia finalizada con STOP (P)

Comunicacin Serie Sncrona

ATE-Universidad de Oviedo-Fernando Nuo

35

Lenguaje C aplicado a microcontroladores PIC

Cuando un Maestro decide iniciar una transferencia, enva primero la direccin del dispositivo con el que quiere hablar. Todos los dispositivos escuchan para determinar si la direccin colocada en el bus es la suya. Acompaando a la direccin aparece un bit R/W que indica al esclavo destinatario si el Maestro quiere leer (recibir si R/W=1) del Esclavo o si el Maestro quiere escribir (enviar si R/W=0) en el Esclavo. El Maestro y el Esclavo direccionado se deben encontrarse siempre en estados opuestos: Maestro emite / Esclavo recibe Maestro recibe / Esclavo emite En cualquiera de los casos, el Maestro ser el que genere la seal de reloj en SCL Si hay ms de un Maestro en el bus, se debe producir un arbitraje cuando SCL=1: el Maestro que enva un 1 y detecta un 0 en la lnea SDA pierde en el arbitraje y desactiva su salida de datos (aunque podra seguir generando flancos en la lnea SCL hasta que finalizara el envo del byte donde perdi el control del bus)

Comunicacin Serie Sncrona

ATE-Universidad de Oviedo-Fernando Nuo

36

Lenguaje C aplicado a microcontroladores PIC

Direccionamiento de Dispositivos en el bus I2C Hay dos formatos de direccionamiento posibles (se elige uno): a) Formato de 7 bits: (A7-A6-...-A1) Lo pone el Maestro En SDA: Start S Reconocimiento (lo debe poner el Esclavo)

A7 A6 A5 A4 A3 A2 A1 R/W ACK Direccin de 7 bits del esclavo Lectura o Escritura

b) Formato de 10 bits: (A9-A8-A7-...-A0) Primer byte del Maestro En SDA: Start S 1 1 1 1 0 A9 A8 2 byte del Maestro

R ACK A7 A6 A5 A4 A3 A2 A1 A0 ACK S W Reconocimientos del Esclavo despus de cada byte del Maestro

Lectura o Escritura

Comunicacin Serie Sncrona

ATE-Universidad de Oviedo-Fernando Nuo

37

Lenguaje C aplicado a microcontroladores PIC

Reconocimiento de Transferencia (ACK) Los datos se transmiten en paquetes de 8 bits (bytes), no hay lmite en cuanto a nmero de bytes, pero despus de cada byte se debe intercalar un bit de reconocimiento (ACK) por parte del dispositivo receptor Si es el Esclavo el receptor y no genera el bit de reconocimiento despus de cada byte, el Maestro debe abortar la transferencia generando un bit de fin (STOP) Dado que las etapas de salida son de drenador abierto, los niveles lgicos 0 son dominantes en las lneas, por tanto el Esclavo debe dejar su salida SDA a 1 para que el Maestro pueda generar el STOP (paso de 0 a 1 con SCL=1) Si el dispositivo Maestro es el receptor, genera un ACK tras cada byte recibido, permitiendo al Esclavo que contine enviando bytes. Si el Maestro decide finalizar la transferencia, genera un bit de STOP en lugar de colocar un bit de reconocimiento Si el Esclavo necesita retardar el envo del siguiente byte (porque no lo tiene todava disponible, p.e.), puede situar la lnea SCL en estado bajo y forzar al Maestro a situarse en un estado de Espera puesto que no se podran generar flancos en SCL

Comunicacin Serie Sncrona

ATE-Universidad de Oviedo-Fernando Nuo

38

Lenguaje C aplicado a microcontroladores PIC

Salida de datos del transmisor Salida del receptor Reloj del Maestro

En SDA se tiene la funcin AND de estas 2 salidas

CRONOGRAMAS

Reconocimiento o no del dato

Introduciendo espera

Comunicacin Serie Sncrona

ATE-Universidad de Oviedo-Fernando Nuo

39

Lenguaje C aplicado a microcontroladores PIC

Secuencia de Transmisin del Maestro

SDA: S

Direccin del Esclavo

R/W

Dato

Dato

A/A

De Maestro a Esclavo De Esclavo a Maestro

0 porque el Maestro quiere escribir (enviar)

Reconocimiento (A) o no reconocimiento (A)

Secuencia de Recepcin del Maestro S S Direccin del Esclavo R/W A Dato A Dato A P

1 porque el Maestro quiere leer (recibir)

No reconocimiento por Maestro y Parada

Comunicacin Serie Sncrona

Si las direcciones fueran de 10 bits se deberan enviar dos bytes


ATE-Universidad de Oviedo-Fernando Nuo

40

Lenguaje C aplicado a microcontroladores PIC

Repeticin de START (Sr) Si un dispositivo Maestro no desea abandonar el bus tras una transferencia, en lugar de generar un bit de STOP y volver a generar el nuevo START, puede generar una Repeticin de START (Sr) La Repeticin de START es idntica a la condicin de START (SDA pasa de 1 a 0 con SCL en estado alto) pero se produce tras un pulso de reconocimiento de bus (ACK) y no desde un estado inactivo

Comunicacin Serie Sncrona

ATE-Universidad de Oviedo-Fernando Nuo

41

Lenguaje C aplicado a microcontroladores PIC

El interface I2C en los microcontroladores PIC


Existen dos tipos de mdulos SSP en los microcontroladores PIC: BSSP Basic Synchronous Serial Port, que para el bus I2C implementa: Modo Esclavo: completo por hardware Modo Maestro: solo deteccin de bits de START y STOP por hardware, (el resto debera realizarse por software) * Algunos PIC con BSSP: 16C64, 16C65, 16C73, 16C74,... MSSP Master Synchronous Serial Port, que para el bus I2C implementa Modo Esclavo: completo por hardware Modo Maestro: completo por hardware * Algunos PIC con MSSP: 16F87x En lo relativo al modo SPI: BSSP y MSSP ambos son idnticos
Comunicacin Serie Sncrona
ATE-Universidad de Oviedo-Fernando Nuo

42

Lenguaje C aplicado a microcontroladores PIC

Mdulo MSSP I2C Implementa todas las funciones del Maestro y del Esclavo en un bus I2C por hardware Permite detectar las condiciones START y STOP en el bus por interrupcin Permite emplear direcciones de 7 de 10 bits como Esclavo Se puede seleccionar uno de los siguientes modos de operacin: - Esclavo I2C con direccin de 7 bits - Esclavo I2C con direccin de 10 bits - Maestro I2C con reloj SCL de frecuencia = Fosc/(4*(SSPADD+1)) El mdulo MSSP dispone de 6 registros asociados: SSPCON SSPCON2 SSPSTAT SSPADD SSPBUF SSPSR
Comunicacin Serie Sncrona

Registro de Control Registro de Control 2 Registro de Estado Registro de Direccin Buffer de Transmisin/Recepcin Registro de Desplazamiento Serie (no accesible)
ATE-Universidad de Oviedo-Fernando Nuo

43

Lenguaje C aplicado a microcontroladores PIC

Mdulo MSSP I2C: Diagrama de Bloques en MODO ESCLAVO

Entrada Reloj Entrada o salida de datos

Buffer para envo y recepcin Registro de E/S no accesible directamente Direccin asignada al Esclavo

Comunicacin Serie Sncrona

ATE-Universidad de Oviedo-Fernando Nuo

44

Lenguaje C aplicado a microcontroladores PIC

Mdulo MSSP I2C: Diagrama de Bloques en MODO MAESTRO Para clculo de frecuencia

Salidas de drenador abierto

Buffer

Comunicacin Serie Sncrona

ATE-Universidad de Oviedo-Fernando Nuo

45

Lenguaje C aplicado a microcontroladores PIC

Mdulo MSSP I2C: MODO MAESTRO En modo Maestro, las lneas SDA y SCL son manejadas por el hardware del mdulo MSSP, no es necesario definir su direccin en TRISC Se dispone de circuitos lgicos para deteccin de START (S) y STOP (P) y su aparicin queda reflejada en los bits S y P de SSPSTAT. Estos bits son de slo lectura y quedan a cero tras un reset o cuando el mdulo MSSP est desactivado El flag SSPIF que permite interrupciones es sensible a los siguientes eventos: - Condicin de START - Transferencia de un byte - START repetido - Condicin de STOP - Transmisin de ACK

En buses multi-Maestro, el control del mismo slo puede intentarse cuando el bit P est a 1 cuando el bus est inactivo (S y P a 0). En este caso, la lnea SDA ser monitorizada para el arbitraje y comprobar si el nivel presente coincide con el nivel esperado y propuesto por el propio Maestro, esta verificacin la realiza el hardware y el resultado queda reflejado en el bit de flag de colisiones BCLIF (PIR2<3>) si hay discrepancia y podra generar interrupcin (su mscara es BCLIE = PIE2<3>).
Comunicacin Serie Sncrona
ATE-Universidad de Oviedo-Fernando Nuo

46

Lenguaje C aplicado a microcontroladores PIC

I2C MAESTRO: GENERADOR DE RELACIN DE BAUDIOS (BRG)


El generador de relacin de baudios (BRG) empleado en el modo SPI es el utilizado para generar la frecuencia del reloj SCL. La frecuencia viene dada por la expresin:
FSCL = FOSC 4 (SSPADD + 1)

En I2C las frecuencias estndar son: 100kHz, 400kHz y 1MHz

Se emplean los 7 bits menos significativos del registro SSPADD. En modo Maestro BRG se actualiza automticamente con el cambio en SSPADD, pero en un bus multiMaestro, se carga cuando SCL pasa de 0 a estado alto

Diagrama de bloques de BRG

Comunicacin Serie Sncrona

ATE-Universidad de Oviedo-Fernando Nuo

47

Lenguaje C aplicado a microcontroladores PIC

I2C MAESTRO: OPERACIN


El Maestro generar los flancos en SCL y las condiciones de START y STOP. Una transferencia finaliza con una condicin de STOP (P) o con una repeticin de START (Sr), en este caso se trata tambin del inicio de la siguiente transferencia serie con lo que el bus I2C no quedara libre El modo Maestro funciona poniendo a 1 0 los bits apropiados del registro SSPCON y habilitando el mdulo con el bit SSPEN. Son posibles 6 acciones: - Establecer una condicin de START en las lneas SDA y SCL (bit SEN) - Escribir un dato en SSPBUF para iniciar una transmisin de dato o direccin - Configurar la entrada I2C para recibir datos (bit RCEN) - Generar un pulso de reconocimiento (ACK) (bit ACKEN) - Generar una condicin de STOP en SDA y SCL (bit PEN) - Establecer una repeticin de START en las mismas lneas (bit RSEN) Una accin generada por el Maestro debe esperar a que finalice la anterior (p.e. no se puede escribir el dato en SSPBUF hasta que se haya completado la condicin START)

Comunicacin Serie Sncrona

ATE-Universidad de Oviedo-Fernando Nuo

48

Lenguaje C aplicado a microcontroladores PIC

I2C MAESTRO: OPERACIN (II)


Debe quedar claro que las acciones que va ejecutando el Maestro son totalmente independientes unas de otras. Como ejemplo: no es posible realizar en un solo paso la generacin del bit de START y el envo de la direccin del Esclavo (stas seran dos acciones independientes) Para realizar una transferencia completa por parte de un Maestro, emitiendo o recibiendo, ser preciso encadenar las diferentes acciones individuales de la manera adecuada, interpretando los resultados obtenidos y los estados presentes en el bus de manera previa a la ejecucin de la siguiente accin Ser necesario que el Maestro compruebe que la accin que l est intentando realizar, efectivamente se produce como verificacin a su dominio sobre el bus Si el microcontrolador no dispusiera de mdulo MSSP para realizar las acciones por hardware, debera ejecutar cada una de ellas mediante cdigo interno (firmware). Tambin es posible que an disponiendo de mdulo MSSP, se prescinda de la implementacin hardware y se realice tambin en el firmware

Comunicacin Serie Sncrona

ATE-Universidad de Oviedo-Fernando Nuo

49

Lenguaje C aplicado a microcontroladores PIC

I2C MAESTRO: OPERACIN (III)


Ejemplo de Secuencia tpica de transmisin de un byte por parte del Maestro: a) Se genera START poniendo a 1 el bit de habilitacin de START (SEN) del registro SSPCON2 b) Se esperar el tiempo necesario para detectar START, cuando se haya dado la condicin, SSPIF=1 (se debe poner a 0 por software) c) Se carga SSPBUF con la direccin a enviar por el bus y el bit R/W=0 (dir. 7 bits) d) Los bits de la direccin van saliendo por la lnea SDA hasta completar 8 bits e) Se lee el bit de reconocimiento (ACK) recibido del esclavo y se introduce ese bit en SSPCON2<6> f) Al final del 9 flanco en SCL, se pone SSPIF=1 (hay que resetearlo) g) Se cargan en SSPBUF los 8 bits del dato a enviar h) Los bits del dato van saliendo por SDA hasta completar la transmisin i) Se lee el bit de reconocimiento (ACK) y se graba su valor en SSPCON<6> j) Al final del 9 flanco en SCL se pone el flag SSPIF a 1 (a 0 por programa) k) Se genera una condicin de STOP poniendo a 1 el bit de habilitacin de STOP (PEN) de SSPCON2 l) Una vez detectada la condicin de STOP, se pone a 1 el flag SSPIF

Comunicacin Serie Sncrona

ATE-Universidad de Oviedo-Fernando Nuo

50

Lenguaje C aplicado a microcontroladores PIC

COMUNICACIN I2C en C (compiladores de CCS) La implementacin de una comunicacin mediante bus I2C puede realizarse por hardware (mediante el mdulo interno SSP) o por software. El modo Esclavo slo debe utilizarse con el hardware del SSP. El funcionamiento en modo Maestro se implementa por software salvo que se le indique lo contrario con una de las opciones (NOFORCE_SW) de la directiva #USE I2C El asistente de C permite configurar los pines que se van a utilizar en la transferencia e inicia la directiva #USE I2C que se emplea para configurar totalmente este tipo de transferencia: MASTER SLAVE SCL=pin SDA=pin
Comunicacin Serie Sncrona

activa modo Maestro activa modo Esclavo especifica el pin de reloj (pin es direccin SCL=PIN_B1) seala el pin de datos
ATE-Universidad de Oviedo-Fernando Nuo

51

Lenguaje C aplicado a microcontroladores PIC

ADDRESS=nn si el dispositivo es Esclavo se le asigna esta direccin FAST SLOW emplea la especificacin fast del I2C emplea especificacin slow

RESTART_WDT resetea el Watchdog si est esperando por lectura


NOFORCE_SW obliga al uso de las funciones I2C hardware

Ejemplo:
#USE I2C(SLAVE, SDA=PIN_C4, SCL=PIN_C3, ADDRESS=0xA0, NOFORCE_SW)

La directiva citada tiene efecto sobre las siguientes funciones integradas de C: i2c_start( ) generacin de condicin de START i2c_stop( ) generacin de condicin de STOP i2c_write( ) escritura de un byte i2c_read( ) lectura de un byte i2c_poll( )
Comunicacin Serie Sncrona

comprobacin de recepcin de byte


ATE-Universidad de Oviedo-Fernando Nuo

52

Lenguaje C aplicado a microcontroladores PIC

Las Funciones Integradas para la Comunicacin mediante I2C I2C_start( ) Esta funcin sirve para generar un bit de START en el bus cuando el dispositivo es Maestro.Tras generar el bit de START en I2C, la lnea de reloj SCL se mantiene en estado bajo hasta que se llame a la funcin I2C_WRITE( ). Si se llama a esta funcin antes de que se llame a la funcin I2C_stop( ), se genera una condicin de repeticin START (Restart) I2C_stop( ) Genera un bit de STOP en el bus I2C si el dispositivo es Maestro I2C_write( ) -> I2C_write(dato)

Enva un byte a travs del bus. Si el dispositivo es Maestro, generar los flancos en la lnea de reloj SCL, si es Esclavo esperar por la aparicin de dichos flancos. La funcin devuelve el bit de ACK (0 si hubo seal de reconocimiento y 1 si no la hubo)
Comunicacin Serie Sncrona
ATE-Universidad de Oviedo-Fernando Nuo

53

Lenguaje C aplicado a microcontroladores PIC

I2C_read( )

-> dato=I2C_read( )

o bien

dato=I2C_read(ack)

Esta funcin sirve para leer un byte a travs del bus I2C. En modo Maestro, se generarn los flancos en la seal de reloj (SCL) y en modo Esclavo esperar por la aparicin de los mismos. No existe lmite de tiempo de espera como Esclavo, se deber usar la funcin I2C_poll( ) para evitar el bloqueo del dispositivo. El ack es opcional y puede ser 1 (hay reconocimiento, que es la opcin por defecto) 0 (no hay reconocimiento) I2C_poll( ) Esta funcin slo puede utilizarse si el dispositivo dispone de mdulo SSP y est implementado el bus I2C con su empleo. Esta funcin devuelve TRUE si se ha recibido un byte y ste est disponible en el buffer. Si se devuelve TRUE, la llamada a la funcin I2C_read( ) devuelve de manera inmediata el byte recibido.

Comunicacin Serie Sncrona

ATE-Universidad de Oviedo-Fernando Nuo

54

Lenguaje C aplicado a microcontroladores PIC

Ejemplos: #USE I2C(MASTER, SDA=PIN_C4, SCL=PIN_C3) //Dispositivo Maestro i2c_start( ); //Se enva bit de START i2c_write(0xA1); //Direccin del Esclavo y peticin de lectura dato_1=i2c_read( ); //Se generan flancos y se lee un dato dato_2=i2c_read( 0 ); //se lee el siguiente dato y se enva NO ACK i2c_stop( ); //Se manda bit de STOP Secuencia Lectura Sec. de Escritura i2c_start( ); i2c_write(0xA0); i2c_write(hi(direccion)); i2c_write(direccin); i2c_write(dato); i2c_stop( ); //Se enva bit de START //Direccin del Esclavo y escritura posterior //Se manda parte alta de una direccin //Se manda parte baja de la direccin //Se enva el dato a grabar //Envo del bit de STOP

Comunicacin Serie Sncrona

ATE-Universidad de Oviedo-Fernando Nuo

55

Lenguaje C aplicado a microcontroladores PIC

Un ejemplo como esclavo: #use i2c(SLAVE, SDA=PIN_C4, SCL=PIN_C3, address=0xA0) contador=0; while (contador<10) { while(!i2c_poll( )); buffer[contador++]=i2c_read( ); } //Espera y recibe 10 bytes como dispositivo esclavo Otro ejemplo: #use i2c(MASTER, SDA=PIN_C4, SCL=PIN_C3) long comando; i2c_start( ); //generacin de START i2c_write(0xA0); //Direccin de dispositivo y escritura i2c_write(comando>>8); //envo de parte alta de comando i2c_write(comando); //envo de parte baja i2c_stop( ); //envo de bit de STOP
Comunicacin Serie Sncrona
ATE-Universidad de Oviedo-Fernando Nuo

56

Lenguaje C aplicado a microcontroladores PIC

Dispositivos I2C presentes en la placa PICDEM2 plus EEPROM 24LC256

Sensor de temperatura TC74


Comunicacin Serie Sncrona
ATE-Universidad de Oviedo-Fernando Nuo

57

You might also like