Anda di halaman 1dari 29

Lenguaje C aplicado a microcontroladores PIC

MCU

EEPROM serie

Conversores A/D
Registros despl.
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
Registro de Desplazamiento
de transmisin/recepcin
(no accesible)

Salida serie

Seleccin Esclavo

(opcional si es Esclavo)

Reloj de Entrada
(Esclavo)
Reloj de Salida
(Maestro)
Comunicacin Serie Sncro na

ATE-Universidad de Oviedo-Fernando Nuo

Lenguaje C aplicado a microcontroladores PIC

ENVO/RECEPCIN SIMULTNEA
Situacin Inicial

MAESTRO SPI

ESCLAVO SPI

b0 b1 b2 b3 b4 b5 b6 b7 SDO

SDI a0

a3

SDI

a1 a2

a4 a5 a6
a7

SDO

SCK
SCK

Reloj

Flanco 1 en reloj SCK


MAESTRO SPI

ESCLAVO SPI

a7 b0 b1 b2 b3 b4 b5 b6 SDO

SDI b7 a0

a2

SDI

Comunicacin Serie Sncrona

a3 a4 a5
a6

SDO

SCK

Reloj

a1

SCK

ATE-Universidad de Oviedo-Fernando Nuo

Lenguaje C aplicado a microcontroladores PIC

Situacin Inicial
MAESTRO SPI

ESCLAVO SPI

b0 b1 b2 b3 b4 b5 b6 b7 SDO

SDI a0

a3

SDI

Reloj

a1 a2

a4 a5 a6
a7

SDO

SCK

SCK

Flanco 8 en SCK
MAESTRO SPI

ESCLAVO SPI

a0 a1 a2 a3 a4 a5 a6 a7 SDO

SDI b0

b3

SDI

Reloj

SCK

b1 b2

SDO
SCK

Situacin Final
Intercambiados los 8 bits de datos
Comunicacin Serie Sncrona

b4 b5 b6 b7

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
b0 b1 b2 b3 b4 b5 b6 b7

SSPBUF
b0 b1 b2 b3 b4 b5 b6 b7

SSPSR
b0 b1 b2 b3 b4 b5 b6 b7

SSPSR
a4 a5 a6 a7 b0 b1 b2 b3

1.- Carga de SSPSR a travs de SSPBUF

2.- SSPSR enviando/recibiendo

SSPIF=1

SSPBUF
b0 b1 b2 b3 b4 b5 b6 b7

SSPBUF
a0 a1 a2 a3 a4 a5 a6 a7

SSPSR
a0 a1 a2 a3 a4 a5 a6 a7

SSPSR
a0 a1 a2 a3 a4 a5 a6 a7

3.- Completada recepcin/envo


Comunicacin Serie Sncrona

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

Flags Indicadores en modo SPI

Indica que se ha completado un envo/recepcin en SSPSR


Se debe poner a 0 por software, puede generar interrupcin
*

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

Antes de cargar un nuevo envo


debemos leer recepcin
(1)

a) Para envo y recepcin simultnea

(2)

Envo de un dato

SSPBUF
b0 b1 b2 b3 b4 b5 b6 b7

Recepcin dato
SSPBUF
a0 a1 a2 a3 a4 a5 a6 a7

SSPSR
SDI b0 b1 b2 b3 b4 b5 b6 b7 SDO
b) Slo para enviar datos

SSPSR
SDI a0 a1 a2 a3 a4 a5 a6 a7 SDO

Intento de carga de Dato2


en SSPBUF durante envo

SSPBUF
b0 b1 b2 b3 b4 b5 b6 b7

COLISIN
WCOL=1
SSPBUF
b0 b1 b2 b3 b4 b5 b6 b7

SSPSR
b0 b1 b2 b3 b4 b5 b6 b7 SDO

SSPSR
a4 a5 a6 a7 b0 b1 b2 b3 SDO

Carga de un dato

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 S

Un microcontrolador MAESTRO inicia una nueva transferencia


cargando el dato en SSPBUF
erie Sncrona

11

ATE-Universidad de Oviedo-Fernando Nuo

Lenguaje C aplicado a microcontroladores PIC

ESPECIFICACIN DEL MODO SPI EN LA INICIALIZACIN


* Modo de funcionamiento:

Maestro (SCK salida) o Esclavo (SCK entrada)

* Polaridad del Reloj:

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:

Muestreo de entrada en el centro o al final del bit

* Frecuencia de Reloj:

SLO SI ES MAESTRO, frecuencia en salida SCK

* Modo de Seleccin:

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

