IUT Dr. Federico Rivero Palacio   Prof. Servio Córdova
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
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.
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).
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.
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.
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
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
Universal Serial Bus
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
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.
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.
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.
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.
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.
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.
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 .
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.
Universal Serial Bus
Universal Serial Bus
         Micro controlador PIC-18F2550
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.
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.
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.
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.
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.
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
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.»

Universal serial bus

  • 1.
    IUT Dr. FedericoRivero Palacio Prof. Servio Córdova
  • 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 INTERFAZFÍ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 Anivel 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 Cadasecció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 Tiposde 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ónlos 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
  • 9.
  • 10.
    Universal Serial Bus Undispositivos 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ÍAUSB  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ÍAUSB  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ÍAUSB  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ÍAUSB 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 TIPOSDE 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 TIPOSDE 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 TIPOSDE 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 Cuandose 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.
  • 19.
  • 20.
    Universal Serial Bus Micro controlador PIC-18F2550
  • 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 Comopodemos 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 Elmó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 Observemosque 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 ElVID 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 Latabla 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.»