Anda di halaman 1dari 18

Comunicacin Serie Sncrona I2C

Caractersticas generales de la comunicacin serie


Los datos se envan bit a bit por una misma lnea durante un tiempo fijo. La velocidad de transmisin se indica en baudios (nmero de bits enviados por segundo). La transferencia puede ser sncrona o asncrona. Sncrona: Se enva la seal de reloj para sincronizar cada bit. Asncrona: Se necesitan relojes en el emisor y el receptor de la misma frecuencia y en fase
Datos Datos EMISOR Reloj? Referencia de tensin RECEPTOR Reloj Bit i Bit i+1 t

Comunicacin Serie Sncrona I2C


Se emplean dos registros de desplazamiento (uno en el emisor y otro en el receptor) encadenados para la conversin paralelo/serie en la emisin y serie/paralelo en la recepcin. Se puede llevar a cabo varios tipos de sincronizacin. De los sucesivos bits. De cada paquete de bits (8 9 bits) Se enva la seal de reloj si la distancia entre Emisor y Receptor es corta. As se consiguen menores retardos en las transiciones y mejores flancos en la seal de reloj recibida. Posibles codificaciones de cada bit. NRZ: Nivel alto: 1 / NRZI: Cambio de nivel: 1 / RZ: Impulso: 1 / ...

Nivel bajo: 0 Sin cambio de nivel: 0 Sin impulso: 0

Comunicacin Serie Sncrona I2C


Transferencia sncrona
La comunicacin sncrona entre dos dispositivos requiere que uno de ellos acte como maestro y el otro, como esclavo. Dispositivo Maestro: Es el que genera la seal de reloj y el que tiene capacidad de iniciar o finalizar una transferencia . Dispositivo Esclavo: Recibe la seal de reloj y no tiene capacidad para iniciar una transferencia de informacin . Es posible efectuar una transmisin continua de bits de informacin.
Dato Dato

Maestro

Clk

Esclavo

Maestro

Clk

Esclavo

Ref. Maestro Emitiendo

Ref. Maestro Recibiendo

Comunicacin Serie Sncrona I2C


Comunicacin serie sncrona en microcontroladores PIC
Se implementa mediante el mdulo SSP : Interfaz de comunicacin serie sncrona. Est pensado para poder comunicarse con otros microcontroladores o perifricos mediante transmisin serie sncrona. 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 .... El mdulo SSP tiene dos posibles modos de funcionamiento. SPI (Serial Peripheral I nterface: Interface de Perifricos Serie)
SPI: Es una Marca Registrada de Motorola Corporation I2C: Es una Marca Registrada de Philips

I 2C (I nter-I ntegrated Circuit: Entre Circuitos Integrados)

Comunicacin Serie Sncrona I2C


Caractersticas generales del bus I2C
El bus Inter-Integrated-Circuit (I 2C) fue creado por Philips. Para transferencia de datos entre CIs de una PCB. Soporta transmisin de datos de hasta 400kbd.

Es ms lento que el mdulo SPI.

Un bus I 2C puede tener distintas configuraciones. y varios . Configuracin de un . Configuracin es el En cualquiera de estas configuraciones, el dispositivo nico que tiene capacidad de iniciar la transferencia, decidir con quin se realiza, el sentido de la misma (envo o recepcin desde el ) y cundo se finaliza. punto de vista del El bus I 2C consiste fsicamente en dos lneas de colector abierto. SCL para el reloj (pin RC3). SDA para los datos (pin RC4).
La comunicacin es, por tanto, .

Comunicacin Serie Sncrona I2C