ATE-Universidad de Oviedo-Fernando Nuo

13

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

Comunicacin

P.ej.: Si en modo Maestro slo se van a enviar datos, SDI puede usarse
como una salida de propsito general del microcontrolador cargando
Serie Sncrona
ATE-Universidad de Oviedo-Fernando Nuo
TRISC<4>=0

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
Frecuen
cia de
Salida
de
TMR2/
2

Comunicacin Serie Sncrona

siendo por tanto


la mxima
velocidad de
transferencia:
5Mbps (con
Fosc=20MHz)

15

ATE-Universidad de Oviedo-Fernando Nuo

Lenguaje C aplicado a microcontroladores PIC

La polaridad del
reloj y los
flancos activosEscritura
se configuranen SSPBUF
con los bits CKP
y CKE

CRONOGRAMA SPI MAESTRO

Muestreo
caso SMP=0

Muestreo
caso SMP=1

Comunicacin Serie Sncrona

ATE-Universidad de Oviedo-Fernando Nuo

BYTE COMPLETO
SSPIF=1
16

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

17

ATE-Universidad de Oviedo-Fernando Nuo

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

ATE-Universidad de Oviedo-Fernando Nuo

20

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

SDI
3 hilos

SDO ESCLAVO
SCK

SCK

Transmisin/recepcin simultnea
B).- Un Maestro y un Esclavo con conexin a 2 hilos,
SDO
MAESTRO

SDI

Conflicto en las Salidas !

SDI
2 hilos

SDO ESCLAVO
SCK

SCK

Transmisin/recepcin pero no simultneas


Comunicacin Serie Sncrona

21

ATE-Universidad de Oviedo-Fernando Nuo

Lenguaje C aplicado a microcontroladores PIC

B).- Un Maestro y un Esclavo con conexin a 2 hilos


SDO
MAESTRO

SDI

Conflicto en las Salidas !

SDI
2 hilos

SDO ESCLAVO
SCK

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
SDI
MAESTRO

(TRISC<5>=0)

SDI
SCK

Comunicacin Serie Sncrona

ESCLAVO

2 hilos

(TRISC<5>=1)

SCK

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
SDI

MAESTRO

Conflicto en las Salidas !

SDI
SDO ESCLAVO

2 hilos

SCK

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
MAESTRO

SDI

(TRISC<5>=1)

SDO ESCLAVO

2 hilos

(TRISC<5>=0)

SCK

SCK

Comunicacin Serie Sncrona

23

ATE-Universidad de Oviedo-Fernando Nuo

Lenguaje C aplicado a microcontroladores PIC

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

SDO
SCK

SDI

MAESTRO

SDI

SCK SDI

SCK

ESCLAVO
1

ESCLAVO
2

SDO

SDO

SDI
......

SCK
ESCLAVO
n

SDO

No sera necesario el control de la seleccin del esclavo,


todos tendran la entrada de datos activa

Comunicacin Serie Sncrona

ATE-Universidad de Oviedo-Fernando Nuo

24

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

ESCLAVO
1

MAESTRO

SDI

SDO /SS

Circuito de
Seleccin de
Esclavo
(directo
o decodif.)

PORT?

SCK SDI

Comunicacin Serie Sncrona

.
.
.

SCK

ESCLAVO
2

SDI
......

SDO /SS

SCK
ESCLAVO
n

SDO
/SS

Slo un Esclavo Seleccionado


que maneja la lnea SDO
y que recibe por SDI
(/SS=0, resto /SS=1)

ATE-Universidad de Oviedo-Fernando Nuo

25

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_SS_DISABLED SPI_H_TO_L
SPI_CLK_DIV_4
SPI_CLK_DIV_16
c) Frecuencia:
SPI_CLK_DIV_64
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
y esperar por la llegada de los flancos en la entrada de reloj
salida
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

ESCLAVO

(direccin n1)

MAESTRO
o
ESCLAVO

ESCLAVO

(direccin n2)

(direccin
ni)

Es posible que un Maestro


tras perder el control
del bus en un arbitraje
pase a ser Esclavo

Cmax=400pF
Transferencias:
ESCLAVO

(direccin n3)

SCL (reloj)
SDA (datos)

Comunicacin Serie Sncrona

Nmero mx.
de dispositivos
por capacidad
en el bus:

ATE-Universidad de Oviedo-Fernando Nuo

100 kHz,
400 kHz

1MHz

32

Lenguaje C aplicado a microcontroladores PIC

Las etapas de Salida deben ser


