Comunicación de ordenadores mediante el puerto USB

85
UNIVERSIDAD DE MÁLAGA ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA DE TELECOMUNICACIÓN PROYECTO FIN DE CARRERA: COMUNICACIÓN DE ORDENADORES MEDIANTE EL PUERTO USB INGENIERÍA DE TELECOMUNICACIÓN Málaga, 2008 Guillermo Regodón Harkness

description

Elaborado por Guillermo Regodón

Transcript of Comunicación de ordenadores mediante el puerto USB

  • UNIVERSIDAD DE MLAGAESCUELA TCNICA SUPERIOR DE

    INGENIERA DE TELECOMUNICACIN

    PROYECTO FIN DE CARRERA:

    COMUNICACIN DE ORDENADORESMEDIANTE EL PUERTO USB

    INGENIERA DE TELECOMUNICACIN

    Mlaga, 2008 Guillermo Regodn Harkness

  • UNIVERSIDAD DE MLAGAESCUELA TCNICA SUPERIOR DE INGENIERA DE TELECOMUNICACIN

    Titulacin: Ingeniera de Telecomunicacin

    Reunido el tribunal examinador en el da de la fecha, constituido por:

    D. ______________________________________________________________

    D. ______________________________________________________________

    D. ______________________________________________________________

    para juzgar el Proyecto Fin de Carrera titulado:

    COMUNICACIN DE ORDENADORESMEDIANTE EL PUERTO USB

    del alumno D. Guillermo Regodn Harkness

    dirigido por D. Unai Fernndez Plazaola

    ACORD POR: ________________ OTORGAR LA CALIFICACIN DE

    ______________________________________________________________

    y, para que conste, se extiende firmada por los componentes del Tribunal, la presente diligencia.

    Mlaga, a ____de______________de 2008

    El Presidente:

    Fdo. _______________

    El Secretario:

    Fdo. _______________

    El Vocal:

    Fdo. _______________

  • UNIVERSIDAD DE MLAGAESCUELA TCNICA SUPERIOR DE INGENIERA DE TELECOMUNICACIN

    COMUNICACIN DE ORDENADORESMEDIANTE EL PUERTO USB

    REALIZADO POR:

    Guillermo Regodn Harkness

    DIRIGIDO POR:

    Unai Fernndez Plazaola

    DEPARTAMENTO DE: Ingeniera de Comunicaciones

    TITULACIN: Ingeniera de Telecomunicacin

    Palabras claves: Puerto USB, PIC de Microchip, Clases de perifricos USB,Librera LibUSB

    RESUMEN:En este proyecto se desarrolla un hardware y un software que permiten establecer

    una comunicacin entre dos ordenadores cuya nica relacin es que ambos estn

    conectados mediante el puerto USB (Universal Serial Bus). Para ello, primero se

    analiza la tecnologa USB para verificar si tal comunicacin es posible, en particular

    las distintas clases de perifricos y los distintos tipos de comunicacin, o

    transferencias, definidos por la especificacin de USB. Se hace uso de los

    microcontroladores de Microchip, comnmente llamados PIC (Programmable

    Intelligent Computer), para solucionar la parte hardware. Para la parte software, se

    ha utilizado la librera LibUSB para gestionar la comunicacin desde los

    ordenadores, a nivel de programador. Se acompaa la memoria con el dispositivo

    que posibilita la comunicacin y con el programa de gestin.

    Mlaga, Abril 2008

  • Agradecimientos aUnai Fernndez y a Jorge Molina

  • ndice

    NDICE:1.-Introduccin 1

    1.1.-Objetivos del proyecto 21.2.-Fases del proyecto 21.3.-Descripcin de los apartados de la memoria 3

    2.-Funcionamiento del interfaz USB 52.1.-Breve historia del interfaz USB 62.2.-Nivel Fsico USB 72.3.-Nivel de Enlace USB 102.4.-Nivel de Funcin USB 11

    2.4.1.-Tipos de transferencias 132.4.1.1.-Transferencias de Control 132.4.1.2.-Transferencias de Interrupcin 152.4.1.3.-Transferencias de Bulk 152.4.1.4.-Transferencias Iscronas 16

    2.4.2.-Endpoints, interfaces, configuraciones y descriptores 172.4.3.-Enumeracin 192.4.4.-Clases de perifricos USB 21

    3.-Diseo del Dispositivo USBLink 234.-Microcontroladores 25

    4.1.-Tipos de microcontroladores 254.2.-Ejemplo de catlogo 274.3.-PIC18F2550 29

    4.3.1.-Puertos de propsito general 324.3.2.-Oscilador 334.3.3.-Mdulo USB 344.3.4.-Firmware de Microchip para USB 35

    5.-Drivers y libreras 395.1.-Tipos de Drivers 395.2.-LibUSB 41

    6.- Implementacin del dispositivo USBLink 456.1.-Dispositivo fsico 456.2.-Cdigo Visual C++ 476.3.-Cdigo MPLAB 516.4.-Esquema global y PCB 58

    7.-Verificacin del funcionamiento 617.1.-Instalacin de un dispositivo USB 617.2.-Verificacin de comunicacin Host-USBLink 647.3.-Verificacin de comunicacin PIC-PIC 667.4.-Verificacin de comunicacin completa 67

    8.-Conclusin 699.-Lneas futuras 7010.-Bibliografa 72

    I

  • ndice

    ACRNIMOS UTILIZADOS: BD: Buffer Descriptor.

    CPU: Central Processing Unit.

    HID: Human Interface Device.

    I2C: Inter-Integrated Circuit.

    IDE: Integrated Development Environment.

    IDE: Integrated Drive Electronics.

    LED: Light Emitting Diod.

    MCC18: Microchip C language toolset for P18 series.

    MCLR: Master Clear Low Level Reset.

    MSSP: Master Synchronous Serial Port.

    PDA: Personal Digital Assistant.

    PIC: Programmable Intelligent Computer.

    PWM: Pulse Width Modulation.

    SPI: Serial Peripheral Interface.

    ULPI: USB Low Pin Interface.

    USART: Universal Syncronous Asyncronous Receiver Transmitter.

    USB: Universal Serial Bus.

    USB-IF: USB Implementers Forum.

    USB OTG: USB On The Go.

    II

  • ndice

    NDICE DE FIGURAS: 2.1. Torre de protocolos de USB 5 2.2. Tramas USB 12 2.3. Transferencias y sus divisiones lgicas 12 2.4. Mensajes en la enumeracin 19 3.1. Diagrama de sistemas 1 23 3.2. Diagrama de sistemas 2 24 4.1. Diagrama de pines del PIC18F2550 30 4.2. Diagrama de bloques del PIC18F2550 31 4.3. Circuito recomendado para el oscilador 33 6.1. Parte relevante del diagrama de bloques del oscilador 46 6.2. Conexin de los mdulos SPI 47 6.3. Esquema fsico completo 58 6.4. Fotolito para la PCB 59 6.5. Fotolito para la PCB con componentes superpuestos 60 7.1. Diagrama del montaje fsico para los ejemplos 61 7.2. Asistente de instalacin, paso 1 62 7.3. Asistente de instalacin, paso 2 62 7.4. Asistente de instalacin, paso 3 63 7.5. Asistente de instalacin, paso 4 63 7.6. Comunicacin Host-USBLink, paso 1 64 7.7. Comunicacin Host-USBLink, paso 2 65 7.8. Comunicacin Host-USBLink, paso 3 65 7.9. Comunicacin Host-USBLink, paso 4 66 7.10. Comunicacin PIC-PIC 67 7.11. Comunicacin completa, paso 1 68 7.12. Comunicacin completa, paso 2 68 9.1. Control de errores solo en los extremos 70 9.2. Control de errores en todos los tramos 70 9.3. Esquema de una red construida con un hub USB 71

    III

  • ndice

    NDICE DE TABLAS: 2.1. Tipos de conectores USB 7 2.2. Colores y funcin de los hilos del cable USB 8 2.3. Niveles lgicos de los hilos D+ y D- en un cable USB 8 2.4. Lmites de corriente del bus USB 10 4.1. Valores recomendados para el oscilador 33

    IV

  • CAPTULO 1: Introduccin

    El puerto USB (Universal Serial Bus) est incorporado en todos los ordenadores de

    nueva fabricacin de forma casi imprescindible. Prcticamente todos los perifricos que

    existen en el mercado, desde dispositivos sencillos como memorias o ratones hasta los ms

    complejos como discos duros o tarjetas de sonido, tienen su versin USB. Incluso hay

    perifricos que no habran tenido aceptacin si no fuera por un interfaz tan sencillo de

    utilizar. sto da una idea de la profundidad con la que el interfaz USB ha calado en la

    poblacin.

    Sin embargo, el interfaz USB tiene una limitacin, el hecho de que es un interfaz

    maestro-esclavo. Pese a todas sus virtudes de universalidad, conexin Plug&Play y

    velocidad, es un interfaz diseado para conectar un ordenador con un perifrico.

    Por otra parte, la proliferacin de ordenadores porttiles demanda un mtodo de

    conectarlos entre s de forma sencilla, sin necesidad de configurar los ordenadores cada vez

    que se desee una comunicacin entre ellos. Hoy en da, las posibles formas de establecer

    una comunicacin entre ordenadores son, principalmente, mediante Ethernet o mediante

    Wi-Fi. La primera de estas dos formas requiere configurar los datos de direcciones IP,

    mscaras de red, etc. La segunda, el Wi-Fi, no slo requiere configurar algunos de estos

    datos, sino que puede ser insegura respecto a una conexin no autorizada. Por sto, sera

    interesante establecer una conexin entre varios ordenadores mediante un interfaz cableado

    pero sencillo de configurar.

    Si se quiere poder aprovechar las ventajas conocidas del interfaz USB para una

    conexin entre dos ordenadores, sera necesario que uno de los dos fuera configurado

    como perifrico, lo que vuelve a ser una complicacin innecesaria. Si no se desea

    modificar la arquitectura de los ordenadores o del sistema operativo o el diseo del

    interfaz, es necesario un dispositivo que se conecte entre ambos y que haga la funcin de

    esclavo de los dos ordenadores. Adems, sern necesarios los drivers apropiados para este

    dispositivo.

    1

    Captulo 1: Introduccin

  • 1.1. OBJETIVOS DEL PROYECTO:

    El objetivo principal del proyecto es establecer una comunicacin sencilla entre dos

    ordenadores, cuya nica relacin sea que estn conectados mediante el puerto USB. En

    principio se puede tratar de cualquier forma de comunicacin, siempre que evidencie que

    los comandos que se ejecutan en un ordenador implican cambios perceptibles en el otro.

    El objetivo secundario del proyecto es crear una base sobre la que otros proyectandos de

    la Universidad de Mlaga puedan trabajar para incorporar el puerto USB en sus proyectos.

    El dispositivo ha sido bautizado como USBLink, que es un nombre corto, sonoro y

    perfectamente descriptivo de la funcin que cumple.

    1.2. FASES DEL PROYECTO

    Las fases en las que se ha dividido el desarrollo del proyecto son las siguientes:

    Anlisis del interfaz USB: Se trata de descubrir si la comunicacin es posible y que

    limitaciones puede imponer sobre tal comunicacin.

    Anlisis de soluciones Hardware: Una investigacin sobre los dispositivos fsicos

    que comercialicen las distintas empresas y que puedan simplificar el diseo.

    Existen muchas empresas que disean microcontroladores que poseen un puerto

    USB, tanto maestro como esclavo.

    Diseo del dispositivo y del programa de gestin: El diseo del dispositivo, as

    como la programacin de los microprocesadores y la programacin del programa

    de gestin que correr en los PC.

    Implementacin y comprobacin: Para la programacin se utilizarn las distintas

    herramientas de software que se ofrecen, como emuladores de microprocesadores y

    libreras de C++ para la gestin de interfaces USB.

    2

    Captulo 1: Introduccin

  • 1.3.-DESCRIPCIN DE LOS APARTADOS DE LA

    MEMORIA

    A continuacin se describe brevemente el contenido de cada una de las secciones de

    esta memoria:

    1. Introduccin.

    2. Funcionamiento del interfaz USB: Este proyecto ha sido pensado para ser una

    primera aproximacin a USB para otros futuros proyectandos de la Universidad de

    Mlaga, por lo que en primer lugar se va a detallar y resumir de forma

    eminentemente prctica todos los detalles de USB que hace falta conocer para

    trabajar en el diseo de dispositivos y software que hagan uso de este interfaz.

    3. Diseo del dispositivo USBLink: Se presenta el diagrama de sistemas del

    dispositivo, que servir como gua para el resto de la memoria.

    4. Microcontroladores: En esta seccin se expone una visin superficial del catlogo

    existente en el mercado en microcontroladores con capacidades USB. Tambin se

    explica por qu se han elegido para este proyecto los PIC de Microchip

    (Programmable Intelligent Computer), en concreto el PIC18F2550. Sobre este PIC,

    se comentan sus caractersticas ms importantes, tal y como vienen en la hoja de

    caractersticas, y se describe el firmware que Microchip ofrece para utilizar con l.

    5. Drivers y libreras: Para cumplir con las especificaciones a nivel de software

    existen varias opciones en forma de libreras para C++. El entorno de programacin

    usado es el Microsoft Visual C++ Express Edition, que ya trae algunas libreras que

    hubieran permitido comunicacin con dispositivos USB. An as se ha optado por

    instalar una diferente, la LibUSB, una librera inicialmente concebida para sistemas

    Linux, pero que fue trada a Win32 en el 2000 y estuvo recibiendo actualizaciones

    frecuentemente hasta el 2004. Tambin se describen las funciones de LibUSB y la

    forma de utilizarlas en un programa.

    3

    Captulo 1: Introduccin

  • 6. Implementacin del dispositivo USBLink: Aqu se describe el sistema completo,

    empezando por el sistema fsico, y a continuacin, en cada subseccin siguiente, el

    funcionamiento del cdigo del PC, el del cdigo en el PIC y el esquema global.

    7. Verificacin del funcionamiento: Esta seccin est formada por cuatro ejemplos

    ilustrativos que explican y muestran en imgenes el uso de todo el sistema diseado

    y demuestran su correcto funcionamiento.

    8. Conclusin.

    9. Lneas futuras.

    10. Bibliografa.

    4

    Captulo 1: Introduccin

  • CAPITULO 2: Funcionamiento del interfaz USB

    Las caractersticas ms importantes de interfaz USB son que es un interfaz asimtrico y

    Plug&Play. USB ha sido diseado como un interfaz maestro-esclavo para sustituir todos

    los distintos puertos que coexistan en la parte de atrs de la carcasa de los ordenadores.

    Hoy da prcticamente todos los perifricos tienen una versin USB, desde ratones,

    teclados y pads de juegos hasta impresoras, cmaras web y tarjetas de sonido. La

    asociacin internacional USB-IF (USB Implementers Forum) es la que publica las

    diferentes actualizaciones de la especificacin de USB.

    La especificacin de USB, al igual que otros exitosos protocolos modernos como

    Internet, no define una torre de protocolos segn el modelo OSI (Open Systems

    Interconnection). La torre de protocolos que define es la de la figura 2.1.

    Como queda expresado por la figura 2.1, ningn nivel coincide en ambos extremos, lo

    que resalta el hecho de que es un interfaz asimtrico. A continuacin se presenta una breve

    introduccin a la historia del interfaz USB. Despus se describirn los distintos niveles de

    la torre de protocolos de uno en uno.

    5

    Figura 2.1. Torre de protocolos de USB

    Captulo 2: Funcionamiento del Interfaz USB

  • 2.1.-BREVE HISTORIA DEL INTERFAZ USB

    El interfaz USB nace en noviembre de 1995 como una propuesta de Intel, Microsoft,

    Philips y US Robotics para dar cobertura al problema que sugera el nmero creciente de

    perifricos que se disean desde hace largo tiempo para usar con PC. Entonces, hacan

    falta al menos varios puertos paralelos para la impresoras y escneres, varios puertos serie

    diferentes para ratn y teclado, y tarjetas PCI para los mdem y tarjetas de red. El interfaz

    USB responde a esta situacin ofreciendo un nico interfaz para todos los perifricos

    diferentes. Tambin se quiso simplificar la configuracin del software de los dispositivos

    de comunicaciones. El Apple iMac ya en 1998 incluy conectores USB para su ratn y

    teclado.

    La especificacin de USB tiene dos importantes actualizaciones respecto a la versin

    1.0, que es la que se public en 1995. Son las versiones 1.1 y 2.0, que principalmente

    actualizan la velocidad de transmisin y aaden distintos tipos de comunicacin. El USB

    2.0 fue desarrollado principalmente por Hewlett-Packard, Intel, Lucent, Microsoft, NEC y

    Philips y fue estandarizado por el USB-IF (USB Implementers Forum) en 2001. Una

    caracterstica importante de las actualizaciones USB 1.1 y USB 2.0 es que se definen con

    compatibilidad hacia atrs, es decir, que todos los dispositivos que se fabriquen para una

    versin deben funcionar con cualquier dispositivo que cumpla alguna de las anteriores

    versiones.

    Actualmente se siguen proponiendo mejoras, como conectores ms pequeos para

    dispositivos mviles, o una versin inalmbrica de USB.

    6

    Captulo 2: Funcionamiento del Interfaz USB

  • 2.2. NIVEL FSICO USB

    En este apartado se describen las caractersticas fsicas de USB, que incluyen los cables

    y conectores, las capacidades de corriente del bus, y las distintas velocidades. El mtodo

    por el que un Host o un hub descubre qu velocidad soporta un dispositivo pertenece

    completamente a esta capa, por lo que tambin se explica. Tanto el Host como los hubs,

    deben de ser siempre compatibles con los dispositivos de velocidad inferior.

    USB es un interfaz serie, que dispone de 4 hilos en el interior de su cable, que puede

    medir hasta 5m de largo. Hay dos tipos de conectores principales, aunque se estn

    introduciendo nuevos tipos ms pequeos, pensados para telfonos mviles y otros

    dispositivos de pequeo tamao. Los conectores estndar son los conectores tipo A y B, y

    se representan en la tabla 2.1.

    Conectores Tipo A siempre conectados en sentido Upstream, hacia el Host

    Conectores Tipo B siempre conectados en sentido Downstream, hacia el perifrico

    Conector A: Desde el perifrico USB; Conector B: Desde el Host;

    Receptculo A: Colocado en el Host; Receptculo B: Colocado en el perifrico;

    Tabla 2.1. Tipos de conectores USB [1]

    7

    Captulo 2: Funcionamiento del Interfaz USB

  • Los colores de los hilos y su funcin son los de la tabla 2.2.

    Color del hilo Nmero de Pin FuncinRojo 1 VusbBlanco 2 D-Verde 3 D+NegroMetlico

    4Cobertura

    GNDApantallamiento

    Tabla 2.2. Colores y funcin de los hilos del cable USB

    La explicacin para las funciones de cada cable son las siguientes:

    Hilo rojo, Vusb: Es el pin n 1 en los conectores y receptculos. Su funcin es la de

    alimentar el dispositivo, cuando se trata de un dispositivo alimentado por el bus, o

    de notificar la conexin a un dispositivo, cuando el dispositivo tiene su propia

    alimentacin. En un diseo, si el dispositivo es alimentado por el bus, se debera

    conectar este pin al pin Vdd o Vcc del integrado, normalmente a travs de un

    regulador de tensin. En caso contrario, se conectara este pin a un pin I/O del

    microcontrolador, cuya transicin de 0 a 1 sera usada para identificar el instante en

    que el cable es conectado entre el perifrico y el Host.

    Hilo negro, GND: Es el pin de retorno de corriente, la tierra lgica.

    Hilos verde y blanco, D+ y D-: Esto son los hilos de seal, que constituyen un par

    trenzado. En USB la seal es diferencial, es decir, D- normalmente es el opuesto de

    D+. Los casos en que tienen un mismo valor son usados para identificar estados

    especiales, tal y como se indica en la tabla 2.3.

    Pin D+ Pin D- Estado0 0 0 final de cadena1 0 1 lgico0 1 0 lgico1 1 Estado ilegal

    Tabla 2.3. Niveles lgicos de los hilos D+ y D- en un cable USB

    8

    Captulo 2: Funcionamiento del Interfaz USB

  • Hilo metlico, apantallamiento: Es la pantalla antiruido para el par trenzado. Es

    obligatoria para los cables diseados para USB Full-Speed y High-Speed y

    opcional para los cables pensados para USB Low-Speed.

    Las tres velocidades de bus que define USB-IF son:

    Low-Speed: 1.5Mbps.

    Full-Speed: 12Mbps.

    High-Speed: 480Mbps.

    sta es la velocidad del bus. La velocidad efectiva de cada comunicacin, despus de

    quitar el ancho de banda que se pierde en sobrecarga de protocolo, y dividindolo entre los

    distintos tipos de comunicacin, es menor. La velocidad mxima que se puede esperar es:

    Low-Speed: 800Bps.

    Full-Speed: 1.2MBps.

    High-Speed: 53MBps.

    La forma en que un Host o un hub diferencia entre dispositivo de Low-Speed, Full-

    Speed y High-Speed es la que sigue: Si el dispositivo tiene una resistencia de Pull Up en la

    patilla D- hacia 3.3V se trata de un dispositivo Low-Speed. Si la resistencia est en D+, se

    trata de uno de Full-Speed. Los dispositivos de High-Speed deben tener la resistencia en

    D+ y hacerse pasar en principio por uno de Full-Speed. Despus de resetear al dispositivo,

    el Host o hub enva la seal Chirp K, que es simplemente una resistencia de Pull Up

    conectada a D-. Al detectar sto, el dispositivo High-Speed debe responder con un

    alternancia entre Chirp K y Chirp J, siendo la segunda una resistencia de Pull Up conectada

    a D+. Cuando el Host o hub detecta el patrn KJKJKJ, activa la High-Speed. Todos los

    dispositivos High-Speed deben ser capaces de funcionar como Full-Speed.

    9

    Captulo 2: Funcionamiento del Interfaz USB

  • El interfaz USB ofrece alimentacin al dispositivo USB, de forma que es posible

    utilizar un dispositivo sin necesidad de usar otros cables de alimentacin. La cantidad de

    corriente que un dispositivo puede drenar est limitada por la especificacin de USB, por

    lo que, si un perifrico requiere ms corriente, deber esta alimentado por otros medios.

    Los lmites de corriente vienen sealados en la tabla 2.4.

    Dispositivo sin configurar Imax = 100mADispositivo configurado Imax = 500mA

    Tabla 2.4. Lmites de corriente del bus USB

    sto significa que podemos conectar cualquier dispositivo, incluso una pequea

    bombilla, siempre que no consuma mas de 100mA. Los cargadores de batera de telfono

    mvil por USB, por ejemplo, hacen uso de este lmite de corriente.

    2.3.-NIVEL DE ENLACE USB:

    En este nivel se incluyen algunos detalles relevantes relacionados con lo que en el

    estndar OSI seran los niveles 2 y 3. La estructura global en una red USB es una

    estructura en rbol, en la que el nodo raz es el Host. Existen 3 tipos de funciones USB en

    esta estructura:

    Host: Es el dispositivo ms complejo de la comunicacin, el que realiza el polling

    sobre los distintos perifricos y hubs en la red USB para ver si tienen alguna

    comunicacin pendiente. En USB, todas las comunicaciones son iniciadas siempre

    por el Host.

    Hub: Pueden aparecer en los nodos intermedios o en las hojas del rbol. Se

    encargan, por una parte de extender la red ms all de los dispositivos que puedan

    ser conectados al Host, hasta un nmero mximo de 127. Por otra parte, como

    puede haber como mximo 5 niveles de hubs, los hubs aumentan la distancia

    mxima a la que un dispositivo puede estar fsicamente del Host hasta los 30m. Los

    10

    Captulo 2: Funcionamiento del Interfaz USB

  • hubs son los encargados de convertir la seal de una velocidad a otra, en caso

    necesario. Por ejemplo, un hub se puede conectar al Host a velocidad High-Speed,

    y a este hub se pueden conectar dos perifricos, uno Full-Speed y otro Low-Speed.

    En este caso, el hub debe ser capaz de convertir los paquetes que le llegan desde los

    perifricos a velocidad High-Speed, e incluso debe agrupar los paquetes en un solo

    paquete de mayor tamao.

    Device: Son los perifricos propiamente dichos, que son asignados un nmero cada

    vez que se conectan a la topologa para poder identificarlos inequvocamente.

    Es posible que un dispositivo fsico cumpla ms de un funcin, como por ejemplo, un

    ratn y teclado, que vayan conectados a travs del mismo cable al ordenador. En este caso,

    el concentrador al que van ambos conectados, cumple las funciones de ratn lgico,

    teclado lgico y hub al que ambos estn conectados.

    2.4.-NIVEL DE FUNCIN USB:

    En esta seccin se comentan los detalles del nivel superior de la torre de protocolos. Se

    incluye, por completitud, la organizacin de los datos y la nomenclatura que se usa para

    denominar los distintos grupos y subgrupos, a pesar de que algunos de ellos pertenecen

    lgicamente a niveles inferiores. Se describen los tipos de comunicaciones que se pueden

    establecer. Tambin el mtodo de enumeracin, que es el mtodo por el que un Host

    descubre cmo comunicarse con cada perifrico. Por ltimo, se describen las distintas

    clases de dispositivos que define la especificacin de USB, a la que los dispositivos

    diseados pueden adherirse si se desea.

    La comunicacin se realiza mediante transferencias (transfer). stas tienen diversas

    subdivisiones, que pertenecen a niveles inferiores de la torre de protocolos, empezando por

    a trama (frame), que pertenecera al nivel 2. Cada trama dura 1 milisegundo a Low-Speed

    y Full-Speed y 125 microsegundos a High-Speed. Cada trama contiene informacin,

    clasificada en paquetes (packet), para todos los dispositivos (devices) presentes en la red.

    11

    Captulo 2: Funcionamiento del Interfaz USB

  • El Host tiene la potestad de ordenar los distintos paquetes dentro de la trama de la forma

    que quiera, incluso si ignora alguno y no le deja espacio en la trama, por falta de espacio o

    por cualquier otro motivo. Los paquetes se agrupan en transacciones (transaction) y las

    transacciones son las que en conjunto componen una transferencia. Los paquetes pueden

    ser IN y OUT, segn la direccin. Se define IN como entrando al Host y OUT, saliendo del

    mismo. Todos los paquetes tienen el campo de PID o identificador de paquete, pero los

    campos que haya a continuacin y la longitud total dependen del tipo de paquete que

    indique el PID. Por ejemplo, un paquete de datos, puede contener, adems del PID DATA0

    o DATA1, la direccin del dispositivo, el sentido de la transaccin y un CRC, mientras que

    una confirmacin contiene solamente el PID ACK. La figura 2.2 ilustra la organizacin de

    las tramas en el bus y como se dividen en paquetes destinados a diferentes dispositivos.

    El grfico de la figura 2.3 muestra las distintas divisiones que tiene cada grupo de bytes,

    desde el nivel ms alto, las transferencias, hasta el ms bajo, los campos en los paquetes.

    12

    Figura 2.2. Tramas USB [1]

    Figura 2.3. Transferencias y sus divisiones lgicas [1]

    Captulo 2: Funcionamiento del Interfaz USB

  • Cada una de las transferencias puede ser de cada uno de los cuatro tipos de

    transferencia, de los que se habla a continuacin de uno en uno.

    2.4.1.-TIPOS DE TRANSFERENCIAS:

    Transferencias es la forma en que se denominan los mensajes que el Host puede enviar

    o recibir de un dispositivo de la red. Pueden ser de cuatro tipos diferentes en funcin de las

    necesidades de la comunicacin.

    2.4.1.1.-Transferencias de Control:

    Este tipo de transferencias es el ms complejo de los cuatro y el que deben soportar

    todos los dispositivos USB. Sirve para que el Host solicite informacin al dispositivo,

    principalmente sus descriptores, de los que se habla en detalle ms adelante. Estas

    transferencias tienen tres fases (stage):

    Fase de preparacin (Setup Stage): La fase de preparacin consiste en una

    transaccin de Setup, que tiene 2 objetivos, identificar esta transferencia como una

    de Control y tambin indicar la peticin que se le realiza al dispositivo. Esta

    transaccin est compuesta por tres paquetes:

    Token packet: El PID es SETUP. Identifica al receptor y le indica que se trata

    de una transaccin de Setup. Tambin indica el nmero de bytes de datos que se

    van a enviar.

    Data packet: El PID es DATA0. Transmite la peticin en s y la informacin

    relacionada con la misma.

    Handshake packet: El PID es ACK. Es la confirmacin del dispositivo de que

    los datos llegaron correctamente. No contiene ningn byte adicional.

    13

    Captulo 2: Funcionamiento del Interfaz USB

  • Fase de datos (Data Stage): La fase de datos puede consistir en una o mas

    transacciones IN o OUT. Cada transaccin contiene tres paquetes de Token, Data y

    Handshake, de la misma forma que en la fase de preparacin.

    Token packet: El PID es IN o OUT, dependiendo de la direccin en la que van

    los datos. Si la transaccin es IN, significa que los datos van en sentido de

    entrada al Host, y si la transaccin es OUT, significa que los datos van en

    sentido de salida desde el Host.

    Data packet: El PID del primer paquete es DATA1, y a continuacin se alternan

    DATA1 y DATA0. Si la transaccin es IN y el perifrico no est preparado

    puede saltarse esta fase y enviar un paquete de Handshake con PID igual a

    NAK, STALL o NYET, con los significados que se explican a continuacin.

    Handshake packet: El PID puede ser de cuatro tipos. ACK, que indica una

    transaccin correcta puede ser enviado en el sentido que sea necesario. El resto

    solo los puede enviar un dispositivo: NAK que indica que el dispositivo est

    ocupado, STALL que significa que el dispositivo no soporta la peticin, o

    NYET, que indica que un dispositivo de High-Speed ha aceptado la peticin

    pero que todava no est preparado para aceptar otra.

    Fase de estado (Status Stage): En esta fase se notifica el xito o el fallo de la

    transferencia como conjunto. Es comparable a un paquete de handshake, solo que

    ste confirma una transaccin y esta fase confirma la transferencia entera.

    Token packet: El PID es el opuesto al del token packet de la pase de datos.

    Data packet: El PID es DATA1. A continuacin del PID se indica el estado, que

    puede ser una cadena vaca que confirmara el xito, o bien, un NAK o un

    STALL.

    Handshake packet: El PID puede ser ACK, NAK o STALL, con los mismos

    significados que antes.

    14

    Captulo 2: Funcionamiento del Interfaz USB

  • Las transferencias de Control se realizan sobre todo en el proceso de enumeracin, que

    es el proceso mediante el que el Host obtiene la informacin que necesita del dispositivo

    para poder comunicarse con l. Los distintos tipos de peticin ms importantes sern

    comentados en el apartado 2.4.3, titulado Enumeracin.

    2.4.1.2.-Transferencias de Interrupcin:

    Las transferencias de tipo Interrupcin estn diseadas para que los datos sean enviados

    dentro de un margen mximo de tiempo. Los ratones, teclados o dispositivos de juegos

    utilizan este tipo de transferencia para garantizar un efecto de interaccin de tiempo real

    con el usuario. No todos los dispositivos tienen que soportar transferencias de Interrupcin

    pero ciertas clases si obligan a que el dispositivo las soporte.

    Una transferencia de Interrupcin esta constituida por una o ms transacciones de tipo

    IN o OUT. Una transferencia de Interrupcin puede acabar de dos formas: cuando se han

    recibido el nmero de datos que se esperaban o cuando se recibe un paquete de datos con

    menos bytes que el mximo que puede contener.

    Cada transaccin de datos de una transferencia de Interrupcin contiene los mismos

    elementos que una transaccin de datos de la fase de datos de una transferencia de Control.

    2.4.1.3.-Transferencias de Bulk:

    Las transferencias de Bulk o de datos en masa se pensaron para las situaciones en que es

    necesario enviar un gran cantidad de datos pero no importa que lleguen con retraso o a

    rfagas. El Host debe asignar el ancho de banda con prioridad para los dems tipos de

    transferencia y enviar las transferencias Bulk en el espacio que le sobre, aunque tiene

    libertad de asignar el ancho de banda de la forma que quiera entre todas las transferencias

    Bulk que haya. Las memorias, impresoras o escneres son buenos ejemplos de dispositivos

    que utilizan transferencias de este tipo.

    15

    Captulo 2: Funcionamiento del Interfaz USB

  • Solo los dispositivos de las versiones 1.1 y 2.0 de USB pueden soportar transferencias

    de tipo Bulk. En la especificacin de USB 1.0 no exista este tipo de transferencia. De la

    misma forma que con las transferencias de Interrupcin, un dispositivo no tiene que

    soportarlas, pero si quiere verificar los requisitos para las clases Mass Storage Device o

    Printer, s tiene la obligacin de soportarlas.

    Las transferencias tipo Bulk son exactamente iguales que las de tipo Interrupcin,

    divididas en una o varias transacciones de datos de tipo IN o OUT. De hecho, la nica

    diferencia entre unas y otras es la forma en que el Host asigna el ancho de banda.

    2.4.1.4.-Transferencias Iscronas:

    Estas transferencias no tienen por qu realizarse sin errores, sino simplemente realizarse

    lo antes posible. Estn pensadas para dispositivos como cmaras web o dispositivos de

    audio en tiempo real en que si los datos llegan con errores, no merece la pena volver a

    pedirlos para que lleguen bien, sino que en un corto margen de tiempo caducan y ya no son

    tiles. Los dispositivos que quieran realizar transferencias Iscronas deben notificar al

    Host qu ancho de banda desean utilizar durante la fase de enumeracin, y el Host les

    responde con la cantidad de ancho de banda que les asigna. A partir de ah, el Host debe

    intentar asegurar como mnimo ese ancho de banda para el dispositivo.

    Igual que las transferencias Bulk, solo los dispositivos de las versiones 1.1 y 2.0 de

    USB pueden soportar estas transferencias. Tampoco son obligatorias salvo para ciertas

    clases. Dado que el ancho de banda est garantizado, el tiempo necesario para completar la

    transferencia es predecible.

    Las transacciones Iscronas son las ms sencillas y solamente constan de los siguientes

    paquetes:

    Token packet: El PID puede ser IN o OUT.

    Data packet: El PID es DATA1 para el primero, alternndose DATA0 y DATA1.

    16

    Captulo 2: Funcionamiento del Interfaz USB

  • 2.4.2.-ENDPOINTS, INTERFACES, CONFIGURACIONES Y

    DESCRIPTORES

    Todos los dispositivos deben definir una serie de caractersticas y ser capaces de

    notificrselas al Host en forma de descriptores. Los descriptores son estructuras de datos en

    las que se declaran las capacidades USB que soporta el dispositivo de forma que el Host

    pueda realizar comunicaciones con el dispositivo correctamente. Por ejemplo, en el

    descriptor de tipo Device Descriptor, el dispositivo le comunica al Host de qu clase es, de

    forma que el Host sepa qu drivers debe cargar para que el usuario tenga acceso a l.

    El primer descriptor que el Host solicita al dispositivo es precisamente el Device

    Descriptor, en el que se indican la clase de perifrico, la subclase, la especificacin de USB

    que soporta, y diversos identificadores indicando el fabricante, el vendedor y el nombre del

    producto. Tambin indica cuntas configuraciones tiene y el tamao mximo de un

    paquete por el endpoint 0, del que se habla en este mismo apartado un poco ms adelante.

    Un dispositivo USB debe definir una o varias configuraciones. Cada configuracin

    posible debe estar descrita en un Configuration Descriptor, que contiene un identificador

    que diferencia esta configuracin del resto de configuraciones. Cada configuracin se

    diferencia del resto en el uso de potencia del bus. Los campos bmAttributes y bMaxPower

    del descriptor de configuracin indican si el dispositivo es autoalimentado y que cantidad

    de corriente como mximo va a extraer del bus. Si el dispositivo requiere ms corriente que

    la que el bus es capaz de ofrecer, el Host puede intentar buscar otra configuracin que

    requiera menos.

    Cada configuracin debe tener uno o ms interfaces. Un dispositivo compuesto puede

    tener ms de un interfaz activo y cada uno debe tener un Interface Descriptor indicando sus

    caractersticas. Es posible que haya interfaces mutuamente excluyentes. En este caso, los

    interfaces tienen el mismo identificador de interfaz pero distinto valor en el campo

    bAlternateSetting. Los campos de este descriptor indican cuantos endpoints contiene este

    interfaz y la clase de perifrico, la subclase y el protocolo a los que pertenece si stos

    dependen del interfaz.

    17

    Captulo 2: Funcionamiento del Interfaz USB

  • Cada interfaz contiene varios endpoints. Los endpoints son los extremos de la

    comunicacin, de forma que cada endpoint define una tubera de informacin entre el Host

    y el dispositivo. Cada endpoint puede ser de cada uno de los cuatro tipos de transferencias:

    Control, Interrupcin, Bulk e Iscrono. Excepto por los endpoints de Control, que tambin

    pueden realizar transferencias de tipo Interrupcin, cada endpoint est limitado a su tipo de

    transferencia. Los endpoints tambin tienen un descriptor con sus caractersticas, el

    Endpoint Descriptor. Este descriptor indica la direccin del endpoint, su tipo de

    transferencia, el tipo de sincronizacin en caso de ser Iscrono, el tamao mximo de

    paquete, y el intervalo mximo de polling al que el Host debe consultar en caso de ser de

    Interrupcin.

    Existen otros descriptores, diseados para casos concretos de configuraciones, aunque

    los dispositivos USB no estn obligados a contenerlos. Son el Device_qualifier Descriptor,

    que indica qu valores cambian en un dispositivo que soporte Full-Speed y High-Speed,

    Interface Association Descriptor, que identifica varios interfaces asociados para cumplir la

    misma funcin USB, el String Descriptor, que contiene una cadena de caracteres para

    describir textualmente algunas caractersticas como el vendedor o nombre del producto, el

    Interface_power Descriptor, el On-The-Go Descriptor y el Debug Descriptor. En

    definitiva, cualquier dato que el Host pueda necesitar para poder comunicarse con

    cualquier dispositivo est descrito en algn descriptor.

    Las configuraciones y los interfaces deben numerarse de uno en uno empezando desde

    0. Los endpoint se numeran de una forma especial. Pueden tener un identificador entre 0 y

    15, donde el 0 siempre debe estar presente y debe ser un endpoint de Control, a travs del

    que se pueden realizar todas las peticiones. Un dispositivo puede tener ms endpoints de

    Control, pero no existe ninguna ventaja en ello. Con cada identificador puede haber dos

    endpoint, uno de entrada y otro de salida. El identificador 0 siempre debe tener los dos

    activos. Es posible saltar nmeros de endpoints, aunque sto tampoco trae ninguna ventaja.

    Ciertas clases obligan a que el dispositivo tenga una serie de endpoints determinados

    para pertenecer a la clase. Por ejemplo, la clase HID (Human Interface Device), diseada

    para actuar de perifrico apuntador, teclado o pad de juegos, requiere que tenga solo y

    exclusivamente el endpoint 0 de Control bidireccional y el endpoint 1 de Interrupcin IN.

    18

    Captulo 2: Funcionamiento del Interfaz USB

  • 2.4.3.-ENUMERACIN:

    La enumeracin es el proceso mediante el que el Host aprende lo que necesita del

    dispositivo. La velocidad se descubre por mtodos de la capa fsica, ya descritos en el

    apartado 2.1, por lo que en este punto se supone que ya est resuelta. Los hub se enumeran

    exactamente del mismo modo. Para los perifricos conectados a un hub en lugar de al

    Host, dicho hub actua como Host, realizando las comunicaciones a medida que se lo

    solicite el Host. La direccin inicial que se asigna al dispositivo es la direccin por defecto.

    En la figura 2.4 se muestra un proceso de enumeracin de ejemplo.

    Una vez comienza la comunicacin USB, el Host no sabe nada del dispositivo, solo que

    est consumiendo 100mA como mximo y que tiene un endpoint 0 de Control IN y otro

    OUT. A travs de este endpoint envi una peticin Get_Descriptor() en la que le pide el

    Device Descriptor. La informacin que recibe le permite saber cuntas configuraciones

    19

    Figura 2.4. Mensajes en la enumeracin

    Captulo 2: Funcionamiento del Interfaz USB

  • posibles tiene, su nombre, su fabricante, su clase, etc. Con sto es suficiente para

    identificar el dispositivo y, una vez est identificado, se puede decidir que hacer con l. A

    continuacin se asigna una direccin nica con la peticin Set_Adress(), que contiene la

    direccin que ser usada en adelante.

    El siguiente paso es decidir que configuracin es la que conviene, examinando los

    Configuration Descriptors. Cuando se ha decidido, se puede enviar la peticin

    Set_Configuration() con el indice de la configuracin que ha sido elegida. A partir de

    ahora, el dispositivo puede consumir hasta 500mA.

    En el Configuration Descriptor viene indicado cuntos interfaces e interfaces

    alternativos tiene esta configuracin, por lo que lo siguiente es examinar los Interface

    Descriptors y decidir cules se quieren activar. Una vez se ha decidido, se envan las

    peticiones Set_Interface() que sean necesarias para activarlos. Cuando se completa sta

    tarea, ya se puede iniciar la comunicacin mediante transferencias de cualquier tipo.

    Con todo lo que ya sabe, el Host tiene que decidir cul es el mejor driver que dispone

    para ste dispositivo. Windows XP tiene un sistema de preferencias para decidir en el que

    compara los valores de vendedor y producto con los ficheros .INF que contiene en su base

    de datos. stos son los ficheros que se copian al ordenador cuando se instala un nuevo

    hardware.

    En caso de no haber coincidencia, el controlador del Host decide mediante la clase,

    subclase y protocolo. Si el dispositivo ya fue conectado al mismo puerto, Windows puede

    examinar en su registro de sistema (System Registry) en lugar de buscar en los ficheros

    .INF. Al final de la bsqueda debe encontrar un driver apropiado.

    En ltima instancia, si an as no se encuentran los drivers, aparece un bocadillo de

    notificacin avisando de que los necesita y de que el usuario debe proporcionrselos.

    20

    Captulo 2: Funcionamiento del Interfaz USB

  • 2.4.4.-CLASES DE PERIFRICOS USB:

    Existen muchos tipos de clases de perifricos definidas por la especificacin de USB

    2.0, incluida la clase Vendor Specific, en la que podemos no cumplir ninguna y crear una

    completamente nueva. Las clases ms representativas, aparte de la clase Vendor Specific

    son listadas y descritas a continuacin:

    HID (Human Interface Device): Esta clase es la que cumplen todos los perifricos

    pensados para ofrecer respuestas rpidas a los movimientos del usuario. Pueden ser

    dispositivos sencillos como ratones, teclados o controladores de juegos, o pueden

    ser otros mas complejos, siempre que verifiquen que no necesitan que les llegue

    informacin desde el Host, sino que ellos solo la envan. Tienen 3 endpoints, el 0

    de entrada y salida y el 1 de entrada, de tipo Interrupcin. La mayora de los HID

    funcionan a Low-Speed porque su velocidad es ms que suficiente para las

    aplicaciones de este tipo. El API de Windows contiene varias llamadas a funciones

    especficas para este tipo de dispositivo. HID no es un concepto inventado en la

    especificacin de USB sino que, en general, el sistema operativo Windows trata

    todos los dispositivos de interfaz humana de la misma forma independientemente

    de que sean USB o no. Windows asigna una direccin HID a un dispositivo HID, y

    mediante esta direccin es posible comunicarse con el perifrico mediante las

    funciones del API. Windows maneja directamente los HID de las subclases Mouse

    y Keyboard, creando un ratn y teclado virtuales que engloban todos los que haya

    fsicamente conectados al sistema.

    Mass Storage Device: Los dispositivos de esta clase almacenan grandes cantidades

    de datos. Tienen un endpoint de tipo Bulk en ambos sentidos, por el que se envan

    grandes cantidades de datos. Son ejemplos tpicos los discos duros, CDs, DVD,

    memorias Flash y unidades de discos de 3,5' externos. En Windows, si un

    dispositivo USB de esta clase se conecta al ordenador, el sistema operativo carga el

    driver usbstor.sys y, despus de formatear la memoria bajo el sistema de archivos

    correcto, aparece como una unidad adicional en la ventana de Mi PC.

    21

    Captulo 2: Funcionamiento del Interfaz USB

  • Printer: La clase para las impresoras por USB. Las impresoras ms sencillas

    simplemente imprimen caracteres lnea a lnea, pero las ms complejas requieren

    un lenguaje PDL (Page Description Languaje) como el Postscript, de forma que

    pueden imprimir cualquier tipo de imagen o de texto en cualquier fuente. Usan un

    endpoint de tipo Bulk OUT para enviar las paginas. En Windows, la impresora

    aparece como una ms en el administrador de impresin, en el que solo tenemos

    que elegirla. Windows permite programar un minidriver, con algn manejador para

    alguna caracterstica especial de la impresora.

    Cmara o Escner: Esta clase, mediante un endpoint de tipo Bulk IN, permite

    recibir imgenes de gran tamao desde el dispositivo.

    Audio: La clase audio sirve para comunicar datos de audio entre el Host y el

    dispositivo. La comunicacin puede ser mediante transferencias Iscronas o de tipo

    Bulk, dependiendo de si se desea tiempo real o calidad.

    Video: Permite recibir imgenes en movimiento o imgenes estticas desde el

    dispositivo de esta clase.

    Communication Device: La clase de dispositivo de comunicaciones permite

    establecer una red con otros equipos. Los dispositivos pueden ser mdem,

    telfonos, adaptadores RDSI, mdem ADSL, adaptadores de Ethernet y hubs. Es

    posible crear un puerto COM virtual, de forma que cuando conectemos el

    dispositivo al PC bajo Windows, lo maneje como un COM adicional y as utilizar

    las funciones normales de comunicaciones del API.

    22

    Captulo 2: Funcionamiento del Interfaz USB

  • CAPITULO 3: Diseo del dispositivo

    USBLink

    El objetivo del proyecto es principalmente comunicar de alguna forma dos PC que solo

    estn conectados mediante alguno de los puertos USB de que dispongan. Tambin se debe

    programar un software que gestione las comunicaciones a nivel de Host USB y a nivel de

    usuario.

    Ya se ha visto que el interfaz USB es un interfaz asimtrico, por lo que no es posible

    conectar los dos PC directamente y conseguir la comunicacin mediante algn programa o

    driver. Es necesario un dispositivo que haga las funciones de perifrico para ambos PC. El

    diagrama de sistemas fsico se muestra en la figura 3.1.

    Hay muchas formas de implementar el dispositivo intermedio, pero ante todo hay que

    observar que no se ha encontrado ningn controlador para perifricos USB que disponga

    de dos interfaces fsicos USB. Por este motivo, se deben usar dos microcontroladores.

    Se han encontrado dos maneras de conectar ambos controladores:

    Mediante un interfaz : Los datos se enviaran mediante un interfaz comn, como

    puede ser el interfaz I2C (Inter-Integrated Circuit).

    Mediante una memoria bipuerto : Los dos microcontroladores escribiran sus datos

    en una memoria comn.

    23

    Figura 3.1. Diagrama de sistemas 1

    Captulo 3: Diseo del dispositivo USBLink

  • Se ha elegido la primera manera, por simplicidad del diseo fsico. De esta forma, el

    diagrama de sistemas, a un nivel un poco ms detallado queda como en la figura 3.2.

    De este modo ya estn comunicados todos los elementos. Es un requisito del interfaz

    USB que todos los dispositivos tengan una clase de dispositivo USB. Para este proyecto, se

    ha elegido la clase Vendor Specific, que es la ms verstil de todas y la ms ilustrativa.

    Es necesario, por lo tanto, disear un circuito fsico basado en microcontroladores y un

    software que gestione las comunicaciones desde el punto de vista del ordenador.

    En el captulo 4 se analizan los distintos microcontroladores comerciales que los

    fabricantes de circuitos integrados ofrecen para solucionar la parte fsica del proyecto. Se

    deben observar los catlogos y analizar cada uno de los posible tipos de

    microcontroladores y, una vez se haya decidido qu tipo se va a utilizar, decidir en funcin

    de las caractersticas de cada integrado cul se va a incluir en el diseo.

    En el captulo 5 se examinan las posibilidades existentes para resolver la parte software

    del diseo, qu tipo de libreras se pueden utilizar y qu ventajas e inconvenientes tienen

    cada una.

    24

    Figura 3.2. Diagrama de sistemas 2

    Captulo 3: Diseo del dispositivo USBLink

  • CAPITULO 4: Microcontroladores

    Desde que la especificacin de USB 1.0 fuera publicada en noviembre de 1995, no solo

    las empresas que definieron el interfaz sino muchas otras han estado desarrollando y

    comercializando una cantidad creciente de microcontroladores cumpliendo dicha

    especificacin. Actualmente casi cualquier empresa seria en el negocio de los

    microprocesadores dispone en su catlogo de algn dispositivo con capacidades USB.

    4.1. TIPOS DE MICROCONTROLADORES

    Los controladores que podemos encontrar en el mercado se pueden dividir en grupos

    segn su funcin USB:

    Transceptores USB: Son traductores de USB a otro protocolo.

    Controladores para perifricos: Son microcontroladores que disponen de un interfaz

    que cumpla alguna especificacin de USB.

    Controladores para Hosts: Son microcontroladores que pueden actuar como Host,

    es decir, el extremo del computador o el extremo mas complejo. Normalmente se

    utilizan en las placas base de los ordenadores o en tarjetas PCI.

    Controladores para hubs: Estos microcontroladores pueden actuar como hubs, sto

    es, los distintos nodos de la estructura de rbol que forman todos los dispositivos en

    una red USB.

    Transceptores ULPI (USB Low Pin Interface): Son un caso concreto de

    transceptores USB. Implementan el nivel fsico de USB y ofrecen al siguiente nivel

    un interfaz de 8 a 12 pines que est estandarizado y que recientemente est ganando

    popularidad.

    25

    Captulo 4: Microcontroladores

  • Transceptores OTG: Son dispositivos que pueden funcionar como Host o como un

    perifrico. OTG significa On-The-Go y es la nomenclatura de Philips. Otras marcas

    los llaman Hosts USB embebidos. USB OTG esta estandarizado actualmente y es

    especialmente til para PDA (Personal Digital Assistant) que pueden funcionar, por

    ejemplo, como perifrico de un ordenador o como Host para una impresora.

    Desde el punto de vista de los controladores para perifricos podemos simplificar un

    poco ms la clasificacin por funciones anterior: en controladores sencillos o complejos.

    Los controladores sencillos son aquellos que sirven como transductores y que funcionaran

    con otros microcontroladores o microprocesadores, que realizaran la parte de los clculos

    que no tenga que ver con USB. Los controladores USB complejos son los que incorporan

    USB como una ms de sus funciones, o bien, microcontroladores que no dependen de otros

    dispositivos para cumplir alguna funcin USB.

    El uso de unos u otros depende principalmente de las necesidades del diseo y del resto

    de dispositivos y herramientas que tengamos. Por ejemplo, si la desarrolladora es una

    empresa con experiencia usando algn tipo de microprocesador en concreto, puede ser ms

    conveniente aadir un transceptor a algn diseo que ya este bien verificado, antes que

    empezar un diseo desde cero con algn microcontrolador nuevo que incorpore USB. Por

    otra parte, si se necesita un dispositivo pequeo y sencillo, es preferible usar un

    controlador complejo que sea capaz de realizar todo el clculo del sistema en un solo

    circuito integrado, ahorrando de esta forma bastante espacio.

    En ltima instancia, como siempre, la responsabilidad de elegir entre un tipo u otro

    recae exclusivamente en el ingeniero encargado. La decisin debe ser hecha teniendo en

    cuenta multitud de factores que no es posible listar con antelacin.

    26

    Captulo 4: Microcontroladores

  • 4.2. EJEMPLO DE CATLOGO

    A continuacin se expone algo parecido a lo que se encontrara en un catlogo de

    microcontroladores con alguna funcin USB, organizado por empresas. En particular, para

    la elaboracin de esta lista, se ha utilizado el catlogo de www.arrowiberia.com como

    referencia:

    Microchip: (www.microchip.com). PIC con interfaz USB. Por ejemplo, el

    PIC18F2455, el PIC18F2550, el PIC18F4455 y el PIC18F4550 implementan el

    interfaz USB, y adems el bus serie I2C. Otros estn diseados para controlar la

    alimentacin USB. Los dispositivos mas sencillos como el PIC16C745 y el

    PIC16C765 disponen de interfaz USB de baja velocidad y otros interfaces de

    comunicacin serie.

    Philips: (www.semiconductors.philips.com).

    1.- Transceptores ULPI.

    2.- USB OTG.

    3.- Controladores para hubs.

    4.- Controladores para Hosts.

    5.- Controladores para perifricos, con distintas posibilidades de velocidades.

    6.- Transceptores USB.

    National Semiconductors: (www.national.com). Varios microprocesadores

    completos con interfaz USB de velocidad Full Speed (12Mbps) y otros interfaces

    paralelos clsicos (con bus D[0-7] y AD[0-10], etc.).

    Cypress: (www.cypress.com).

    1.- Hosts USB embebidos.

    2.- Controladores para perifricos Low-Speed, Full-Speed y High-Speed.

    3.- Controladores para hubs.

    27

    Captulo 4: Microcontroladores

    http://www.arrowiberia.com/http://www.cypress.com/http://www.national.com/http://www.semiconductors.philips.com/http://www.microchip.com/
  • Freescale: (www.freescale.com). Varios microprocesadores con interfaz USB. Son

    microprocesadores muy completos, para altas prestaciones.

    Intersil: (www.intersil.com). Tiene varios dispositivos con interfaz USB para

    diversas aplicaciones, como reproductores de audio y cargadores de bateras. En

    particular tiene varios controladores de alimentacin dual USB, como el ISL6119,

    que sirve para estabilizar la alimentacin desde dos puertos USB distintos.

    Micrel: (www.micrel.com).

    1.- Switches para alimentacin USB.

    2.- Transceptores USB.

    3.- Transceptores OTG.

    Micronas: (www.micronas.com). Productos USB para aplicaciones de audio.

    Nec: (www.nec.com).

    1.- Controladores para Hosts USB.

    2.- Controladores para hubs USB.

    3.- Controladores para Funciones USB de propsito general.

    4.- Puentes IDE/USB (donde IDE significa Integrated Drive Electronics).

    Renesas: (eu.renesas.com). Amplio catlogo en productos USB:

    1.- Controladores para Hosts, hubs y funciones USB.

    2.- Procesadores completos con interfaz USB.

    ST: (www.st.com).

    1.- Controladores para Hosts USB.

    2.- Controladores para hubs USB.

    3.- Controladores para funciones USB de propsito general.

    TI : (www.ti.com). Switches de alimentacin USB.

    28

    Captulo 4: Microcontroladores

    http://www.ti.com/http://www.st.com/http://www.eu.renesas.com/http://www.nec.com/http://www.micronas.com/http://www.micrel.com/http://www.intersil.com/http://www.freescale.com/
  • 4.3. PIC18F2550

    El PIC18F2550 pertenece a la familia de microcontroladores P18 de Microchip, de

    prestaciones medias. Tiene multitud de caractersticas y posibilidades, aunque muchas de

    ellas utilizan los mismos pines y, por lo tanto, no se pueden utilizar simultneamente. Sus

    caractersticas son:

    Caractersticas USB :

    Cumple la especificacin de USB 2.0.

    Puede funcionar a Low-Speed y Full-Speed.

    Todos los tipos de transferencias: Control, Interrupcin, Bulk e Iscronas.

    Soporta 16 endpoints bidireccionales.

    Transductor interno USB.

    Interfaz a un transductor externo.

    Caractersticas de potencia :

    Modo normal: microprocesador activado y perifricos activados.

    Modo Idle: microprocesador desactivado y perifricos activados.

    Modo Sleep: microprocesador desactivado y perifricos desactivados.

    Temporizador Watchdog, para salir del modo Idle o Sleep.

    Estructura de osciladores :

    Puede utilizar un oscilador interno.

    Puede utilizar un oscilador externo de cristal o cermico.

    Puede utilizar un reloj externo.

    Incluye un PLL de precisin.

    Reloj dual: Puede utilizar un reloj distinto para USB y para el

    microprocesador.

    Monitor de fallo seguro de reloj (Fail Safe Clock Monitor): Asegura que un

    fallo de reloj no provoque perdidas de informacin.

    29

    Captulo 4: Microcontroladores

  • Perifricos :

    Alta capacidad de corriente: Hasta 25mA, como fuente o carga.

    Tres interrupciones externas.

    Cuatro temporizadores: Timer0 a Timer3.

    Mdulos:

    Captura/Comparacin/PWM (Pulse Width Modulation).

    USART (Universal Syncronous Asyncronous Receiver Transmitter).

    MSSP (Master Synchronous Serial Port).

    Mdulo de hasta 13 canales de convertidor A/D de 10 bits.

    Comparadores analgicos con multiplexacin de entrada.

    La opcin de usar un transductor externo y el interno simultneamente no existe, ya que

    los pines son multiplexados en funcin de cul de los dos se haya elegido. Se puede

    observar en el diagrama de pines, representado en la figura 4.1.

    Los pines para el transductor interno de USB son el 15 y 16, D- y D+ respectivamente.

    Para poder utilizar un transductor externo hace falta utilizar los pines 6, 12, 15, 16, 23 y 24.

    El pin 21, por ejemplo, puede actuar como entrada o salida digital de propsito general

    (RB0), como entrada analgica para los convertidores A/D (AN12), como entrada de

    interrupcin (INT0), entrada para el mdulo PWM (FLT0), entrada para el interfaz SPI

    (SDI) o como entrada/salida de seal para el mdulo I2C (SDA).

    30

    Figura 4.1. Diagrama de pines del PIC18F2550 [2]

    Captulo 4: Microcontroladores

  • El diagrama de bloques del PIC18F2550 se muestra en la figura 4.2.

    31

    Figura 4.2. Diagrama de bloques del PIC18F2550 [2]

    Captulo 4: Microcontroladores

  • Esta multitud de opciones multiplexadas obligan a analizar el propsito del PIC en el

    diseo para elegir las opciones correctas.

    4.3.1. PUERTOS DE PROPSITO GENERAL

    El PIC18F2550 tiene 4 puertos de I/O de propsito general, multiplexados con otras

    muchas funcionalidades. Los puertos de propsito general se nombran como PORTx,

    donde x puede ser A, B, C o E. El puerto D solo est en los PIC de 40 pines de est serie.

    Cada uno de los pines de estos puertos se nombra como Rxn, donde x tiene el mismo

    significado que antes y n es el nmero de pin. Los pines de propsito general pueden ser

    programados como entrada o como salida digital mediante el registro de direccin TRISx.

    Para ello, despus de verificar que no se ha activado ninguna funcin alternativa, hay que

    copiar un valor 1 para programar un pin como entrada y un 0 para programarlo como

    salida. Por ejemplo, al ejecutar una instruccin que copie el valor 0x0F a TRISA, se

    programan los pines [0-3] como entrada y los pines [4-6] como salida (ya que el puerto A

    solo tiene 7 pines).

    El registro en el que el puerto est mapeado se llama PORTx. Cada pin tiene tiene un

    latch que puede ser accedido mediante el registro LATx. En este latch se almacenan los

    datos cuando se realiza una lectura del puerto y a l se deben realizar las escrituras en los

    pines de salida.

    Estos pines pueden ser utilizados para activar o desactivar otros dispositivos, encender

    diodos LED, leer informacin desde otros integrados, etc. Si se ha elegido alimentacin

    independiente del bus USB, por ejemplo, se puede conectar el pin de Vusb del cable USB a

    un pin I/O de propsito general y detectar de este modo la conexin del cable.

    32

    Captulo 4: Microcontroladores

  • 4.3.2. OSCILADOR

    El sistema de osciladores de estos PIC es muy flexible. Existe la opcin de utilizar un

    oscilador interno desde 31KHz hasta 8MHz, pero no es posible utilizar este reloj para

    alimentar el mdulo USB. Para alimentarlo es necesario elegir un oscilador externo, de

    cristal o cermico. En la especificacin se incluye una configuracin recomendada,

    mostrada en la figura 4.3 y unos valores recomendados para los elementos discretos, en la

    tabla 4.1.

    Frecuencia

    del oscilador

    Valores tpicosC1 C2

    4MHz 27pF 27pF8MHz 22pF 22pF20MHz 15pF 15pF

    Tabla 4.1. Valores recomendados para el oscilador [2]

    33

    Figura 4.3. Circuito recomendado para el oscilador [2]

    Captulo 4: Microcontroladores

  • 4.3.3. MDULO USB

    El mdulo USB permite realizar automticamente transacciones sin que el CPU deba

    preocuparse de ellas. El sistema utilizado para gestionar la comunicacin con el mdulo es

    una zona de memoria compartida, a la que el CPU puede acceder solo si el mdulo USB no

    est escribiendo. sto se puede saber mediante lo que la hoja de caractersticas llama

    descriptores de buffer (BD, Buffer Descriptor), aunque stos no deben ser confundidos con

    los descriptores definidos por la especificacin de USB. Cada descriptor de buffer

    contiene un registro de estado, un contador y un puntero, y tiene el aspecto, para el

    descriptor de buffer x, que se muestra en la figura 4.4.

    BDxSTATBDxCNTBDxADRLBDxADRH

    Figura 4.4. Descriptor de buffer [2]

    El bit ms importante es el bit 7 de BDxSTAT, UOWN, que indica si el

    microcontrolador puede acceder a la zona de memoria reservada o si el mdulo USB la

    est utilizando. El registro BDxCNT, indica en una transferencia IN, cuntos byte sern

    transmitidos al Host, y en una transferencia OUT, cuntos bytes han sido recibidos. El

    mximo es de 1024, gracias a que se utilizan 2 bits del registro BDxSTAT adicionales. El

    puntero a memoria BdxADR indica la direccin donde se guarda un paquete OUT o la

    posicin del paquete IN que se quiere enviar. Tiene un modo Ping Pong Buffer, que

    permite utilizar descriptores diferentes para las transferencias pares y las impares del

    mismo endpoint. De esta forma, puede haber hasta 64 descriptores de buffer: 16 endpoints

    bidireccionales con descriptores pares e impares.

    La resistencia de Pull Up puede ser interna o externa, y en caso de ser externa, se puede

    activar la patilla 14, denominada Vusb, para ofrecer una tensin de 3,3V que usar como

    referencia.

    34

    Captulo 4: Microcontroladores

  • 4.3.4. FIRMWARE DE MICROCHIP PARA USB

    Microchip, para el uso junto con su entorno de desarrollo MPLAB IDE (Integrated

    Development Environment) y MCC18 (Microchip C language toolset for P18 series),

    ofrece un firmware que incluye ficheros y funciones para manejar todas las posibles

    peticiones de control no especficas de clase de dispositivo USB, que lleguen desde el

    Host. Tambin incluye facilidades para crear una clase nueva y para modificar las que

    vienen programadas.

    Los ficheros incluidos en el firmware y su significado son los siguientes:

    main.c: Es el fichero con que se inicia el cdigo y desde el que se llaman todas las

    funciones. Contiene el bucle infinito principal. Es en este fichero en el que deben

    aadir las directivas de configuracin del PIC que utilicemos, para programar los

    modos deseados de oscilador, Watchdog Timer, reset, etc. Las opciones se pueden

    encontrar en el men de MPLAB, HelpTopicsLanguaje ToolsP18 Config

    Settings.

    usb.h: Contiene directivas de inclusin para todos los ficheros de este firmware, de

    forma que incluyendo solo ste, todos los dems estn visibles en el cdigo.

    user.h y user.c: Contiene la funcin principal de inicializacin UserInit() y la

    funcin ProcessIO(), en la que el usuario puede programar el comportamiento que

    quiera que no tenga relacin con USB.

    io_cfg.h: En este fichero se definen nombres convenientes para los pines que no

    sean los de USB que se van a usar en el resto del cdigo.

    Ficheros de clase: Pueden ser hid.h y hid.c, cdc.h y cdc.c, usbgen.h y usbgen.c, etc.

    Estos ficheros implementan el comportamiento de la clase de dispositivo. Para este

    proyecto se ha elegido utilizar la clase Vendor Specific de Microchip que viene en

    los ficheros usbgen.h y usbgen.c. Estos ficheros contienen funciones de

    inicializacin y de envo y recepcin de informacin. La diferencia entre una clase

    y otra est solo en estos ficheros y en como se usen en el fichero user.h.

    35

    Captulo 4: Microcontroladores

  • usbdsc.h y usbdsc.c: En estos ficheros se definen los descriptores que contiene el

    PIC. El diseador debe modificarlos ambos con cuidado para que coincidan. Es

    importante comprobar que se respeta la nomenclatura definida por Microchip para

    estos ficheros, y que est explicada en los mismos ficheros en comentarios.

    usbcfg.h: Aqu se definen varias configuraciones que determinan como se compila

    el resto del cdigo. Una de las ms importantes es la plataforma de hardware que se

    utiliza. Este firmware viene por defecto para utilizar con la plataforma PIC18F4550

    PICDEM FS USB o la plataforma PIC18F87J50 FS USB PIM, pero es posible

    utilizar una plataforma cualquiera, siempre que se configure correctamente.

    Primero hace falta descomentar la lnea #define YOUR_BOARD y comentar el resto. El cdigo est preparado para que compilando sucesivamente, provoque

    errores de compilacin controlados que nos indiquen en que puntos hace falta

    corregir el cdigo para adaptarlo a nuestra plataforma concreta. Tambin se pueden

    editar en este fichero el tamao del buffer del endpoint 0, el nmero mximo de

    interfaces, el modo de Ping Pong Buffering, el valor de UCFG (registro de

    configuracin del mdulo USB), el mximo nmero de endpoints, si se va a usar

    alimentacin del bus y qu clase de dispositivo USB se va a usar.

    usbmmap.h y usbmmap.c: stos son los ficheros manejadores de la memoria. El

    fichero usbmmap.c gestiona la memoria en tiempo de compilacin utilizando la

    informacin que aparece en usbcfg.h. En el fichero usbmmap.h se pueden reservar

    posiciones de memoria temporales para las funciones USB, si es necesario para la

    clase.

    usbdrv.h y usbdrv.c: Contienen el cuerpo principal de los drivers de USB del PIC.

    Contienen principalmente la funcin USBDriverService(), que gestiona todo lo

    relacionado con los estados USB. Contiene secciones modificables en las funciones

    USBSuspend() y USBRemotWakeup(), en las que se puede especificar una nueva

    condicin para salir del estado Sleep o Idle.

    usbctrltrf.h y usbctrltrf.c: Aqu se encuentra el cdigo para gestionar las

    transferencias de Control, incluidas las peticiones especficas de clase que hay

    36

    Captulo 4: Microcontroladores

  • definidas en la especificacin. Contiene una seccin modificable en la funcin

    USBCtrlTrfSetupHandler() en la que se puede llamar a alguna funcin de los

    ficheros de clase que sepan como manejar alguna peticin especfica de clase.

    usb9.h y usb9.c: Las funciones de estos archivos son llamadas desde usbctrltrf.c y

    manejan las peticiones estndar de USB, que son definidas en el captulo 9 de la

    especificacin de USB 2.0. El fichero usb9.c tiene una seccin modificable en la

    funcin USBStdSetCfgHandler() en la que se puede aadir alguna funcin para

    inicializar la clase.

    usbdefs_ep0_buf.h: Define los formatos para las distintas peticiones que pueden

    llegar por el endpoint 0.

    usbdefs_std_dsc.h: Define el formato de los distintos descriptores que pueden ser

    solicitados o modificados por el Host mediante las peticiones Get_Descriptor y

    Set_Descriptor.

    tipedefs.h: Define los distintos tipos de datos byte, word y dword y sus posibles

    uniones, traducindolos a tipos c, como char, int y long.

    37

    Captulo 4: Microcontroladores

  • El procedimiento a seguir para utilizar el firmware es el siguiente:

    Copiar el proyecto de ejemplo a una carpeta nueva. Cambiar el nombre si se desea.

    Actualizar los directorios de inclusin en el men de MPLABProjectBuild

    OptionsProject.

    Incluir el fichero de cabecera del PIC que se desea utilizar. Los ficheros de

    cabecera para todos los PIC se copian durante la instalacin del MCC18, en la

    subcarpeta lib, junto con otros ficheros de cabecera tiles. Modificar todos los

    ficheros para que incluyan dicho fichero de cabecera.

    Modificar usbcfg.h para utilizar la opcin YOUR_BOARD, y seleccionar las

    opciones de UCFG que se encuentran aqu.

    Compilar el cdigo. Por cada error, modificar la parte asociada descomentando la

    opcin #ifdef YOUR_BOARD y verificando que se eligen las opciones correctas en cada punto.

    Al final de este proceso, se tendr la plataforma correctamente configurada y se

    podr modificar el cdigo para cumplir la funcin deseada.

    38

    Captulo 4: Microcontroladores

  • CAPTULO 5: Drivers y libreras

    Existen varias formas de resolver la parte software del proyecto, que se describen en

    ste captulo. De esta forma, despus de analizar las distintas posibilidades, se puede hacer

    una eleccin fundamentada de librera.

    Es interesante observar que muchas de las clases de perifrico definidas por USB no

    tienen librera asociada, sino que se utilizan directamente como usuario de Windows en un

    PC. Si se desarrolla un dispositivo que cumpla las condiciones de la clase ratn, por

    ejemplo, no es necesario programar unos drivers, sino que Windows lo gestiona como

    cualquier otro ratn justo en el instante de conectarlo al ordenador.

    5.1. TIPOS DE LIBRERAS

    La parte software del proyecto normalmente se programa utilizando libreras ya

    programadas que modularizan el programa, de modo que la localizacin de errores y bugs

    sea ms sencilla, y evitan tener que programar toda la gestin desde el principio, de forma

    que se reduce el tiempo de desarrollo del proyecto. sto aplicado a USB, implica que no

    necesitamos conocer completamente como funcionan todos los niveles de USB, sino que

    con conocerlos superficialmente, podemos ser capaces de completar la programacin.

    Existen libreras que nos permiten utilizar USB en un programa que abstraen la

    utilizacin del interfaz en mayor o menor grado, y sta es la caracterstica que se utiliza

    para realizar la siguiente clasificacin de las distintas libreras que podramos utilizar:

    Libreras que abstraen ms el uso del interfaz USB: Son las ms fciles de utilizar y

    las ms fciles de encontrar. De hecho, algunas vienen instaladas con el paquete

    bsico de Microsoft Visual C++ Express Edition. Como la especificacin de USB

    define varias clases de perifricos con distintas caractersticas especficas, es

    posible programar un interfaz que verifique estas caractersticas y no ms. El

    39

    Captulo 5: Drivers y libreras

  • resultado es una serie de libreras que son fciles de utilizar ya que, al ser

    especficas no es necesario conocer mucho sobre USB en conjunto, sino que basta y

    sobra con conocer un poco sobre clases de perifricos y ms sobre la clase de

    perifrico que se est usando para poder crear un buen programa.

    Tambin son poco verstiles, porque cada librera tiene su propio estilo y el

    conocimiento utilizando una de estas libreras no asegura que se puedan utilizar las

    dems. Mas bien habra que aprender cada una desde el principio. Cabe destacar

    que algunas de las clases de perifricos de USB ni siquiera tienen libreras

    asociadas y se usan directamente como usuario de Windows. Cuando una

    impresora nueva es conectada a un sistema Windows, por ejemplo, la impresora es

    administrada directamente por el administrador de impresoras, sin necesidad de

    programar ningn software adicional.

    Libreras que abstraen menos el uso del interfaz USB: En principio, lo nico que

    hacen es reunir las transacciones que llegan desde los niveles USB, agruparlos y

    enviarlos de varias posibles formas al programa del nivel de aplicacin. Requieren

    un conocimiento ms profundo del protocolo del interfaz USB para ser utilizadas

    con xito.

    Dado que uno de los objetivos de este proyecto es servir como introduccin al USB

    para otros proyectandos, se ha optado por utilizar una librera que abstraiga menos los

    detalles del protocolo, de forma que al estudiarlo se puedan entender mejor ciertos detalles

    sobre USB. Como en el diseo no se utiliza ninguna clase definida por la especificacin de

    USB, es imposible utilizar cualquiera de las libreras o drivers ya programados para las

    diversas clases, pero esta eleccin permite mayor versatilidad al dispositivo.

    40

    Captulo 5: Drivers y libreras

  • 5.2. LIBUSB

    LibUSB es una librera que ofrece facilidades para crear programas que gestionen

    comunicaciones con dispositivos USB, y que se puede encontrar en Internet. Incluye un

    fichero de cabecera y otro de librera en los que se encuentran las funciones que permiten

    tal gestin. Incluye tambin una herramienta adicional, el programa Test Program

    USBLib, con el que es posible observar visualmente la lista completa de dispositivos USB

    conectados al Host, incluyendo tanto hubs como perifricos, adems de sus descriptores

    ms importantes.

    La librera LibUSB maneja los mensajes del protocolo USB de forma casi directa,

    aunque define varias funciones nuevas, necesarias para la definicin y control de las

    estructuras de datos que utiliza.

    Las funciones de la librera estn divididas en varios conjuntos. Las funciones del

    ncleo son las siguientes:

    usb_init(): Esta funcin no tiene argumentos y es imprescindible para inicializar

    ciertas estructuras de datos y definiciones que se usan en el resto de funciones.

    Debe ser llamada antes de cualquier otra de la librera.

    usb_find_busses(): Encuentra todos los buses USB que haya en el sistema. No tiene

    argumentos ni devuelve nada, pero modifica la variable global usb_busses, que es

    una lista enlazada de estructuras de datos.

    usb_get_busses(): Similar a la anterior, pero devuelve el valor del puntero

    usb_busses, de tipo struct usb_bus *.

    usb_find_devices(): Encuentra todos los dispositivos USB en todos los buses, y los

    almacena en una lista enlazada de estructuras de datos, accesible a travs de la

    variable global usb_busses.

    41

    Captulo 5: Drivers y libreras

  • De esta forma, se construye una estructura donde es posible encontrar cualquier

    dispositivo USB. La forma de recorrer la estructura es mediante una serie bucles anidados

    en los que se exploran primero los buses y luego los dispositivos. Cada dispositivo debe ser

    abierto y explorado para descubrir si es el que se necesita. El siguiente conjunto es el que

    permite abrir los dispositivos:

    usb_open(): Tiene como argumento un dispositivo, de tipo struct usb_device * y

    devuelve, en caso de xito, el valor de un puntero al manejador, que debe ser

    pasado como argumento en cualquier operacin que se realice con ese dispositivo.

    El manejador es de tipo struct usb_dev_handle *.

    usb_close(): Cierra el dispositivo y libera la memoria del manejador.

    usb_reset(): Resetea el dispositivo y hace que el manejador no funcione ms. De

    hecho el dispositivo debe ser buscado de nuevo con usb_find_busses() y

    usb_find_devices().

    usb_set_configuration(): Tiene como argumentos el manejador y la configuracin

    deseada, que se recibe mediante transferencias de Control, que se describen en el

    siguiente bloque. Activa la configuracin que se ha pasado como argumento.

    usb_claim_interface(): Tiene como argumentos el manejador y el interfaz deseado,

    que tambin se consigue mediante transferencias de Control. Activa el interfaz

    determinado. Es imprescindible antes de realizar ninguna transferencia que no sea

    del tipo Control.

    usb_set_altinterface(): Establece el interfaz alternativo del actual interfaz.

    usb_release_interface(): Libera el interfaz que se pasa como argumento.

    usb_resetep(): Reinicia el estado del endpoint que se pasa como argumento.

    usb_clear_halt:(): Borra un estado de halt en un endpoint. Un endpoint entra en

    estado de halt con una peticin llamada Set_Feature(ENDPOINT_HALT).

    42

    Captulo 5: Drivers y libreras

  • Las transferencias de los distintos tipos se realizan con funciones especificas. Como se

    podra esperar, las transferencias de Control son las que tienen ms funciones diferentes:

    usb_control_msg(): Recibe muchos argumentos, entre ellos el manejador y el tipo

    de peticin, siguiendo la misma nomenclatura que usa la especificacin de USB.

    usb_get_descriptor(): Tiene como argumentos el manejador y el tipo de descriptor

    que se desea recibir y ste se almacena en una estructura de tipo variable, que

    depende del tipo de descriptor que se ha pedido.

    usb_get_descriptor_by_ep(): Similar al anterior, solo que se puede elegir el

    endpoint de Control por el que se desea recibir el descriptor.

    usb_get_string(): Solicita un string procedente de un String Descriptor.

    usb_get_string_simple(): Similar a usb_get_string(), pero esta funcin convierte el

    string a cdigo ASCII.

    Las funciones para las transferencias de tipo Interrupcin y de tipo Bulk son las

    siguientes:

    usb_interrupt_read().

    usb_interrupt_write().

    usb_bulk_read().

    usb_bulk_write().

    Todas estas funciones reciben como argumentos el manejador del dispositivo, el

    identificador de endpoint, el buffer de memoria, el tamao del buffer de memoria y el

    tiempo lmite de espera. Como ya se ha visto, la nica diferencia entre las transferencias de

    tipo Interrupcin y las de tipo Bulk es la forma en que el Host asigna el ancho de banda.

    sto es igual para la librera LibUSB. Las funciones de un tipo funcionan con endpoints

    del otro tipo, sin que en ningn momento se advierta del error al usuario.

    43

    Captulo 5: Drivers y libreras

  • No existen funciones para enviar y recibir transferencias de tipo Iscrono, y, dado que

    la LibUSB lleva 4 aos sin actualizarse, es posible que ya nunca las tenga.

    La declaracin exacta de las funciones, tal y como aparece en el fichero de cabecera

    usb.h es la del siguiente cuadro

    usb_dev_handle *usb_open(struct usb_device *dev);int usb_close(usb_dev_handle *dev);int usb_get_string(usb_dev_handle *dev, int index, int langid, char *buf,

    size_t buflen);int usb_get_string_simple(usb_dev_handle *dev, int index, char *buf,

    size_t buflen);

    int usb_get_descriptor_by_endpoint(usb_dev_handle *udev, int ep,unsigned char type, unsigned char index,void *buf, int size);

    int usb_get_descriptor(usb_dev_handle *udev, unsigned char type,unsigned char index, void *buf, int size);

    int usb_bulk_write(usb_dev_handle *dev, int ep, char *bytes, int size,int timeout);

    int usb_bulk_read(usb_dev_handle *dev, int ep, char *bytes, int size,int timeout);

    int usb_interrupt_write(usb_dev_handle *dev, int ep, char *bytes, int size,

    int timeout);int usb_interrupt_read(usb_dev_handle *dev, int ep, char *bytes, int size,

    int timeout);int usb_control_msg(usb_dev_handle *dev, int requesttype, int request,

    int value, int index, char *bytes, int size, int timeout);

    int usb_set_configuration(usb_dev_handle *dev, int configuration);int usb_claim_interface(usb_dev_handle *dev, int interface);int usb_release_interface(usb_dev_handle *dev, int interface);int usb_set_altinterface(usb_dev_handle *dev, int alternate);int usb_resetep(usb_dev_handle *dev, unsigned int ep);int usb_clear_halt(usb_dev_handle *dev, unsigned int ep);int usb_reset(usb_dev_handle *dev);

    void usb_init(void);int usb_find_busses(void);int usb_find_devices(void);struct usb_bus *usb_get_busses(void);

    44

    Captulo 5: Drivers y libreras

  • CAPTULO 6: Implementacin del

    dispositivo USBLink

    En esta seccin se describe paso a paso el dispositivo desarrollado para este proyecto.

    Se empieza con el dispositivo fsico diseado, explicando que se ha elegido el PIC18F2550

    y comentando de una en una las opciones de configuracin por las que se ha optado. En

    particular se comenta qu configuracin de osciladores se ha usado, de toda la amplia

    gama de posibilidades que el PIC ofrece.

    Se explica a continuacin como funciona el programa que corre en