1) El USB nació en 1994 tras una alianza entre empresas de hardware y software para facilitar la conexión de periféricos.
2) El USB usa un bus punto a punto donde solo hay un host (PC) y los periféricos comparten el ancho de banda.
3) El USB permite la conexión y desconexión dinámica de dispositivos sin apagar el equipo.
2. Universal Serial Bus
Nace en 1994, tras una alianza entre las 4 principales plantas de
Desarrollo de Hardware y Software (Compaq, Intel, Microsoft,
NEC). Posteriormente se unieron HP, Lucent y Phillips.
Originalmente fue creado con las siguientes intensiones:
Conección del PC al Telefono
Facilidad de Uso
Expanción de Puerto
3. Universal Serial Bus
Descripción del sistema USB
El USB es un bus punto a punto: dado que el lugar de partida es el
host (PC o hub), el destino es un periférico u otro hub. No hay más
que un único host (PC) en una arquitectura USB.
Los PC estándar tienen dos tomas USB, lo que implica que, para
permitir más de dos periférico simultáneamente, es necesario un
hub. Algunos periféricos incluyen un hub integrado, por ejemplo, el
teclado USB, al que se le puede conectar un Mouse USB.
Los periféricos comparten la banda de paso del USB. El protocolo se
basa en el llamado paso de testigo (token). El ordenados
proporciona el testigo al periférico seleccionado y seguidamente,
éste le devuelve el testigo en su respuesta.
Este bus permite la conexión y la des-conexión en cualquier
momento sin necesidad de apagar el equipo.
4. Universal Serial Bus
INTERFAZ FÍSICA
Aspecto eléctrico
A nivel eléctrico, el cable USB transfiere la señal y la alimentación sobre
4 hilos.
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).
5. Universal Serial Bus
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 flow de datos, la codificación es de tipo
NRZI (non-return to zero inverted), 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.
6. Universal Serial Bus
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).
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.
7. Universal Serial Bus
Tipos de Conectores
Existen 2 Tipos de conectores de USB.
Conector tipo A, Conector Tipo B.
Asignación los Pines del USB
Pin Nº Nombre Color
1 Vcc (+5 voltios) Rojo
2 Data - Blanco
3 Data + Verde
4 Ground (GND) Negro
8. Universal Serial Bus
Asignación los Pines del Mini-USB
Mayormente usado en aplicaciones de
comunicación de dispositivos electrónicos
portables (Celulares, PDA, Cámaras, etc).
Pin Nº Nombre Color
1 Vcc (+5 voltios) Rojo
2 Data - Blanco
3 Data + Verde
4 No Conectado --
5 Ground (GND) Negro
10. Universal Serial Bus
Un dispositivos USB conectado al bus, requiere un controlador completamente
personalizado, o bien pueden pertenecer a una clase de dispositivo. Las
Clases de dispositivos permiten que el mismo controlador de dispositivo pueda
utilizarse para varios dispositivos con funcionalidades similares.
Clases de los Dispositivos Descripción Ejemplo de Dispositivo
0x00 Reservado -
0x01 Dispositivo de Audio Sound Card
0x02 Dispositivo de Comunicación Modem
Fax
0x03 Human Interface Dinamic (HID) Teclado
Mouse
0x07 Dispositivos de Impresión Impresora
0x08 Dispositivo de Alamcenamiento Memory Card
Masivo Pendrive
0x09 Dispositivo Hub Hubs
0x0B Dispositivo Lector de Memorias Lector de Memorias
Inteligentes
0x0E Dispositivos de Video Webcam
Scanner
0xE0 Dispositivo Inalambrico Bluetooth
11. Universal Serial Bus
TERMINOLOGÍA USB
Host: Dispositivo maestro que inicia la comunicación (Generalmente la
computadora).
Hub: Dispositivo que contiene uno o mas conectores o conexiones
internas hacia otros dispositivos usb, el cual habilita la comunicación
entre el host y con diversos dispositivos. Cada conector representa un
puerto USB.
Dispositivo compuesto: Es aquel dispositivo con múltiples interfaces
independientes. Cada una tiene una dirección sobre el bus para cada
interface puede tener un diferente driver device en el host.
Puerto USB: Cada host soporta solo un bus, cada conector en el bus
representa un puerto USB por lo tanto sobre le bus puede haber uno o
varios conectores , pero solo existe una ruta y solo un dispositivo puede
transmitir información a un tiempo.
12. Universal Serial Bus
TERMINOLOGÍA USB
Driver: es un programa que habilita aplicaciones para poderse
comunicar con el dispositivo. Cada dispositivo sobre el bus debe tener
un driver, algunos periféricos utilizan los drivers que trae Windows.
Puntos terminales (Endpoints): Es una localidad especifica dentro del
dispositivo. El Endpoint es un buffer que almacena múltiples bytes,
típicamente es un bloque de la memoria de datos o un registro dentro
del micro controlador. Todos lo dispositivos deben soportar el punto
terminal 0. Este punto terminal es el que recibe todo el control y la
peticiones de estado durante la enumeración cuando el dispositivo esta
sobre el bus.
13. Universal Serial Bus
TERMINOLOGÍA USB
Tuberías (Pipes): Es un enlace virtual entre el host (la PC) y el
dispositivo USB, este enlace configura los parámetros asociados con el
ancho de banda que tipo de transferencia se va a utilizar (Control,
Bulk, Isocrona o Interrupt) dirección del flujo de datos y el máximo y/o
mínimo tamaño de los paquetes/buffers. Cada enlace está
caracterizado por su banda de paso (Token), su tipo de servicio, el
número de punto terminal (End Point) y el tamaño de los paquetes.
Estos enlaces se definen y crean durante la inicialización del USB .
Siempre existe un enlace virtual 0 que permite tener acceso a la
información de configuración del periférico USB (estado, control e
información). La norma USB define 2 tipos de enlaces virtuales (pipe);
stream y message.
14. Universal Serial Bus
TERMINOLOGÍA USB
Stream Pipes: se trata de un flujo sin formato USB definido, esto
significa que se puede enviar cualquier tipo de dato. Este tipo de pipe
soporta las transferencias bulk, isocronas, y interrupt. Además tanto el
host como el dispositivo USB pueden controlar.
Message Pipes: este tipo de enlace virtual si tiene un formato USB
definido y solo puede soportar la transferencia Control.
15. Universal Serial Bus
TIPOS DE TRANSFERECIA
El enlace virtual (pipe) puede ser de cuatro tipos:
Control: Modo utilizado para realizar configuraciones: existe siempre
sobre el Punto terminal 0 (EndPoint 0). Todos los dispositivos USB deben
soportar este tipo de transferencia. Los datos de control sirven para
configurar el periférico en el momento de conectarse al USB. Algunos
drivers específicos pueden utilizar este enlace para transmitir su propia
información de control. Este enlace no tiene pérdida de datos, puesto que
los dispositivos de detección de recuperación de errores están activos a
nivel USB.
16. Universal Serial Bus
TIPOS DE TRANSFERECIA
Bulk: Este modo se utiliza para la transmisión de importantes
cantidades de información. Como el tipo control, este enlace no tiene
pérdida de datos. Este tipo de transferencia es útil cuando la razón de
transferencia no es critica como por ejemplo , el envió de un archivo a
imprimir o la recepción de datos desde un escáner. En estas aplicaciones,
la transferencia es rápida, pero puede espera si fuera necesario. Solo los
dispositivos de media y alta velocidad utilizan este tipo de transferencia.
17. Universal Serial Bus
TIPOS DE TRANSFERECIA
Interrupt: modo utilizado para transmisiones de pequeños paquetes,
rápidos, orientados a percepciones humanas (ratón, punteros). Este
tipo de transferencia son para dispositivos que deben recibir atención
periódicamente y lo utilizan los dispositivos de baja velocidad. Este tipo
de transmisión garantiza la transferencia de pequeñas cantidades de
datos. El tiempo de respuesta no puede ser inferior al valor especificado
por la interfaz. El ratón o cualquier otro dispositivo apuntador es una
aplicación típica de este modo de transmisión.
Isochronous o Flujo en tiempo real: modo utilizado para la
transmisión de audio o video comprimido. Este tipo de transmisión
funciona en tiempo real. Este es el modo de mayor prioridad. La
transmisión de la voz es un ejemplo de esta aplicación. Si ésta no se
transmite correctamente, pueden llegar a oírse parásitos (glich) y la
aplicación puede detectar ciertos errores de los llamados underruns .
18. Universal Serial Bus
ENUMERACIÓN
Cuando se conecta un dispositivo USB a la PC se produce el Proceso de
Enumeración, el cual consiste en que el host le pregunta al dispositivo
que se presente y le diga cuales son sus parámetros, tales como:
• Consumo de energía expresada en unidades de Carga
• Numero y tipos de Puntos terminales
• Clase del producto.
• Tipo de transferencia
• Razón de escrutinio, etc.
El proceso de enumeración es inicializado por el host cuando detecta
que un nuevo dispositivo que ha sido adjuntado al Bus. El host le asigna
una dirección al dispositivo adjuntado al bus y habilita su configuración
permitiendo la transferencia de datos sobre el bus.
21. Universal Serial Bus
Lo que pretendemos en este proyecto es implementar una comunicación bidireccional
serie, Communications Devices Class, entre el PIC y cualquier Software del PC que
use un puerto COM Serie estándar pero emulándolo vía USB 2.0 a full speed.
Vamos a realizar los ajustes necesarios en el Firmware del PIC para que sea reconocido
por el Windows como un dispositivo Serie estándar y lo registre como un puerto COM
Virtual. Como intermediario vamos a utilizar un recurso que nos provee Microchip: El
Driver .inf para Windows mchpcdc.inf.
Para el firmware vamos a utilizar como base el ejemplo y descriptor USB que trae como
ejemplos el CCS C, adaptándolo a nuestras necesidades, fundamentalmente darles los
VID&PID que espera encontrar el driver para Windows.
Del lado del PC vamos a utilizar los programas que disponemos para monitorizar un
puerto COM serie estándar: el HyperTerminal de Windows o Siow de CCS C.
En el PC es imprescindible instalar el Driver Windows mchpcdc.inf para Windows
XP/Seven que nos ofrece Microchip, que nos va a servir de puente entre estos softwares
con el canal USB del PC pero emulado como un puerto COM. Este .inf Es quien define
los VID&PID que vamos a utilizar.
22. Universal Serial Bus
Como podemos ver en OSC1 y OSC2
conectamos nuestro cristal: 4 Mhz, 8 Mhz, 12
Mhz, 16 Mhz, 20 Mhz, 24 Mhz, 40 Mhz ó 48
Mhz, que son los cristales validos compatibles
con lo que sigue a continuación.
Debemos Tener en cuenta que este cristal es
el mismo para generar la frecuencia de 48 Mhz
necesaria para el USB 2.0 y para el Clock del
PIC, que pueden ser la misma o no, según la
configuración que al final adoptemos, quiere
esto decir que podemos tener el USB a 48
Mhz y nuestro programa en el PIC
funcionando a 12 Mhz por ejemplo.
Observemos que justo tras el Smicht Trigger
del Primary Oscillator salen tres líneas en
paralelo que van a módulos distintos con
distintas posibilidades.
La primera línea, la superior, va directamente
al switch USBDIV que si está a cero indica
que la frecuencia base original del cristal es
directamente inyectada al USB, si pasa el
switch FSEN que elige entre todo el sistema
directo/PLL o el Primary Clock del CPU.
Esta Opción de inyectar directamente la
frecuencia del cristal es obviamente solo
posible si usamos un Cristal de 48 Mhz que es
lo que necesitamos para el USB.
23. Universal Serial Bus
El módulo USB Clock Source tiene a su
entrada un PLL Prescaler, o sea un divisor de
frecuencia. En cada una de sus salidas vamos
a tener FOSC dividida por 1, 2, 3, 4, 5, 6, 10 ó
12. Y mediante PLLDIV que no es mas que un
Multiplexor vamos a seleccionar la que
deseamos usar.
Así si nuestro cristal es de 12 Mhz y en
PLLDIV colocamos un 010 estaremos
dividiendo por 3 el valor de FOSC con lo que
tendremos 4 Mhz a la salida del MUX. Si por el
contrario el cristal es de 20 Mhz y en PLLDIV
colocamos un 100 entonces dividiremos por 5
FOSC con lo que tendremos también 4 Mhz a
la salida del MUX.
Esta salida del MUX es lo que utilizamos para
inyectársela al PLL de 96 Mhz. Si le metemos
4 Mhz él genera 96 Mhz. Es esta capacidad
de pasar de 4 Mhz a 96 Mhz la que nos da la
posibilidad de usar un montón de cristales
distintos.
Pero 96 Mhz es el doble de lo que nos hace
falta para el USB que son 48 Mhz. Asi que
inmediatamente después tenemos que tener
un divisor por 2 que es el segundo camino
por el que llegamos a USBDIV y en este caso
le pondremos un 1 para usar la señal
proveniente del PLL.
24. Universal Serial Bus
Observemos que además de inyectar la señal
oscilante en USBDIV también se conecta la
señal del PLL a 96 Mhz en un Postscaler, otro
divisor, en este caso por 2, 3, 4 ó 6 y cuyas
señales van al CPUDIV. O sea que podemos
generar una señal de reloj para nuestro PIC,
no para el USB sino para la velocidad de
ejecución de nuestro programa tomándola del
PLL y que puede ser de 16 Mhz, 24 Mhz, 32
Mhz ó 48 Mhz.
Pero además la señal original llegaba en
paralelo al Oscilator Postcaler, otro divisor
más, que de forma directa, sin pasar por el
módulo PLL nos divide la frecuencia original
del cristal por 1, 2, 3 ó 4 y que también va a
parar al CPUDIV pero desde otro origen. Con
este módulo podemos obtener otra gama de
frecuencias distinta para hacer correr el
programa.
Cual de ambos CPUDIV vamos a utilizar lo
seleccionamos con el switch FOSC3:FOSC0
que es de donde sacaremos la definitiva
frecuencia de ejecución de programas.
25. Universal Serial Bus
Por último también tenemos disponible una
entrada proveniente del Primary Clock y que
dividida por 4 llega también a FSEN y
podemos utilizarla en lugar de la que le llega
desde el canal directo/PLL.
Es así como podemos ver, que logramos
realizar las diversas configuraciones para
hacer correr nuestro PIC a decenas de
velocidades distintas siendo capaz, al mismo
tiempo de tener disponibles los 48 Mhz
imprescindibles para el USB 2.0.
26. Universal Serial Bus
VID&PID
El VID es un número de 16 bits que significa Vendor Identification o código que identifica al fabricante del
hardware a conectar. En nuestro caso utilizamos el número 04D8h que identifica a Microchip.
El PID es un número de 16 bits que significa Product Identification o código que identifica al dispositivo en
concreto hardware a conectar. En nuestro caso utilizamos el número 000Bh que identifica a la familia de los PIC18
de este fabricante.
Recordar que la conjunción de estos dos números VID&PID es la que nos va a servir para conectar con el
Driver de Windows XP Cuando el S.O. conecte con nuestro firmware recibirá el VID&PID y buscará entre sus
drivers instalados para encontrar el que corresponde a esta identificación, si no la encuentra nos preguntará sobre
donde ha de buscar un driver adecuado y deberemos indicarle su ubicación. Este driver deberá estar configurado
para conectar con un hardware cuyo VID&PID sea el mismo. No olvidar que el driver para puertos serie ya existe en
Windows, aquí solo debemos darle el enlace con el .inf para que conecte correctamente con el firmware que tiene el
PIC.
VID: 0x04D8
PID: 0x000B
27. Universal Serial Bus
USB_STRING_DESC
La tabla USB_STRING_DESC contiene la descripción del dispositivo detectado por el Driver de Windows XP y que nos va a mostrar en
la correspondiente entrada en la lista del Hardware Instalado en el Sistema.
Consta de dos partes o tablas, la propiamente dicha USB_STRING_DESC que contiene las descripciones requeridas y una tabla
accesoria llamada USB_STRING_DESC_OFFSET que contiene los offset, o desplazamientos con respecto al inicio de
USB_STRING_DESC en donde se encuentran las correspondientes cadenas. Ambas constan de tres elementos cada una de ellas.
USB_STRING_DESC_OFFSET tiene tres números que indican cada uno de ellos donde comienza el correspondiente dato en la tabla
USB_STRING_DESC. Así un contenido de {0,4,12} nos dice que el primer string comienza en el byte 0, el segundo en el byte 4 y el
tercero se encuentra a partir del byte número 12. Si cambiamos la longitud de cualquiera de los strings deberemos reordenar esta tabla
correspondientemente con solo contar los caracteres y apuntar en esta tabla el número de byte donde comienza cada uno de ellos.
USB_STRING_DESC contiene los tres strings en concreto que deseamos transmitir con el descriptor USB. Cada uno de ellos tiene la
misma estructura que consta de un primer byte que indica la longitud total de la correspondiente cadena, un segundo byte que indica el
tipo de dato que viene a continuación y por último tantos bytes como sean necesarios como contenido del string.
El primer dato de esta tabla es:
4, USB_DES_STRING_TYPE, 0x09, 0x04 que puede leerse como 4 : Longitud en bytes del dato incluido él mismo.
USB_DES_STRING_TYPE que es una constante cuyo valor es 3 y que dice que lo que sigue es un string. Y 0x09, 0x04 que le indica al
Windows que los strings que siguen están escritos en correcto ingles americano (US-English).
Los dos siguientes datos son los dos strings que definen nuestro dispositivo y cuya estructura es idéntica al caso anterior:
8, USB_DES_STRING_TYPE, ‘I‘, 0, ‘U‘, 0, ‘T‘, 0 que define el string el nombre «IUT» de nuestro Hardware. Total 8 bytes ya que «IUT"
se codifica añadiendo un 0x00 tras cada uno de los caracteres.
22, USB_DESC_STRING_TYPE, ‘U‘, 0, ‘S‘, 0, ‘B‘, 0, ‘-‘, 0, ‘R‘, 0, ‘S‘, 0, ‘2‘, 0, ‘3', 0, ‘2‘, 0, ‘.‘, 0 que define el nombre de nuestro
dispositivo como «USB-RS232.»