Las lneas necesitan resistencias externas de . Para poder implementar un (Y cableado). Cuando el bus est inactivo, ambas lneas estn a 1. El protocolo I 2C puede usar direcciones de 7 de 10 bits. Puede haber hasta 128 hasta 1024 dispositivos colgados del bus. quiere leer o escribir. Con la direccin se informa si el ). El protocolo I 2C incluye un mecanismo de comprobacin ( - Cada transferencia de 8 bits, el Maestro enva un 9 pulso de reloj. - En ese instante, el dispositivo transmisor suelta la lnea SDA y el receptor reconoce el dato enviado mediante un ACK (SDA0). - Se enva un NACK (deja SDA=1) para finalizar la transmisin. Todos los cambios en SDA deben ocurrir mientras SCL=0. As se permite diferenciar dos condiciones nicas: Secuencia START (S). El Maestro hace SDA0 mientras SCL=1. Secuencia STOP (P). El Maestro hace SDA1 mientras SCL=1.

Comunicacin Serie Sncrona I2C


Fcil inclusin de nuevos dispositivos I 2C en el bus. Una vez disponible el microcontrolador con sus funciones de interface con bus I2C, la inclusin de un dispositivo I 2C adicional slo precisa su conexin a las dos lneas del bus (SDA y SCL ), que son las mismas para todos, y asignarle una direccin.

Conexiones en el bus I 2C.

VDD

Rp
Rp Rp

Perifrico
Rs Rs

VDD VOL i OL
Nmero mx. de dispositivos definidos por la capacidad en el bus: C max=400pF

SDA SCL
C bus=10 400pF

Comunicacin Serie Sncrona I2C


Direccionamiento de dispositivos en el bus I 2C Formato de 7 bits: (A7-A6-...- A1)
En la lnea SDA: Start S Lo pone el Maestro Reconocimiento (lo debe poner el Esclavo)

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

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


En la l nea SDA: Start Primer byte del Maestro S 1 1 1 1 0 A9A8 2 byte del Maestro R ACK A7 A6A5A4A3 A2 A1 A0 ACK W ACK S Reconocimientos del Esclavo despus de cada byte del Maestro

Lectura (1) o Escritura (0)

Comunicacin Serie Sncrona I2C


Reconocimiento de transferencia (ACK) Los datos se transmiten en paquetes de 8 bits (bytes). Tras cada byte el receptor debe intercalar un bit de reconocimiento (ACK). Si el receptor es el Esclavo y no genera el bit de reconocimiento despus de cada byte, el Maestro debe abortar la transferencia generando un bit de fin (STOP).

En este caso, y dado que las etapas de salida son de drenador abierto, los niveles lgicos 0 son dominantes en las lneas, por lo que 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 receptor es el dispositivo Maestro, 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 tras colocar un bit de no-reconocimiento (NACK). El Esclavo puede retardar el envo del siguiente byte (porque no lo tiene todava disponible, p.e.) situando la lnea SCL en estado bajo, forzando as al Maestro a situarse en un estado de Espera puesto que no podr generar flancos en SCL.

Comunicacin Serie Sncrona I2C


Secuencia de transmisin I 2C desde el Maestro.
SDA: S Direccin del Esclavo R/W A Dato A Dato A/A P

De Maestro a Esclavo De Esclavo a Maestro

0 porque el Maestro quiere escribir (enviar)

Reconocimiento (A) o no reconocimiento (A)

Secuencia de recepcin I 2C por parte del Maestro.


SDA: 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 I2C


Tpica transmisin I 2C para lectura desde el Esclavo.
Puesto por el Esclavo
NACK D7 D6 D5 D4 D3 D2 D1 D0

A7 A6 A5 A4 A3 A2

A1 R/W

ACK

ACK D7 D6 D5 D43 D3 D2 D1 D0

Pulso ACK

Pulso ACK

Pulso ACK

Tpica transmisin I 2C por parte del Esclavo.

Puesto por el Maestro


NACK

A7 A6 A5 A4 A3 A2

A1 R/W

ACK

D7 D6 D5 D4 D3 D2

D1 D0

Pulso ACK

El Esclavo pone SCL a 0 para darse tiempo de preparar el dato

Pulso ACK

Comunicacin Serie Sncrona I2C


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 I2C


El interface I2C en los microcontroladores PIC
Puede implementarse en dos mdulos (segn el tipo de PIC). BSSP (B asic
Modo Esclavo: Completo por hardware. Modo Maestro: Deteccin de bits START y STOP por hardware. 16C64, 16C65, 16C73, 16C74, ... Modo Esclavo: Completo por hardware. Modo Maestro: Completo por hardware. 16F87x

MSSP (M aster

Ambos mdulos son idnticos en lo que se refiere al interface SPI. Caractersticas del interface I 2C en el mdulo MSSP. - Detecta condiciones START y STOP en el bus por interrupcin. - Permite seleccionar tres modos de operacin.
Esclavo I2 C con direccin de 7 bits. Esclavo I2 C con direccin de 10 bits. Maestro I2 C con reloj SCL de frecuencia fSCL = fOSC /[4(SSPADD+1)] SSPCON SSPADD SSPCON2 SSPBUF SSPSTAT

- Seis registros asociados al funcionamiento de este mdulo.

Comunicacin Serie Sncrona I2C


Diagrama de bloques del bus I2C en modo
Bus de datos
Leer Escribir

RC3 / SCL RC4 / SDA

Reloj

SSPBUF SSPSR
MSb LSb

Buffer Buffer para para envo envo y y recepcin recepcin Registro Registro E/S E/S
No Noaccesible accesible directamente directamente

Detector de direccin SSPADD Deteccin de START/STOP

Detecta coincidencia en la direccin o llamada general

Control de los bits S y P del registro SSPSTAT

Direccin Direccin asignada asignada al al Esclavo Esclavo

Comunicacin Serie Sncrona I2C


Diagrama de bloques del bus I2C en modo
Bus de datos
Leer Escribir

SSPM3:SSPM0 SSPADD<6:0>

SSPBUF
RC4 SDA
SDA In

SSPSR
MSb LSb

Reloj

Generador de baudios

RC3 SCL

Generacin de START/STOP ACK Deteccin de START/STOP


SCL In Colisin de bus

Deteccin de colisin Control de CLK

S , P , WCOL SSPIF , BCLIF ACKSTAT , PEN

(SSPSTAT) (SSPCON2)

Comunicacin Serie Sncrona I2C


Registro SSPSTAT (94h)
SMP CKE D/A P S R/W UA BF

bit 7 bit 6 bit 5 bit 4 bit 3 bit 2

SMP: Bit de control de slew rate


0: Velocidad estndar 0: Especificaciones I2C 0: Direccin 1 : Alta velocidad (400kHz) 1 : Especificaciones SMBus 1 : Dato Se pone a 1 si la ltima secuencia detectada es un bit de STOP Se pone a 1 si la ltima secuencia detectada es un bit de START

CKE: Bit de seleccin de niveles umbral en los pines D/A: Informacin del ltimo byte transmitido P: Bit de STOP S: Bit de START

R/W: Informacin de lectura/escritura


0: Escritura 0: No hay transmisin 1 : Lectura 1 : Transmisin en progreso ( ( ) )

bit 1 bit 0

UA: Actualizacin del byte de direccin


0: No hace falta 1 : Es necesario actualizar la direccin 1 : SSPBUF est lleno

BF: Bit de estado del buffer


0: SSPBUF est vaco

Comunicacin Serie Sncrona I2C


Registro SSPCON (14h)
WCOL SSPOV SSPEN CKP SSPM3 SSPM2 SSPM1 SSPM0

bit 7 bit 6 bit 5 bit 4

WCOL: Bit de deteccin de colisin


0: No ha habido colisin 1 : Ha habido colisin

SSPOV: Bit indicador de overflow en la recepcin


0: No ha habido overflow 1 : Ha habido overflow

SSPEN: Habilitacin del puerto serie sncrono


0: Desabilitado 1 : Habilitado (usa SCL y SDA)

CKP: Control de SCL


0: Mantiene SCL a 0 1 : Reloj habilitado

bits 3:0 SSPM3:SSPM0: Modo de funcionamiento


0110: 0111 : 1000 : 1011 : Modo 1110 : 1111: con direcciones de 7 bits. con direcciones de 10 bits. con CLK=Fosc / [4(SSPADD+1)]. controlado por firmware ( inactivo). controlado por Fw (dir. de 7 bits, interrup. por bits de START y STOP). controlado por Fw (dir. de 10 bits, interrup. por bits de START y STOP).

Comunicacin Serie Sncrona I2C


Registro SSPCON2 (91h)
GCEN ACKSTAT ACKDT ACKEN RCEN PEN RSEN SEN

bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0

GCEN: Habilita
0: Deshabilitada 0: Recibido ACK del 0: ACK 0: Desactivada 0: Recepcin desactivada 0: Desactivada 0: Desactivado 0: Desactivada 1 : Habilita interrupciones por ( / Recepcin) ( / Recepcin) / Recepcin) ) ( ( ( ) ) ) 1 : No se ha recibido ACK del 1 : NACK ( ( 1 : Inicia secuencia de reconocimiento en SDA y SCL 1 : Activa modo recepcin 1 : Inicia situacin de STOP en SDA y SCL 1 : Inicia repetidas situaciones de START 1 : Inicia situacin de START en SDA y SCL

ACKSTAT: Bit de reconocimiento

ACKDT: Valor a transmitir tras una recepcin ACKEN: Habilitacin de secuencia ACK RCEN: Bit de habilitacin de recepcin PEN: Habilitacin de una secuencia STOP RSEN: Habilitacin de START repetido

SEN: Habilitacin de una secuencia START

Comunicacin Serie Sncrona I2C


Otros registros relacionados con el mdulo MSSP TRISC
Para definir RC3 y RC4 como entradas. Buffer de transmisin/recepcin serie. Registro de desplazamiento SSP (no accesible directamente). Define la direccin del

(87h)

SSPBUF SSPSR

(13h)

SSPADD

(93h)

o los baudios de la comunicacin (

).

PIR1 PIE1

Interrupciones del mdulo SSP (SSPIF SSPIE). Interrupcin por colisin del bus (BCLIF BCLIE). Habilita interrupciones de perifricos.

(0Ch 8Ch)

PIR2 PIE2 INTCON

(0Dh 8Dh)

(0Bh , 8Bh , 10Bh , 18Bh)

Comunicacin Serie Sncrona I2C


Funcionamiento en modo
Antes de activar el mdulo hay que configurar RC<3:4> como entradas. Configurar el MSSP en el registro SSPCON. I 2C con direcciones de 7 bits o con direcciones de 10 bits. I 2C con o sin interrupciones por bits de START y STOP.
Lo ms habitual es que no se usen interrupciones por START/STOP

Establecer la direccin del esclavo. Escribirla en el registro SSPADD.


La direccin viene indicada por SSPADD<7:1> - SSPADD<0>=0 LSb se usa para determinar la operacin solicitada por el

Esperar por un suceso I 2C. Se puede determinar con la ayuda del bit SSPIF.
La interrupcin puede estar activada o no

Identificar el suceso y actuar en consecuencia. Los sucesos I2C que percibe el pueden ser de 5 tipos.

10

Comunicacin Serie Sncrona I2C


solicita escritura. ltimo byte fue una direccin
ha comenzado una operacin de escritura con el inicio El de una secuencia START o RESTART en el bus, seguida del envo de la direccin del . La direccin que hay en el bus pasa al registro SSPSR del Si coincide con la suya, la direccin recibida pasa a SSPBUF. Bits del registro SSPSTAT. S=1 R/W = 0 D/A = 0 BF = 1
La ltima secuencia detectada fue un START El va a escribir datos en el El ltimo byte recibido fue una direccin El buffer est lleno

Debe leerse el registro SSPBUF aunque no se vaya a usar la informacin que contiene. . Esta accin borra el bit BF y evita posteriores

Comunicacin Serie Sncrona I2C


solicita escritura. ltimo byte fue un dato
Tras el byte de direccin, el . bytes de datos al Bits del registro SSPSTAT. S=1 R/W = 0 D/A = 1 BF = 1
La ltima secuencia detectada fue un START El escribe datos en el El ltimo byte recibido fue un dato El buffer est lleno

puede enviar uno o ms

Debe leerse el registro SSPBUF. Si SSPBUF no estaba lleno antes de la escritura, el un reconocimiento ACK en el 9 pulso de reloj. Lo hace el MSSP automticamente. Si ya estaba lleno, SSPOV 1 y se enva un NACK. enva

11

Comunicacin Serie Sncrona I2C


solicita lectura. ltimo byte fue una direccin
ha comenzado una operacin de lectura con el inicio de El una secuencia START o RESTART en el bus, seguida del envo de la direccin del . Bits del registro SSPSTAT. S=1 R/W = 1 D/A = 0 BF = 0
La ltima secuencia detectada fue un START El va a leer datos del El ltimo byte recibido fue una direccin El buffer est vaco

El bit CKP se pone a 0 para que la lnea SCL pase a estado bajo, para preparar el dato a enviar. dando as tiempo al El debe escribir en el buffer el dato solicitado por el . Y debe hacer CKP 1 para liberar la lnea SCL.

Comunicacin Serie Sncrona I2C


solicita lectura. ltimo byte fue un dato
El ya ha ledo un dato del y quiere leer otro.

Bits del registro SSPSTAT. S=1 R/W = 1 D/A = 1 BF = 0


La ltima secuencia detectada fue un START El lee datos del El ltimo byte recibido fue un dato El buffer est vaco

El bit CKP se pone a 0 para que la lnea SCL pase a estado bajo, para preparar el dato a enviar. dando as tiempo al El Esclavo manda el dato al Maestro escribindolo en el registro SSPBUF y haciendo CKP 1 para liberar la lnea SCL.

12

Comunicacin Serie Sncrona I2C


enva NACK
El ha enviado un NACK como respuesta al dato que ha recibido desde el . De este modo indica que ya no quiere recibir ms datos. Bits del registro SSPSTAT. S=1 R/W = 0 D/A = 1 BF = 0
La ltima secuencia detectada fue un START La lgica del queda reseteada El ltimo byte recibido fue un dato El buffer est vaco

El envo de un NACK queda identificado porque R/W 0. Debido a que la recepcin de un NACK da lugar a un reset de la . lgica I2C del Esta situacin da lugar a que los bits del registro SSPSTAT reflejen una situacin incoherente.
Indican que se ha recibido un dato del est vaco. pero que el buffer

Comunicacin Serie Sncrona I2C


Control de errores en modo
Cada vez que se lee el SSPBUF, el usuario debe asegurarse de que no han ocurrido overflows. Comprobando el estado del bit SSPOV. Si ha ocurrido un overflow, ser necesario hacer SSPOV 0 y leer SSPBUF para permitir nuevas recepciones. Los sucesos que tienen lugar tras un overflow dependen de cada caso. La lgica del Tpicamente el reciba un ACK. le enviar un NACK al . intentar volver a enviar el dato hasta que

Tras escribir un dato en SSPBUF, el usuario debe comprobar el valor de WCOL para asegurar que no se ha producido una colisin. En la prctica, no habr colisiones si nicamente se escribe en est transmitiendo al . SSPBUF cuando BF=0 y el

13

Comunicacin Serie Sncrona I2C


Funcionamiento en modo
Configurar el MSSP para funcionar en modo - Definir lneas SDA y SCL como entradas. - Configurar el modo I2C.
TRISC xxx11xxx SSPCON1 00101000

I 2C.

- Seleccionar los baudios de la comunicacin.


Slo se usan los bits 0 a 6

- Configurar interrupciones (si se necesitan)


SSPIE / SSPIF BCLIE / BCLIF

SSPADD [(f osc/Bd) / 4] 1 Control del slew rate (SSPSTAT<7>)

100kHz 400kHz 1MHz

Implementar alguno de los 6 eventos I 2C. 1. START 5. Reconocer (tras una lectura) 2. RESTART * ACK 3. STOP * NACK 4. Leer (recibir datos) 6. Escribir (transmitir datos)

Comunicacin Serie Sncrona I2C


Funcionamiento del Maestro
Secuencia tpica de transmisin de un byte por parte del Maestro a) Se genera una condicin de 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. d) Los bits de la direccin salen por SDA hasta completar los 8 bits. el bit de reconocimiento (ACK) recibido del esclavo y se e) 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 salen por SDA hasta completar la transmisin. el bit de reconocimiento (ACK) y se graba su valor en i) Se SSPCON<6>. j) Al final del 9 flanco en SCL se pone SSPIF a 1 (hay que ponerlo a 0). 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.

