Está en la página 1de 34

Comunicación

MSSP – I2C
IE3054 – ELECTRÓNICA DIGITAL 2
Agenda
1. Módulo MSSP – I2C
2. Proyecto #01
01
Comunicación
I2C
Comunicación I2C
Modo I2C (bus de circuito inter-integrado) es adecuado para ser utilizado cuando el
microcontrolador debe intercambiar datos con circuitos integrados (sensores ó
actuadores) ó con otros microcontroladores.
Por ejemplo:
◦ Microcontroladores
◦ Circuitos integrados especializados
◦ Periféricos inteligentes
◦ Memorias
◦ Sensores
◦ Relojes de tiempo real (RTC)
Comunicación I2C
Similar al modo SPI: la transmisión de datos en modo I2C es síncrona y bidireccional.
Solo se utilizan dos pines para transmisión de datos.
◦ SDA línea de datos seriales
◦ SCL línea de reloj serial

SDA SCL
CLK
Comunicación I2C
●Se pueden conectar hasta 112 dispositivos en una sóla red

●La red puede tener uno (ó múltiples) maestros y uno (ó múltiples) esclavos
●El reloj que se utiliza para sincronizar el funcionamiento de los equipos. Siempre
es generado por un dispositivo maestro y su frecuencia afecta a la velocidad de
transmisión de datos.
Comunicación I2C
Según el protocolo de esta comunicación se pueden alcanzar frecuencias de hasta de 5 Mbps.
Sin embargo la frecuencia más utilizada es de 100 KHz.
El maestro siempre inicia cada intercambio de datos, media vez ocurra una condición de
arranque (Start condition).
Los módulos I2C en los dispositivos sen open-drain por lo que es necesario colocar
resistencias pull-up en el bus.

100 KHz
Comunicación I2C

8
Funcionamiento
Comunicación I2C
1. El maestro envía el bit de arranque (0) por el pin SDA.
2. Se envía la dirección de 7 bits del dispositivo esclavo seleccionado.
3. Se manda un bit que requiere al dispositivo escribir (0) o leer (1) el dato
enviado.
1 Byte
B7 B6 B5 B4 B3 B2 B1 B0
Dirección dispositivo R/W
Comunicación I2C
Todos los esclavos comparten la misma línea SDA, por lo que recibirán
simultáneamente el primer byte, pero sólo el que contiene la dirección
recibirá el dato.
Comunicación I2C
Una vez que el primer byte se ha enviado el maestro se pone en
modo de recepción y espera el reconocimiento del dispositivo
receptor.
Si el dispositivo esclavo envía un bit de reconocimiento (1) la
transmisión de datos continuará hasta que el dispositivo maestro
envíe el bit de parada (Stop).

Reconocimiento (ACK)
Maestro
(MCU)

Esclavo 1 Esclavo 2 Esclavo 3


Comunicación I2C
Circuito 5V a 3.3V

13
Comunicación en serie
El módulo I2C utilizan seis registros:
◦ SSPCON
◦ SSPCON2
◦ SSPSTAT
◦ SSPBUF
◦ SSPSR
◦ SSPADD

SSPADD
SSPSTAT SSPCON SSPCON2 SSPSR
SSPBUF
Configuración
Datos
Modo Maestro
Para habilitar el modo maestro se debe configurar lo
siguiente:
◦ Velocidad de transmisión en baudios
◦ Velocidad de transición o rotación
◦ Modo maestro
◦ Habilitar el módulo
◦ Esperar el bit SSPIF del registro PIR1 indicando que todo está
preparado para transmisión de datos.
◦ Luego poner a cero dicha bandera y estamos listos para enviar.
Modo Maestro
Modo Maestro
La transmisión de datos en el pin SDA se inicia con un cero lógico
cuando se coloca un 1 en el bit SPEN del registro SSPCON2.
Pero el uC debe esperar cierto tiempo antes de iniciar la
comunicación. Si se cumplen todas las condiciones, el bit SSPIF
del registro PIR1 se pone a uno y la transmisión de datos inicia en
cuanto se cargue el registro SSPBUF.

Esperar
Maestro
Maestro
El primer byte de datos enviado por el maestro contiene la dirección que
coincide con una sola dirección del dispositivo esclavo.
Todas las direcciones se enumeran en las hojas de datos respectivas.
Maestro

Esperar

Esperar
Maestro
El uC debe de esperar a que el dispositivo esclavo envíe el bit de
reconocimiento, o sea que se ponga a cero el bit ASKSTAT del registro
SSPCON2.
Una vez que la coincidencia de direcciones ha ocurrido apropiadamente, todos
los bytes de datos se transmiten de la misma manera.
La transmisión de datos termina al poner a uno el bit PEN del registro
SSPCON2.

