Descripción General de un Microcontrolador (Módulos de Comunicación) Página 1 CeTAD – Facultad de Ingeniería - UNLP Descripción General de un Microcontrolador (Módulos de Comunicación) (Basado en Freescale HC08 y HCS08) Cátedra de Circuitos digitales y Microprocesadores Autores: Ing. Jorge R. Osio Ing. Luis Antonini Ing. Walter Aróztegui Ing. José A. Rapallini Septiembre de 2011 Versión 1.0
62
Embed
Descripcion de Un Microcontrolador (Modulos de Comunicacion) HC908
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Descripción General de un Microcontrolador (Módulos de Comunicación) Página 1
CeTAD – Facultad de Ingeniería - UNLP
Descripción General de un
Microcontrolador
(Módulos de Comunicación)
(Basado en Freescale HC08 y HCS08)
Cátedra de Circuitos digitales y Microprocesadores
Autores:
Ing. Jorge R. Osio
Ing. Luis Antonini
Ing. Walter Aróztegui
Ing. José A. Rapallini
Septiembre de 2011 Versión 1.0
Descripción General de un Microcontrolador (Módulos de Comunicación) Página 2
INDICE.
1. Introducción
1.1. Módulos de Comunicación disponibles en Microcontroladores
1.2. Módulos Específicos de la Familia HCS08 1.2.1. SCI – Serial Communications Interface
1.2.2. SPI – Serial Periferal Interfaz
1.2.3. IIC – Inter-Integrated Circuits
1.2.4. USB – Universal Serial Bus
2. Interfaz de Comunicación Serie (SCI)
2.1. Descripción del Protocolo 2.1.1. Formato de Transmisión
2.1.2. Detección de error de Trama
2.2. Características del Módulo SCI
2.3. Descripción de la comunicación serie mediante el Módulo SCI
2.4. Diagrama en Bloques del Transmisor y Receptor
2.5. Registros de Configuración del SCI 2.5.1. Registros SCI de Baud Rate
2.5.2. Registro de Control 1 (SCIxC1)
2.5.3. Registro de Control 2 (SCIxC2)
2.5.4. Registro de estados 1 (SCIxS1)
2.5.5. Registro de estados 2 (SCIxS2)
2.5.6. Registro de Control 3 (SCIxC3)
2.5.7. Registro de Datos (SCIxD)
3. Interfaz de Comunicación Serie (SPI)
3.1. Descripción del Protocolo SPI
3.1.1. Breve repaso de las comunicaciones seriales sincrónicas
3.2. Características Principales del Módulo SPI
3.3. Descripción funcional del módulo SPI 3.3.1. Modo Master
3.3.2. Modo Slave
3.4. Diagrama en bloques
3.5. Registros de configuración
Descripción General de un Microcontrolador (Módulos de Comunicación) Página 3
3.5.1. Registro de control 1 (SPIxC1)
3.5.2. Registro de control 2 (SPIxC2)
3.5.3. Registro de Baud rate (SPIxBR)
3.5.4. Registro de Estados (SPIxS)
3.5.5. SPI Data Registers (SPIxDH:SPIxDL)
3.5.6. SPI Match Registers (SPIxMH:SPIxML)
4. Interfaz I2C (Inter – Integrated circuit)
4.1 Descripción del protocolo I
2C
4.2. Descripción del módulo I2C en el HC9S08
4.3. Diagrama de Bloques del Módulo I2C
4.4. Registros asociados al módulo I2C
4.4.1. Registro de dirección (IICA)
4.4.2. Registro divisor de frecuencia del reloj (IICF)
4.4.3. Registro de control 1 (IICC1).
4.4.4. Registro de estado (IICS).
4.4.5. Registro de datos (IICD)
4.4.6. Registro de control 2 (IICC2)
4.5. Otras funciones importantes del módulo IIC
5. Universal Serial Bus (USB)
5.1. Prestaciones del protocolo
5.2. Principales características 5.2.1. Implementación Física
5.2.1.1. Aspecto eléctrico
5.2.2. Velocidad de Transferencia
5.2.3. USB On-The-Go
5.2.4. Componentes del Bus
5.3. Elementos de una transferencia USB. 5.3.1. Endpoints
5.3.2. Pipes.
5.3.3. Tipos de transferencias
5.3.4. Trasferencias y transacciones.
5.3.5. Características de un Bloque en una transferencia
5.3.6. Fases de una transacción.
5.3.7. Chequeo de error.
5.4. Enumeración de dispositivos. 5.4.1. Proceso de enumeración.
Descripción General de un Microcontrolador (Módulos de Comunicación) Página 4
5.4.2. Descriptores
5.5. Registros asociados al módulo USB
5.5.1. Registro del ID del periférico (PER_ID)
5.5.2. Registro de ID complementario (ID_COMP)
5.5.3. Registro de la revisión del periférico(REV)
5.5.4. Registro de información adicional del periférico (ADD_INFO)
5.5.5. Registro del estado de la interrupción en modo OTG
(OTG_INT_STAT)
5.5.6. Registro del control de la interrupción en modo OTG
(OTG_INT_EN)
5.5.7. Registro de estado de interrupción (OTG_STAT)
5.5.8. Registro de control OTG (OTG_CTRL)
5.5.9. Registro de estado de interrupción (INT_STAT)
5.5.10. Registro de habilitación de interrupciones (INT_ENB)
5.5.11. Registro de estado de interrupción por error (ERR_STAT)
5.5.12. Registro de habilitación de interrupción por error (ERR_ENB)
Apéndice
1. Módulo Serial en la Familia HC908
1.1. Características
1.2. Descripción de la comunicación serie [2]
1.3. Registros I/O del SCI 1.3.1. Registo SCI de Baud Rate
1.3.2. Registro de Interrupciones y de configuración del Tx
1.3.3. SCI Status Register 1 (SCS1)
1.3.4. SCI Data Register (SCDR)
1.3.5. SCI Status Register 2 (SCS2)
Descripción General de un Microcontrolador (Módulos de Comunicación) Página 5
1. Introducción
Entre los módulos disponibles en las distintas familias de Microcontroladores se encuentra los
módulos que permiten implementar mediante la configuración de registros los protocolos de
comunicación más comunes en el diseño Digital.
1.1. Módulos de Comunicación disponibles en Microcontroladores
En la Actualidad la mayoría de los Microcontroladores contienen módulos para la
implementación de interfaces de comunicación tales como, SPI, SCI, I2C y USB. Adicionalmente,
algunas familias más potentes proveen interfaces Ethernet y CAN para el diseño de sistemas Más
avanzados. Todos estos dispositivos vienen provistos de Librerías específicas de Diseño que
felicitan la implementación del módulo.
1.2. Módulos Específicos de la Familia HCS08
Ente los módulos de comunicación más comunes en la Familia de Microcontroladores HCS08
enumeran, el SCI serial asincrónico, el SPI sería sincrónico, el I2C o IIC Inter-
Integrated Circuit y el USB (Universal Serial Bus). En este capítulo se tratarán estos módulos que
proveen una variedad de funcionalidades al microcontrolador, permitiendo su interacción con una
gran variedad de dispositivos.
1.2.1. SCI – Serial Communications Interface
La interfaz de comunicación serie es una interfaz asincrónica que permite envías datos entre
dispositivos en forma serie sobre una única línea de transmisión y una única línea de recepción. Su
característica principal es que la línea se encuentra normalmente en alto y cuando se desea enviar
información se debe enviar un bit de inicio “un cero lógico” y seguido de este los bits de datos.
1.2.2. SPI – Serial Periferal Interface
Esta interfaz permite enviar datos en forma serie, pero a diferencia de la anterior, requiere de
sincronismo para el envío de datos. Por lo que se utiliza una línea de clock para indicar cuándo se
enviará un dato, obviamente sincronizado con el clock.
Este protocolo permite comunicar un dispositivo Master con varios Slaves. Lo que quiere decir
es que el Master puede decidir con que dispositivo intercambiar datos, poniendo en cero la línea de
selección (CS – chip select) correspondiente al esclavo seleccionado.
1.2.3. IIC – Inter-Integrated Circuits
Esta interfaz es mucho más simple en cuanto a las líneas necesarias para su implementación,
pero mucho más compleja en cuanto a la configuración necesaria para el envío de datos. Se utilizan
solo 2 líneas para la implementación, una línea de clock para el sincronismo y una línea de datos.
Este protocolo permite múltiples Masters y múltiples Slaves. Cada Slave tiene asignada una
dirección específica, mediante la cual el Master dirigirá la información. Los paquetes a transmitir
siempre estarán formados por un byte de control en donde se indica la dirección del dispositivo
hacia el cual se le enviará el dato, seguido del byte de datos.
Descripción General de un Microcontrolador (Módulos de Comunicación) Página 6
1.2.4. USB – Universal Serial Bus
Esta interfaz es mucho más compleja que las anteriores. Es la interfaz por excelencia de las
computadoras actuales y de todos los dispositivos de última generación. Este protocolo es muy
eficiente para el envío de datos y requiere de un dispositivo Host que maneja la comunicación y de
uno o varios dispositivos Slaves que se conectan al host para iniciar una transferencia de datos. Este
protocolo permite la conexión de varios Slaves hacia el host mediante la utilización de un Hub
USB.
Una de las grandes ventajas de este protocolo es que cada dispositivo conectado se enumera
automáticamente indicando al Host sus características principales y permitiendo que este instale los
drives para permitir el correcto funcionamiento del dispositivo USB conectado.
Este protocolo tiene varios modos de transferencia, dependiendo del tipo de dispositivo que se
esté conectando y de su funcionamiento.
También se debe destacar que el protocolo soporta varias velocidades de comunicación y que las
velocidades más altas requieren un diseño de HW específico.
Para la comunicación requiere solo dos líneas de datos diferenciales, pero los paquetes de
comunicación son mucho más complejos que cualquiera de los protocolos anteriores.
Descripción General de un Microcontrolador (Módulos de Comunicación) Página 7
2. Interfaz de Comunicación Serie (SCI)
Este módulo no se encuentra en el HC908QY4, pero se encuentra en la mayoría de los MCUs de
la Familia HC908 ([3], [4]), cuya descripción se realiza en el Apéndice 1. En este Capítulo se
describe el protocolo serie asincrónico y la descripción de Módulo SCI que lo implementa en toda
la familia HCS08.
2.1. Descripción del Protocolo.
El protocolo serial asincrónico SCI utiliza 2 líneas, una para transmisión Tx y una para recepción
RX. Las velocidades de transmisión más comunes son: 1200, 2400, 4800, 9600, 19200, 38400,
57600 y 115200 baudios.
Figura 1. Modos de transmisión
2.1.1. Formato de Transmisión
El protocolo SCI usa el formato estándar de transmisión non-return-to-zero (NRZ), que consiste
en un bit de inicio seguido de 8 bits de datos y un bit de parada. Esto es comúnmente referenciado
como Formato 8-N-1 (8 bits de datos, sin bit de paridad, un bit de parada). El dato es transmitido y
recibido comenzando por el bit menos significativo (LSB). Cada bit tiene una duración Tp que
define el Baud Rate (tasa de baudio).
Figura 2. Formato de transmisión
tp = periodo de un bit = 1/ tasa de baudio
La comunicación serie trabaja con la línea en alto (idle line) cuando no hay transferencia de
datos, y el bit de inicio es un cero lógico. Cada bit de dato puede ser ya sea un uno o un cero lógico.
El bit de parada es un uno lógico. El bit de inicio, el bit de parada y cada bit de dato constituyen una
trama de datos, como se muestra en la Figura 2.
En la Figura 1 se muestran los distintos modos de transmisión. En la operación Half-duplex, solo
un nodo transmite a la vez. El dispositivo no puede recibir mientras está transmitiendo, y no puede
Descripción General de un Microcontrolador (Módulos de Comunicación) Página 8
transmitir mientras está recibiendo. La implementación del protocolo por software debe realizarse
en modo Half-duplex, por causa de la secuencialidad del software. Esta incapacidad es una
desventaja en comparación con el Hardware SCI, que puede transmitir y recibir al mismo tiempo
por ser concurrente. Esto se conoce como sistema full duplex.
2.1.2. Detección de error de Trama
El bit de parada está definido como un uno lógico, si el bit de parada recibido es un cero, quiere
decir que ocurrió un error de Trama.
2.2. Características del Módulo SCI
• Full duplex, Alta Velocidad, asincrónico, programable de 8 o 9 bit de largo de caracter.
• Dos métodos de “receiver wakeup”.
• Pedidos de Interrupción separados para Rx y Tx.
• Habilitación separada del Transmisor y el Receptor.
• Polaridad programable de la salida del Transmisor.
•Operación dirigida por interrupciones con ocho Flags de interrupción.
Transmitter Empty
Transmission Complete
Receiver Full
Idle Receiver Input
Receiver Overrun
Noise Error
Framing Error
Parity Error
•Modo de operación “Low power”
•Detección de Error de frame en el receptor
•Baud rate programable
•Chequeo de Paridad por Hardware
2.3. Descripción de la comunicación serie mediante el Módulo SCI
Utiliza el sistema doble buffer, como muestra la figura 3. El flag SCTE se setea cada vez que un
nuevo dato es transferido desde el buffer TDR al “shift register” de transmisión serie. El flag SCRF
se setea cada vez que un nuevo dato es transferido desde el “shift register” al buffer RDR. El
registro SCDR es un solo registro que al escribirlo, se escribe el buffer TDRx y al leerlo, se lee el
buffer RDRx.
Descripción General de un Microcontrolador (Módulos de Comunicación) Página 9
Figura 3. Sistema de comunicación SCI doble buffer.
Se pueden seleccionar 2 formatos de datos diferentes a transmitir, uno de ellos es de 8 bits
(Figura 4), donde hay un bit de inicio, un bit de stop y 8 bit de datos. El otro Formato es de 9 bits
(Figura 5), con 1 bit de inicio, un bit de stop, un bit de paridad extra u otro stop y 8 bit de datos.
Figura 4. Formato de datos de 8 bits.
Figura 5. Formato de datos de 9 bits.
Caracteres de Datos Especiales:
Break - No tiene bits de Start o Stop, existe como un “cero” lógico por un tiempo de 10 ó 11 bit
(Formato de Datos de 8 o 9 bits respectivamente)
Idle - No tiene bits de Start o Stop, existe como un “uno” lógico por un tiempo de 10 ó 11 bit
(Formato de Datos de 8 o 9 bits respectivamente)
Preámbulo - Un caracter “idle” de sincronismo
Descripción General de un Microcontrolador (Módulos de Comunicación) Página 10
2.4. Diagrama en bloques del Transmisor y Receptor
El diagrama de transmisión de la figura 6 muestra como el dato almacenado en el buffer SCID se
envía a un registro de desplazamiento para ser transmitido por el puerto de transmisión TXD.
También se observa un bloque de Control, desde donde se envían los requerimientos de las
interrupciones seleccionadas y se selecciona la velocidad de transmisión “Baud rate”.
Figura 6. Diagrama en bloques del transmisor
La Figura 7 muestra el diagrama en bloques receptor, en donde los datos recibidos por el registro
de desplazamiento son almacenados en el buffer SCID. El bloque receptor también tiene una lógica
de Hardware para el chequeo de error de paridad, en donde si se detecta error en la paridad, se envía
un aviso al transmisor pidiendo la retransmisión de datos. Adicionalmente se cuenta con la lógica
para enviar el requerimiento de interrupción al microprocesador, por la llegada de un dato al puerto
RX.
Descripción General de un Microcontrolador (Módulos de Comunicación) Página 11
Figura 7. Diagrama en bloques del receptor.
2.5. Registros de Configuración del SCI
Ocho registros I/O controlan y monitorean la operación del SCI:
• SCI Control Register 1 (SCIxC1)
Descripción General de un Microcontrolador (Módulos de Comunicación) Página 12
• SCI Control Register 2 (SCIxC2)
• SCI Control Register 3 (SCIxC3)
• SCI Status Register 1 (SCIxS1)
• SCI Status Register 2 (SCIxS2)
• SCI Data Register (SCIxD)
• SCI Baud Rate Register (SCIxBDH y SCIxBDL)
2.5.1. Registros SCI de Baud Rate
Este par de registros permite seleccionar el baud rate mediante el control del divisor de
preescaler. Para actualizar los 13 bits del seteo de baud rate [SBR12:SBR0], primero se escribe el
SCIxBDH para almacenar la parte alta del nuevo valor y luego escribe el SCIxBDL.
Figura 8. Registro de selección de tasa de baudios (SCIxBDH).
LBKDIE (Habilita interrupción por detección de break LIN): Si este bit está en 1 lógico, Se
produce un requerimiento de interrupción por HW cuando el flag LBKIF está en 1.
RXEDGIE (Habilita interrupción por detección por flanco activado por entrada RxD): Si
este bit está en 1, se produce un requerimiento de interrupción por HW cuando el flag RXEDGIF
está en 1.
Figura 9. Registro de selección de tasa de baudios, parte baja (SCIxBDL).
SBR[ bits (12:0)](Divisor de módulo de Baud rate): estos 13 bits representan el valor de BR, que
representa el divisor del módulo generador de baud rate. Cuando BR=0, el generador de baud rate
es deshabilitado a bajo consumo. Cuando BR toma un valor entre 1 y 8191, el baud rate será SCI =
BUSCLK/(16xBR).
2.5.2. Registro de Control 1
Este registro es usado para configurar varias características de control del sistema SCI.
Figura 10. Registro de Control 1 - SCIxC1
Descripción General de un Microcontrolador (Módulos de Comunicación) Página 13
LOOPS: Selección del modo loop. Este bit en 1 conecta el bus RX con el TX
SCISWAI: detiene el SCI en modo wait. Este bit en 1 detiene el clock SCI en modo wait
RSRC: selección de fuente de recepción. Este bit en 1 conecta el pin TxD a la salida del transmisor
y a la entrada del receptor.
M: Selección de modo 8 bit o 9 bit de datos. Si este bit está en 1 se selecciona el modo de 9 bits de
datos.
WAKE: selecciona el método de recepción wakeup.
ILT: Selección de tipo de línea Idle.
PE: Habilita paridad. El bit en 1 habilita paridad
PT: Selección del tipo de paridad. El bit en 1 selecciona la paridad impar.
2.5.3. Registro de Control 2
Este registro puede ser leído o escrito en cualquier momento.
Figura 11. Registro de Control - SCIxC2
TIE: Habilita la interrupción de transmisión
TCIE: Habilita interrupción por transmisión completa
RIE: Habilita la interrupción del recepto
ILIE: habilita la interrupción de línea IDLE
TE: Habilita el Transmisor
RE: Habilita Recepción
RWU: Control wakeup del receptor
SBK: envía un break
2.5.4. Registro de Estados 1
Este registro tiene 8 flags de solo lectura.
Figura 12. Registro de Estados - SCIxS1.
TDRE: Flag de registro de datos del transmisor vacio
TC: Flag de transmisión completa
RDRF: Flag de registro de datos del receptor vacio
IDLE: Flag de línea IDLE.
OR: Flag de sobre ejecución del receptor.
NF: Flag de ruido
Descripción General de un Microcontrolador (Módulos de Comunicación) Página 14
FE: Flag de error de Frame
PF: Flag de error de paridad
2.5.5. Registro de Estados 2
Este registro tiene un flag de estados de solo lectura.
Figura 13. Registro de Estados - SCIxS2.
LBKDIF: Flag de interrupción de detección de break LIN
RXEDGIF: Flag de interrupción activo por flanco en el pin RxD
RXINV: Inversión de datos del receptor
RWUID: Detecta activación de IDLE en el receptor
BRK13: Generación de break de carácter extensa
LBKDE: Habilita detección de break LIN
RAF: Flag de receptor activo
2.5.6. Registro de Control 3 (SCIxC3)
Figura 14. Registro de Control - SCIxC3.
L8: Recepción de 9 bits de datos
T8: Transmisión de 9 bits de datos
TXDIR: Configuración de dirección del pin TxD en el modo simple línea
TXINV: Inversión de datos de Transmisión.
ORIE: Habilitación de interrupción por sobre escritura
NEIE: Habilitación de interrupción por error de ruido
FEIE: Habilitación de interrupción por error de Frame
PEIE: Habilitación de interrupción por error de paridad
2.5.7. Registro de Datos (SCIxD)
Este registro cumple dos funciones diferentes. Cuando se lee devuelve el valor del buffer de
recepción RX. Cuando se escribe guarda el valor en el Buffer de transmisión TX.
Descripción General de un Microcontrolador (Módulos de Comunicación) Página 15
Figura 15. Registro de Datos (SCIxD).
Descripción General de un Microcontrolador (Módulos de Comunicación) Página 16
3. Interfaz de Comunicación Serie (SPI)
3.1. Descripción del Protocolo SPI
La interfaz periférica serie es una interfaz sincrónica master-slave que se basa en un registro de
desplazamiento de 8 bits. El master SPI genera una señal de clock usada por todos los dispositivos
SPI para coordinar la transferencia de datos. Como muestra la Figura 16, el dispositivo periférico
conectado al SPI también incluye un registro de desplazamiento. Juntos, los 2 registros de
desplazamiento de 8 bits son conectados desde un registro de rotación a izquierda de 16 bits. Una
transferencia de datos consiste de un desplazamiento de 8 bits, el cual resulta en una transferencia
de datos entre el dispositivo master y el slave. Muchos dispositivos, tales como los conversores AD,
conversores DA y Chips de memoria Flash, SRAM, FRAM, SD, etc, poseen interfaz SPI.
Figura 16. Diagrama de conexión Master – Slave.
3.1.1. Breve repaso de las comunicaciones seriales sincrónicas
Una comunicación sincrónica es aquella en donde los datos se envían sincronizados con una
señal de clock, ya sea como una línea independiente o embebida dentro de la misma.
Generalmente existe un dispositivo maestro, que es el generador de la sincronía de la
comunicación. De tal manera que el reloj es generado en una línea independiente del sistema y es el
maestro quien lo presenta en el canal de comunicación.
Los demás dispositivos del sistema actúan como esclavos de la comunicación y la señal de reloj
entra por un pin a cada uno de ellos, estableciendo el sincronismo de los bits de información que
llegan o salen.
Otros sistemas utilizan la misma señal de datos, para generar el sincronismo de los bits. La
Figura 17 ilustra el protocolo Manchester, del cual se puede extraer el reloj del sistema.
Basta con tomar cualquier flanco de la señal de clock para lograr una relación entre, (utilizando
el flanco) el reloj y los datos.
Descripción General de un Microcontrolador (Módulos de Comunicación) Página 17
Figura 17. Sincronismo entre señal de clock y datos.
En los sistemas seriales sincrónicos para la interconexión de periféricos, se manejan distancias
cortas y modos de un solo maestro y múltiples esclavos.
Un maestro podría perder su función y convertirse en un esclavo, mediante un mecanismo de
arbitraje de bus. De esta manera cualquier dispositivo podría ser maestro en un momento
determinado.
Las tramas de comunicación son de variada presentación y algunas sólo involucran la carga útil,
sin adicionar bits que permitan el handshaking (coordinación) entre esclavos y maestro. Para estos
protocolos deberá existir una línea tanto para el dato saliente (TxD) como para el dato entrante
(RxD), así como la posibilidad de hacer comunicación simultánea y bidireccional (Full Duplex)
(Ejemplo: SPI).
Figura 18. Diferentes Configuraciones en el envío de datos durante el primer flanco de clock
Descripción General de un Microcontrolador (Módulos de Comunicación) Página 18
Figura 19. Diferentes Configuraciones en el envío de datos durante el segundo flanco de clock.
En la figura 18 se muestra la configuración del módulo en donde el dato a enviar se mantiene
estable durante el primer flanco de clock y el siguiente bit se envía en el segundo flanco de clock,
tenga este cualquiera de las 2 polaridades posibles (línea normalmente en alto o en bajo).
En la figura 19 se muestra la configuración del módulo en donde cada dato se establece en el
primer flanco del pulso de clock y el dato se mantiene estable durante el segundo flanco del clock.
3.2. Características del Módulo SPI
El modulo SPi incluye las siguientes características:
• Operación en modo master o slave
• Modo bidireccional en Full-duplex o simple línea
• Tasa de bit de transmisión programable
• Registro de datos de transmisión y recepción de Doble buffer
• Opciones de polaridad y fase del clock
• Salida de selección de slave
• Flag de modo de error por falla con posibilidad de interrupción de CPU
• Control de operación de SPI durante el modo wait
• Desplazamiento de datos primero MSB o primero LSB seleccionable
• Longitud de datos de transmisión programable a 8 o 16 bits
3.3. Descripción Funcional del módulo SPI
El módulo se habilita seteando el bit “SPI enable” (SPE) en el Registro “SPI Control Register
1”. Mientras el bit SPE esté seteado, los cuatro pines asociados al módulo SPI cumpliendo las
funciones de:
• Selector de esclavo (SS)
• clock serial (SPSCK)
• Master out/slave in (MOSI)
Descripción General de un Microcontrolador (Módulos de Comunicación) Página 19
• Master in/slave out (MISO)
Una transferencia SPI se inicia en el dispositivo master leyendo el registro de estados SPI
(SPIxS) cuando SPTEF = 1 y escribiendo el dato en el buffer de transmisión de datos (escribiendo
SPIxDH:SPIxDL). Cuando se completa una transferencia, el dato recibido se almacena en el buffer
de datos recibidos. Los Registros SPIxDH:SPIxDL actúan como el buffer de datos de recepción SPI
cuando es leido y como el buffer de datos de transmisión SPI cuando se escribe.
El bit de control de fase de clock (CPHA) y el bit de control de polaridad de clock (CPOL)
ubicados en el registro de control 1 SPI (SPIxC1) permiten seleccionar uno de los cuatro posibles
formatos de clock a ser usados por el sistema SPI. El bit CPOL selecciona una inversión o no de
polaridad en el clock. El bit CPHA se usa para coordinar dos protocolos para el muestreo de datos
sobre los flancos impares llamados SPSCK o sobre los flancos pares llamados SPSCK.
El SPI puede configurarse como master o como slave. Cuando se setea el bit MSTR del registro
de control 1, se habilita como master, cuando se borra el bit MSTR, se selecciona el modo slave.
3.3.1. Modo Master
El Módulo SPI opera en modo master cuando el l bit MSTR se encuentra seteado. Solo en modo
master se pueden iniciar transmisiones. Una transmisión se inicia leyendo el registro SPIxS
mientras el SPTEF = 1 y escribiendo el registro de datos SPI. Si el registro de desplazamientos está
vacío, el byte se transfiere inmediatamente al a este registro para ser enviado.
El dato comienza a desplazarse hacia el pin de salida MOSI bajo la referencia del clock de
control serial.
• SPSCK: Los bits de selección de baud rate SPR2, SPR1, y SPR0 conjuntamente con los bits de
preselección de baud rate SPPR2, SPPR1, y SPPR0 en el registro de control generan un baud rate y
determinan la velocidad de transmisión. El pin SPSCK es la salida de clock SPI. A través de este
pin el generador de baud rate del master controla el registro de desplazamiento del periférico slave.
• Los pines MOSI, MISO en modo master, tienen la función de pin de datos de salida (MOSI) y
pin de datos de entrada (MISO), esto está definido por los bits de control SPC0 y BIDIROE.
• El pin SS cuando los bits MODFEN y SSOE están seteados, se configura como selector de
slave de salida. El pin SS de salida se pone en bajo para una transmisión y en alto cuando la línea
está en estado desocupado “idle”.
Si el bit MODFEN está seteado y el SSOE borrado, el pin SS se configura como entrada para
detectar el modo de error por falla en la transmisión.
Si la entrada SS está en bajo, indica un error por falla error cuando otro master trata de manejar
las líneas de MOSI y SPSCK. En este caso, el SPI cambia a modo slave, borrando el bit MSTR y
deshabilitando el buffer de salida slave MISO.
3.3.2. Modo Slave
El SPI funciona en modo slave cuando el bits MSTR en el registro de control 1 está borrado.
• SPSCK: En modo slave, SPSCK es el clock entrada que llega desde el master.
• Pines MISO, MOSI: En modo slave, el pin (MISO) tiene la función de salida de datos y el pin
(MOSI) tiene la función de entrada de datos, esto se determina por los bits SPC0 y BIDIROE en el
registro de control 2.
• Pin SS: El pin SS es la entrada de selección del slave. Antes de una transmisión de datos, el pin
SS del slave debe estar en bajo y debe mantenerse en este estado hasta que finalice dicha
transmisión. Si el pin SS está en alto, el SPI se fuerza a estado idle.
Descripción General de un Microcontrolador (Módulos de Comunicación) Página 20
La entrada SS también controla el pin de salida de datos seriales, Si el SS está en alto (no
detectado), el pin de salida de datos estará en alta impedancia, y, si SS está en bajo el primer bit en
el registro de datos SPI se enviará a al pin de salida de datos seriales. También si el SS del slave
está en alto, se ignora la señal de clock enviada por el master.
Con el sistema de varios slaves, es posible implementar una comunicación serial enviando a
varios slaves la misma transmisión desde el master, aunque el master no recibirá información de
todos los slaves a la vez.
Si el bit CPHA en el registro de control 1 está borrado, un número impar de flancos sobre la
entrada SPSCK causará que el dato se mantenga en el pin de entrada de datos. Un número par de
flancos causará que el valor previamente almacenado desde el pin de entrada de datos seriales se
displace en el LSB o MSB del registro de desplazamientos del SPI, dependiendo del bit LSBFE.
Si se setea el bit CPHA, un numero par de flancos en la entrada del SPSCK causará que el dato
se mantenga en el pin de entrada de datos serie. Un número impar de flancos casará que el valor
previamente almacenándose displace desde el pin de entrada serie al LSB o MSB del registro de
desplazamientos, dependiendo del bit LSBFE.
Cuando el CPHA es seteado, el primer flanco se usa para enviar el primer bit de datos al pin de
salida serie. Cuando el CPHA es borrado y la entrada SS está en bajo (slave seleccionado), e primer
bit de datos del SPI se envía por el pin de salida de datos. Después del octavo (SPIMODE = 0) o el
dieciseisavo (SPIMODE = 1) deslazamiento, la transferencia se considera finalizada y el dato
recibido es transferido a registro de dat6s del SPI. Para indicar que la transferencia se completó, se
setea el flag SPRF en el Registro de estados del SPI.
Descripción General de un Microcontrolador (Módulos de Comunicación) Página 21
3.4. Diagrama en bloques
Figura 20. Diagrama en bloques del módulo SPI
3.5. Registros de configuración
3.5.1. Registro de control 1 (SPIxC1)
Figura 21. Registro de control 1 - SPIxC1
SPIE: Habilitación de interrupción (para SPRF y MODF)
SPE: Habilitación de sistema
Descripción General de un Microcontrolador (Módulos de Comunicación) Página 22
SPTIE; Habilitación de interrupción por transmisión
MSTR: Selección de modo Master/Slave
CPOL: polaridad de Clock
CPHA: Fase de clock
SSOE: habilitación de salida de selección de slave
LSBFE: primer bit LSB (dirección de desplazamiento)
Tabla 1. Bits de selección de modo Master o Slave MODFEN SSOE Modo Master Modo Slave
0 0 I/O de propósito general Entrada de selección de slave
0 1 I/O de propósito general Entrada de selección de slave
1 0 Entrada SS para modo falla Entrada de selección de slave
1 1 Salida SS automática Entrada de selección de slave
3.5.2. Registro de control 2 (SPIxC2)
Figura 22. Registro de control 2 (SPIxC2)
SPMIE: Habilitación de interrupción por coincidencia
SPIMODE: Modo 8 o 16 bits
MODFEN: Habilita función en modo falla como master
BIDIROE: habilita salida en modo bidireccional
SPISWAI: Stop en modo wait
SPC0: Control de pin 0
Tabla 2. Modos de Operación
Modo de Pin SPC0 BIDIROE MISO MOSI
Operación de Modo Master
NORMAL 0 X Entrada Master Salida Master
BIDIRECCIONAL 1 0 MISO no usado
por SPI
Entrada Master
1 Master E/S
Operación de Modo slave
NORMAL 0 X Salida Slave Slave
BIDIRECCIONAL 1 0 Entrada Slave MOSI no usado
por SPI 1 Slave E/S
Descripción General de un Microcontrolador (Módulos de Comunicación) Página 23
3.5.3. Registro de Baud rate (SPIxBR)
Tabla 3. Selección de baud rate de Transferencia
Figura 23. Registro de Baud rate (SPIxBR)
6:4 SPPR[2:0]: Preescalador Divisor de Baud Rate
2:0 SPR[2:0]: Divisor de Baud
Tabla 4. Divisor de Baud Rate SPR2:SPR1:SPR0 Divisor de tasa
0:0:0 2
0:0:1 4
0:1:0 8
0:1:1 16
1:0:0 32
1:0:1 64
1:1:0 128
1:1:1 256
Baud rate= CGMOUT/(2xBD)
3.5.4. Registro de Estados (SPIxS)
Figura 24. Registro de estados (SPIxS)
SPRF: Flag de buffer de lectura lleno
SPPR2:SPPR1:SPPR0 Preescalador Divisor
0:0:0 1
0:0:1 2
0:1:0 3
0:1:1 4
1:0:0 5
1:0:1 6
1:1:0 7
1:1:1 8
Descripción General de un Microcontrolador (Módulos de Comunicación) Página 24
SPMF: Flag de Match. Cuando el valor en el buffer de recepción coincide con el
valor en SPIMH:SPIML
SPTEF: Flag de buffer de transmisión vacio
MODF: Flag modo master por falla
3.5.5. SPI Data Registers (SPIxDH:SPIxDL)
Figura 25. Registro de Datos parte alta (SPIxDH)
Figura 26. Registro de Datos parte baja (SPIxDL)
En modo 8-bit, solo está disponible SPIxDL. La lectura de SPIxDH retornará todos ceros. La
escritura en SPIxDH será ignorada.
En modo 16-bit, leyendo cualquier byte (SPIxDH o SPIxDL) se guarda el contenido de ambos
bytes en el buffer en donde se mantiene hasta que se leo otro byte. Escribiendo cualquier byte
(SPIxDH o SPIxDL) se mantiene el valor en el buffer. Cuando ambos bytes han sido escritos, se
transferirá como un valor de 16 bits en el buffer de datos de transmisión.
3.5.6. Registros de Coincidencia (SPIxMH:SPIxML)
Figura 27. Registro de Coincidencia parte alta (SPIxMH)
Figura 28. Registro de Coincidencia parte baja (SPIxML)
En modo 8-bit, solo está disponible SPIxML. La lectura de SPIxMH retornará ceros. La
escritura a SPIxMH será ignorada.
En modo 16-bit, leyendo cualquier byte (SPIxMH o SPIxML) se mantiene el contenido
de ambos bytes en un bufferen donde se conservará hasta la lectura de otro byte.
Escribiendo cualquier byte (SPIxMH o SPIxML) se transfiere el valor a un buffer. Cuando
Descripción General de un Microcontrolador (Módulos de Comunicación) Página 25
ambos buffer hayan sido escritos, se transferirá el contenido como un valor a los registros
de coincidencia del SPI.
Descripción General de un Microcontrolador (Módulos de Comunicación) Página 26
4. Interfaz I2C (Inter – Integrated circuit)
4.1 Descripción del protocolo I
2C
Este sistema de comunicaciones fue desarrollado por Philips como un sistema multi-master, para la
conexión de periféricos a distancias relativamente cortas y velocidades de unos cientos de Kbps.
El protocolo se implementa sobre dos líneas, una línea de clock de sincronismo (SCL: Serial Clock)
y otra para los datos (SDA: Serial Data). Como los datos se transmiten por una sola línea, el
sistema es bidireccional del tipo maestro/esclavo.
Las Líneas de Clock SCL y de Datos SDA son manejadas por el master durante una comunicación
típica.
La Figura 29 muestra una trama, para la transmisión de datos en 8 bits (también existe en 10 bits).
En la trama se puede apreciar que el protocolo requiere una condición de inicio, seguido por los bits
de datos, después se presenta un bit para la señal de reconocimiento (ACK) y finalmente la
condición de stop.
En un Bus I2C típico cada esclavo tiene asignada una dirección de entre 7 y 10 bits que se usa para
seleccionar el esclavo con el que se desea entablar una comunicación.
Figura 29. Trama de una transmisión I
2C
Condición de start: La condición de inicio se produce mediante un flanco descendente en la Señal
SDA cuando la señal de clock SCL se encuentra en estado alto.
Bits de datos: Luego de haberse dado la condición de start, los bits de datos se transmiten
comenzando por el más significativo (MSb), manteniendo el valor del bit durante todo el periodo
alto de la señal de clock SCL. El cambio de bit se debe realizar durante el estado bajo de la línea de
clock o durante el flanco ascendente del mismo.
Bit de comando (R/W): Cuando se está direccionando el dispositivo con el cual se va a establecer
una comunicación I2C, este bit no pertenece al dato como tal, sino a la acción de escritura o lectura
sobre el dispositivo en cuestión (Lectura (R) = nivel alto y Escritura (W) = nivel bajo).
Bit de reconocimiento (ACK = Acknowledge): Este bit es verdadero en estado bajo y lo envía
quien recibe el dato.
Condición de stop: Se produce cuando estando la señal de SCL en estado alto, se presenta un
flanco de subida de la señal de SDA.
Dependiendo del tipo de transferencia que se desee realizar, las tramas I
2C se pueden configurar de
la siguiente manera:
Descripción General de un Microcontrolador (Módulos de Comunicación) Página 27
Transmisión de un byte de datos: La Figura 30 detalla las tramas para el envío de un byte hacia
un esclavo. En la primera trama la carga útil conforma la dirección de destino de la información.
También se especifica la acción sobre el esclavo, que en este caso detalla una escritura sobre el
destino (nivel bajo en el bit R/W).
La dirección del dispositivo puede estar representada en 8 o 10 bits, de tal manera que podría
existir un byte adicional para completar la dirección (este byte carecería de bit de start y de stop).
La segunda trama, carece de bit de start y representa el byte de Dato a transferir.
Figura 30. Envío de un Byte de Datos a una dirección de esclavo de 8 y 10 bits de
largo.
Envío de n bytes a un destino: La Figura 31 detalla las tramas para el envío de n bytes hacia un
destino. Es idéntico al caso anterior, sólo que los datos se presentan uno a continuación del otro.
Descripción General de un Microcontrolador (Módulos de Comunicación) Página 28
Figura 31. Envío de varios byte de datos a una dirección de esclavo de 8 y 10 bits de largo.
Lectura de un byte desde un dispositivo: La Figura 32 detalla las tramas para la lectura de un byte
desde un dispositivo. En este caso el bit de lectura/escritura (R/W) va al estado “1”. Las primeras
tramas envían la dirección del dispositivo a leer y las siguientes la acción de lectura sobre el mismo.
Figura 32. Lectura de un byte de datos enviado desde un dispositivo esclavo.
Lectura de n bytes desde un dispositivo: La Figura 33 detalla las tramas para la lectura de n bytes
desde un dispositivo.
Descripción General de un Microcontrolador (Módulos de Comunicación) Página 29
Figura 33. Lectura de n bytes de datos enviados desde u dispositivo esclavo.
La conexión de varios dispositivos en un bus I2C, obedece al modelo maestro/esclavo y puede
existir la posibilidad de que varios maestros manipulen el bus. Esto último se logra mediante un
mecanismo de arbitraje de bus definido para resolver conflictos de acceso cuando dos masters tratan
de acceder al bus simultáneamente. Para facilitar la conexión de múltiples masters, SCL y SDA son
líneas open-drain, lo que facilita el arbitraje y el control de flujo, que requieren pull-ups externos
para generar un estado lógico alto en la línea.
Todos los masters monitorean el bus y solo uno puede accede cuando la línea está desocupada
(idle) (cuando ambas líneas están en alto entre un bit de stop y uno de start). Si un master no está
manejando la línea SDA en bajo pero sensa que está en bajo, entonces interpreta que otro master
está usando el bus y se detiene la transmisión; en este caso el master perdió el arbitraje. De manera
similar, si un master sense que SCL está en bajo cuando debería estar en alto, esto indica que un
esclavo está extendiendo el clock para indicar que todavía no está listo para proceder con la
transferencia del siguiente byte, proveyendo un mecanismo de control de flujo básico.
La Figura 34 muestra una conexión maestro/esclavo I2C típica.
Descripción General de un Microcontrolador (Módulos de Comunicación) Página 30
Figura 34. Configuración maestro-esclavo Típica
4.2. Descripción del módulo I
2C en el HC9S08
Las características más importantes del módulo I
2C son:
o Trabaja hasta 100Kbps con máxima carga.
o El número máximo de dispositivos que se pueden conectar al bus I2C está limitado por la
capacitancia de carga máxima de 400pF.
o Compatible con el bus I2C estándar.
o Operación en modo multi-maestro.
o Hasta 64 frecuencias distintas de clock del maestro.
o Generación y detección de bit de aknnowledge, seleccionable por software.
o Posibilidad de generar una interrupción por:
_ La transferencia de cada byte.
_ Pérdida del arbitraje del bus por parte del maestro.
_ Identificación de un llamado a una dirección.
o Generación y detección de señal de start y stop.
Descripción General de un Microcontrolador (Módulos de Comunicación) Página 31
o Repetición de la señal de start.
o Detección de bus ocupado.
o Reconocimiento de llamado general.
o Extensión de la dirección a 10 bits.
4.3. Diagrama de Bloques del Módulo I2C
La Figura 35 detalla el diagrama en bloques del módulo I
2C. El dato en el módulo I
2C se recibe y
se envía sobre el mismo registro (configuración double buffered), el bloque shift register controla
esta función.
Figura 35. Diagrama en bloques funcional
4.4. Registros asociados al módulo I2C
4.4.1. Registro de dirección (IICA)
La Figura 36 muestra el registro de dirección del módulo IIC.
Descripción General de un Microcontrolador (Módulos de Comunicación) Página 32
Figura 36. Registro de direcciones
AD1:AD7: Bits que conforman la dirección baja del esclavo en un bus IIC.
4.4.2. Registro divisor de frecuencia del reloj (IICF) La Figura 37 ilustra sobre el registro para dividir la frecuencia del reloj de bus, que controla la tasa
de baudios del módulo I2C.
Figura 37. Registro divisor de Frecuencias
MULT: Bits para definir un factor multiplicador de la rata de baudios IIC.
00: Multiplica por 1
01: Multiplica por 2
10: Multiplica por 4
11: Reservado
ICR: Bits para definir la rata de baudios IIC. La siguiente ecuación define la tasa de baudios de una
comunicación IIC y los tiempos de las señales de start y stop.
Tasa de Baudios = Frecuencia del reloj de BUS / ( MULT x Divisor_SCL)
Tabla 5. Tabla de valores del divisor de frecuencias de bus