14

Comunicacin Serie Sncrona I2C


Generacin de una secuencia START
Hacer SEN 1 para habilitar la generacin de START. Bit SSPCON2<0>. Esto da lugar a que la lnea SDA pase a 0 mientras SCL est a 1. As se define una secuencia START, que da lugar a:
S1 SEN 0 SSPIF 1 (SSPSTAT<3>) (SSPCON2<0>) (PIR1<3>)

Generacin de una secuencia de START repetido


Hacer RSEN 1 para habilitar la generacin de RESTART. Bit SSPCON2<1>. Esto da lugar a que se ejecuten secuencias de START sin ser precedidas de la correspondiente secuencia de STOP. De este modo, el no cede el control del bus en ningn momento.

Comunicacin Serie Sncrona I2C


Generacin de una secuencia STOP
Hacer PEN 1 para habilitar la generacin de STOP. Bit SSPCON2<2>. Esto da lugar a que la lnea SDA pase a 1 mientras SCL est a 1. Se indica as que ha finalizado la recepcin/transmisin. El bus I2C queda libre y se tiene:
P1 PEN 0 SSPIF 1 (SSPSTAT<4>) (SSPCON2<2>) (PIR1<3>)

Generacin de una lectura (recepcin)


Hacer RCEN 1 para habilitar una lectura. Bit SSPCON2<3>. Entran bits cada pulso de SCL en SSPSR. Tras el 8 bit, RCEN 0, SSPSR SSPBUF, BF 1, SSPIF 1. En ese momento SCL=0 y hay que leer el buffer para hacer BF 0. A continuacin se puede enviar un ACK.

