comunicación serie síncrona i2c
TRANSCRIPT
-
1Comunicacin Serie Sncrona I2C
Caractersticas generales de la comunicacin serieLos datos se envan bit a bit por una misma lnea durante un tiempo
fijo.
La velocidad de transmisin se indica en baudios (nmero de bitsenviados 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
EMISOR RECEPTOR
Datos
Referenciade tensin
Reloj?
t
t
Datos
Reloj
Bit i Bit i+1
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.
Se enva la seal de reloj si la distancia entre Emisor y Receptor es corta.
De los sucesivos bits.De cada paquete de bits (8 9 bits)
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 / Nivel bajo: 0NRZI: Cambio de nivel: 1 / Sin cambio de nivel: 0RZ: Impulso: 1 / Sin impulso: 0...
-
2Comunicacin Serie Sncrona I2C
Transferencia sncrona
Dispositivo Maestro: Es el que genera la seal de reloj y el que tienecapacidad de iniciar o finalizar una transferencia.
Dispositivo Esclavo: Recibe la seal de reloj y no tiene capacidad parainiciar una transferencia de informacin.
Es posible efectuar una transmisin continua de bits de informacin.
Maestro Esclavo
Dato
Clk Maestro Esclavo
Dato
Clk
Maestro Emitiendo Maestro Recibiendo
Ref. Ref.
La comunicacin sncrona entre dos dispositivos requiere que uno de ellos acte como maestro y el otro, como esclavo.
Comunicacin Serie Sncrona I2C
Comunicacin serie sncrona en microcontroladores PICSe implementa mediante el mdulo SSP
Est pensado para poder comunicarse con otros microcontroladores o perifricos mediante transmisin serie sncrona.
EEPROM serie Almacenamiento de datos no voltilesRegistros de Desplazamiento Expansin de entradas y/o salidasDrivers de Displays Reduccin de conexionesConversores A/D Digitalizacin externa de seales....
Synchronous Serial Port : Interfaz de comunicacin serie sncrona.
El mdulo SSP tiene dos posibles modos de funcionamiento.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
-
3Comunicacin Serie Sncrona I2C
Caractersticas generales del bus I2CEl bus Inter-Integrated-Circuit (I2C) fue creado por Philips.
Para transferencia de datos entre CIs de una PCB.Soporta transmisin de datos de hasta 400kbd.
El bus I2C consiste fsicamente en dos lneas de colector abierto.
Un bus I2C puede tener distintas configuraciones.Configuracin de un Maestro y varios Esclavos.Configuracin multiMaestro.En cualquiera de estas configuraciones, 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 desde el punto de vista del Maestro) y cundo se finaliza.
SCL para el reloj (pin RC3).SDA para los datos (pin RC4).
La comunicacin es, por tanto, half-duplex.
Es ms lento que el mdulo SPI.
Comunicacin Serie Sncrona I2C
Las lneas necesitan resistencias externas de pull-up.Para poder implementar un wire-AND (Y cableado).Cuando el bus est inactivo, ambas lneas estn a 1.
El protocolo I2C puede usar direcciones de 7 de 10 bits.Puede haber hasta 128 hasta 1024 dispositivos colgados del bus.Con la direccin se informa si el Maestro quiere leer o escribir.
El protocolo I2C incluye un mecanismo de comprobacin (handshaking).- 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.
-
4Comunicacin Serie Sncrona I2C
Fcil inclusin de nuevos dispositivos I2C en el bus.Una vez disponible el microcontrolador con sus funciones de
interface con bus I2C, la inclusin de un dispositivo I2C 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 I2C.
Perifrico
SDASCL
Rp Rp
Rs Rs
Cbus=10 400pF
VDD
OL
OLDDp i
VVR
-
Nmero mx.de dispositivosdefinidos porla capacidad
en el bus:Cmax=400pF
Comunicacin Serie Sncrona I2C
Direccionamiento de dispositivos en el bus I2C
Formato de 7 bits: (A7-A6-...-A1)
S A7 A6 A5 A4 A3 A2 A1 R/W ACK
Start Direccin de 7 bits del esclavo
En lalnea SDA:
Lectura (1)o Escritura (0)
Reconocimiento(lo debe poner el Esclavo)Lo pone el Maestro
Formato de 10 bits: (A9-A8-A7-...-A0)
S 1 1 1 1 0 A9A8 RW ACKA7A6A5A4A3A2 A1 A0
SACKACK
Start Lectura (1)o Escritura (0)
Reconocimientosdel Esclavo
despus de cada byte del Maestro
Primer byte del Maestro 2 byte del MaestroEn la
lnea SDA:
-
5Comunicacin 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 drenadorabierto, los niveles lgicos 0 son dominantes en las lneas, porlo que el Esclavo debe dejar su salida SDA a 1 para que elMaestro pueda generar el STOP (paso de 0 a 1 con SCL=1)
Si el receptor es el dispositivo Maestro, genera un ACK tras cadabyte 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 I2C desde el Maestro.
Secuencia de recepcin I2C por parte del Maestro.
0 porque el Maestro quiere escribir (enviar)
De Maestro a Esclavo
De Esclavo a Maestro
Reconocimiento (A)o no reconocimiento (A)
SDA: S Direccin del Esclavo R/W A Dato A Dato A/A P
1 porque el Maestro quiere leer (recibir)
Direccin del Esclavo R/W A Dato A Dato A P
No reconocimientopor Maestro y Parada
SSDA:
-
6Comunicacin Serie Sncrona I2C
Tpica transmisin I2C para lectura desde el Esclavo.
Pulso ACK
87654321 9 87654321 9 87654321 9
D5D6 D3D43 D1D2 D0D7A6A7 A4A5 A2A3 A1 D5D6 D3D4 D1D2 D0D7
Pulso ACK Pulso ACK
ACK
R/W
ACK NACKRecibe la direccin Recibe el dato Recibe el dato
S P
Tpica transmisin I2C por parte del Esclavo.
Pulso ACK
87654321 9 87654321 9
A6A7 A4A5 A2A3 A1 D5D6 D3D4 D1D2 D0D7
Pulso ACK
ACK
R/W
NACKRecibe la direccin Enva el dato
S P
El Esclavo pone SCL a 0 para darse tiempo de preparar el dato
Puesto porel Esclavo
Puesto porel Maestro
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.
-
7Comunicacin Serie Sncrona I2C
El interface I2C en los microcontroladores PICPuede implementarse en dos mdulos (segn el tipo de PIC).
Caractersticas del interface I2C en el mdulo MSSP.- Detecta condiciones START y STOP en el bus por interrupcin.- Permite seleccionar tres modos de operacin.
Esclavo I2C con direccin de 7 bits.Esclavo I2C con direccin de 10 bits.Maestro I2C con reloj SCL de frecuencia fSCL = fOSC/[4(SSPADD+1)]
- Seis registros asociados al funcionamiento de este mdulo.SSPCON SSPCON2 SSPSTATSSPADD SSPBUF SSPSR
BSSP (Basic Synchronous Serial Port )Modo Esclavo: Completo por hardware.Modo Maestro: Deteccin de bits START y STOP por hardware.16C64, 16C65, 16C73, 16C74, ...
MSSP (Master Synchronous Serial Port )Modo Esclavo: Completo por hardware.Modo Maestro: Completo por hardware.16F87x
Ambos mdulos son idnticos en lo que se refiere al interface SPI.
Comunicacin Serie Sncrona I2C
Diagrama de bloques del bus I2C en modo Esclavo
Deteccin deSTART/STOP
SSPSR
Leer
RC3 / SCL
Detecta coincidenciaen la direccin
o llamada general
Bus de datos
RC4 / SDA
SSPBUF
Detector dedireccin
SSPADD
Escribir
Reloj
MSb LSb
Control de los bitsS y P del registro
SSPSTAT
Buffer paraenvo y
recepcin
Buffer paraenvo y
recepcin
Registro E/SNo accesibledirectamente
Registro E/SNo accesibledirectamente
Direccinasignadaal Esclavo
Direccinasignadaal Esclavo
-
8Comunicacin Serie Sncrona I2C
Diagrama de bloques del bus I2C en modo Maestro
Generacin deSTART/STOP
ACK
SSPSR
Leer
RC3SCL
S , P , WCOL (SSPSTAT)SSPIF , BCLIFACKSTAT , PEN (SSPCON2)
Bus de datos
RC4SDA
SSPBUF
Generadorde baudios
Escribir
Reloj
MSb LSb
SSPM3:SSPM0SSPADD
Deteccin deSTART/STOP
Deteccin de colisinControl de CLK
SDA InH
abili
tare
cepc
in
Colisin de bus
SCL In
Ctrl
CLK
Ctrl
CLK
(det
iene
fue
nte
de C
LK)
Comunicacin Serie Sncrona I2C
Registro SSPSTAT (94h)
D/A P R/W UASCKESMP BF
bit 6 CKE: Bit de seleccin de niveles umbral en los pines0: Especificaciones I2C 1: Especificaciones SMBus
bit 5 D/A: Informacin del ltimo byte transmitido0: Direccin 1: Dato
bit 4 P: Bit de STOP Se pone a 1 si la ltima secuencia detectada es un bit de STOP
bit 2 R/W: Informacin de lectura/escritura0: Escritura 1: Lectura (Esclavo )0: No hay transmisin 1: Transmisin en progreso (Maestro)
bit 1 UA: Actualizacin del byte de direccin0: No hace falta 1: Es necesario actualizar la direccin
bit 0 BF: Bit de estado del buffer0: SSPBUF est vaco 1: SSPBUF est lleno
Maestrobit 7 SMP: Bit de control de slew rate
0: Velocidad estndar 1: Alta velocidad (400kHz)
bit 3 S: Bit de START Se pone a 1 si la ltima secuencia detectada es un bit de START
-
9Comunicacin Serie Sncrona I2C
Registro SSPCON (14h)
SSPEN CKP SSPM2 SSPM1SSPM3SSPOVWCOL SSPM0
bit 6 SSPOV: Bit indicador de overflow en la recepcin0: No ha habido overflow 1: Ha habido overflow
bit 5 SSPEN: Habilitacin del puerto serie sncrono0: Desabilitado 1: Habilitado (usa SCL y SDA)
bit 4 CKP: Control de SCL0: Mantiene SCL a 0 1: Reloj habilitado
bits 3:0 SSPM3:SSPM0: Modo de funcionamiento0110: Esclavo con direcciones de 7 bits.0111 : Esclavo con direcciones de 10 bits.1000: Maestro con CLK=Fosc / [4(SSPADD+1)].1011 : Modo Maestro controlado por firmware (Esclavo inactivo).1110: Maestro controlado por Fw (dir. de 7 bits, interrup. por bits de START y STOP).1111: Maestro controlado por Fw (dir. de 10 bits, interrup. por bits de START y STOP).
bit 7 WCOL: Bit de deteccin de colisin0: No ha habido colisin 1: Ha habido colisin
Comunicacin Serie Sncrona I2C
Registro SSPCON2 (91h)
ACKDT ACKEN PEN RSENRCENACKSTATGCEN SEN
bit 6 ACKSTAT: Bit de reconocimiento (Maestro / Recepcin)0: Recibido ACK del Esclavo 1: No se ha recibido ACK del Esclavo
bit 5 ACKDT: Valor a transmitir tras una recepcin (Maestro / Recepcin)0: ACK 1: NACK
bit 4 ACKEN: Habilitacin de secuencia ACK (Maestro / Recepcin)
bit 2 PEN: Habilitacin de una secuencia STOP (Maestro )0: Desactivada 1: Inicia situacin de STOP en SDA y SCL
bit 1 RSEN: Habilitacin de START repetido (Maestro)0: Desactivado 1: Inicia repetidas situaciones de START
bit 0 SEN: Habilitacin de una secuencia START (Maestro)0: Desactivada 1: Inicia situacin de START en SDA y SCL
Esclavobit 7 GCEN: Habilita Llamada General
0: Deshabilitada 1: Habilita interrupciones por Llamada General
bit 3 RCEN: Bit de habilitacin de recepcin (Maestro)0: Desactivada 1: Inicia secuencia de reconocimiento en SDA y SCL
0: Recepcin desactivada 1: Activa modo recepcin
-
10
Comunicacin Serie Sncrona I2C
Otros registros relacionados con el mdulo MSSP
TRISC (87h)Para definir RC3 y RC4 como entradas.
SSPBUF (13h)Buffer de transmisin/recepcin serie.
SSPSRRegistro de desplazamiento SSP (no accesible directamente).
SSPADD (93h)Define la direccin del Esclavo o los baudios de la comunicacin (Maestro).
PIR1 PIE1 (0Ch 8Ch)Interrupciones del mdulo SSP (SSPIF SSPIE).
PIR2 PIE2 (0Dh 8Dh)Interrupcin por colisin del bus (BCLIF BCLIE).
INTCON (0Bh , 8Bh , 10Bh , 18Bh)Habilita interrupciones de perifricos.
Comunicacin Serie Sncrona I2C
Funcionamiento en modo EsclavoAntes de activar el mdulo hay que configurar RC como entradas.
Configurar el MSSP en el registro SSPCON.Esclavo I2C con direcciones de 7 bits o con direcciones de 10 bits.Esclavo I2C 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 - SSPADD=0LSb se usa para determinar la operacin solicitada por el Maestro
Esperar por un suceso I2C.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 Esclavo pueden ser de 5 tipos.
-
11
Comunicacin Serie Sncrona I2C
Maestro solicita escritura. ltimo byte fue una direccin
Bits del registro SSPSTAT.- S = 1 La ltima secuencia detectada fue un START- R/W = 0 El Maestro va a escribir datos en el Esclavo- D/A = 0 El ltimo byte recibido fue una direccin- BF = 1 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 overflows.
El Maestro ha comenzado una operacin de escritura con el inicio de una secuencia START o RESTART en el bus, seguida del envo dela direccin del Esclavo.
La direccin que hay en el bus pasa al registro SSPSR del Esclavo. Si coincide con la suya, la direccin recibida pasa a SSPBUF.
Comunicacin Serie Sncrona I2C
Maestro solicita escritura. ltimo byte fue un dato
Bits del registro SSPSTAT.- S = 1 La ltima secuencia detectada fue un START- R/W = 0 El Maestro escribe datos en el Esclavo- D/A = 1 El ltimo byte recibido fue un dato- BF = 1 El buffer est lleno
Debe leerse el registro SSPBUF.
Tras el byte de direccin, el Maestro puede enviar uno o ms bytes de datos al Esclavo.
Si SSPBUF no estaba lleno antes de la escritura, el Esclavo enva 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.
-
12
Comunicacin Serie Sncrona I2C
Maestro solicita lectura. ltimo byte fue una direccin
Bits del registro SSPSTAT.- S = 1 La ltima secuencia detectada fue un START- R/W = 1 El Maestro va a leer datos del Esclavo- D/A = 0 El ltimo byte recibido fue una direccin- BF = 0 El buffer est vaco
El bit CKP se pone a 0 para que la lnea SCL pase a estado bajo, dando as tiempo al Esclavo para preparar el dato a enviar.
El Maestro ha comenzado una operacin de lectura con el inicio de una secuencia START o RESTART en el bus, seguida del envo de ladireccin del Esclavo.
El Esclavo debe escribir en el buffer el dato solicitado por el Maestro.
Y debe hacer CKP 1 para liberar la lnea SCL.
Comunicacin Serie Sncrona I2C
Bits del registro SSPSTAT.- S = 1 La ltima secuencia detectada fue un START- R/W = 1 El Maestro lee datos del Esclavo- D/A = 1 El ltimo byte recibido fue un dato- BF = 0 El buffer est vaco
El bit CKP se pone a 0 para que la lnea SCL pase a estado bajo, dando as tiempo al Esclavo para preparar el dato a enviar.
El Esclavo manda el dato al Maestro escribindolo en el registro SSPBUF y haciendo CKP 1 para liberar la lnea SCL.
Maestro solicita lectura. ltimo byte fue un datoEl Maestro ya ha ledo un dato del Esclavo y quiere leer otro.
-
13
Comunicacin Serie Sncrona I2C
Bits del registro SSPSTAT.- S = 1 La ltima secuencia detectada fue un START- R/W = 0 La lgica del Esclavo queda reseteada- D/A = 1 El ltimo byte recibido fue un dato- BF = 0 El buffer est vaco
El envo de un NACK queda identificado porque R/W 0.
De este modo indica que ya no quiere recibir ms datos.
Debido a que la recepcin de un NACK da lugar a un reset de la lgica I2C del Esclavo.Esta situacin da lugar a que los bits del registro SSPSTAT reflejen
una situacin incoherente.Indican que se ha recibido un dato del Maestro pero que el buffer est vaco.
Maestro enva NACKEl Maestro ha enviado un NACK como respuesta al dato que ha
recibido desde el Esclavo.
Comunicacin Serie Sncrona I2C
Control de errores en modo EsclavoCada 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 Esclavo le enviar un NACK al Maestro.Tpicamente el Maestro intentar volver a enviar el dato hasta que
reciba un ACK.
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 SSPBUF cuando BF=0 y el Esclavo est transmitiendo al Maestro.
-
14
Comunicacin Serie Sncrona I2C
Funcionamiento en modo MaestroConfigurar el MSSP para funcionar en modo Maestro I2C.
- Definir lneas SDA y SCL como entradas.TRISC xxx11xxx
- Configurar el modo I2C.SSPCON1 00101000
- Seleccionar los baudios de la comunicacin.SSPADD [(fosc/Bd) / 4] 1Control del slew rate (SSPSTAT)
- Configurar interrupciones (si se necesitan)SSPIE / SSPIF - BCLIE / BCLIF
Implementar alguno de los 6 eventos I2C.1. START 5. Reconocer (tras una lectura)2. RESTART * ACK3. STOP * NACK4. Leer (recibir datos) 6. Escribir (transmitir datos)
100kHz400kHz1MHzSlo se usan
los bits 0 a 6
Comunicacin Serie Sncrona I2C
Funcionamiento del MaestroSecuencia 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.e) Se lee el bit de reconocimiento (ACK) recibido del esclavo y se
introduce ese bit en SSPCON2.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.i) Se lee el bit de reconocimiento (ACK) y se graba su valor en
SSPCON.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.
Se s
upon
e qu
e la
di
recc
in
es d
e 7
bits
-
15
Comunicacin Serie Sncrona I2C
Hacer SEN 1 para habilitar la generacin de START.Bit SSPCON2.
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:
S 1 (SSPSTAT)SEN 0 (SSPCON2)SSPIF 1 (PIR1)
Generacin de una secuencia de START repetidoHacer RSEN 1 para habilitar la generacin de RESTART.
Bit SSPCON2.
Esto da lugar a que se ejecuten secuencias de START sin ser precedidas de la correspondiente secuencia de STOP.
De este modo, el Maestro no cede el control del bus en ningn momento.
Generacin de una secuencia START
Comunicacin Serie Sncrona I2C
Generacin de una secuencia STOPHacer PEN 1 para habilitar la generacin de STOP.
Bit SSPCON2.
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:
P 1 (SSPSTAT)PEN 0 (SSPCON2)SSPIF 1 (PIR1)
Generacin de una lectura (recepcin)Hacer RCEN 1 para habilitar una lectura.
Bit SSPCON2.
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.
-
16
Comunicacin Serie Sncrona I2C
Generacin de un ACK
Hacer ACKEN 1 para habilitar la generacin de ACK.Bit SSPCON2.
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.
Generacin de una escritura (transmisin)
Indicar en ACKDT si se va a generar un ACK (0) o un NACK (1).Bit SSPCON2.
- 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.
Basta con escribir el dato a enviar en SSPBUF.
IMPORTANTE!!
Antes de iniciar un evento es necesario que el evento anterior haya finalizado.
Conviene desarrollar rutinas que comprue-ben si el mdulo est inactivo antes de lan-zar un nuevo evento
Comunicacin Serie Sncrona I2C
Control de errores en modo MaestroLas colisiones por escritura deben controlarse mediante observacin del
bit WCOL (SSPCON).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 I2C 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 Maestro puede recibir un NACK si hay un error en el Esclavo o si ste est desbordado.
Segn la situacin, el Maestro deber generar un RESTART, un STOP o un STOP/START.
-
17
Comunicacin Serie Sncrona I2C
Configuracin del mdulo I2C
#use i2c (opciones)opciones: MASTER Selecciona modo Maestro
SLAVE Selecciona modo EsclavoSCL = pin Especifica el pin SCL (PIN_C3)SDA = pin Especifica el pinSCL (PIN_C4)ADDRESS = nn Especifica la direccin del EsclavoFAST Selecciona la especificacin I2C rpidaSLOW Selecciona la especificacin I2C lentaNOFORCE_SW Utiliza funciones I2C hardware.RESTART_WDT Resetea el WDT mientras espera a hacer
una lectura de bus
Bus I2C en el compilador C de CCS
Si no se indica NOFORCE_SW, implementar el protocolo I2C por software.- Pensado para aquellos microcontroladores PIC que no disponen de MSSP.- El modo Esclavo, sin embargo, deber usarse con el MSSP.
Si no se indica NOFORCE_SW, implementar el protocolo I2C por software.- Pensado para aquellos microcontroladores PIC que no disponen de MSSP.- El modo Esclavo, sin embargo, deber usarse con el MSSP.
Comunicacin Serie Sncrona I2C
Secuencias de START y STOP
i2c_start ();
Si el PIC est en modo Maestro, esta instruccin genera una 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 unasecuencia STOP, se habr ejecutado una secuencia RESTART.
i2c_stop ();
Si el PIC est en modo Maestro, esta instruccin genera una secuencia STOP.
-
18
Comunicacin Serie Sncrona I2C
Escritura en el bus I2C
i2c_write (dato); valor1 = i2c_write (dato);dato: Entero de 8 bits a sacar por el bus.valor1: Bit que recoge el valor del ACK enviado por el receptor.
Manda un byte al bus I2C.
En modo Maestro, esta funcin generar adems la seal de reloj que marca la velocidad de transmisin del dato; en modo Esclavo, se esperar por la seal de reloj que genere el Maestro.
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 Maestro a Esclavo).
Comunicacin Serie Sncrona I2C
dato: Entero de 8 bits.ack: Bit opcional 0 indica no enviar ACK
1 indica enviar ACK (valor por defecto)
Lectura del bus I2C
dato = i2c_read([ack]);
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: 0 (FALSE) si no se ha recibido un byte en el buffer.1 (TRUE) si se ha recibido un byte en el buffer.
valor1 = i2_poll();
Slo se usa en PICs que disponen de MSSP.