PEN = 1
SSPCON2 Fin
Resumen - Maestro
Recibir datos - Maestro
Para recibir datos, es similar al transmitir con la única diferencia que el último
bit del primer byte enviado se ponga a uno lógico. Esto significa que el maestro
espera recibir los datos del esclavo direccionado.
El maestro pone a uno el bit de arranque, el esclavo envía byte por byte. Estos
bytes se almacenan en el registro SSPSR.
Después de recibir el último bit (octavo), cada dato se carga en el registro
SSPBUF. Al leer dicho registro automáticamente se envía el bit de
reconocimiento, lo que significa que el maestro está listo para recibir los
nuevos datos.

1 SEN = 1
SSPCON2
Recibir datos - Maestro

Esperar

Mandar
Frecuencia de Reloj - Maestro
Para generar la señal de reloj, se realiza por medio de un simple oscilador cuya
frecuencia depende de la frecuencia del oscilador principal del
microcontrolador.
Esclavo
Comunicación en serie
Cuando existe esta comunicación puede existir un fallo en la transmisión por
alguna razón. Es recomendable comprobar el estado de algunos bits que
pueden aclarar el problema.
En la práctica, el estado de estos bits se comprueba al ejecutar una subrutina
después de transmitir y recibir cada byte.

Datos
Comunicación en serie
WCOL (SSPCON,7): Si intenta escribir un dato nuevo al registro SSPBUF
mientras que otra transmisión/recepción de datos está en progreso, el bit se
pone a uno y al contenido del registro SSPBUF se queda sin cambios. Debe ser
borrado por software.
BF (SSPSTAT,0): al transmitir los datos, este bit se pone a 1 durante la escritura
del registro SSPBUF y se queda puesto a uno hasta que el byte se desplace del
registro SSPRS. Al recibir datos, al cargar un dato o una dirección al registro
SSPBUF se pone en 1 y a 0 después de leer el registro SSPBUF.
Comunicación en serie
SSPOV (SSPCON,6): en modo recepción, se pone a 1 al recibir un nuevo byte
en el registro SSPSR, sin haber leído el dato anteriormente recibido del registro
SSPBUF.
Pines SDA y SCL: Cuando el MSSP está habilitado, estos pines se vuelven a las
salidas de drenaje abierto, deben de estar conectadas con resistencias
pull-ups.
Configuración
Ajustar el módulo y enviar la dirección
◦ Introducir en el registro SSPADD el valor para definir la velocidad de
transmisión en baudios.
◦ Poner a 1 el bit SMP del registro SSPSTAT para desactivar el control de la
velocidad de rotación.
◦ Introducir el valor binario 1000 a los bits SSPM3:SSPM0 del registro SSPCON
para seleccionar el modo Maestro
◦ Poner a 1 el bit SEN del registro SSPCON2 (secuencia de inicio – start)
Configuración
◦ El bit SSPIF se pone a 1 automáticamente en final de la secuencia de inicio
cuando el módulo está listo para funcionar. Se deberá poner a 0.
◦ Introducir la dirección de esclavo al registro SSPBUF
◦ Cuando se envía un byte, el bit SSPIF se pone a 1 automáticamente después
de haber recibido el bit de reconocimiento del dispositivo esclavo.
Configuración
Transmitir los datos:
◦ Introducir en el registro SSPBUF los datos a enviar
◦ Cuando se envía un byte, el bit SSPIF se pone a 1 automáticamente después
de haber recibido el bit de reconocimiento del dispositivo esclavo.
◦ La condición de Parada (STOP) se debe iniciar al poner a 1 el bit PEN del
registro SSPCON para informar al dispositivo esclavo que la transmisión de
datos se acabó.
Configuración
Recibir los datos:
◦ Poner a uno el bit RSEN del registro SSPCON2 para habilitar la recepción
◦ El bit SSPIF indica la recepción de datos. Después de leer los datos del
registro SSPBUF, el bit ACKEN del registro SSPCON2 debe ponerse a uno para
habilitar el envío del bit de reconocimiento.
◦ La condición de parada (stop) se debe iniciar al poner a uno el bit PEN del
registro SSPCON para informar al dispositivo esclavo que la transmisión se
acabó.

RSEN = 1 ACKEN = 1 PEN = 1


SSPCON2 SSPCON2 SSPCON2
Comunicación I2C
Ventajas:
Solo se necesitan 2 líneas
Se pueden conectar hasta 1008 dispositivos (10 bits)
Admite comunicación half dúplex.
Soporta múltiples esclavos

Desventajas:
Velocidad no tan alta como SPI las velocidades 100KHz o 400KHz
Cada 8 bits de datos se necesita el bit de ACK
Es más complejo que SPI
Con reconocimiento de esclavo

También podría gustarte