You are on page 1of 17

UNIVERSIDAD DE LAS FUERZAS ARMADAS - ESPE

DEPARTAMENTO DE ELÉCTRICA Y ELECTRÓNICA


MICROCONTROLADORES
CONSULTA

Nombre: Evelin Torres


NRC: 2570
FECHA: 25-05-2016

Contenido
1. MÓDULO DE COMUNICACIONES SERIE SÍNCRONA: MSSP ................................... 2
1.1. Registro SSPSTAT: Registro de estado del puerto Serie ..................................... 2
1.2. Registro SSPCON: Registro de control del puerto Serie ..................................... 4
1.3. Registro SSPCON2: Registro de control 2 del puerto Serie ................................ 6
2. MODO SPI .............................................................................................................. 8
2.1. Modo de trabajo ................................................................................................ 8
2.2. Conexión Típica .................................................................................................. 9
2.2.1. Modo Master................................................................................................... 9
2.2.2. Modo Slave .................................................................................................... 10
2.3. Registros Asociados con una operación SPI ..................................................... 10
3. EL PUERTO MSSP EN MODO I2C .......................................................................... 10
3.1. MODO ESCLAVO ............................................................................................... 11
3.2. MODO MASTER ................................................................................................ 14
1. MÓDULO DE COMUNICACIONES SERIE SÍNCRONA: MSSP

El MSSP (Puerto serie síncrono maestro – Master Synchronous Serial Port) es un módulo
muy útil, y a la vez uno de los circuitos más complejos dentro del microcontrolador. Este
módulo permite la comunicación de alta velocidad entre un microcontrolador y otros
periféricos u otros microcontroladores al utilizar varias líneas de E/S (como máximo dos o
tres líneas). Por eso, se utiliza con frecuencia para conectar el microcontrolador a los
visualizadores LCD, los convertidores A/D, las memorias EEPROM seriales, los registros de
desplazamiento etc. La característica principal de este tipo de comunicación es que es
síncrona y adecuada para ser utilizada en sistemas con un sólo maestro y uno o más
esclavos. Un dispositivo maestro contiene un circuito para generación de baudios y además,
suministra señales de reloj a todos los dispositivos del sistema. Los dispositivos esclavos no
disponen de un circuito interno para generación de señales de reloj. El módulo MSSP puede
funcionar en uno de dos modos:

 modo SPI (Interfaz periférica serial – Serial Peripheral Interface); y


 modo I2C (Circuito inter-integrado – Inter-Integrated Circuit).
Como se muestra en la siguiente figura, un módulo MSSP representa sólo una mitad de un
hardware necesario para establecer una comunicación serial, mientras que la otra mitad se
almacena en el dispositivo con el que intercambia los datos. Aunque los módulos en ambas
puntas de línea son los mismos, sus modos de funcionamiento difieren esencialmente
dependiendo de si el módulo funciona como Maestro o como Esclavo:
Si el microcontrolador a ser programado controla otro dispositivo o circuito (periféricos),
deberá funcionar como un dispositivo maestro. Este módulo generará señal de reloj cuando
sea necesario, o sea sólo cuando se requiera recibir y transmitir los datos por software. Por
consiguiente, el establecimiento de conexión depende únicamente del dispositivo maestro.
De lo contrario, si el microcontrolador a ser programado está integrado en un dispositivo
más complejo (por ejemplo en una PC), deberá funcionar como un dispositivo esclavo.
Como tal, un esclavo siempre tiene que esperar a que un dispositivo maestro envíe la
solicitud de transmisión de datos.

1.1. Registro SSPSTAT: Registro de estado del puerto Serie


