Professional Documents
Culture Documents
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:
0 – No hay colisión.
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
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:
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.
RSEN – Repeated START Condition Enabled bit (bit de habilitación de repetir condición de
Arranque)
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)
2. MODO SPI
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.
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
Un dispositivo controlado por el maestro, sobre el bus seleccionado siempre y cuando se active el
SS
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.
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.
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:
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.
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.
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.