Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Coatzacoalcos
Ingeniería en Mecatrónica
EMAIL: porfirio99diaz@gmail.com
FECHA: 20/10/2020
FECHA: 23/09/2020
Investigación mssp
Nombre de la Asignatura: Periodo:
_ microcontroladores _ Sep-ene
A continuación, en esta investigación se tratará los temas de puerto serie síncrono maestro
simplificado como mssp, se tratara el funcionamiento su configuración y funcionamiento con el i2c al
igual que sus tipos de comunicación también se explicara la configuración y funcionamiento en modo
spi al igual que el anterior también se investigara los tipos de comunicación
MODULO DE COMUNICACIÓNES SERIE SINCRONA (MSSP)
El MSSP (Puerto serie síncrono maestro – Master Síncronos 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:
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
Modo esclavo SPI – Este bit debe ser borrado cuando SPI se emplea en modo esclavo.
CKE – Clock Edge Select bit (bit de selección del flanco de reloj) selecciona el modo de
sincronización.
CKP = 0:
CKP = 1:
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.
1 – Lectura de dato.
0 – Escritura de dato.
1 – Transmisión en progreso.
UA – Update Address bit (bit de activación de dirección) se utiliza sólo en modo I2C de 10 bits.
0 – No hay colisió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.
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 I2C
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 I2C
maestro.
En modo SPI
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
1 0 1 0 No utilizado.
1 1 0 0 No utilizado.
1 1 0 1 No utilizado.
1 – Habilita interrupción cuando una dirección de llamada general es recibida en el SSPST (0000h).
1 – No reconocimiento.
0 – Reconocimiento.
1 – Indica una secuencia de reconocimiento en los pines SDA y SCL y transmite el bit ACKDT.
Automáticamente borrado por hardware.
0 – Recepción deshabilitada.
1 – Indica una condición de Parada en los pines SDA y SCL. Luego, este bit es automáticamente
borrado por hardware.
1 – Indica repetición de condición de Arranque en los pines SDA y SCL. Luego, este bit es
automáticamente borrado por hardware.
SEN – START Condition Enabled/Stretch Enabled bit (bit de habilitación de condición de Arranque)
1 – Indica condición de Arranque en los pines SDA y SCL. Luego, este bit es automáticamente
borrado por hardware.
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>.
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
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 bit que indica que el buffer está lleno se pone a uno (BF = 1).
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.
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.
Recibir el primer byte (parte alta) de direcciones (los bits SSPIF y BF son puesto a 1)
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.
MODO MAESTRO
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
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:
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.
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>).
MODO DE TRABAJO
Para iniciar la operación SPI, varias opciones deben ser seleccionadas, tales son:
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.
CONEXIÓN TIPICA
MODO MAESTRO
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.
MODO SLAVE
Un dispositivo controlado por el maestro, sobre el bus seleccionado siempre y cuando se active el
SS
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.
VENTAJAS Y DESVENTAJAS AL UTILIZAR I2C O SPI
Diagrama
Comunicación I2C
Comunicación SPI
En esta investigación se realizo el análisis de los diferentes tipos de comunicación del i2c y del spi
asi como la configuración y funcionamiento de cada uno. El modo mssp nos dice que 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).
Dice que 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). Y para
el El modo SPI permite simultáneamente la transmisión y recepción sincrónica de datos de 8 bits. Y
en base a esto se investigo el funcionamiento detallado de cada uno y los puertos a los cuales esta
relacionado, y con esto concluimos la investigación.
BIBLIOGRAFIA
https://www.mikroe.com/ebooks/microcontroladores-pic-programacion-en-basic/3-8-
modulos-de-comunicacion-serie
file:///C:/Users/usuario/Downloads/41291d%20(1).pdf