SMP Sample bit (Bit de muestra)
Modo maestro SPI – Este bit determina fase de datos de entrada.
1 – Estado lógico se lee al final del tiempo de salida.
0 – Estado lógico se lee en la mitad del tiempo de salida.
Modo esclavo SPI – Este bit debe ser borrado cuando SPI se emplea en modo esclavo.
Modo I²C (maestro o esclavo)
1 – Deshabilita control de variaciones para velocidad estándar (100kHz).
0 – Habilita control de variaciones para velocidad alta (400k Hz).
CKE – Clock Edge Select bit (bit de selección del flanco de reloj) selecciona el modo de
sincronización.
CKP = 0:
1 – Dato transmitido en flanco ascendente de pulso de reloj (0 – 1).
0 – Dato transmitido en flanco descendente de pulso de reloj (1 – 0).
CKP = 1:
1 – Dato transmitido en flanco descendente de pulso de reloj (1 – 0).
0 – Dato transmitido en flanco ascendente de pulso de reloj (0 – 1).
D/A – Data/Address bit (bit de direcciones/datos) se utiliza sólo en modo I2C.
1 – Indica que el último byte recibido o transmitido es un dato.
0 – Indica que el último byte recibido o transmitido es una dirección.
P – Stop bit (bit de parada) se utiliza sólo en modo I²C.
1 – Bit de parada (STOP) se ha detectado.
0 – Bit de parada (STOP) no se ha detectado.
S – Start bit (bit de arranque) se utiliza sólo en modo I2C.
1 – Bit de arranque (START) se ha detectado.
0 – Bit de arranque (START) no se ha detectado.
R/W – Read Write bit (bit de información Lectura/Escritura) se utiliza sólo en modo I2C. Este
bit contiene la información del bit de L/E después de la última dirección coincidente. Este
bit es válido sólo desde la dirección coincidente hasta el siguiente bit de arranque, bit de
parada o bit no ACK.
Modo I²C en modo esclavo
1 – Lectura de dato.
0 – Escritura de dato.
Modo I²C en modo esclavo
1 – Transmisión en progreso.
0 – Transmisión no está en progreso.
UA – Update Address bit (bit de activación de dirección) se utiliza sólo en modo I2C de 10
bits.
1 – Indica que es necesario actualizar la dirección en el registro SSPADD.
0 – Indica que la dirección es correcta y que no se necesita actualizarla.
BF Buffer Full Status bit (bit de estado de búfer lleno)
Durante la recepción de dato (en modos SPI e I²C)
1 – Recepción completa. El registro SSPBUF está lleno.
0 – Recepción no completa. El registro SSPBUF está vacío.
Durante la transmisión de dato (sólo en modo I²C)
1 – Transmisión de dato en progreso (no incluye el bit ACK y bits de parada).
0 – Transmisión de dato completa (no incluye el bit ACK y bits de parada).

1.2. Registro SSPCON: Registro de control del puerto Serie

WCOL Write Collision Detect bit (bit detector de colisión)

1 – Colisión detectada. En el registro SSPBUF se ha escrito cuando no se han cumplido las


condiciones para iniciar una transmisión.

0 – No hay colisión.

SSPOV Receive Overflow Indicator bit (bit detector de desbordamiento en recepción)


1 – Se recibe un nuevo byte cuando el registro SSPBUF aún mantiene los datos anteriores. Como
no hay espacio para recibir datos nuevos, uno de estos dos bytes debe ser borrado. En este caso,
los datos almacenados en el registro SSPSR se pierden irremediablemente.

0 – Dato serial es recibido correctamente.

SSPEN – Synchronous Serial Port Enable bit (bit de habilitación del módulo SSP – puerto serie
síncrono) determina la función de los pines del microcontrolador e inicializa el módulo MSSP:

En modo SPI

1 – Habilita el módulo MSSP y configura los pines SCK, SDO, SDI y SS como una fuente de pines del
puerto serie.

0 – Deshabilita el módulo MSSP y configura estos pines como pines del puerto de E/S.

En modo I²C

1 – Habilita el módulo MSSP y configura los pines SDA y SCL como una fuente de pines del puerto
serie.

0 – Deshabilita el módulo MSSP y configura estos pines como pines del puerto de E/S.

CKP – Clock Polarity Select bit (bit de selección de polaridad de reloj) no se utiliza en modo I²C
maestro.

En modo SPI

1 – Para una señal de reloj, el estado inactivo es un nivel alto.

0 – Para una señal de reloj, el estado inactivo es un nivel bajo.

En modo I²C esclavo

1 – Señal de reloj habilitada.

0 – Mantiene la salida de señal de reloj en estado bajo. Se utiliza para proporcionar más tiempo
para estabilización de datos.