15

Comunicacin Serie Sncrona I2C


Generacin de un ACK
Indicar en ACKDT si se va a generar un ACK (0) o un NACK (1). Bit SSPCON2<5>. Hacer ACKEN 1 para habilitar la generacin de ACK. Bit SSPCON2<4>. Esto libera la lnea de datos (SDA 1), para que el receptor la ponga a 0 durante un pulso de reloj. Tras este pulso de reloj, ACKEN 0 automticamente. Es obligatorio mandar un ACK/NACK al final de cada transferencia.
IMPORTANTE!!

Generacin de una escritura (transmisin)


Basta con escribir el dato a enviar en SSPBUF. - BF 1 mientras se est enviando el dato. - Cuando se ha enviado el 8 bit, BF 0. - El Maestro libera entonces SDA para recibir ACK. - Tras el 9 pulso de reloj, SSPIF 1.

Comunicacin Serie Sncrona I2C


Control de errores en modo
Las colisiones por escritura deben controlarse mediante observacin del bit WCOL (SSPCON<7>). Una colisin de escritura sucede cuando se intenta escribir un dato en el buffer antes de que haya terminado el evento anterior. No tiene asociada ninguna interrupcin. Las colisiones de bus s tienen asociada una interrupcin: BCLIF. Cuando SCL=1, el dato en SDA debe ser estable. Se produce colisin de bus cuando el dato cambia mientras SCL=1 o si se detecta SDA=0 cuando SDA debera ser 1 (estar libre). En ese caso se hace BCLIF 0 y se pone la lgica I 2C en reposo. La siguiente secuencia deber ser un START. Un NACK puede indicar error o simplemente un estado de funcionamiento que debe ser detectado y procesado. El puede recibir un NACK si hay un error en el o si ste est desbordado. Segn la situacin, el Maestro deber generar un RESTART, un STOP o un STOP/START.

