Date post: | 21-Oct-2015 |
Category: |
Documents |
Upload: | edwin-javier-garavito-hernandez |
View: | 32 times |
Download: | 1 times |
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
ICR (Hex) Divisor SCL ICR (Hex) Divisor SCL 00 20 20 160
01 22 21 192
02 24 22 224
03 26 23 256
04 28 24 288
05 30 25 320
06 34 26 384
07 40 27 480
08 28 28 320
09 32 29 384
0A 36 2A 448
0B 40 2B 512
0C 44 2C 576
0D 48 2D 640
0E 56 2E 768
0F 68 2F 960
Descripción General de un Microcontrolador (Módulos de Comunicación) Página 33
10 48 30 640
11 56 31 768
12 64 32 896
13 72 33 1024
14 80 34 1152
15 88 35 1280
16 104 36 1536
17 128 37 1920
18 80 38 1280
19 96 39 1536
1A 112 3A 1792
1B 128 3B 2048
1C 144 3C 2304
1D 160 3D 2560
1E 192 3E 3072
1F 240 3F 3840
4.4.3. Registro de control 1 (IICC1).
La Figura 38 ilustra sobre el registro de control 1 del módulo I2C.
Figura 38. Registro de control 1.
IICEN: Bit para habilitar la operación del módulo IIC.
0: Inhibe la operación del módulo IIC
1: Habilita la operación del módulo IIC
IICIE: Bit para habilitar un posible evento de interrupción del módulo IIC.
0: Inhibe la interrupción del módulo IIC
1: Habilita la interrupción del módulo IIC
MST: Bit para asignar la operación del módulo como maestro.
0: Modo esclavo
1: Modo Maestro
TX: Bit para seleccionar la dirección de la transferencia en modo maestro y esclavo. En modo
maestro este bit deberá estar de acuerdo con el tipo de transferencia requerida. Para ciclos de envío
de direcciones, este bit siempre estará en “1”. En caso de un direccionamiento sobre un esclavo,
este bit se llevará a “1”, vía software y depende del estado del bit SRW.
0: Receptor
1: Transmisor
TXACK: Bit para determinar el valor del espacio de bit dedicado al
acknowledge (ACK), en la recepción de el esclavo o el maestro.
0: Una señal de ACK es enviada fuera del BUS, después de recibirse un byte de dato
1: No se envía ACK como respuesta
RSTA: Bit para insertar un evento de start en el BUS, dada por el maestro. El maestro podría
perder el arbitramiento del BUS si inyecta esta señal en un momento no indicado.
Descripción General de un Microcontrolador (Módulos de Comunicación) Página 34
4.4.4. Registro de estado (IICS). La Figura 39 ilustra sobre el registro de estado del módulo IIC.
Figura 39. Registro de Estados
TCF: Bandera para indicar cuándo se ha completado la transferencia de un byte. Esta bandera se
aclara cuando se lee el registro de datos IICD, en modo receptor o cuando se escribe un nuevo dato
en el IICD, en modo transmisor.
0: Transferencia en progreso
1: Se ha completado una transferencia
IAAS: Esta bandera indica cuando un esclavo, solicitado por coincidencia en dirección, ha
respondido al llamado o cuando el bit GCAEN es “1” y un evento de llamada general ha sido
recibido. Escribir en el registro IICC1, aclara esta bandera.
0: No se ha dado un direccionamiento
1: Ha coincidido un direccionamiento
BUSY: Esta bandera indica el estado del BUS sin importar si se es maestro o esclavo. Esta bandera
es “1” cuando se ha detectado un evento de start y es “0” cuando se detecta un evento de stop.
0: El BUS está desocupado (IDLE)
1: El BUS está ocupado
ARBL: Esta bandera indica cuando un maestro ha perdido el arbitramiento del BUS. Esta bandera
se aclara escribiendo un “1” en ella.
0: Sistema en operación normal
1: Se ha perdido el arbitramiento
SRW: Cuando se está direccionando un esclavo, este bit indica el valor del bit R/W de la dirección
a la que se llama y que fue enviada por el maestro.
0: Esclavo recibiendo, el maestro escribe sobre el esclavo
1: Maestro recibiendo, el esclavo escribe sobre el maestro
IICIF: Este bit indica cuando hay una interrupción pendiente. Esta bandera se aclara escribiendo un
“1” en ella, durante la rutina a la atención de interrupción. Los eventos que ponen a “1” esta
bandera son:
_ Se ha completado la transferencia de un byte
_ Se ha dado una coincidencia en la solicitud de dirección sobre un esclavo
_ Se ha perdido el arbitramiento
0: No hay interrupción pendiente
1: Hay interrupción pendiente
RXAK: Bandera que indica que se ha dado una señal de acknowledge (ACK), desde el dispositivo
que ha recibido el dato enviado.
Descripción General de un Microcontrolador (Módulos de Comunicación) Página 35
0: Se recibió señal de ACK
1: No se recibió señal de ACK
4.4.5. Registro de datos (IICD)
La Figura 40 ilustra sobre el registro de datos del módulo I
2C. La lectura sobre este registro
devuelve el byte que acaba de llegar y la escritura deposita el byte siguiente a enviarse.
Figura 40. Registro de Datos
4.4.6. Registro de control 2 (IICC2)
La Figura 41 ilustra sobre el registro de control 2 del módulo IIC.
Figura 41. Registro de control 2
GCAEN: Bit para habilitar generación de una llamada general en el BUS IIC.
0: Inhibe una llamada general
1: Habilita una llamada general
ADEXT: Bit para determinar el formato de la dirección de los dispositivos.
0: Direcciones en 7 bits
1: Direcciones en 10 bits
AD8:AD10: Bits que configuran la parte alta de la dirección del dispositivo, en modo de 10 bits
4.5. Otras funciones importantes del módulo IIC
o Repetición de la condición de start: Esta propiedad del módulo IIC permite que se genere, en
cualquier momento, una condición de start sin necesidad de haber sucedido una condición de stop
anterior.
o Procedimiento de arbitraje: Esta propiedad permite que varios maestros estén conectados al
BUS IIC. Cuando dos o más maestros tratan de acceder al BUS al mismo tiempo, un proceso de
sincronización determinará si el maestro pierde esta propiedad.
Un maestro pierde el arbitramiento si este transmite un “1” mientras otro maestro está
transmitiendo un “0”, en ese momento el maestro perdedor se deberá conmutar como esclavo. Para
Descripción General de un Microcontrolador (Módulos de Comunicación) Página 36
este caso, la trama hacia el esclavo no llevará condición de stop. Esta acción es indicada por el bit
IICS[ARBL] = 1.
o Procedimiento de llamada general: Esta propiedad permite al maestro encuestar sobre la
presencia de un esclavo con una dirección determinada. Una llamada general se puede hacer en
formato de 7 o 10 bits de dirección.
Cuando un esclavo identifica que el llamado coincide con su propia dirección, el bit IICS[IAAS]
es puesto a “1” y el llamado deja de ser general.
Si la dirección llamada es la 0x00, se tratará entonces de una llamada general y el software del
usuario determinará la acción a tomar.
Si el bit IICC2[GCAEN] = 0, el bit de ACK no es devuelto y el dato es ignorado.
Descripción General de un Microcontrolador (Módulos de Comunicación) Página 37
5. Universal Serial Bus (USB)
Una interfaz para muchos dispositivos. Este protocolo es muy versátil para una variedad de
dispositivos periféricos. Dispositivos de almacenamiento, mouse, teclado, impresora, etc.
Configuración automática. Cuando se conecta el dispositivo a una PC, este es detectado
automáticamente, indicando a la PC que drivers necesita para su funcionamiento.
Cables estándar. Utiliza cables para conexión estándar y de variadas longitudes
No requiere seteos ni configuraciones. Cuando se conecta un dispositivo, automáticamente
se configura y se reporta a la PC indicando las características de funcionamiento.
No requiere suministro de potencia. El protocolo provee un pin de 5V, y permite
suministrar hasta 500mA.
5.2. Principales características
5.2.1. Implementación Física
5.2.1.1. Aspecto eléctrico
A nivel eléctrico, el cable USB transfiere la señal y la alimentación sobre 4 hilos.
Figura 42. Líneas de comunicación USB 1.1 y 2.0
A nivel de alimentación, el cable proporciona la tensión nominal de 5 V. Es necesario definir
correctamente el diámetro del hilo con el fin de que no se produzca una caída de tensión demasiado
importante en el cable. Una resistencia de terminación instalada en la línea de datos permite detectar
el puerto y conocer su configuración (1,5 o 12 Mbits/s).
A nivel de señal, se trata de un par trenzado con una impedancia característica de 90 Ω. La
velocidad puede ser tanto de 12 Mbits/s como de 1,5 Mbits/s. La sensibilidad del receptor puede ser
de, al menos, 200mV y debe poder admitir un buen factor de rechazo de tensión en modo común. El
reloj se transmite en el flujo de datos, la codificación es de tipo NRZI, existiendo un dispositivo que
genera un bit de relleno (bit stuffing) que garantiza que la frecuencia de reloj permanezca constante.
Cada paquete va precedido por un campo de sincronismo.
Consumo:
Cada sección puede proporcionar una determinada potencia máxima siendo el PC el encargado de
suministrar la energía. Además, el periférico puede estar autoalimentado (self powered).
Descripción General de un Microcontrolador (Módulos de Comunicación) Página 38
Control de consumo:
El ordenador gestiona el consumo, teniendo capacidad de poner en reposo (suspend) o en marcha a
un periférico USB. En reposo, este reduce su consumo (si puede), quedándose la parte USB
funcional.
Esta gestión está orientada especialmente a los equipos portátiles.
5.2.2. Velocidad de Transferencia
El protocolo USB puede funcionar comúnmente a 3 velocidades. Dichas velocidades tiene
características específicas de implementación dependiendo de la especificación USB:
La especificación USB 1.0 define low and full speed. Low speed permite una velocidad de bus
de 1,5 Mbits/seg. A full speed el bus USB puede funcionar a 12 Mbits/seg.
La especificación USB 2.0 permite una velocidad de Bus de 480 Mbits/seg, lo que permite una
tasa de transferencia de datos de 53 MBytes/seg. Hay una diferencia notable entre esta
especificación y la anterior. Se debe aclarar que para implementar el USB 2.0 se requiere un diseño
de HW especial, mediante 2 líneas diferenciales de datos. Cada línea tiene una impedancia
característica de 45 Ohms a tierra o de 90 ohms diferenciales y componentes para el filtrado de
ruido.
5.2.3. USB On-The-Go
Como USB se convirtió en la interfaz preferida para todo tipo de periféricos, los desarrolladores
empezaron a pedir una forma de conectar sus periféricos directamente entre sí y con
otros periféricos USB. Por ejemplo, un usuario puede querer conectar una impresora directamente a
una cámara o conectar dos unidades en conjunto para el intercambio de archivos.
On-The-Go (OTG) Suplemento para la especificación USB 2.0 lanzado en 2001define
una limitada capacidad de función de host que pueden implementar los dispositivos para permitir la
comunicación con los periféricos.
5.2.4. Componentes del Bus
Los componentes físicos del Universal Serial Bus consisten de los circuitos, conectores, y cables
entre un host y uno o más dispositivos.
El host es una PC u otro dispositivo que contenga un controlador host USB y un hub root. Estos
componentes trabajan juntos para habilitar el sistema operativo que permite la comunicación con
los dispositivos del bus. El formato de datos del controlador del host para transmitir sobre el bus y
traducir el dato recibido a un formato que los componentes del sistema operativo puedan entender.
A hub has one or more ports for connecting devices. Each device must contain circuits and code
that know how to communicate with the host. The USB specification defines the cables and
connectors that connect devices to hubs.
El controlador host también realiza otras funciones relacionadas con la gestión de las
comunicaciones en el bus. El hub root tiene uno o más conectores para conexión de
dispositivos. El Hub root, en combinación con el controlador host, detecta y remueve
los dispositivos, lleva a cabo las solicitudes desde el controlador host, y transfiere los datos entre los
dispositivos y el controlador de host.
Los dispositivos son los periféricos y hubs adicionales que se conectan al bus.
Descripción General de un Microcontrolador (Módulos de Comunicación) Página 39
Un Hub tiene uno o más puertos para conectar dispositivos. Cada dispositivo debe contener los
circuitos y el código que le indique cómo comunicarse con el host. La
especificación USB define los cables y conectores que conectan los dispositivos a los Hubs.
Figura 43. Diagrama en bloques de un bus típico.
5.3. Elementos de una transferencia USB.
Cada transferencia USB está integrada por una o más transacciones, y a su vez, cada transacción
contiene paquetes. Antes de explicar cómo está conformada una transferencia, se definen algunos
términos.
5.3.1. Endpoints
Todo el tráfico del bus viaja desde o hacia los “endpoint” de cada dispositivo. Un endpoint es un
buffer que almacena datos. Típicamente es un bloque de memoria o un registro ubicado en el chip
Descripción General de un Microcontrolador (Módulos de Comunicación) Página 40
del controlador del dispositivo. Los datos almacenados en un endpoint son datos recibidos o datos
que están esperando ser transmitidos.
El host también tiene buffers que almacenan los datos recibidos y los datos que esperan ser
transmitidos, pero no tienen endpoint. En su lugar, el host da inicio o fin a las comunicaciones con
los endpoints de los dispositivos.
La especificación USB define a un endpoint como una porción única direccionable del
dispositivo USB que es origen o destino de la información en el flujo de comunicación entre el host
y el dispositivo.
La dirección de un endpoint está compuesta por el número de endpoint y su sentido. El número
de endpoint es un valor entre 0 a 15, y el sentido está definido desde la perspectiva del host. Un
endpoint de entrada (“IN”) proporciona datos para ser enviados al host, y un endpoint salida
(“OUT”) almacena datos recibidos del host.
Un endpoint configurado para transferencias de control debe transferir datos en ambos sentidos,
por lo que está compuesto por un endpoint cuya sentido es de entrada y salida, compartiendo el
mismo número. Los endpoints de control son una clase especial por ser bidireccionales.
Cada dispositivo debe tener un endpoint cero configurado como endpoint de control. Raramente
se necesitan adicionales.
Otros tipos de transferencias envían datos en un solo sentido. Un número simple de endpoint
puede soportar los dos tipos de sentidos, entrada o salida. Un dispositivo, por ejemplo, puede tener
un endpoint 1 de entrada para enviar datos al host y otro endpoint 1 de salida para recibir datos del
host.
Adicionalmente al endpoint 0, un dispositivo full o high speed tiene hasta 30 endpoint
adicionales, el número del endpoint desde uno a quince y el sentido de transmisión, entrada o salida.
En cambio un dispositivo low speed está limitado a dos endpoint adicionales con cualquier
combinación de sentidos.
Cada transacción en el bus comienza con un paquete que contiene un número de endpoint y un
código que indica el sentido del flujo de datos y si se inicia o no una transferencia de control. Los
códigos utilizados son “IN”, “OUT” y “SETUP”.
Una transacción del tipo SETUP es similar a una OUT por la razón de que los datos viajan desde
el host al dispositivo, pero es especial porque inicia una transferencia de control. Los dispositivos
deben identificar este tipo de transacción porque esta es el único tipo de transacción que un
dispositivo siempre debe aceptar, además porque el dispositivo necesita identificarse y responder
las solicitudes contenidas en los datos recibidos.
5.3.2. Pipes.
Antes de que una transferencia pueda realizarse, se debe establecer entre el host y el dispositivo
lo que se denomina una tubería o “pipe”. Es una asociación entre el endpoint de un dispositivo y el
software del controlador del host.
Durante el proceso de enumeración se establecen pipes. Si el dispositivo es removido del bus, el
host remueve las tuberías que no son necesarias. Cada dispositivo tiene un control por defecto de
pipe utilizando el endpoint cero.
La información de configuración recibida por el host incluye un descriptor de endpoint para cada
endpoint que el dispositivo quiera usar. Este descriptor de endpoint es un bloque de información
que le dice al host todo lo que necesita saber sobre el endpoint del dispositivo para poder
comunicarse con él. La información incluye la dirección del endpoint, el tipo de transferencia a
usar, el tamaño máximo de los paquetes de datos, y cuando sea necesario, el intervalo deseado para
las trasferencias.
Descripción General de un Microcontrolador (Módulos de Comunicación) Página 41
5.3.3. Tipos de transferencias
La interfaz USB está diseñada para manejar distintos tipos de dispositivos con una gran
variedad de requerimientos en relación a la frecuencia de transferencia, tiempo de respuesta y
corrección de errores. En la especificación USB se definen cuatro tipos de transferencias de datos,
cada uno de estos tipos de transferencias manejan diferentes necesidades, y cada dispositivo puede
utilizar la forma de transferencias que mejor se adecuen a sus necesidades.
Los tipos de transferencias USB son de “control”, “bulk”, “interrupt”, y por último
“isochronous”. En la tabla 6 se muestra, para cada tipo de transferencia, diferentes características.
La transferencia de control es la única que está definida en la especificación USB, es
utilizada por el host para aprender sobre el dispositivo. Permite al host obtener información sobre el
dispositivo, establecer su dirección, seleccionar configuraciones, entre otras características. Las
transferencias de control también pueden enviar pedidos específicos del fabricante del dispositivo.
Todo dispositivo USB debe dar soporte a este tipo de transferencia.
Las transferencias Bulk son usadas cuando la velocidad de transferencia no es crítica; como
enviar datos a una impresora o cuando se quiere acceder a archivos de un dispositivo de
almacenamiento. Para estas aplicaciones son necesarias las transferencias rápidas pero los datos
pueden esperar de ser necesario. Si el bus se encuentra muy ocupado la transferencia se demora
pero de encontrarse libre la transferencia es la más rápida. Únicamente dispositivos full o high
speed pueden realizar transferencias de este tipo. Los dispositivos de la clase “Mass storage”
utilizan estas transferencias.
Transferencias Interrupt son utilizadas por dispositivos que necesitan en forma periódica, la
atención del host o de otros dispositivos. Aparte de las transferencias de control, este tipo de
transferencia es la única forma de transferir datos para dispositivos low speed. Dispositivos como
teclados o mouse utilizan este tipo de transferencias para enviar datos.
Finalmente, las transferencias isochronous, tienen asegurado el tiempo de envió pero no
posee corrección de errores. Esta transferencia es utilizada para audio o video reproducido en
tiempo real. Es el único tipo de transferencia que no soporta retransmisión automática por detección
de errores en los datos recibidos, a causa de esto se aceptan errores en forma ocasional. Únicamente
dispositivos full y high speed soportan estas transferencias.
Tabla 6. Características principales para cada tipo de transferencia
Tipo de
transferencia Control Bulk Interrupt Isochronous
Uso Típico Identificación y
configuración.
Escáner,
dispositivos
mass storage.
Mouse,
keyboard.
Audio y video
en tiempo real.
Requerido Sí. No. No. No.
¿Usa low speed? Sí. No. Sí. No.
Dirección del
flujo de datos IN y OUT. In - OUT. In - OUT IN - OUT
Descripción General de un Microcontrolador (Módulos de Comunicación) Página 42
Corrección de
errores Sí. Sí. Sí. No.
¿Tasa de
transferencia
garantizada?
No. No. No. Sí.
¿Latencia
garantizada? No. No. Sí. Sí.
5.3.4. Trasferencias y transacciones.
La especificación USB define trasferencia como el proceso de establecer y transportar las
solicitudes de comunicación. Una transferencia puede ser muy corta, enviando unos pocos bits de
datos de una aplicación, o muy larga enviando el contenido de archivos muy extensos.
Cada transferencia está compuesta por una o más transacciones, a su vez cada transacción está
formada por uno, dos o tres paquetes.
La especificación USB define transacción como la prestación de un servicio a un endpoint. En
este caso servicio puede significar que el host envía información a un dispositivo, o que el host
solicita y recibe información de un dispositivo.
Cada transacción incluye identificación, chequeo de errores e información de control, así como
todos los datos a enviar. Una transferencia completa puede estar compuesta por múltiples frames o
microframes. Una transacción no puede ser interrumpida ni puede establecerse otra comunicación
en el bus que pueda interrumpir una transacción.
Una transferencia con una pequeña cantidad de datos puede requerir únicamente una
transacción, en cambio otras transferencias pueden requerir múltiples transacciones con una
pequeña cantidad de datos cada una.
5.3.5. Características de un Bloque en una transferencia
La figura siguiente muestra los elementos de una transferencia típica. Hay transferencias y
transacciones, etapas y fases, transacciones de datos y paquetes de datos, etapas de estados y fases
de handshake. Las Etapas de Datos tienen paquetes de handshake y las etapas de estados tienen
paquetes de datos. La Tabla 7 muestra los elementos de cada uno de los 4 tipos de transferencias.
Cada transferencia consiste de una o más transacciones, y cada transacción consiste de uno,
dos o tres paquetes. Los tres tipos de transacción se definen por su propósito y dirección en cuanto
al flujo de datos. El Setup de una transacción envía requerimientos de transferencia de control a un
dispositivo. Las transacciones OUT envían otra información de datos o estados al dispositivo. Las
transacciones IN envían información de datos o estados al host. La especificación USB define una
transacción como el suministro de servicios a un endpoint. En este caso se define “servicio” como
el envío de información desde el host al dispositivo, o requerimientos del host y recepción de
información desde el dispositivo.
Cada transacción incluye identificación, chequeo de error, estados, y control de información en
todo intercambio de datos. Una transferencia completa quizás requiera múltiples frames o micro
frames, pero una transacción se debe completar sin interrupciones. Ninguna otra comunicación
puede irrumpir en el bus en el medio de una transacción. En una transacción el dispositivo debe
responder rápidamente con los requerimientos de información de datos o estados. El firmware del
Descripción General de un Microcontrolador (Módulos de Comunicación) Página 43
dispositivo configura típicamente, un endpoint para responder a los paquetes recibidos, y el
hardware responde a los paquetes cuando llegan.
Figura 44. Características de una trama de Datos
Una transferencia con una pequeña cantidad de datos, tal vez requiere solo una transacción.
Otras transferencias requieren múltiples transacciones con un conjunto de datos en cada.
5.3.6. Fases de una transacción.
Cada uno de los tipos de transferencias definidos, están compuesto por una o más transacciones,
a su vez cada transacción está integrada por dos o tres fases, en la tabla 7 se muestra las fases
integrantes para cada tipo de transferencia.
Una transacción tiene hasta tres fases o partes que ocurren en secuencia, token, datos y
handshake. A su vez en cada fase se transmiten en uno o dos paquetes. Cada uno es un bloque de
información con un formato definido. Al comienzo de cada paquete se coloca información de
identificación llamado “Packet ID” (PID). Dependiendo de la transacción, el PID puede estar
seguido por una dirección de endpoint, datos, información de estado o el número de frame junto con
los bits de chequeo de error.
Fase token: el host inicia la comunicación enviando este paquete. El PID indica el tipo de
transacción: SETUP, IN, OUT o comienzo del frame.
Fase de datos: el host o el dispositivo trasfiere cualquier tipo de información en el
paquete de datos. El PID incluye un valor de secuencia de datos (“data toggle”) que es
Descripción General de un Microcontrolador (Módulos de Comunicación) Página 44
usado para proteger a datos perdidos o duplicados cuando la transferencia tiene múltiples
paquetes.
Fase de handshake: el host o el dispositivo envía un código que indica el estado de la
transferencia, si resultó exitosa u ocurrió algún tipo de error. En transferencias
isochronous no se utiliza esta fase. Los códigos utilizados en el PID son ACK, NAK,
STALL o NYET.
Tabla 7: fases integrantes de cada tipo de transferencia.
Tipo de transferencia Transacción Fases (Paquetes)
Control.
Setup. Una transacción.
Token.
Data.
Handshake.
Data. Cero o más transacciones
Token.
Data.
Handshake.
Estado. Una transacción.
Token.
Data.
Handshake.
Bulk.
Una o más transacciones.
(IN - OUT).
Token.
Data.
Handshake.
Interrupt.
Una o más transacciones.
(IN - OUT).
Token.
Data.
Handshake.
Isochronous.
Una o más transacciones.
(IN - OUT).
Token.
Data.
Las señales de handshake son transmitidas en los paquetes de handshake o datos. En todos los
casos, quien recibe la información de handshake, la utiliza para decidir qué hacer a continuación.
Descripción General de un Microcontrolador (Módulos de Comunicación) Página 45
ACK: indica que el host o el dispositivo ha recibido los datos sin errores.
NACK: significa que el dispositivo está ocupado o no hay datos que devolver. El host
nunca utiliza este código.
STALL: tiene tres significados: solicitud de control no soportado, pedido de control
fallido o fallo del endpoint.
NYET: únicamente dispositivos high speed lo utilizan. Después que un paquete de datos
es recibido por el endpoint en un dispositivo, este puede devolver este tipo de handshake.
Significa que el endpoint acepta los datos pero no está listo para recibir otro paquete de
datos. Cuando el host piensa que el dispositivo puede estar listo, envía un paquete con un
token especial llamado PING. El endpoint retorna un ACK para indicar que el dispositivo
está listo para recibir el siguiente paquete de datos o devuelve un NAK o STALL de no
estarlo. Este procedimiento es más eficiente que enviar todo el paquete de datos, encontrar
que el dispositivo no está listo, y tener que reenviar más tarde.
ERR: The ERR handshake is used only by high-speed hubs in complete-split transactions.
ERR indicates the device didn’t return an expected handshake in the transaction the hub is
completing with the host.
5.3.7. Chequeo de error.
La especificación USB da los requerimientos de hardware necesarios para reducir el ruido en
las líneas, y de esta forma reducir la probabilidad de errores. De todas formas cualquier
perturbación, como la desconexión de un cable USB, puede alterar otra transmisión. Por esa razón,
se incorpora a cada paquete, bits para el chequeo de errores. Adicionalmente, para transferencias
que requieren múltiples transacciones, se incorpora un valor llamado “data toggle” que mantiene al
transmisor y al receptor en forma sincronizada de manera de no omitir una transacción.
Los bits para el chequeo de errores son calculados utilizado el algoritmo llamado
comprobación de redundancia cíclica (CRC). El dispositivo transmisor realiza el cálculo y envía el
resultado con los datos transmitidos, luego el dispositivo receptor realiza un cálculo similar con los
datos recibidos. Si el resultado coincide significa que no han ocurrido errores por lo que se devuelve
un ACK. En caso de no coincidir no se envía el handshake, lo que significa que se debe
retransmitir.
5.4. Enumeración de dispositivos.
Antes de que una aplicación pueda comunicarse con un dispositivo, el host necesita aprender
de este. En el proceso de enumeración es cuando ocurre el intercambio de información que cumple
con esta tarea, para esta tarea se utiliza las transferencias del tipo de control utilizando el endpoint
cero. El proceso completo incluye asignarle una dirección al dispositivo, leer los descriptores del
dispositivo, asignar y cargar el controlador del dispositivo, y finalmente seleccionar la
configuración de alimentación requerida por el dispositivo, endpoints y otras características. Una
vez finalizado este proceso, el dispositivo está listo para trasferir o recibir datos utilizando los
endpoint del dispositivo.
5.4.1. Proceso de enumeración.
Una de las capacidades del hub es detectar cuando un dispositivo se conecta o desconecta.
Cada hub tiene un endpoint IN para reportar estos eventos al host. En el arranque del sistema el host
Descripción General de un Microcontrolador (Módulos de Comunicación) Página 46
interroga a su root hub si hay dispositivos conectados, después del arranque periódicamente se
realiza esta acción.
En el proceso de reconocimiento de un nuevo dispositivo, el host envía una serie de solicitudes
al hub donde se conecto el dispositivo. El hub establece la comunicación entre el dispositivo y el
host. Luego, el host intenta enumerar el dispositivo realizando transferencias de control, las cuales
contienen solicitudes estándar dirigidas al endpoint cero del dispositivo.
Para que este proceso termine satisfactoriamente, el dispositivo debe responder a cada solicitud
retornando la información pedida y realizando las tareas solicitadas. Típicamente el firmware de un
dispositivo contiene toda la información que el host puede solicitar pero no debe asumir que el
proceso va a ocurrir en un orden determinado.
5.4.2. Descriptores.
Los descriptores son estructuras de datos o bloques de información, que le permiten al host
aprender del dispositivo. Cada descriptor contiene información del dispositivo en su totalidad o de
un elemento del dispositivo. Son solicitados durante el proceso de enumeración por el host
utilizando transferencias del tipo de control.
A medida que el proceso de enumeración progresa la solicitud de descriptores se concentra en
características más específicas: primero en todo el dispositivo, después en cada configuración,
posteriormente en la configuración de cada interfaz, y finalmente, en los endpoint de cada interfaz.
El descriptor tiene un registro que indica el tamaño en bytes del mismo llamado bLength. En la
tabla 8 se muestran los distintos tipos de descriptores, en dicha tabla la columna “bDescriptor Type”
contiene un valor hexadecimal que identifica el tipo de descriptor.
Tabla 8. Se muestran los tipos de descriptores
bDescriptor Tipo descriptor. ¿Requerido?
01h Dispositivo. Sí.
02h Configuración. Sí.
03h “string” No. Texto descriptivo
opcional.
04h Interfaz. Sí.
05h Endpoint. No, si el dispositivo
únicamente usa endpoint 0.
06h “device qualifier”. Sí, para dispositivos que
soportan full y high speed.
07h “other_speed_configuration” Sí, para dispositivos que
soportan full y high speed.
08h “interface_power” No.
Descripción General de un Microcontrolador (Módulos de Comunicación) Página 47
09h OTG Solo para dispositivos OTG.
0Ah “debug” No.
0Bh “interface_association” Para dispositivos
compuestos.
A continuación se describen los principales tipos de descriptores:
Descriptor de dispositivo: contiene información básica acerca del dispositivo, al
conectarse un dispositivo, este es el primer descriptor que el host solicita. Un dispositivo
puede tener un sólo descriptor de este tipo. Estos descriptores proveen información
general acerca del fabricante, número de producto, número de serie, clase de dispositivo y
el número de configuraciones admitidas. A continuación se indican los elementos que
forma parte del descriptor de dispositivo:
- bcdUSB: indica la versión en BCD, ej versión 2.0 se indica 0200h
- idVendor: el host tiene un archivo .inf que contiene este valor
- idProduct: identificación del producto
- bcdDevice: versión del producto en BCD
- iManufacturer: es un índice que apunta a una descripción del fabricante
- iProduct: índice que apunta a una descripción del producto
- iserialnumber: un índice que apunta al número de serie del dispositivo
Descriptor de configuración: Provee información acerca de los requerimientos de
alimentación del dispositivo y cuantas interfaces son soportadas. Puede existir más de una
configuración para un dispositivo, aunque típicamente se utiliza una.
- bNumConfigurations: número de configuraciones que soporta el dispositivo
- bMaxPacketSize0: el tamaño máximo de paquete para el endpoint 0. Para full
speed se puede usar hasta 64
- bDeviceClass: para dispositivos cuya función es definida a nivel de dispositivo.
Por Ejemplo un hub o un controlador wireless
- bDeviceSubclass: es una subclase de una clase, ejemplo controlador RF es una
subclase del controlador wireless
- bDeviceProtocol: indica el protocolo de la clase, ejemplo bluetooth para un
controlador wireless.
Descriptor de endpoint: identifican el tipo de transferencia, su sentido y otros datos
específicos de un endpoint. En un dispositivo puede haber varios endpoints y pueden
compartir distintas configuraciones.
Descriptor “String”: son descriptores opcionales, proveen información descriptiva
acerca de una característica del dispositivo.
Adicionalmente a los descriptores estándar, un dispositivo puede contener descriptores
específicos del fabricante. Estos descriptores ofrecen una vía estructurada para que el dispositivo
pueda proporcionar información detallada sobre sí mismo.
Descripción General de un Microcontrolador (Módulos de Comunicación) Página 48
5.5. Registros asociados al módulo USB 5.5.1. Registro del ID del periférico (PER_ID)
La Figura 45 ilustra sobre el registro del ID del periférico del módulo USB.
Figura 45. Registro de ID del Periférico
IDx: Bits para la identificación del periférico. Por defecto siempre se lee como un periférico 0x04.
5.5.2. Registro de ID complementario (ID_COMP)
La Figura 46 ilustra sobre el registro de ID complementario del módulo USB.
Figura 46. Registro ID complementario
NIDx: Bits como complemento a “1” del ID del periférico.
5.5.3. Registro de la revisión del periférico(REV)
La Figura 47 ilustra sobre el registro de revisión del módulo USB.
Figura 47. Registro de Revisión del USB
REVx: Bits que indican el número de revisión del núcleo del USB.
5.5.4. Registro de información adicional del periférico (ADD_INFO)
La Figura 48 muestra el registro de información adicional del módulo USB.
Descripción General de un Microcontrolador (Módulos de Comunicación) Página 49
Figura 48. Registro de Información Adicional del Periférico
IRQ_NUM: Número de interrupción asignada al periférico.
IEHOST: Este bit es puesto a “1” cuando está habilitado el modo HOST.
5.5.5. Registro del estado de la interrupción en modo OTG (OTG_INT_STAT)
Este registro almacena los cambios en el ID y las señales del VBUS (Bus de alimentación USB).
El software deberá leer este registro, para determinar que evento ha generado esta interrupción. Sólo
los bits que han cambiado desde la última lectura se ponen a ”1”. Para borrar el estado de un bit,
basta con escribir un “1” en este. La Figura 49 muestra el registro del estado de interrupción en
modo OTG.
Figura 49. Registro de Estado de Interrupción en modo OTG
ID_CHG: Este bit es puesto a “1” cuando se presenta un cambio de estado en el pin ID del
conector USB.
0: No se ha presentado un cambio en el pin ID del conector USB.
1: Se ha presentado un cambio en el pin ID del conector USB.
1_MSEG: Este bit indica cuando ha pasado un milisegundo. Este bit debe ser aclarado cada que se
necesite verificar el milisegundo.
0: No se ha completado un tiempo de 1ms.
1: Se ha completado un tiempo de 1ms.
LINE_STAT_CHG: Este bit indica cuando la línea de estado del USB cambia. La interrupción
asociada a este bit se puede utilizar para detectar un estado de RESET, resumen, conexión y datos
como señales pulsantes.
0: No se ha detectado un cambio en la línea de estado USB.
1: detectado un cambio en la línea de estado USB.
SESS_VLD_CHG: Este bit indica cuando se ha detectado un cambio en la línea VBUS indicando
que hay una sesión válida.
0: No se ha detectado una sesión válida.
1: Se ha detectado una sesión válida.
Descripción General de un Microcontrolador (Módulos de Comunicación) Página 50
B_SESS_CHG: Este bit indica cuando se ha detectado un cambio en la línea VBUS por un
terminal tipo B.
0: No se ha detectado un cambio por un terminal tipo B.
1: Se ha detectado un cambio por un terminal tipo B.
A_SESS_CHG: Este bit indica cuando se ha detectado un cambio en la línea VBUS por un
terminal tipo A.
0: No se ha detectado un cambio por un terminal tipo A.
1: Se ha detectado un cambio por un terminal tipo A.
5.5.6. Registro del control de la interrupción en modo OTG (OTG_INT_EN)
Este registro habilita bit a bit las posibles interrupciones del modo OTG. La Figura 50 muestra el
registro de control de interrupción en modo OTG.
Figura 50. Registro del control de la interrupción en modo OTG
ID_EN: Habilita la interrupción por evento ID.
0: La interrupción por evento ID está deshabilitada.
1: La interrupción por evento ID está habilitada.
1_MSEG_EN: Habilita la interrupción por evento 1_MSEG.
0: La interrupción por evento 1_MSEG está deshabilitada.
1: La interrupción por evento 1_MSEG está habilitada.
LINE_STAT_EN: Habilita la interrupción por evento LINE_STAT_CHG.
0: La interrupción por evento LINE_STAT_CHG está deshabilitada.
1: La interrupción por evento LINE_STAT_CHG está habilitada.
SESS_VLD_CHG: Habilita la interrupción por evento SESS_VLD_CHG.
0: La interrupción por evento SESS_VLD_CHG está deshabilitada.
1: La interrupción por evento SESS_VLD_CHG está habilitada.
B_SESS_EN: Habilita la interrupción por evento B_SESS _CHG.
0: La interrupción por evento B_SESS _CHG está deshabilitada.
1: La interrupción por evento B_SESS _CHG está habilitada.
A_SESS_EN: Habilita la interrupción por evento A_SESS _CHG.
0: La interrupción por evento A_SESS _CHG está deshabilitada.
1: La interrupción por evento A_SESS _CHG está habilitada.
Descripción General de un Microcontrolador (Módulos de Comunicación) Página 51
5.5.7. Registro de estado de interrupción (OTG_STAT)
Este registro muestra el valor actual desde las salidas del comparador externo del pin ID y el
VBUS. La Figura 51 muestra el registro de control de interrupción en modo USB A/B.
Figura 51. Registro de estado de interrupción
ID: Este bit es puesto a “1” cuando se presenta un cambio de estado en el pin ID del conector USB.
0: Indica que un cable tipo A ha sido conectado al conector USB.
1: Indica que no se ha establecido una conexión o que un cable tipo B ha sido
conectado al conector USB.
1_MSEG_EN: Este bit no se usa.
LINE_STATE_STABLE: Este bit indica que las líneas internas, que controlan el
LINE_STAT_CHG se han estabilizado por al menos 1 milisegundo. Primero se lee el bit
LINE_STAT_CHG y luego se lee el LINE_STATE_STABLE.
0: La línea LINE_STAT_CHG no está estable.
1: La línea LINE_STAT_CHG está estable.
SESS_VLD: Este bit indica cuando una sesión es válida.
0: El voltaje VBUS está por debajo del umbral de una sesión válida tipo B.
1: El voltaje VBUS corresponde al umbral de una sesión válida tipo B.
B_SESS_END: Este bit indica cuando una sesión tipo B ha terminado.
0: El voltaje VBUS corresponde al umbral de un final de una sesión tipoB.
1: El voltaje VBUS está por debajo del umbral de un final de una sesióntipo B.
A_VBUS_VLD: Este bit indica cuando el VBUS tipo A es válido.
0: El voltaje VBUS está por debajo del umbral válido del VBUS tipo A.
1: El voltaje VBUS corresponde al umbral válido del VBUS tipo A.
5.5.8. Registro de control OTG (OTG_CTRL)
Este registro controla la operación del VBUS y de las resistencias asociadas a la línea de datos del
USB. La Figura 52 muestra el registro de control OTG.
Descripción General de un Microcontrolador (Módulos de Comunicación) Página 52
Figura 52. Registro de control OTG
DP_HIGH: Habilita el pullup para la línea D+.
0: El pullup para la línea D+ no está habilitado.
1: El pullup para la línea D+ está habilitado.
DP_LOW: Habilita el puldlown para la línea D+.
0: El pulldown para la línea D+ no está habilitado.
1: El pulldown para la línea D+ está habilitado.
DM_LOW: Habilita el pulldown para la línea D-.
0: El pulldown para la línea D- no está habilitado.
1: El pulldown para la línea D- está habilitado.
VBUS_ON: Señal de encendido del VBUS.
0: La señal de encendido del VBUS no está puesta.
1: El VBUS está encendido.
OTG_EN: Habilita una resistencia pullup/pulldown para el modo OTG.
0: Si el bit USB_EN está en “1” y el bit HOST_MODE es “0”, se habilita una
resistencia de pullup para el pin D+. Si el bit HOST_MODE es “1”, se ubican
pulldown’s para las líneas D+ y D-.
1: Los controles sobre los pullup’s y pulldown’s son usados.
VBUS_CHG: Inserta una resistencia a la señal de VBUS.
0: No inserta una resistencia a la señal de VBUS.
1: Inserta una resistencia a la señal de VBUS.
VBUS_DSCHG: Inserta una resistencia de descarga a la señal de VBUS.
0: No inserta una resistencia de descarga a la señal de VBUS.
1: Inserta una resistencia de descarga a la señal de VBUS.
5.5.9. Registro de estado de interrupción (INT_STAT)
Contiene una serie de bits para cada evento de interrupción del módulo USB y pertenecen a una
sola fuente de interrupción del microcontrolador ColdFire® V1. Para aclarar cada bit, es necesario
escribirlo a “1” una vez se haya atendido el evento de interrupción. La Figura 53 muestra el registro
de estado de interrupción.
Descripción General de un Microcontrolador (Módulos de Comunicación) Página 53
Figura 53. Registro de estado de interrupción
STALL: Cuando el dispositivo está en modo objetivo (Target), este bit se pone a “1” cuando el SIE
(Serial Interface Engine) envía una señal de STALL. Cuando se está en modo HOST, este bit se
pone a ”1” cuando el módulo USB detecta una señal de STALL. Esta interrupción puede ser usada
para determinar si la última transacción USB fue completada con éxito o si paró (STALL).
ATTACH: Interrupción por enganche. Este bit es puesto a “1” cuando el módulo USB detecta un
enganche de un dispositivo USB. Esta señal sólo será válida si el bit HOST_MODE_EN =1. esta
interrupción indica que un periférico está conectado y deberá ser configurado.
RESUME: Este bit es puesto a “1” dependiendo de las señales DP/DM y puede ser usado como
una señal remota para despertar el dispositivo pegado al bus USB.
SLEEP: Este bit es puesto a “1” cuando el módulo USB detecta un evento de modo vago (IDLE),
durante 3 milisegundos. Este temporizador es aclarado al detectarse actividad en el bus USB.
TOK_DNE: Este bit se pone a “1” cuando se ha completado el proceso actual de testigo (TOKEN).
El núcleo del ColdFire® V1 deberá leer, inmediatamente, el registro STAT para determinar el
terminal y el BD usados para el TOKEN. Aclarar este bit causa que el registro STAT sea borrado o
que el estado retenido del registro STAT sea almacenado en el registro STAT.
SOFT_TOK: Este bit se pone a “1” cuando módulo USB recibe una señal de TOKEN de inicio de
trama (Start Of Frame).
ERROR: Este bit es puesto a “1” cuando alguna de las condiciones de error en el registro
ERR_STAT ocurre. El núcleo del ColdFire® V1 deberá leer, inmediatamente, el registro
ERR_STAT para determinar la fuente del error.
USB_RST: Este bit es puesto a “1” cuando el módulo USB a decodificado un RESET válido. La
acción anterior informa al microcontrolador que podrá escribir un 0x00 dentro del registro de
direcciones y habilitar el terminal 0.
5.5.10. Registro de habilitación de interrupciones (INT_ENB)
Contiene una serie de bits para habilitar cada fuente de interrupción del módulo USB. La Figura 54
muestra el registro de habilitación de las interrupciones.
Descripción General de un Microcontrolador (Módulos de Comunicación) Página 54
Figura 54. Registro de habilitación de interrupciones (INT_ENB)
STALL_EN: Bit para habilitar interrupción por un evento tipo STALL.
0: Inhibe interrupción por evento STALL.
1: Habilita interrupción por evento STALL.
ATTACH_EN: Bit para habilitar interrupción por un evento tipo ATTACH.
0: Inhibe interrupción por evento ATTACH.
1: Habilita interrupción por evento ATTACH.
RESUME_EN: Bit para habilitar interrupción por un evento tipo RESUME.
0: Inhibe interrupción por evento RESUME.
1: Habilita interrupción por evento RESUME.
SLEEP_EN: Bit para habilitar interrupción por un evento tipo SLEEP.
0: Inhibe interrupción por evento SLEEP.
1: Habilita interrupción por evento SLEEP.
TOK_DNE_EN: Bit para habilitar interrupción por un evento tipo TOK_DNE.
0: Inhibe interrupción por evento TOK_DNE.
1: Habilita interrupción por evento TOK_DNE.
SOF_TOK_EN: Bit para habilitar interrupción por un evento tipo SOF_TOK.
0: Inhibe interrupción por evento SOF_TOK.
1: Habilita interrupción por evento SOF_TOK.
ERROR_EN: Bit para habilitar interrupción por un evento tipo ERROR.
0: Inhibe interrupción por evento ERROR.
1: Habilita interrupción por evento ERROR.
USB_RST_EN: Bit para habilitar interrupción por un evento tipo USB_RST.
0: Inhibe interrupción por evento USB_RST.
1: Habilita interrupción por evento USB_RST.
5.5.11. Registro de estado de interrupción por error (ERR_STAT)
Contiene una serie de bits para detectar cada fuente de interrupción por error en el módulo USB.
Todos estos bits conforman una OR alambrada y esta a su vez afecta el bit INT_STAT [ERROR].
Los bits pueden ser borrados escribiendo un “1” en estos. La Figura 55 muestra el registro de
detección de las interrupciones.
Descripción General de un Microcontrolador (Módulos de Comunicación) Página 55
Figura 55. Registro de estado de interrupción por error (ERR_STAT)
BTS_ERR: Este bit se pone a “1” en la detección de error por evento de BIT
STUFF (Bit de relleno para sincronía).
DMA_ERR: Este bit se pone a “1” si el módulo USB hace un requerimiento al DMA de la lectura
de un nuevo BDT, pero no fue posible obtener el dato desde el bus, tanto para lectura como para
escritura. Si se está procesando una transferencia tipo TX (IN), esta puede causar una condición de
bajo-flujo (underflow). Si se está procesando una transferencia tipo RX (IN), esta puede causar una
condición de sobreflujo (overflow). Este tipo de condición es muy usada en el desarrollo de
arbitramiento de dispositivos, tanto para el microprocesador como para el módulo USB. Lo anterior
minimiza la demanda en el requerimiento de bus y tiempos de inactividad muy grandes (grand
latency). Este bit también es puesto a “1” si un paquete de datos supera el tamaño máximo
especificado en el BDT, para este caso la máquina trunca el paquete y lo almacena en el buffer de
memoria.
BTO_ERR: Este bit se pone a “1” en la detección de error por evento de un tiempo por fuera
(timeout) en la devolución del bus (bus turnaround). El módulo USB contiene un temporizador para
el bus turnaround.
DFN8: Este bit se pone a “1” si el campo del dato recibido no tiene 8 bits de longitud.
CRC16: Este bit se pone a “1” cuando un paquete es rechazado por un error en el chequeo cíclico
redundante CRC16.
CRC5_EOF: Este bit tiene dos funciones: La primera es que si el Módulo USB está operando en
modo periférico (HOST_MODE_EN = 0) y se detecta un error de redundancia cíclica tipo CRC5, el
bit se pone a “1”. La segunda función es que si el módulo está operando en modo HOST
(HOST_MODE_EN = 1) y se detecta un error por fin de trama (EOF), este bit se pone a ”1”. Este
tipo de interrupción se usa en el software para el despacho de paquetes de información y garantizar
que no ocurran cruces en las transacciones, al comienzo de una nueva trama.
PID_ERR: Este bit se pone a “1” cuando el PID de una transacción falla.
5.5.12. Registro de habilitación de interrupción por error (ERR_ENB)
Contiene una serie de bits para habilitar cada fuente de interrupción por error en el módulo USB.
Poniendo a “1” uno de estos bits, habilita la respectiva interrupción en el registro ERR_STAT. La
Figura 56 muestra el registro de habilitación de las interrupciones.
Descripción General de un Microcontrolador (Módulos de Comunicación) Página 56
Figura 56. Registro de habilitación de interrupción por error
BTS_ERR_EN: Bit para habilitar la interrupción por evento de BTS_ERR.
0: Inhibe interrupción por evento BTS_ERR.
1: Habilita interrupción por evento BTS_ERR.
DMA_ERR_EN: Bit para habilitar la interrupción por evento de DMA_ERR.
0: Inhibe interrupción por evento DMA_ERR.
1: Habilita interrupción por evento DMA_ERR.
BTO_ERR_EN: Bit para habilitar la interrupción por evento de BTO_ERR.
0: Inhibe interrupción por evento BTO_ERR.
1: Habilita interrupción por evento BTO_ERR.
DFN8_EN: Bit para habilitar la interrupción por evento de DFN8.
0: Inhibe interrupción por evento DFN8_EN.
1: Habilita interrupción por evento DFN8_EN.
CRC16_EN: Bit para habilitar la interrupción por evento de CRC16.
0: Inhibe interrupción por evento CRC16_EN.
1: Habilita interrupción por evento CRC16_EN.
CRC5_EOF_EN: Bit para habilitar la interrupción por evento de CRC5_EOF.
0: Inhibe interrupción por evento CRC5_EOF.
1: Habilita interrupción por evento CRC5_EOF.
PID_ERR_EN: Bit para habilitar la interrupción por evento de PID_ERR.
0: Inhibe interrupción por evento PID_ERR.
1: Habilita interrupción por evento PID_ERR.
Descripción General de un Microcontrolador (Módulos de Comunicación) Página 57
Apéndice
1. Módulo Serial en la Familia HC908
Este modulo no se encuentra en el HC908QY4, pero se encuentra en la mayoría de los MCUs de
la Familia HC908 [3] y [4].
1.1. Características
• 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 INT’S 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”
•Framing Error Detection en el receptor
•Chequeo de Paridad por Hardware
1.2. Descripción de la comunicación serie [2]
Utiliza el sistema doble buffer. 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.
Se pueden seleccionar 2 formatos de datos diferentes a transmitir, uno de ellos es de 8 bits,
donde hay un bit de inicio, un bit de stop y 8 bit de datos. El otro Formato es de 9 bits, con 1 bit de
inicio, un bit de stop, un bit de paridad extra u otro stop y 8 bit de datos.
Caracteres de Datos Especiales:
Break - No tiene bits de Start o Stop bits, 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 carácter “idle” de sincronismo
Descripción General de un Microcontrolador (Módulos de Comunicación) Página 58
1.3. Registros I/O del SCI
Siete registros I/O controlan y monitorean la operación del SCI:
• SCI Control Register 1 (SCC1)
• SCI Control Register 2 (SCC2)
• SCI Control Register 3 (SCC3)
• SCI Status Register 1 (SCS1)
• SCI Status Register 2 (SCS2)
• SCI Data Register (SCDR)
• SCI Baud Rate Register (SCBR)
El módulo de SCI de la flia. HC908 tiene un mejor manejo automático de la recepción de
información serial con paridad (implementada por hardware interno), mayor velocidad de TX / RX
por medio de dos alternativas de Clocks de sincronismo (Fbus y External Clock) y hasta un mejor
manejo de comunicaciones serial del tipo “Network” o Red con múltiples nodos.
1.3.1. Registo SCI de Baud Rate
Este registro permite seleccionar el baud rate para el transmisor del SCI. Los bits SCI “baud
rate prescaler” (SCP1,SCP0) dividen la frecuencia del BUS (fBus) por un múltiplo de 64, 1, 3, 4,
o 13. Los bits SCI “baud rate select bits” (SCR2 - SCR0) permiten seleccionar el baud rate de
transmisión desde el “prescaler output” y dividen la frecuencia de la salida del preescalador por 1,
2, 4, 8, 16, 32, 64, o 128.
Figura 57. Registro de selección de tasa de baudios.
Para una frecuencia de BUS = 4,9152 MHz se pueden obtener los siguientes Baud rates:
Tabla 9. Configuración de los bits SCR
Frecuencia de Bus = 4.9152 Mhz Máximo Baud Rate
(desde tabla prescalador )
SCR2 SCR1 SCR0 Divisor 76.80K Baud 19.20K Baud
0 0 0 1 76.80K Baud 19.20K Baud
0 0 1 2 38.40K Baud 9600 Baud
0 1 0 4 19.20K Baud 4800 Baud
0 1 1 8 9600 Baud 2400 Baud
1 0 0 16 4800 Baud 1200 Baud
1 0 1 32 2400 Baud 600 Baud
1 1 0 64 1200 Baud 300 Baud
1 1 1 128 600 Baud 150 Baud
Descripción General de un Microcontrolador (Módulos de Comunicación) Página 59
Tabla 10. Configuración de los Bits SCP
SCP1 SCP0 Divisor Máximo Baud Rate
0 0 1 76.80K Baud
0 1 3 25.833K Baud
1 0 4 19.20K Baud
1 1 13 5.908K Baud
1.3.2. Registro de Interrupciones y de configuración del Tx
El bit SCI Transmit Interrupt Enable (SCTIE) produce una interrupción cuando el registro
de datos Tx queda vacío. El próximo byte puede ser cargado en el registro de datos Tx.
1 = Habilita interrupción
0 = Deshabilita interrupción
El bit Transmission Complete Interrupt Enable (TCIE) produce una interrupción cuando Tx
está Completa. Un byte ha sido enviado.
1 = Habilita interrupción
0 = Deshabilita interrupción
El bit Transmitter Enable (TE) habilita la operación de TX y envía un “preámbulo”.
1 = Habilita el transmisor
0 = Deshabilita el transmisor
El bit SCI Enable (ENSCI) habilita al SCI y al generador de baud rate SCI y permite al SCI
ser deshabilitado para baja potencia.
1 = SCI habilitado
0 = SCI deshabilitado
El bit Character Length Select (M)
1 = Caracteres SCI de 9-bit
0 = Caracteres SCI de 8-bit
El bit Parity Enable (PEN)
1 = habilitado
0 = Deshabilitado
El bit Parity Type (PTY) 1 = paridad impar
0 = paridad par
Con los 3 últimos bits (M,PEN, PTY), en el módulo de SCI, se puede setear el “largo del
caracter”, si lleva paridad o no y de qué tipo, y si se utiliza 1 o 2 bits de stop.
Se debe destacar que, en los módulos de SCI de los MCUs HC908, cuando se trabaja con
paridad (par ó impar), la misma es generada (en la TX) y decodificada (en la RX) en forma
automática por el mismo.
Descripción General de un Microcontrolador (Módulos de Comunicación) Página 60
Figura 58. Registro SCC1
Figura 59. Registro SCC2
Tabla 11. Selección del largo de caracter
1.3.3. SCI Status Register 1 (SCS1)
Figura 60. Flags de estado del transmisor.
El SCI Transmitter Empty (SCTE) indica que el contenido del registro de datos SCI ha sido
movido al serial shift register Tx. Este bit es limpiado por la lectura del SCS1 seguida de la
escritura del SCDR.
1 = Data register vacío
0 = Data register no vacío
El Transmission Complete (TC) indica que el SCDR está vacío y no hay transmisión en
progreso. Este bit es limpiado por la lectura del SCS1 seguida de la escritura del SCDR
1 = No hay transmisión en progreso
0 = Transmisión en progreso
1.3.4. SCI Data Register (SCDR)
Figura 61. Registro de Datos SCI.
M PEN PTY Character Length
0 0 x 1 start + 8 (7) data + 1 (2) stop
1 0 x 1 start + 9 (8) data + 1 (2) stop
0 1 0 1 start + 7 data + Even +1 stop
0 1 1 1 start + 7 data + Odd +1 stop
1 1 0 1 start + 8 data + Even +1 stop
1 1 1 1 start + 8 data + Odd +1 stop
Descripción General de un Microcontrolador (Módulos de Comunicación) Página 61
Tiene Buffers de datos para el shift Register TX/RX. En el SCDR se escriben datos a ser
transmitidos. Inicia la operación de transmisión.
1.3.5. SCI Status Register 2 (SCS2)
Figura 62. Registro de Estado 2.
El Status Register 2 tiene 2 bits, el bit Break (BKF) – Seteado cuando se detecta un “break
character”. Se limpia por lectura del SCS2 luego de leer el SCDR y el bit Reception in Progress
(RPF) – Seteado durante la búsqueda del “start bit”–Reseteado después de se detecta un bit de stop
o falsos bit de start”.
Descripción General de un Microcontrolador (Módulos de Comunicación) Página 62
Referencias.
[1] Douglas H. Summerville, “Embedded Systems Interfacing for Engineers using the Freescale
HCS08 Microcontroller II: Digital and Analog Hardware Interfacing”, State University of New
York at Binghamton, Morgan y Claypool Publishers, 2009.
[2] Data sheet: MC68HC908QY4 Microcontrolers, Rev. 5, 07/2005
[3] Daniel Di Lella, Curso de Microcontroladores HC908, Electrocomponentes S.A., 2005
[4] MCF51JM128 ColdFire® Integrated Microcontroller Reference Manual. Freescale
Semiconductor. Rev 1, 2008.
[5] Microcontroller MCF51JM128 ColdFire Data Sheet. Freescale Semiconductor. Rev 0, 2008.
[6] “OpenHCI for USB”, Compaq, Microsoft, National Semiconductor, septiembre de 1999.
[7] Axelson, Jan. “USB Complete”, Segunda edición, USA. 2001.
[8] Jan Axelson, “Serial Port Complete”, tercera edición, Madison, Lakeview research, 2007.