de Drenador abierto
(para que exista wire-and)
sin conflicto en las salidas

Resistencias
de polarizacin

Resistencias serie
opcionales (Rs<<Rp)

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

33

ATE-Universidad de Oviedo-Fernando Nuo

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
Inicio de transferencia
1
SDA
(START)
0
SCL

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

Bus Activo

Fin de transferencia
(STOP)

ATE-Universidad de Oviedo-Fernando Nuo

34

Lenguaje C aplicado a microcontroladores PIC

Condicin de START (S) seguida de Transferencia

START y STOP slo


pueden ser generados
por el Maestro

Comunicacin Serie Sncrona

Transferencia finalizada con STOP (P)

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):
Reconocimiento
(lo debe poner el Esclavo)

a) Formato de 7 bits: (A7-A6-...-A1)


Lo pone el Maestro
En SDA:

A7

A6

A5

A4

A3

A2

A1 R/W
ACK

Direccin de 7 bits del esclavo

Start

Lectura o
Escritura

b) Formato de 10 bits: (A9-A8-A7-...-A0)


Primer byte del Maestro
En SDA:

Start

Comunicacin Serie Sncrona

2 byte del Maestro

1 0 A9 A8 R ACK
S
W ACK A7 A6 A5 A4 A3 A2 A1 A0
ACK
Reconocimientos
Lectura o
del Esclavo
Escritura
despus de cada byte
del Maestro
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

En SDA se tiene
la funcin AND
de estas 2 salidas

Salida
del receptor
Reloj del Maestro

Reconocimiento o no
del dato

CRONOGRAMAS

Introduciendo espera

Comunicacin Serie Sncrona

39

ATE-Universidad de Oviedo-Fernando Nuo

Lenguaje C aplicado a microcontroladores PIC

Secuencia de Transmisin del Maestro

SDA: S

Direccin del Esclavo

De Maestro a Esclavo
De Esclavo a Maestro

R/W

Dato

0 porque el Maestro
quiere escribir (enviar)

Dato

A/A

Reconocimiento (A)
o no reconocimiento (A)

Secuencia de Recepcin del Maestro


SS Direccin del Esclavo

R/W

Dato

1 porque el Maestro
quiere leer (recibir)

Comunicacin Serie Sncrona

Dato

No reconocimiento
por Maestro y Parada

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
En lo
relativo
modo SPI: BSSP y MSSP ambos son idnticos
* Algunos PIC
con
MSSP:al16F87x
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/Recepci
n
ATE-Universidad
de Oviedo-Fernando
Nuo
Registro
de
Desplazamiento Serie
(no accesible)

43

Lenguaje C aplicado a microcontroladores PIC

Mdulo MSSP I2C: Diagrama de Bloques en MODO

ESCLAVO

Buffer para envo


y recepcin

Entrada Reloj
Entrada
o salida
de datos

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
Salidas de
drenador
abierto

Comunicacin Serie Sncrona

Para clculo
de frecuencia

Buffer

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
Configurar la entrada I2C para recibir datos
(bit RCEN)
direccin
Generar un pulso de reconocimiento (ACK)
(bit ACKEN)
(bit PEN)
Generar una condicin de STOP en SDA y SCL
(bit RSEN)
Establecer una repeticin de START en las mismas lneas

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

activa modo Maestro

SLAVE

activa modo Esclavo

SCL=pin

especifica el pin de reloj (pin es direccin SCL=PIN_B1)

SDA=pin

seala el pin de datos

Comunicacin Serie Sncrona

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


emplea la especificacin fast del I2C
FAST
emplea especificacin slow
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( )
de byte
Comunicacin
Serie Sncrona

comprobacin de recepcin
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

Sec. de Escritura

Secuencia Lectura

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

i2c_start( );
//Se enva bit de START
i2c_write(0xA0);
//Direccin del Esclavo y escritura
posterior i2c_write(hi(direccion)); //Se manda parte alta de una
direccin i2c_write(direccin); //Se manda parte baja de la direccin
i2c_write(dato);
//Se enva el dato a grabar
i2c_stop( );
//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<1
0)
{
while(!i2c_poll( ));
buffer[contador++]=i2c_read( );
} //Espera y recibe 10 bytes como
dispositivo esclavo
Otro ejemplo:
i2c_start(
);
//generacin de START
#use i2c(MASTER,
SDA=PIN_C4,
i2c_write(0xA0);
//Direccin de dispositivo y escritura
SCL=PIN_C3)
i2c_write(comando>>8);
//envo de parte alta de comando
long
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

Anda mungkin juga menyukai