16

Comunicacin Serie Sncrona I2C


Bus I2C en el compilador C de CCS
Configuracin del mdulo I 2C #use i2c (opciones)
opciones: MASTER SLAVE SCL = pin SDA = pin ADDRESS = nn FAST SLOW NOFORCE_SW RESTART_WDT Selecciona modo Selecciona modo Especifica el pin SCL (PIN_C3) Especifica el pin SCL (PIN_C4) Especifica la direccin del Selecciona la especificacin I2C rpida Selecciona la especificacin I2C lenta Utiliza funciones I2C hardware. Resetea el WDT mientras espera a hacer una lectura de bus

2C por software. Si , ,implementar Sino nose seindica indica NOFORCE_SW NOFORCE_SW implementarel elprotocolo protocoloII2 C por software.

- Pensado para aquellos microcontroladores PIC que no disponen de MSSP. - Pensado para aquellos microcontroladores PIC que no disponen de MSSP. , sin embargo, deber usarse con el MSSP. - El modo , sin embargo, deber usarse con el MSSP. - El modo

Comunicacin Serie Sncrona I2C


Secuencias de START y STOP i2c_start (); , esta instruccin genera una Si el PIC est en modo secuencia START, tras la cual la lnea SCL se pone a 0 hasta que se escribe en el bus. Si se lanza otra secuencia START antes de que se produzca una secuencia STOP, se habr ejecutado una secuencia RESTART.