SSPM3-SSPM0 – Synchronous Serial Port Mode Select bits. (bit de selección del modo del SSP
(puerto serie síncrono). El modo SSP se determina al combinar los siguientes bits:

SSPM3 SSPM2 SSPM1 SSPM0 MODO

0 0 0 0 Modo maestro del SPI, reloj = Fosc/4.

0 0 0 1 Modo maestro del SPI, reloj = Fosc/16.

0 0 1 0 Modo maestro del SPI, reloj = Fosc/64.

Modo maestro del SPI, reloj = (TMR


0 0 1 1
output)/2.
Modo esclavo del SPI, habilitado el pin
0 1 0 0
de control SS.

Modo esclavo del SPI, deshabilitado el


0 1 0 1 pin de control SS, SS se puede utilizar
como pin de E/S.

Modo esclavo I2C, dirección de 7 bits


0 1 1 0
utilizada.

Modo esclavo I2C, dirección de 10 bits


0 1 1 1
utilizada.

Modo maestro I2C, reloj = Fosc /


1 0 0 0
[4(SSPAD+1)].

1 0 0 1 Máscara utilizada en modo esclavo I2C.

1 0 1 0 No utilizado.

1 0 1 1 Modo maestro I2C controlado.

1 1 0 0 No utilizado.

1 1 0 1 No utilizado.

Modo esclavo I2C, dirección de 7 bits


utilizada, los bits de arranque (START) y
1 1 1 0
de parada (STOP) habilitan
interrupción.

Modo esclavo I2C, dirección de 10 bits


utilizada, los bits de arranque (START) y
1 1 1 1
de parada (STOP) habilitan
interrupción.

1.3. Registro SSPCON2: Registro de control 2 del puerto Serie

GCEN – General Call Enable bit (bit de habilitación general)

Sólo en modo esclavo I²C

1 – Habilita interrupción cuando una dirección de llamada general es recibida en el SSPST (0000h).

0 – Deshabilita dirección de llamada general.


ACKSTAT – Acknowledge Status bit (bit de estado de reconocimiento)

Sólo en modo de transmisión maestro I²C

1 – Reconocimiento del esclavo no recibido.

0 – Reconocimiento del esclavo recibido.

ACKDT – Acknowledge data bit (bit de recepción)

Sólo en modo de recepción maestro I²C

1 – No reconocimiento.

0 – Reconocimiento.

ACKEN – Acknowledge Sequence Enable bit (bit de habilitación de secuencia de reconocimiento)

En modo de recepción maestro I²C

1 – Indica una secuencia de reconocimiento en los pines SDA y SCL y transmite el bit ACKDT.
Automáticamente borrado por hardware.

0 – Secuencia de reconocimiento en reposo.

RCEN – Receive Enable bit (bit de habilitación de recepción)

Sólo en modo maestro I²C

1 – Habilita recepción en modo I2C.

0 – Recepción deshabilitada.

PEN – STOP condition Enable bit (bit de habilitación de condición de Parada)

Sólo en modo maestro I²C

1 – Indica una condición de Parada en los pines SDA y SCL. Luego, este bit es automáticamente
borrado por hardware.

0 – Condición de Parada en reposo.

RSEN – Repeated START Condition Enabled bit (bit de habilitación de repetir condición de
Arranque)

Sólo en modo maestro I²C

1 – Indica repetición de condición de Arranque en los pines SDA y SCL. Luego, este bit es
automáticamente borrado por hardware.

0 – Condición de repetición de Arranque en reposo.

SEN – START Condition Enabled/Stretch Enabled bit (bit de habilitación de condición de Arranque)

Sólo en modo maestro I²C


1 – Indica condición de Arranque en los pines SDA y SCL. Luego, este bit es automáticamente
borrado por hardware.

0 – Condición de Arranque en reposo.

2. MODO SPI

El modo SPI permite simultáneamente la transmisión y recepción sincrónica de datos de 8 bits.


Para la comunicación se utilizan los siguientes pines:
 SDO – Serial Data Out – RC5/SDO
 SDI – Serial Data In – RC4/SDI/SDA
 SCK – Serial Clock – RC3/SCK/SCL
Un cuarto pin puede ser usado cuando se está en modo de operación esclavo:
 SS’ – Slave Select – RA5/AN4/SS’/C2OUT
En las operaciones de recepción, SSPSR y SSPBUF crean un buffer doble. Cuando SSPSR recibe un
byte completo, este es transferido al SSPBUF y la interrupción SSPIF se pone en uno.
Durante la transmisión, el SSPBUF no es un buffer doble. Escribiendo en SSPBUF se escribirá el dato
en ambos registros SSPBUF y SSPSR.

Diagrama de bloques del módulo MSSP en modo SPI.

2.1. Modo de trabajo

Para iniciar la operación SPI, varias opciones deben ser seleccionadas, tales son:
 Master Mode - SCK es salida
 Slave Mode - SCK es entrada
 Clock Polarity - Polaridad del Clock
 Sample Phase Data Input - Al inicio o final del tiempo de salida
 Clock Edge - Salida de info al subir o bajar SCK
 Clock Rate - Solo para Master Mode
 Slave Select Mode - Solo para Slave Mode
La información a transmitir es escrita en el registro SSPBUF, y pasa al SSPSR. El SSPSR transmite el
byte mandando primero al bit MSb. Si mientras está enviando se trata de escribir otro byte a
SSPBUF, se pone en uno el bit WCOL indicando una colisión de información (limpiar por software)
En la recepción conforme el SSPSR recibe los 8 bits, los va pasando uno a uno al SSPBUF, cuando
termina de enviar el byte, se pone en uno el bit BF (Buffer Full) y la bandera de interrupción SSPIF.

2.2. Conexión Típica

2.2.1. Modo Master

El maestro puede iniciar la trasferencia de datos en cualquier momento, puesto que es este quien
controla la fuente del reloj (SCK). De la misma forma determinará cuando un esclavo enviará
(broadcast) los datos por medio del protocolo.
En modo maestro, el dato es transmitido/recibido tan pronto como el registro SSPBUF es escrito. Si
el módulo SPI solo va a recibir datos, la salida SDO puede ser deshabilitada programándola como
una entrada.
La polaridad del reloj se selecciona programando el bit CKP (SSPCON<4>)
La velocidad del reloj es programable por el usuario y puede ser uno de los siguientes:
 FOSC/4 (or TCY)
 FOSC/16 (or 4 • TCY)
 FOSC/64 (or 16 • TCY)
 Timer2 output/2
Esto permite una velocidad máxima de trasmisión de datos de 10.Mbps (a 40 MHz).
La siguiente figura muestra las formas de las señales en el modo maestro donde se envía el bit más
significativo de primero. Cuando el bit CKE es puesto a 1, el dato SDO es válido antes de que haya
un flanco de reloj en SCK. La muestra de entrada es tomada dependiendo del estado del bit SMP.
Registro SSPSTAT, modo SPI

2.2.2. Modo Slave

Un dispositivo controlado por el maestro, sobre el bus seleccionado siempre y cuando se active el
SS

2.3. Registros Asociados con una operación SPI

El módulo MSSP tiene cuatro registros para la operación en modo SPI:


 SSPCON – MSSP Control Register: Todos sus bits son de lectura y escritura.
 SSPSTAT – MSSP Status Register: Los dos bits más significativos son de lectura y escritura, los
restantes seis bits son de lectura únicamente.
 SSPBUF – Serial Recibe/Transmit Buffer Register: es el registro al cual son escritos los datos o
desde el cual se leen los datos.
 SSPSR – MSSP Shift Register: es un registro de desplazamiento, encargado de los datos de
entrada o salida. No es un registro accesible directamente.

3. EL PUERTO MSSP EN MODO I2C

El módulo MSSP en modo I2C implementa todas las funciones como maestro y esclavo, generando
interrupciones por hardware en los bits de Start y Stop para determinar si el bus esta libre (modo
multi-maestro).
Este módulo implementa las especificaciones estándar para direccionamiento de 7 y 10 bits.
Solo dos pines son usados para la transferencia de datos:
 Reloj serial: serial clock (SCL) – RC3/SCK/SCL
 Dato serial: serial data (SDA) – RC4/SDI/SDA
El usuario debe configurar estos pines como estrada o salida en el registro de configuración
TRISC<4:3>.
El módulo MSSP tiene seis registros para el trabajo en el modo I2C:
 MSSP Control Register (SSPCON): Registro de configuración. Todos sus bits son de lectura y
escritura
 MSSP Control Register 2 (SSPCON2): Registro de configuración. Todos sus bits son de lectura y
escritura
 MSSP Status Register (SSPSTAT): Los seis bits menos significativos de este registro son de
lectura, los dos bits restantes son de lectura/escritura.
 Serial Receive/Transmit Buffer Register (SSPBUF): Es el registro al cual son escritos los datos o
desde el cual se leen los datos
 MSSP Shift Register (SSPSR) – No es accesible directamente. Registro de desplazamiento usado
para desplazar los datos de entrada y de salida.
 MSSP Address Register (SSPADD): Cuando el módulo es configurado en modo I2C esclavo, este
registro almacena la dirección del dispositivo esclavo. Cuando el módulo I2C es configurado en
Modo Maestro, los 7 bits menos significativos del SSPADD actúan como el generador de
velocidad para la carga de valores.

En las operaciones de recepción, SSPSR y SSPBUF crean un buffer doble. Cuando SSPSR recibe un
byte completo, este es transferido al SSPBUF y la interrupción SSPIF se pone en uno.
Durante la transmisión, el SSPBUF no es un buffer doble. Escribiendo en SSPBUF se escribirá el dato
en ambos registros SSPBUF y SSPSR.

3.1. MODO ESCLAVO

En este modo los pines SDA y SCL debe ser configurados como entradas (TRISC<4:3> en 1).
El módulo MSSP sobrescribirá el estado de entrada con un dato de salida cuando sea requerido, por
ejemplo cuando el esclavo transmita un dato.
Cuando se recibe una trama y la dirección coincide, el hardware automáticamente generará un
pulso de reconocimiento (ACK’) y carga el registro SSPBUF con el valor recibido actualmente en el
registro SSPSR. Alguna de las siguientes condiciones puede causar que el módulo MSSP no genere
el pulso de reconocimiento (ACK’):
El bit que indica que el buffer está lleno (BF, SSPSTAT<0>) haya sido puesto a 1 antes de recibir una
trama.
El bit que indica una sobre escritura (SSPOV, SSPCON<6>) haya sido puesto a 1 antes recibir una
trama.
En alguno de los casos descritos anteriormente el valor del registro SSPSR no es cargado en el
registro SSPBUF, pero el bit SSPIF (PIR1<3>) es puesto a 1. El bit BF es borrado leyendo el registro
SSPBUF, mientras que el bit es borrado por software.

Direccionamiento:

Una vez que el módulo MSSP ha sido habilitado queda en espera de una condición de inicio.

Una vez que ocurra la condición de inicio los siguientes ocho bits son cargados secuencialmente en
el registro de desplazamiento SSPSR cada vez que haya un flanco de subida en el reloj, línea SCL.

El valor del registro SSPSR<7:1> es comparado con el valor del registro SSPADD (que almacena la
dirección) en el octavo flanco de bajada del pulso de reloj (SCL). Si la dirección coincide y los bits BF
y SSPOV están en cero, ocurrirán los siguientes eventos:

El valor del registro SSPSR es cargado en el registro SSPBUF.

El bit que indica que el buffer está lleno se pone a uno (BF = 1).

Se genera un pulso ACK’.

La bandera de interrupción del módulo MSSP se pone a uno (SSPIF, PIR1<3>) en el flanco de bajada
del noveno bit del pulso en SCL. Esta condición puede generar una interrupción en caso de estar
habilitada.

En el modo de direccionamiento de 10 bits, dos bytes de direcciones son necesarios para ser
comparados por el esclavo.

Los cinco bits más significativos del primer byte de direcciones indican si se está en el modo de 10
bits. El bit R/W’ SSPSTAT<2> especificará una escritura para que el esclavo pueda recibir el segundo
byte de dirección.

Para 10 bits de direcciones el primer byte es el siguiente: ‘11110 A9 A8 0′, donde A9 y A8 son los
dos bits más significativos de la dirección.

La secuencia de eventos para para direccionamiento de 10 bits es como se muestra a continuación,


con los pasos 7 a 9 para el esclavo-transmisor.

Recibir el primer byte (parte alta) de direcciones. (Los bits SSPIF, BF y UA SSPSTAT<1> están en 1)

Actualizar el registro SSPADD con el segundo byte (parte baja) de direcciones. (Borra el bit UA y
liberar la línea SCL)
Leer el registro SSPBUF, borrar el bit BF y borrar la bandera SSPIF.

Recibir el segundo byte (parte baja) de direcciones (bits SSPIF, BF y UA están en 1).

Actualizar el registro SSPADD con el primer (parte alta) byte de dirección. Si coincide liberar la línea
SCL, esto borrará el bit UA.

Leer el registro SSPBUF, borrar el bit BF y borrar la bandera SSPIF.

Recibir la condición del bit de inicio repetida.

Recibir el primer byte (parte alta) de direcciones (los bits SSPIF y BF son puesto a 1)

Leer el registro SSPBUF, borrar el bit BF y borrar la bandera SSPIF.

Recepción:

Cuando el bit R/W’ del byte de direcciones esta en cero y hay coincidencia con la dirección, el bit
R/W’ del registro SSPSTAT es puesto a cero. La dirección recibida es cargada en el registro SSPBUF y
la línea SDA permanece en bajo (ACK’).

Cuando existe una condición de sobre escritura en el byte de dirección, entonces se proporciona un
pulso de no reconocimiento (ACK’). Una condición de sobre escritura es cuando el bit BF (Buffer full
– SSPSTAT<0>) es uno o cuando el bit SSPOV (SSPCON<6>) es uno.

Una interrupción es generada por el módulo MSSP por cada byte transferido, cuya bandera (SSPIF,
PIR1<3>) debe ser puesta a cero por software. El registro SSPSTAT es usado para determinar el
estado del byte recibido.

Si el bit SEN (SSPCON<0>) es 1, RC3/SCK/SCL permanecerá en bajo (alargamiento del reloj) cada vez
que se transfiera un dato. El reloj debe ser liberado poniendo a uno del bit CKP (SSPCON<4>).

Transmisión

Cuando el bit R/W’ de la dirección entrante es uno y la dirección es coincidente, el bit R/W’ del
registro SSPSTAT es uno. La dirección recibida es cargada en el registro SSPBUF. El pulso ACK se
enviará en el noveno bit y el pin de reloj permanecerá en bajo sin importar el valor de SEN.

Por el estiramiento del reloj, el maestro estará deshabilitado para enviar otro pulso de reloj hasta
que el esclavo esté listo para trasmitir un dato. El dato transmitido debe ser cargado en el registro
SSPBUF, el cual a su vez cargara el registro SSPSR, adicionalmente el pin RC3/SCK/SCL debe ser
habilitado poniendo en uno el bit CKP (SSPCON<4>).

Los ocho datos serán desplazados y enviados en el flanco de bajada de la entrada de reloj SCL. Esto
asegura que la señal en SDA es válida durante el tiempo que el SCL permanezca en alto (Figura 9-9
del manual).

El pulso ACK’ desde el maestro-receptor es cargado en el flanco de subida del noveno pulso del SCL.
Si la línea SDA es alto (no hay ACK’), se habrá completado la transferencia. En este caso cuando el
ACK’ es cargado por el esclavo, la lógica del esclavo es borrada (borra el registro SSPSTAT) y el
esclavo quedará monitoreando otra ocurrencia del bit de inicio. Si la línea SDA estuviera en bajo
(ACK’), el siguiente dato a trasmitir debería ser cargado en el registro SSPBUF. De nuevo el pin
RC3/SCK/SCL debe ser habilitado poniendo a uno el bit CKP.

Una interrupción es generada, por el módulo MSSP, por cada byte transferido. El bit SSPIF debe ser
borrado por software y el registro SSPSTAT es usado para determinar el estado del byte. El bit SSPIF
es puesto a uno en el flanco de bajada del noveno pulso de reloj.

Recepción con dirección de 7 bits en modo I2C esclavo, con SEN=0

Transmisión con dirección de 7 bits en modo I2C esclavo

3.2. MODO MASTER

El modo maestro es habilitado configurando adecuadamente los bits SSPM y poniendo a uno el bit
SSPEN del registro SSPCON. En este modo, las líneas SCL y SDA son manipuladas por el hardware
MSSP

El modo maestro de operación es apoyado por la generación de interrupciones en las condiciones


de inicio y de parada. Los bits de parada (P) y de inicio (S) son puestos a cero desde un reset o cuando
el módulo MSSP es deshabilitado.

Se puede tomar control del bus I2C cuando el bit P esta en uno o cuando el bus esta en reposo, con
P y S en cero.
En el modo maestro controlado por el firmware, el código del usuario controla todas las operaciones
del bus I2C basándose en las condiciones de Inicio y de Parada. Una vez que el modo maestro es
habilitado, el usuario tiene seis opciones:

 Generar una condición de Inicio en SDA y SCL.


 Generar una condición repetida de Inicio en SDA y SCL.
 Iniciar una transmisión de un dato o dirección, escribiendo en el registro SSPBUF.
 Configurar el puerto I2C para recibir datos.
 Generar una condición de Reconocimiento al final de la recepción de un dato (Byte).
 Generar una condición de Parada en SDA y SCL.

Los siguientes eventos pueden causar que la bandera de interrupción (SSPIF) del módulo se ponga
a uno y genere una interrupción si está habilitada para ello.

 Condición de Inicio
 Condición de Parada.
 Un byte de datos fue transmitido o recibido.
 Transmisión de un Reconocimiento (Acknowledge).
 Condición repetida de Inicio.

Operación:

El dispositivo maestro genera todos los pulsos seriales de reloj y las condiciones de Inicio y Parada.
Una transferencia es finalizada con una condición de Parada o con una condición repetida de Inicio.
Dado que una condición repetida de Inicio es también el comienzo de una transferencia serial, el
bus I2C no quedará libre.

En modo Maestro-Transmisor, el dato serial es enviado a través de la línea SDA mientras que la
línea SCL envía el reloj serial.

El primer byte transmitido contiene la dirección del esclavo (7 bits) y el bit indicador de
Lectura/Escritura (R/W’). En este caso, el bit R/W debe ser ‘0’.

El dato serial es transmitido en bytes. Después de cada byte transmitido, un bit de reconocimiento
es recibido.

Las condiciones de Inicio y de Parada son salidas que indican el comienzo y el final de una
transferencia serial.

En modo Maestro-Receptor, el primer byte transmitido contiene la dirección del esclavo (7 bits) y
el bit R/W’. En este caso el bit R/W’ debe ser ‘1’, para indicar la recepción de un dato por el maestro.

Los datos seriales son recibidos por la línea SDA mientras que por la línea SCL se generan los pulsos
seriales de reloj.

Los datos seriales son recibidos de a ocho bits. Después de cada byte recibido, un bit de
Reconocimiento es trasmitido.

Las condiciones de Inicio y de Parada son salidas que indican el comienzo y el final de la
transferencia.
El generador de velocidad usado por el modo de operación SPI, es utilizado para configurar las
frecuencias del reloj SCL, para la operación del bus I2C a 100Khz, 400KHz o 1 MHz.

Secuencia típica de transmisión:

1. El usuario genera una condición de Inicio poniendo a uno del bit Habilitador de Inicio (SEN
– Start Enable bit – SSPCON2<0>).
2. La bandera SSPIF se pone a uno. El módulo MSSP esperará mientras la condición de inicio
se ejecuta antes de realizar cualquier otra operación.
3. El usuario carga el registro SSPBUF con la dirección del esclavo para la trasmisión.
4. La dirección es enviada (desplazada hacia afuera) por el pin SDA, hasta que los ochos bits
sean transmitidos.
5. El módulo MSSP lee el bit ACK enviado por el dispositivo esclavo y escribe este valor en el
registro SSPCON2<6>.
6. El módulo MSSP genera una interrupción al final de noveno pulso de reloj, poniendo a uno
el bit SSPIF.
7. El usuario carga el registro SSPBUF con los ocho bits del dato.
8. El dato es enviado (desplazado hacia afuera) por el pin SDA, hasta que los ochos bits sean
transmitidos.
9. El módulo MSSP lee el bit ACK enviado por el dispositivo esclavo y lo escribe en el registro
SSPCON2<6>.
10. El módulo MSSP genera una interrupción al final del noveno ciclo de reloj poniendo a uno
el bit SSPIF.
11. El usuario genera una condición de parada poniendo a uno el bit Habilitador de Parada (PEN
– Stop Enable bit – SSPCON<2>).
12. Se genera una interrupción una vez que la condición de parada se complete.

Diagrama de bloques del Módulo MSSP en modo I2C maestro.


Bibliografía:

 Usategui, J. M. A., Yesa, S. R., & Martínez, I. A. Módulo de comunicación serie síncrona:
MSSP. Cap, 8, 153-186.
 HUER, L., MAURICI, M., IVÁN, L. H. J., YUKIO, A. G., JIMÉNEZ, D. R. M., &
VILLASEÑOR, C. M. L. (2008). “RED DE SENSORE COMUNICACIÓN.
 Salas Arriarán, S. (2015). Todo sobre sistemas embebidos.
 Barrionuevo Bassante, L. A., & Barrionuevo Bassante, E. P. (2005). Diseño e
implementación de una red 12C para instrumentación industrial.

You might also like