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.


Top Related