i2c_stop (); Si el PIC est en modo secuencia STOP. , esta instruccin genera una

17

Comunicacin Serie Sncrona I2C


Escritura en el bus I 2C i2c_write (dato);
dato: valor1 :

valor1 = i2c_write (dato);

Entero de 8 bits a sacar por el bus. Bit que recoge el valor del ACK enviado por el receptor.

Manda un byte al bus I2C. En modo , esta funcin generar adems la seal de reloj que marca la velocidad de transmisin del dato; en modo , se . esperar por la seal de reloj que genere el Esta funcin puede devolver el bit ACK que enva el receptor cuando la transmisin ha terminado. El LSb del primer dato transmitido tras una secuencia de START indica el sentido en que se pretende establecer la comunicacin (si dicho LSb es 0, la informacin se transmitir de a

).

Comunicacin Serie Sncrona I2C


Lectura del bus I 2C dato = i2c_read([ack] );
dato: ack: Entero de 8 bits. Bit opcional 0 indica no enviar ACK 1 indica enviar ACK (valor por defecto)

Lee el dato presente en el bus I2C. Se usa junto con i2c_poll() para evitar que el programa se cuelgue. Para que el watchdog se resetee mientras se espera a poder leer el dato, se incluye la opcin RESTART_WDT en la directiva #use i2c().

valor1 = i2_poll();
valor1 : 0 (FALSE) si no se ha recibido un byte en el buffer. 1 (TRUE) si se ha recibido un byte en el buffer.

Slo se usa en PICs que disponen de MSSP.

18