Documente Academic
Documente Profesional
Documente Cultură
Informe Final
A/C Andrs Aguirre, A/C Pablo Fernndez y A/C Carlos Grossy.
14 de diciembre de 2007
Resumen
Debido a que en general los dispositivos electrnicos existentes (sensores, actuadores, displays, ADCs, DACs, etc.) utilizan mltiples interfaces y protocolos de comunicacin ajenos al contexto de las computadoras personales, genera que la interaccin no sea una tarea trivial y en general implique desarrollar soluciones particulares para lograr su integracin. Esta heterogeneidad motiva la bsqueda de un medio de comunicacin existente en un PC, lo sucientemente verstil para satisfacer la mayora de los requerimientos. Desde hace unos aos la tecnologa USB se ha convertido en un estndar, lo que ha llevado a una proliferacin de dispositivos y un auge en su uso. La facilidad de uso, ancho de banda y funcionalidad Plug&Play son algunas de las caractersticas ms atractivas para utilizar al USB como medio de comunicacin. La motivacin de este proyecto se centra en lograr de una manera sencilla, la comunicacin entre una PC y un conjunto de dispositivos electrnicos no necesariamente pensados para interactuar con una computadora. La solucin est conformada por un hardware construido a medida basado en un microcontrolador, con rmware congurable va software por medio de USB y conjunto de elementos de software que permiten la comunicacin y manejo de los dispositivos desde las aplicaciones de usuario. El rmware desarrollado se caracteriza por su modularidad y extensibilidad, mientras que en el software del PC se destaca su orientacin a objetos, soporte de mltiples instancias de hardware y de varias plataformas. Todos los elementos funcionan en conjunto de forma de dar una respuesta integral a la problemtica permitiendo ocultar a los ojos de los usuarios toda la complejidad de la interaccin con los dispositivos electrnicos. Entre las principales contribuciones de este proyecto se destacan el desarrollo de un framework que permite acelerar la integracin de dispositivos electrnicos con el PC por medio de la tecnologa USB, pues slo se necesita incorporar la funcionalidad especca para el manejo de los mismos. Tambin permite un alto grado de reutilizacin de las funcionalidades especcas ya construidas, pues por medio de su composicin se puede elaborar una nueva solucin para el manejo de dispositivos ms complejos o compuestos. A su vez el relevamiento del estado del arte de la tecnologa USB y de los microcontroladores y drivers existente hoy en da que la soportan, requiri un gran esfuerzo y es considerado como un aporte de este proyecto. Este proyecto habilita ampliar el horizonte de utilizacin por parte de un PC de elementos fsicos as como el universo de usuarios que lo utilizan, logrando reducir la brecha de conocimientos necesarios para resolver las problemticas de conectividad e interaccin con dispositivos.
Palabras claves: USB, Microcontroladores, Framework de desarrollo, Controladoras de entrada / salida, Prototipado rpido, Programacin embebida.
Agradecimientos
Gonzalo Tejera y Alexander Sklar por la oportunidad de hacer el proyecto, apoyo e invaluables consejos durante el desarrollo del mismo. A nuestros compaeros de trabajo y superiores por su tolerancia, en particular a Cristina Lovesio. Texas Instruments, Microchip, Freescale, Philips por sus donaciones de muestras de semiconductores. Agradecimientos personales:
Carlos Grossy agradece a: Virginia Lpez, madre y hermanos por su paciencia y apoyo durante este proyecto. Rafael Fernndez agradece a: familia y Claudia Garca por su paciencia y apoyo durante este proyecto y Noelia Pissani por su colaboracin al conseguir chas USB hardware.
Andrs Aguirre agradece a: Omar Aguirre, Fabiana Bianchi y Ana Dorelo por la paciencia y apoyo constante.
ndice general
I Generalidades
1. Introduccin
1.1. 1.2. 1.3. 1.4. 1.5. 1.6. Motivacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Qu es el proyecto? Que no es el proyecto Objetivos
15
17
17 18 18 19 20 21
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
23
23 23 24 25 25 25 26 26 27 27 28 30 31 31 33 35 36 36 37 38 39
Transceivers USB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Conversores USB a interfaz serial o paralela . . . . . . . . . . . . . . . . . Controladores de perifricos . . . . . . . . . . . . . . . . . . . . . . . . . . Decisiones tomadas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Herramientas de desarrollo . . . . . . . . . . . . . . . . . . . . . . . . . .
Proyectos relacionados
II Arquitectura
3. Introduccin 4. Arquitectura en el Baseboard
4.1. 4.2. Baseboard Hardware . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Firmware 4.2.1. 4.2.2. 4.2.3. 4.2.4. 4.2.5. 4.2.6. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Introduccin
41
43 47
47 49 49 52 55 59 59 61
Base Firmware
Programacin y conguracin . . . . . . . . . . . . . . . . . . . . . . . . . 7
NDICE GENERAL
5. Arquitectura en el PC
5.1. 5.2. Introduccin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . USB4all API 5.2.1. 5.2.2. 5.2.3. 5.2.4. 5.2.5. 5.3. 5.4. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Introduccin Logic Log
65
65 66 66 67 70 77 79 80 84
USB4all Library
6. Comunicacin
6.1. Protocolo de Comunicacin 6.1.1. 6.1.2. 6.2. 6.2.1. 6.2.2. 6.2.3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Handler Protocol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Admin Protocol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
87
87 88 89 92 93 95 96
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
99
99 100 101
103
105
105 105 105 107 108 112 112
Software . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
113
113 116
125 133
133 133 134 134
Lista de algoritmos
1. 2. 3. 4. 5. Pseudocdigo de la operacin Pseudocdigo de la operacin Pseudocdigo Pseudocdigo
main
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
54 58 58 58 61
10
LISTA DE ALGORITMOS
ndice de guras
1.1. 2.1. 2.2. 2.3. 2.4. 2.5. 2.6. 2.7. 2.8. 2.9. Lnea de tiempo de las actividades del proyecto. . . . . . . . . . . . . . . . . . . . Topologa tipo estrella . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Jerarqua de Descriptores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Comunicacin virtual entre un dispositivo y el host . . . . . . . . . . . . . . . . . Diagrama lgico y tabla de verdad del Transceiver USB Cuadro comparativo de los microcontroladores Imagen de la informacin analizada. USB Explorer 200 Diagrama en bloques del FT232 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Arquitectura del WinDriver. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 24 25 26 27 28 30 31 34 35 36 37 38 39 43 44 48 50 51 52 56 57 59 62 62 63 65 67 69 70 71 72 74 76 77 80 81 82 83 85 87 88
2.10. DevaSys . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.11. Arduino . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.12. Wiring . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.13. CUI 3.1. 3.2. 4.1. 4.2. 4.3. 4.4. 4.5. 4.6. 4.7. 4.8. 4.9. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
USB4all System.
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
baseboard. . . . . . . . . . . . . . . . . USB4all rmware . . . . . . . . . . . . . . . . . . . . . . Usb4all rmware compuesto por base rmware, dos proxies y user modules user modules
Diagrama de capas en rmware . . . . . . . . . . . . . . . . . . . . . . . . . . . . Relacin entre los vnculos manejados por los
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
baseboard
. . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
API. .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
HandlerLayer. . . . . . . Clases del componente CommandLayer. . . . . . Clases del componente DescriptorLayer. . . . . . Componentes del subsistema Connection to USB.
5.11. Diagrama de clases de la librera orientada a objetos . . . . . . . . . . . . . . . . 5.12. Diagrama de estados que ocurren dentro de las instancias de baseboard y device 5.13. Diagrama de secuencia de uso simple de la library . . . . . . . . . . . . . . . . . 5.14. Ejemplo de apertura y envi de datos por un endpoint. . . . . . . . . . . . . . . . 6.1. 6.2. Stack de protocolos denido y capas . . . . . . . . . . . . . . . . . . . . . . . . .
12
NDICE DE FIGURAS
Formato de paquete para intercambio de datos utilizado por el Paquete de pedido del comando Paquete de Paquete de Paquete de Paquete de
open . . . . . . . . . . . . . respuesta del comando open . . . . . . . . . . . pedido del comando close . . . . . . . . . . . . respuesta del comando close . . . . . . . . . . pedido del comando GET_USER_MODULES_SIZE . respuesta del comando GET_USER_MODULES_SIZE pedido del comando GET_USER_MODULES_LINE . respuesta del comando GET_USER_MODULES_LINE
89 89 89 90 90 90 91 91 91 91 92 94 95 97 106 107 108 108 109 109 110 111 111 118 119
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
openDevice . . . . . . . 6.15. Diagrama de secuencia de la operacin sendData y receiveData 6.16. Diagrama de secuencia de la operacin closeDevice . . . . . . .
6.14. Diagrama de secuencia de la operacin 8.1. 8.2. 8.3. 8.4. 8.5. 8.6. 8.7. 8.8. 8.9. 9.1. 9.2. Evolucin del
Baseboard
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Dispositivo motor paso a paso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Dispositivo sensor de temperatura. . . . . . . . . . . . . . . . . . . . . . . . . . . Dispositivo display 7 segmentos . . . . . . . . . . . . . . . . . . . . . . . . . . . . Diagrama de funcionamiento USB4bot. . . . . . . . . . . . . . . . . . . . . . . . . Imagenes de la construccin y vericacin del USB4bot. Evento Sumo.uy 2007 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ndice de cuadros
4.1. 4.2. 4.3. 4.4. 4.5. 4.6. 4.7. 5.1. 5.2. 5.3.
USB4all rmware. Handler Manager . . . . . . . . . . . Interfaz del Dynamic Polling . . . . . . . . . . . Interfaz del Dynamic ISR . . . . . . . . . . . . . Interfaz de un User Module . . . . . . . . . . . . Interfaz de los Interrupt Proxies. . . . . . . . . . Interfaz de los Polling Proxies. . . . . . . . . . .
Caractersticas del diseo del Interfaz del Interfaz del componente
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
51 53 54 55 56 60 61 68 69 72 73 73 74 75 75 77 78 79 82 83 83 85
u4aAPI.
. . . . . . . . . . . . . . . . . . . . . . . . . . .
iHandlerLayer . . . . 5.4. Operaciones de la interfaz iAdminHandlerLayer. 5.5. Interfaz de la clase HandlerPackager. . . . . . . . 5.6. Interfaz de la clase ModuleMap . . . . . . . . . . 5.7. Operaciones de la interfaz iCommandLayer . . . 5.8. Interfaz de la clase CommandPackager. . . . . . 5.9. Operaciones de la interfaz iDescriptorLayer . . . 5.10. Operaciones de la interfaz iDriverLayer. . . . . . 5.11. Operaciones de la interfaz iPlatformLayer. . . . . 5.12. Operaciones de la clase USB4allBaseboard. . . . . 5.13. Operaciones de la clase abstracta USB4allDevice 5.14. Operaciones de la clase abstracta USB4allDevice
Operaciones de la interfaz
u4aAPI.
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13
14
NDICE DE CUADROS
Parte I
Generalidades
15
Captulo 1
Introduccin
En los primeros meses del ao 2006 las inquietudes personales de los miembros del grupo motivaron la gestacin de la idea bsica del proyecto que nalmente deriv en la presentacin como propuesta del mismo. En un comienzo se contaba con muchas ideas muy ambiciosas pero con muy pocos conocimientos sobre la mayora de las reas involucradas. Ms all de las limitaciones de conocimientos y la amplitud de las reas a investigar se pens que era un buen desafo para realizar como proyecto de grado. Gracias a los tutores que en su momento notaron la viabilidad de la idea y la apoyaron, se present una propuesta ante la Comisin de Proyectos que posteriormente fue aprobada. De inmediato se destino la totalidad del tiempo al aprendizaje de las tecnologas relacionadas para poder contar con un conocimiento bsico con que realizar un relevamiento del estado del arte adecuado. Esto fue una tarea muy exigente y requirio ms tiempo del planicado pero permiti seleccionar y plasmar de mejor manera todas las ideas generales que se tenan al comienzo del proyecto en un conjunto inicial de requerimientos.
1.1.
Motivacin
Durante muchos aos la nica forma de interactuar con dispositivos externos desde a un computador personal (Personal Computer) (PC) fueron los puertos seriales y paralelos, esto llevo a que se utilizaran ampliamente en multiplicidad de dispositivos. Sus principales carcteristicas son su simplicidad de manejo va software y facilidad de inclusin en distintos dispositivos. En la ltima dcada han aparecido nuevos medios o canales de comunicacin, tales como Bluetooth, Fidelidad Inalmbrica (Wireless Fidelity) (WiFi), FireWire, Bus Universal en Serie (Universal Serial Bus) (USB), etc. Estos permitieron mejorar las velocidades de comunicacin y calidad de datos y lentamente tornaron a los puertos paralelos y seriales en obsoletos, hasta llegar al da de hoy en que se obtienen slo de manera opcional en los nuevos PC. Dentro de todas estas nuevas tecnologas que aparecieron la que tuvo mayor aceptacin y difusin entre los usuarios fue el USB, debido a su facilidad y versatilidad de escenarios de uso. Esta simplicidad desde el punto de vista del usuario de los dispositivos USB tiene como contrapartida una mayor complejidad para los desarrolladores de software y hardware, lo cual es un gran problema al momento de interactuar con dispositivos electrnicos. Frente a estas adversidades que presenta el entorno actual aparece la necesidad de buscar una forma de reducir el grado de complejidad y conocimientos necesarios para poder desarrollar software que utilice la tecnologa USB. Al mismo tiempo, se requiere una plataforma base que incorpore componentes de hardware reutilizables y que en conjunto formen una solucin genrica para la comunicacin con dispositivos electrnicos diversos. En el contexto de lo antedicho aparecen un conjunto de desafos como son el desarrollo de controladores (drivers) y construccin de piezas de hardware que brinde una solucin genrica reutilizable, desplazando el manejo de los casos particulares a componentes especcos. Esto proporciona el benecio de evitar que cada vez que se necesite conectar un nuevo dispositivo, se comience desde cero. A su vez permite recuperar y potenciar la caracterstica de facilidad de manejo que posean los puertos seriales y paralelos, explotando todas las capacidades brindadas por USB. 17
18
CAPTULO 1.
INTRODUCCIN
Otra motivacin importante que posee este proyecto es poder construir sistemas que se basen en la conjuncin de dispositivos electrnicos simples con las capacidades de procesamiento, almacenamiento y comunicacin de los PC actuales de forma de poder resolver una gran variedad de situaciones complejas y distintas, centrando principalmente la coordinacin de las actividades en el PC.
1.2.
Qu es el proyecto?
Es una solucin a la necesidad de comunicar de forma sencilla y genrica dispositivos electrnicos no necesariamente pensados para interactuar con un PC, la solucin se basa en tres puntos: un componente de hardware, un medio de comunicacin (USB), una arquitectura conformada por software, rmware, un pila de protocolos de comunicacin y un driver USB genrico. El componente de hardware es una interfaz o adaptador que permite comunicar los dispositivos externos con el PC, se busca que sea lo ms abarcativo posible de forma de permitir la conexin de un gran nmero de dispositivos como son: sensores, actuadores, conversores analgico digital (Analog Digital Conversor) (ADC), conversores digital analgico (Digital Analog Conversor) (DAC), robots, etc. Adems de utilizar interfaces seriales estndar, tambin se desea la facilidad de poder denir interfaces propias, para ello el hardware no tiene predenido conectores para un puerto serial u otra interfaz sino que posee un nico conector genrico congurable dinamicamente por software. Como se mencion en la seccin 1.1, la seleccin de la tecnologa USB como medio de comunicacin se debe adems de lo ya descripto, por su disponibilidad actual en todos los PC, sus caractersticas enchufar y listo (Plug and Play) y enchufado en caliente (Hot Plug) para la conguracin y conexin (evitando el la necesidad de desarmar el PC para agregar un nuevo dispositivo). La arquitectura es lo que permite integrar los componentes de hardware y la tecnologa USB para lograr el comportamiento deseado. Una de sus cualidades ms importante es que permite ocultar las complejidades de la comunicacin USB y brindar al programador de aplicaciones una manera sencilla de interactuar con los dispositivos por medio de lenguajes de alto nivel. Para lograr sto, es necesario contar con un protocolo que facilite y estandarice la comunicacin, un driver USB que permita manejar el traco de informacin en forma genrica, un rmware que habilite el procesamiento y toma de decisiones sobre el comportamiento de los dispositivos en el propio hardware, una interfaz de programacin de aplicaciones (Application Programming Interface) (API) que brinde las funcionalidades mnimas para interactuar con los dispositivos y una biblioteca en lenguaje orientado a objetos que permita el rpido y fcil uso de la solucin. Se busca que la arquitectura sea modular y extensible de manera de permitir una administracin sencilla de los componentes de rmware encargados del manejo de los dispositivos, logrando de sta forma la fcil adecuacin de la solucin para el uso con nuevos dispositivos. Lo antedicho permite la reutilizacin de funcionalidades ya implementadas (dependiendo de las caractersticas de los dispositivos) en la construccin mediante composicin de nuevas soluciones. Todos estos atributos permiten que el usuario programador se concentre en la interaccin con el dispositivo electrnico y no en la forma o medio de comunicacin.
1.3.
Que no es el proyecto
Durante el desarrollo de este proyecto fueron apareciendo un conjunto de conceptos errneos sobre el alcance y caractersticas de uso de la solucin, a continuacin intentaremos detallar que elementos no forman parte de la solucin construida.
No es un adaptador USB:
simplemente es una especie de adaptador USB a una interfaz especca como son la serial o paralela. Esto es totalmente errneo, ya que si fuera un adaptador se perdera la generalidad y parte de las prestaciones USB adems de no poder incorporar funcionalidades especcas para el manejo de los dispositivos en dicho hardware. Adems se obligara a que todo el procesamiento de la interaccin con los dispositivos fuera desde el PC y reducido a un nico tipo de interfaz, es decir no se podran interactuar con un motor paso a paso serial y un termmetro de interfaz inter-circuitos integrados (Inter Integrated Circuit) (I mismo tiempo.
C)
al
1.4.
OBJETIVOS
19
No es un hub USB:
no poseen la interfaz USB en forma nativa, pues seria un contrasentido conectarlos por medio de nuestra solucin y no en rma directa. Adems se perdera todo el soporte de drivers estndar y aplicaciones de uso general que ya vienen con los sistemas operativos que soportan USB.
No es un dispositivo especco:
interactuar con la mayor cantidad posible de dispositivos electrnicos, los cuales poseen distintas necesidades de conexin e interfaces. Si se tomara partido por algunos tipos de dispositivos se limitara el alcance del uso de la solucin, lo que no es deseado. Adems, tampoco se busca que la solucin sea una especie de plataforma para la construccin de dispositivos USB especcos como pueden ser mouses, memorias o cmaras web pues los sistemas operativos no podran reconocerlos como tales.
1.4.
Objetivos
El objetivo principal de este proyecto es poder interactuar con dispositivos electrnicos no necesariamente pensados para ser usados desde un PC por medio de una solucin que conjuga: un hardware base reutilizable, una arquitectura de software modular y extensible y el medio de comunicacin USB. A continuacin se detallan un conjunto de objetivos ms especcos que logran satisfacer el objetivo principal previamente descrito: Disear e implementar un hardware en forma de una placa base que resuelva la problemtica de la comunicacin USB con el PC y brinde una interfaz para conectar los dispositivo electrnicos. Disear e implementar una arquitectura de software modularizada y extensible que permita denir en el rmware de la placa base sus caractersticas fsicas, los protocolos de comunicacin y las funcionalidades especcas para la interaccin con cada dispositivo. En el PC se cuente con una API para la interaccin con el hardware y con una biblioteca de clases orientadas a objetos para la integracin con aplicaciones de alto nivel. Construir un diseo que permita que la solucin sea multiplataforma, priorizando su implementacin para Windows y Linux. Disear y construir un driver genrico USB propio modo ncleo. Desarrollar un conjunto de utilitarios para la conguracin de la placa base y carga de los mdulos de manejo especco de dispositivos por medio del USB. Ocultar la complejidad USB sin perder las cualidades inherentes, la tecnologa USB es ms compleja que las soluciones serial o paralela, por lo tanto es vital poder ocultar la complejidad de esta interfaz para que el usuario se preocupe solamente de la problemtica de la interaccin con el dispositivo y no en la forma en que se comunica.
1 Se entiende por driver genrico aquel que puede obtener la informacin propia del dispositivo, enviar y recibir datos.
20
CAPTULO 1.
INTRODUCCIN
Construir un caso de uso (prototipo) relevante que permita mostrar las cualidades funcionales y tcnicas de la solucin implementada. La solucin debe poseer un modo de funcionamiento extra (modo fachada) simulacin del comportamiento de un dispositivo USB especco.
que permita
1.5.
y Resultados,
Glosario
en primer lugar hacer una introduccin al proyecto y a las tecnologas utilizadas, para luego centrarse en los distintos elementos y caractersticas de la arquitectura de software y nalmente presentar los productos construidos as como las conclusiones y trabajos a futuro que deja el proyecto.
Captulo 2
son diversas pero las que se presentan en este captulo son las ms relevantes para sentar las bases de conceptos bsicos y vocabulario. Comienza mostrando la tecnologa USB por medio de su topologa, caractersticas de comunicacin (velocidades, tipos de transferencias, etc.), proceso de enumeracin y jerarqua de dispositivos estndar. Luego se describen las caractersticas principales de los modelos de drivers de las plataformas Windows y Linux y presentan algunas de las opciones existentes actualmente. Tambin se analizan algunas de las opciones de conectividad USB, contrastando sus caractersticas y prestaciones, para luego justicar la seleccionar de una de ellas en la implementacin del hardware del proyecto. Por ltimo se comentan algunos proyectos relacionados mostrando sus ventajas y falencias. Cabe destacar que las imagenes utilizadas en este captulo son extraidas de los documentos, artculos y libros citados en la bibliografa del documento Estado del Arte [2].
Introduccin:
Captulo 4 - Arquitectura
(microcontrolador, conectores, relojes, etc.) que constituyen el hardware base de la solucin. Adems se introducen los distintos elementos de rmware que permiten la comunicacin y manejo de los dispositivos, esta presentacin abarca no slo la descripcin a nivel de diseo de los componentes sino que tambin se explica brevemente como es el proceso de programacin y conguracin del rmware del hardware base.
Captulo
5 -
Arquitectura en el PC:
arquitectura de software de la solucin en el PC, presentando sus principales caractersticas funcionales y diseo detallado. Tambin se presenta el diseo de una propuesta de clases base para facilitar el uso de la solucin desde un lenguaje orientado a objetos como es Java y por ltimo se explica las caractersticas ms importantes de un driver genrico implementado durante el proyecto.
2 Este
objetivo se elimin posteriormente del alcance del proyecto, por ms detalles ir a la seccin 7.1.
1.6.
21
Captulo 7 - Decisiones
proyecto fueron apareciendo distintas dicultades o alternativas al enfrentarse con ciertos temas y para los cuales se tuvo que tomar una postura, este captulo muestra las decisiones de diseo ms importantes que se tomaron justicando el porque de las mismas.
Artefactos construidos:
de software y hardware que se fueron construyendo durante el desarrollo del proyecto. Se describen entre otras cosas, como fue evolucionando el hardware base de la solucin y los prototipos de dispositivos que se construyeron para su vericacin.
Captulo
9 -
sentan las conclusiones del proyecto por medio de las caractersticas ms importantes de la solucin construida y de los aportes que brinda la misma. Como forma de cierre se describen posibles trabajos a futuro de este proyecto tanto en el rea de investigacin como de mejoras e incorporaciones de funcionalidades a las ya existentes. En los apndices del documento se encuentran el glosario de los trminos utilizados as como la descripcin de las herramientas utilizadas para la documentacin, noticacin y seguimiento de errores, publicacin de informacin del proyecto en la web, etc.
1.6.
Ao 2006
1/10 - 1/12 Ambiente Desarrollo 1/10 - 15/12 Construccin Baseboard 1/10 - 15/12 Diseo 1/3 - 1/5 Propuesta del proyecto 1/5 - 20/10 Estado del Arte
Ao 2007
1/1 - 1/3 Licencia y Examen 1/3 - 1/5 Prototipado 1/5 - 1/7 Implementacin 1/7 - 1/8 Examen 1/8 - 9/11 Implementacin 1/8 - 25/11 Testing 1/8 - 10/12 Documentacin
22
CAPTULO 1.
INTRODUCCIN
Captulo 2
2.1.
USB
En esta seccin se brinda un resumen sobre los conceptos ms importantes de la tecnologa USB, los cuales sirven para poder comprender todos lo conceptos que se desarrollarn en los siguientes captulos de este documento. Para profundizar ms sobre estos conceptos se puede consultar la bibliografa relacionada [7, 5, 24, 15]
24
CAPTULO 2.
Este estndar dene una topologa de conexin en estrella, tal como se muestra en la gura 2.1, por medio de la incorporacin de varios hubs conectados en serie. Cada concentrador se conecta por un lado al ordenador, que contiene una o dos interfaces de este tipo en la placa base, o a otro hub y, por otro lado, se conecta a varios dispositivos o incluso a otro hub. De este modo pueden existir perifricos que vengan ya preparados con nuevos conectores USB para incorporar nuevos dispositivos, hasta un total de 127, todos ellos funcionando simultneamente. Los hubs tienen la misin de ampliar el nmero de dispositivos que se pueden conectar al bus. Son concentradores cableados que permiten la conexin simultnea de mltiples dispositivos y lo ms importante es que se pueden concatenar entre s ampliando la cantidad de puertos disponibles para los perifricos. El hub detecta cundo un perifrico es conectado o desconectado a/de uno de sus puertos, noticndolo de inmediato al controlador de USB. Tambin realiza funciones de acoplamiento de las velocidades de los dispositivos ms lentos. Existe una gran variedad de dispositivos USB que se conectan todos al mismo bus. La caracterstica ms importante es que todos ellos utilizan el mismo tipo de cable y de conector y se conectan de la misma forma tan sencilla. El host decide qu dispositivo puede acceder al bus.
Device
Hub
Device
Device
Hub
Device
Device
Desde el punto de vista lgico un dispositivo (comnmente llamado funcin) posee un conjunto de endpoints, los que le permiten enviar y recibir datos. Un conjunto de endpoints forma parte de concepto de mayor abstraccin llamado interfaz y es el que va a especicar cuales son las caractersticas de comunicacin de un dispositivo.
2.1.2. Transferencias
USB est diseado para manejar distintos tipos de perifricos con una gran variedad de requerimientos como lo son la frecuencia de transferencia, tiempo de respuesta y correccin de errores. El estndar dene cuatro tipos de transferencias las que manejan diferentes necesidades. De esta manera los dispositivos pueden utilizar los tipos de transferencias que mejor se adecuen para sus propsitos. Las transferencias de
control, son las nicas que tienen funciones denidas por la especi-
cacin USB. Permiten al host leer informacin acerca del dispositivo, asignarle una direccin, seleccionar conguraciones y otras caractersticas. Tambin pueden enviar pedidos especcos del vendedor. Todos los dispositivos USB deben soportar este tipo de transferencias. Las transferencias
no es crtica, como enviar un archivo a una impresora, recibir datos de un scanner, o acceder
Downstream
Upstream
2.1.
USB
25
a un archivo en un disco. Para estas aplicaciones son llamativas las transferencias rpidas pero los datos pueden esperar si es necesario. Si el bus est muy ocupado las transferencias bulk son retardadas, pero si el bus est libre son muy rpidas. Slo los dispositivos full y high speed pueden hacer transferencias bulk. Las transferencias
interrupt son para dispositivos que deben la atencin del host o dispoisochronous
sitivos peridicamente. Aparte de las transferencias de control, son la nica forma de transferir datos para los dispositivos low-speed. Teclados y mouses utilizan este tipo de transferencias para enviar informacin. Las transferencias tienen un tiempo de envo garantizado, pero no poseen
control de errores. Son usadas para transmitir datos multimedia en aplicaciones de tiempo real. Es el nico tipo de transferencia que no soporta retransmisin de datos recibidos con error. Slo los dispositivos full y high speed pueden utilizarlas.
2.1.3. Descriptores
Los descriptores USB son estructuras de datos, o bloques de informacin con formato, que le permiten al host aprender acerca de un dispositivo. Cada descriptor contiene informacin acerca del dispositivo como un todo o un elemento del dispositivo como puede verse en la gura 2.2. Todos los dispositivos USB deben responder a pedidos para los descriptores USB estndar. El dispositivo THE UNIVERSAL SERIAL BUS 1 debe guardar informacin de los descriptores y responder a sus pedidos. 7
Device Descriptor
Configuration 1
Configuration 2
Interface 0 AS0
Interface 1 AS1
Interface 0 AS0
Interface 0 AS1
Interface 1 AS0
Endpoint 1
Endpoint 2
Endpoint 3
2.1.4. Enumeracin
Antes de que las aplicaciones puedan comunicarse con un dispositivo, el host necesita aprender acerca de los dispositivos y asignarle un driver. La enumeracin es el intercambio de informacin que acompaa a estas tareas. El proceso incluye asignacin de una direccin para el dispositivo, lectura de descriptores desde el dispositivo, asignacin y carga de un driver, y seleccin de una conguracin que especique los requerimientos de consumo de energa, endpoint y otras caractersticas. El dispositivo luego est listo para transferir datos usando cualquiera de los endpoints asignados en su conguracin.
26
CAPTULO 2.
Cuando un dispositivo en una clase soportada tiene una caracterstica nica o habilidades no incluidas en el driver, se puede proveer un driver de ltro para mantener las caractersticas agregadas y las habilidades, en lugar de escribir un driver completo. Una especicacin de clase puede denir valores para los tems en los descriptores estndar, como tambin descriptores class-specic.
2.1.6. Funcionamiento:
Los dispositivos tienen asociados canales lgicos unidireccionales, llamados pipes, que conectan al host controlador con una entidad lgica en el dispositivo llamada endpoint. Los datos son enviados en paquetes de largo variable. Tpicamente estos paquetes son de 64, 128 o ms bytes. Los endpoints y sus respectivos pipes, son numerados del 0 al 15 en cada direccin, por lo cual un dispositivo puede tener hasta 32 endpoints (16 de entrada y 16 de salida). La direccin se considera siempre desde el punto de vista del host controlador. As un endpoint de salida ser un canal que transmite datos desde el host controlador al dispositivo. Un endpoint solo puede tener una nica direccin. El endpoint 0 (en ambas direcciones) est reservado para el control del bus.
Cuando un dispositivo es conectado al bus USB, el host controlador le asigna una direccin nica de siete bits (mediante el proceso de enumeracin) que es utilizada luego en la comunicacin para identicar el dispositivo. Luego, el host controlador consulta continuamente a los dispositivos para ver si tienen algo para enviar, de manera que ningn dispositivo puede enviar datos sin la solicitud previa explcita del host controlador. Para acceder a un endpoint se utiliza una conguracin jerrquica de la siguiente manera: un dispositivo (llamado funcin) conectado al bus tiene un nico descriptor de dispositivo, quien a su vez tiene uno (o varios) descriptores de conguracin. Estos ltimos guardan generalmente el estado del dispositivo (ej: activo, suspendida, ahorro de energa, etc). Cada descriptor de conguracin tiene uno (o ms) descriptores de interfaz. Y stos ltimos nalmente son los que contienen los endpoint, que a su vez pueden ser reutilizados entre varias interfaces (y distintas conguraciones) como muestra la gura 2.2.
2.2.
Debido a que los objetivos de este proyecto incluyen el desarrollo de un hardware, se debieron relevar las soluciones de conectividad USB entre el hardware a construir y la PC. Si bien hay muchos tipos de soluciones realizadas por un varios productores de semiconductores, luego de hacer un relevamiento se pudo realizar una categorizacin de ellas. Dentro de estas categoras, slo se dejaron aquellas que no eran kits de desarrollo, y se muestran a continuacin:
2.2.
27
Se realiz una primera aproximacin a todas las soluciones y luego se profundiz en aquellas que eran ms apropiadas para los requerimientos de este proyecto, priorizndose aquellas en las cuales era posible conseguir muestras gratis. A continuacin se brinda un breve resumen de cada una las categoras relevadas, seleccionando para ello algunos representantes de cada una de ellas.
USB1T20
de
Fairchild,
y el
Philips ISP110x.
En la gura 2.4 se
muestra un diagrama lgico de las seales que traduce y la tabla de verdad de los valores lgicos
FT232BM
de
FTDI
en la gura 2.5. Los componentes ms importantes de izquierda a derecha son: el transceiver USB, el motor de interfaz serial (serial interface engine)(SIE), el motor de protocolo USB y el transmisor-receptor asncrono universal (universal asynchronous receiver-transmitter)(UART). Del transceiver ya se ha hablado con anterioridad, el SIE junto con el motor de protocolos USB tiene la responsabilidad de manejar transferencias en endpoints predeterminados por la interfaz
28
CAPTULO 2.
CDC. Luego el componente controlador UART FIFO, que con ayuda de los buers de memoria compartida realizan las transferencias de datos con el Host USB. Este componente tambin sirve para setear la conguracin del UART (velocidad, paridad, etc). Finalmente a la derecha de la gura se encuentra el UART que es donde se conecta el hardware va una interfaz serial.
Cumple con el estndar USB 2.0 (Full speed) Velocidad de 300 a 3M bauds Manejo de handshaking y seales de modem. Bit Bang mode: Transforma las seales de control en puerto de E/S de 8 bits. Interfaz con EEPROM para caracterizar VID, PID, etc. Drivers de puerto COM virtual para Windows, MacOS y Linux.
2.2.
29
Interfaz de bus independiente para la mayora de los microcontroladores/microprocesadores (12.5 MByte/s) Interfaz DMA de alta velocidad (12.8 Mbyes/s) Interfaz directa con perifricos ATA/ATAPI
Conexin al bus USB controlada por software (SoftConnect tm) Data transceiver y regulador de voltaje de 3.3 V integrados
30
CAPTULO 2.
Arquitectura Velocidad Package Memoria de programa Memoria datos USB 2.0 (full y low speed) Eeprom Modo Bajo Consumo Pines de E/S Timers I2C SPI USART Canales PWM A/D Otros
TUSB3210 CISC (8052) 12 Mhz TQFP 64 *6K ROM, 8K RAM (Firmware) 768 bytes 512 Bytes compartida, 3 endp IN, 3 OUT. transferencias interrupt y bulk no Si Hasta 36 3 de 16 bits Master No No No No Bootloader I2C o USB, niveles de prioridad en interrupciones, soporte multiproducto Poca, algunas notas de aplicacin.
PIC18F4550 Harvard RISC 75+8 inst 48 Mhz TQFP 44, QFN 44, DIP 40 32Kb Flash autoprogramable por software 2 Kb 1024 Bytes compartida, hasta 32 endp con ping pong buffering, soporta todas las transferencias 256 bytes NanoPower, 3 modos Sleep Hasta 35 1 de 8 bits 3 de 16 bits Master/Slave Master/Slave Si Hasta 2 de 10 bits de resolucion 13 canales 10 bits Soporte bootloader, prioridad de interrupciones programables, multiplicador por hardware, 2 comparadores analgicos, Streaming Paralel Port. ICSP e ICD Bloqueo de secciones de mem. Mucha, recursos en la web, muchas notas de aplicacin, framework USB MPLAB, 3ras partes, varios compiladores
AT90USB1287 Harvard RISC 135 inst 16 Mhz TQFP 64, QFN 64 128Kb Flash autoprogramable por software 8 Kb (hasta 64 KB externos) 832 bytes compartida, 6 endpoints con ping pong buffering, soporta todas las transferencias 4 Kbytes Si, 6 Modos Sleep Hasta 48 2 de 8 bits 2 de 16 bits TWI* Master/Slave Master/Slave Si Hasta 6 de 2-16 bits de resolucion 8 canales 10 bits Soporte bootloader, vector de interrupciones con prioridad fija, multiplicacion por hardware, mparadores analgicos,modos bajo consumo, USB OTG,Bloqueo de secciones de mem. JTAG. Poca, Framework USB, algunas notas de aplicacin. AVR Studio 4, 3ras partes
Documentacin
Entornos de desarrollo En general los de 8052, de 3eras partes, algunos gratuitos. y compiladores
Experiencia previa (materia Taller de rmware dictada en FING) Conocimiento de la arquitectura y herramientas de desarrollo por los integrantes del equipo. Hardware de programacin/debugging disponible. Kit de desarrollo PICDEM FS USB disponible (para experimentacin previa mientras no se realizara el hardware).
En funcin de los puntos que consideramos relevantes, si bien tcnicamente el AT90USB1287 es superior en muchos aspectos al PIC18F4550, hubo otros aspectos que tambin se tuvieron en
2.3.
DRIVERS
31
cuenta para la eleccin nal, como ser la documentacin, los conocimientos previos y disponibilidad en los que el PIC18F4550 era superior a la otra opcin. Finalmente, teniendo en cuenta estos aspectos se tom la decisin de usar el PIC18F4550 para la implementacin del hardware en este proyecto de grado.
2.3.
Drivers
En el contexto de este proyecto de grado, uno de las reas de conocimiento que se estudiaron fueron los distintos tipos de drivers de las plataformas Windows y Linux, as como las herramientas de construccin y depuracin de drivers. No todos los elementos estudiados se usaron posteriormente en el desarrollo del proyecto, solamente fueron aprovechados los conocimientos sobre el modelado de drivers en Linux y algunas herramientas de desarrollo como son LibUSB y MPUSBAPI Library de Microchip. Para un mayor detalle de todo lo relevado y estudiado (modelos de drivers y herramientas de desarrollo y depuracin de drivers), leer el documento Estado del Arte [2]. En las siguientes subsecciones se presentaran las herramientas utilizadas, junto con algunas otras herramientas de desarrollo y depuracin de carcter comercial que son muy usadas en la actualidad.
Linux DDK
MPUSBAPI Library LibUSB LibUSB-Win32 jUSB y JSR80. Por ms detalle ver el documento del Estado del Arte [2]. A continuacin se presenta la herramienta ms usada a nivel comercial y las utilizadas en este proyecto.
WinDriver
KernelDriver
USBIO
RapidDriver
JCommUSB
32
CAPTULO 2.
Caractersticas
Soporta las especicaciones USB 1.x y 2.0. Se accede al hardware USB a travs de una aplicacin grca de usuario sin tener que escribir una sola lnea de cdigo. WinDriver posee un ayudante que genera un esqueleto del cdigo del controlador personalizado para un dispositivo en particular. El esqueleto del cdigo del controlador cumple con las caractersticas del WDM. Posee un ambiente grco para la depuracin, que permite monitorear los eventos y datos relacionados al driver. Adems de los dispositivos conectados directamente al PC, se pueden detectar dispositivos conectados por medio de un Hub USB. Se puede visualizar toda la informacin referente al dispositivo, como son los juegos de descriptores, nmero de serie, etc. Tipos de licencias y precios:
USD 3.000
USD 6.000
USD 6.000
Requerimientos
Algunos de los sistemas operativos soportados: Windows 98, Windows ME, Windows NT, Windows 2000, Windows XP, Windows Server 2003, Windows Vista, Linux y Linux Embedded 2.4 - 2.6 (x86 32-bit y 64-bit; IA64; Power PC 32-bit). Compiladores: GCC, cualquier otro compilador ANSI C, Borland Delphi, Visual Basic 6.0, Visual C#.Net, Visual Basic.Net. Se necesita un espacio libre en disco duro de entre 26 y 34 MB dependiendo del sistema operativo.
(MCHPFSUSB),
comunicacin con dispositivos USB, adems como parte del paquete cuenta con un driver USB de propsito general (clase Custom USB). Sus principales caractersticas son: Soporta los estndares USB 1.x y 2.0. Soporta el uso de 32 endpoints. La API es una biblioteca de vinculacin dinmica (DLL), para su fcil integracin a los proyectos de desarrollo. Soporta los sistemas operativos: Windows 98SE, Windows ME, Windows 2000 y Windows XP. Es una herramienta gratuita.
2.3.
DRIVERS
33
2.3.1.4. LibUSBWin32
Este proyecto es una migracin del proyecto
LibUSB
permite a las aplicaciones de usuario comunicarse con cualquier dispositivo USB en Windows de una forma genrica sin la necesidad de codicar ninguna lnea de un controlador modo ncleo. Las principales caractersticas de este producto son: Puede ser usado como un controlador ltro o como un controlador base de un dispositivo simultaneamente. Las funcionalidades son 100 % compatibles con el proyecto LibUSB. Soporta transferencias del tipo control, bulk e interrupt y todas las peticiones estndar de la especicacin USB. Soporta los sistemas operativos: Windows 98SE, Windows ME, Windows 2000 ,Windows XP. Es una herramienta gratuita.
, USBInfo, USB Monitor Pro, Advanced USB Port y USB Explorer 200, Conquest USB y SBAE-30B. A
Monitor
Bus Hound
USB
fueron utilizadas en el desarrollo del proyecto, ya que no fue necesario llegar a tan bajo nivel en anlisis en la comunicacin. A continuacin se presenta un ejemplar de herramienta de depuracin software y hardware.
34
CAPTULO 2.
Caractersticas
Soporta los estndares USB 1.x y 2.0. No utiliza drivers ltro para capturar la informacin, esto le permite poder registrar todas las peticiones de entrada/salida que suceden durante la enumeracin o remocin de un dispositivo. Captura de todas las IOCtrl internas de USB y IOCtrl modo usuario para los host controllers, hub y dispositivos HID. Se puede ver en detalle la composicin (paquetes Setup, URB's, descriptores, etc.) y las distintas etapas (junto con sus estados) por las que pasan todas las peticiones USB de entrada/salida. Captura de todos los IRP de energa y Pnp y eventos remotos. Licencias y precios:
USD 595
10-User:
Requerimientos
Sistemas operativos soportados: Windows 2000, Windows XP, Windows Server 2003 y Windows Vista Hardware requerido:
Placa base Intel o compatible de 32-bit. USB Host Controller (UHCI, OHCI, EHCI).
2.3.
DRIVERS
35
desarrollar de dispositivos USB de mejor calidad y en menos tiempo. Se encarga de monitorear los eventos USB y registrar el trco de informacin que intercambia por el cable USB, usualmente entre un PC y un dispositivo. Durante la captura del trco, se despliega en tiempo real en una estructura jerrquica y ordenada cronolgicamente la informacin de las transacciones, paquetes, as como la decodicacin de las peticiones estndar o de clases y los descriptores USB.
Caractersticas
Anlisis del trco a velocidades low, full y high. Anlisis no intrusivo del trco y con una alta impedancia en la prueba. Alto grado de decodicacin de las peticiones estndar y descriptores. Deteccin y medicin de los estados del bus USB y protocolos de bajo nivel. Ediciones y Precio:
Standard:
Professional:
Requerimientos
Procesador Pentium III 600 MHz o superior. 512 MB de memoria RAM. Host controller USB 2.0. Windows 2000 y Windows XP.
buscando reutilizar el driver genrico USB que viene con la biblioteca de Microchip y centrar los esfuerzos de construccin de drivers modo kernel para la plataforma Linux. Otra decisin tomada fue la eleccin de los productos LibUSB y LibUSBWin32 como opciones de driver modo usuario a utilizar en el proyecto, ms all de algunas limitaciones en la implementacin (no soportan todos los tipos de transferencias USB) detectadas en el relevamiento, siguen siendo aceptables como opcin.
36
CAPTULO 2.
hardware, pues en el caso del primer tipo, las opciones relevadas sola funcionan en la plataforma Windows y no sirven para depurar un driver que ejecuta en Linux. Para el segundo tipo de herramientas de depuracin el porque de su no utilizacin se debe estrictamente a sus costos econmicos, los cuales escapan ampliamente del contexto del proyecto.
2.4.
Proyectos relacionados
A continuacin se presentarn algunos de los proyectos relacionados y sus principales caractersticas, del total de los que fueron relevados [1, 4, 6, 10, 12, 13, 14, 21, 30, 36]. Muchos de los proyectos relevados solamente se centralizaban en el hardware y daban un driver que no aprovechaba las transferencias USB, ya que por simplicidad reutilizaban drivers del sistema operativo asignados a clases especicas de dispositivos. El soporte de rmware que brindan es mnimo, dejando al usuario toda la tarea de desarrollo de este.
20 bits I/O. Interfaz I C. Onboard 16KB I C EEPROM. Conector para hardware I C Bootloader Incluye API
Puntos dbiles:
ciones Isochronous, Bulk, Interrupt. Utiliza USB low speed. No tiene mdulos como PWM, serial, conversores A/D. Solo brinda driver para Windows.
Usa transacciones de control para todas las comunicaciones, por tanto no utiliza transac-
La API no ofrece una forma de comunicacin genrica, solo est pensada para manejo de perifricos jos (I
y E/S digital).
No posee una arquitectura bsica que permita agregar mdulos programados por el usuario.
Puntos fuertes:
Permite un diseo modular al poseer un conector para agregar los circuitos diseados por los usuarios. Permite tener mltiples placas. Bastante memoria.
1 Ms all de esta decisin, en los hechos se lleg a utilizar la herramienta de depuracin SourceUSB, para detectar un problema en el driver genrico USB de la biblioteca de Microchip para el tipo de transferencia isochronous).
2.4.
PROYECTOS RELACIONADOS
37
2.4.2. Arduino
Es un proyecto [6] Software y Hardware libre, que ya tiene bastante tiempo el cual surgi como una placa que se conectaba por serial y luego se incorpor USB. Utiliza el microcontrolador Atmega8 de Atmel. Posee un lenguaje de programacin propio llamado Wiring, el cual es un C reducido. Sus caractersticas principales son:
14 pins de E/S digital 6 pins de E/S analgica (A/D y PWM) Comunicacin serial
Puntos dbiles:
Utiliza el conversor serial-USB FT232BL/TR [20] no aprovechando el ancho de banda, requerimientos de tiempo y arbitracin de las transferencias USB. Utilizar el conversor tampoco permite reenumerarse como una clase de dispositivo conocido.
No tiene una arquitectura bsica donde el usuario pueda agregar dinmicamente mdulos programados por l.
Puntos fuertes:
Hay muchos ejemplos en la pgina
Incorpora Bootloader
Posee PWM
Hay drivers para Linux, Windows, MacOS (pero son los que trae el conversor serial - USB).
Posee un modo de operacin Stand Alone el cual le permite funcionar estando desconectado de la PC.
38
CAPTULO 2.
2.4.3. Wiring
Las caractersticas principales de este proyecto [36] son:
43 pins de E/S digital 8 entradas analgicas 6 salidas PWM 2 puertos serial puertos I C. 8 pins para interrupciones externas 28 KB de memoria de programa ash Figura 2.12: Wiring
Puntos dbiles:
Utiliza el conversor serial-USB FT232BL/TR Entonces no aprovecha el ancho de banda, requerimientos de tiempo y arbitracin de las transferencias USB. Utilizar el conversor tampoco permite reenumerarse como una clase de dispositivo conocido. No tiene una arquitectura bsica donde el usuario pueda agregar dinmicamente mdulos programados por l.
Puntos Fuertes:
Drivers para Linux Windows y MacOS (pero son los que proporciona el adaptador Serial - USB) Trae muchos pins para E/S Mucha memoria de programa Permite congurar los pins de E/S Posee gran cantidad de ejemplos en la pgina Hardware libre Pueden utilizarse los 8 pins analgicos como pins adicionales para E/S digital. Posee IDE propio
2.4.
PROYECTOS RELACIONADOS
39
2.4.4. CUI
Una caracterstica interesante de este proyecto [10] es que utiliza el microcontrolador PIC18F4550 de Microchip el cual fue seleccionado para realizar el
USB4all
Puntos dbiles:
No proporciona software ni rmware, solo se brinda una placa con rea de prototipado Tanto el driver como el bootloader son los que proporciona Microchip en su Framework ver Framework de Microchip. Pocos ejemplos y documentacin inexistente. No da soporte para Linux Solo se puede usar enumerndose como clases conocidas por Linux. No tiene una arquitectura bsica donde el usuario pueda agregar dinamicamente mdulos programados por l.
Puntos fuertes:
No utiliza conversores a USB Hardware libre Es actual (el proyecto est en funcionamiento an y se usa como base de otros proyectos).
40
CAPTULO 2.
Parte II
Arquitectura
41
Captulo 3
Introduccin
La solucin construida est compuesta por un PC, piezas de hardware y software especialmente diseadas y los dispositivos con los que se quiere interactuar. En la gura 3.1 se muestra un diagrama de conexin fsica de los componentes, entre los que se destacan: el
Adapterboards. El Baseboard
Baseboard
y los
rable y permite conectar dispositivos electrnicos que se comunican utilizando diversos protocolos e interfaces diferentes a la del USB. Para poder conectarse con el PC el un conector USB y para la conexin con los dispositivos y/o de 40 pines llamado de aqu en ms El
U4APort
dinmicamente tales como seales analgicas, puertos digitales, interfaces seriales, etc.
Adapterboard
baseboard, para ello U4APort y los elementos necesarios para la conexin de los dispositivos especcos.
es una pieza de hardware que tiene como funcin principal encapsular toda
AdapterBoard Motor
BaseBoard
PC AdapterBoard
Figura 3.1: Componentes fsicos del sistema USB4all.
Sensor
adapterboards
baseboard
adapterboards
baseboard.
La idea de fondo
de la solucin es enviar y recibir datos desde el PC por un nico medio (USB) para que luego el
baseboard transforme esa informacin mediante su procesamiento en seales abiertas que cumplen
con los distintos protocolo e interfaces que requieren de los dispositivos. Vale destacar que toda la lgica de transformacin de la informacin recae sobre el
baseboard
y no en los
adapterboards
que
sol se encargan de cuestiones de conexin de los dispositivos (tratamiento de seales, circuiteria para el manejo de potencias, etc.). Para una justicacin ms en detalle de este concepto ver la seccin 7.1. 43
44
CAPTULO 3.
INTRODUCCIN
USB4all System.
Luego de haber presentado un panorama general de los elementos fsicos de la solucin, nos adentramos un poco ms para presentar su arquitectura de software. La gura 3.2 es una vista interna de los elementos mencionados anteriormente, que permite visualizar los distintos componentes de software y rmware, que buscan satisfacer el objetivo principal de poder interactuar con dispositivos electrnicos desde un PC. A continuacin se presentan brevemente los componentes que constituyen la arquitectura y en los captulos siguientes se explicaran en detalle:
USB4all System
que corren en el PC servicios de alto nivel para la comunicacin con los dispositivos electrnicos, similar a los provistos por los sistemas operativos para la gestin de archivos (abrir, cerrar, leer, etc.).
USB4all Firmware
Es la parte del sistema que reside en el
baseboard
Modules.
Base Firmware:
Es el componente responsable de manejar el puerto USB del
baseboard,
implementar el pro-
tocolo de transporte y el de gestin de vnculos lgicos. Encapsula las funcionalidades bsicas indispensables de la solucin por medio de un conjunto de servicios que permiten la expansin del
USB4all rmware
mediante la incorporacin de
User Modules:
Son los componentes intercambiables del sistema que permiten encapsular la lgica de un dispositivo especico y su protocolo de comunicacin con las aplicaciones de usuario. Se acoplan al
45
del
base rmware de forma similar a plugins permitiendo expandir de esta manera las funcionalidades USB4all rmware.
Proxies:
Es un representante en software de los mdulos de hardware existentes en el microcontrolador y su principal funcin es encapsular y abstraer la complejidad del manejo del hardware de forma de brindar servicios de ms alto nivel a los electrnicos, son la forma que tienen los
user modules para la comunicacin con los dispositivos user modules para acceder al hardware de manera
compartida o exclusiva. Esta funcionalidad puede visualizarse como una capa de abstraccin del hardware (hardware abstraction layer)(HAL), es decir, una capa que permite ocultar los detalles especcos de una plataforma, de forma de brindar servicios independientes del hardware sobre el que sta se apoya.
USB4all API
base rmware.
Es el componente del sistema que reside en el PC y constituye la contraparte funcional del Su misin es brindar a las aplicaciones de usuario una interfaz para la creacin de vnculos lgicos con los conectados a distintos
user modules de forma de interactuar con los dispositivos electrnicos baseboards. Este componente se desarroll como una biblioteca de vincu-
lacin dinmica que soporta varias plataformas y drivers lo que permite ampliar el espectro de lenguajes de alto nivel que la utilizan as como ocultar la complejidad inherente de la tecnologa USB.
USB4all Library
El componente
USB4all Library
API.
USB4all API
clases base implementada en Java, que encapsulan los conceptos como debe implementar el protocolo de comunicacin con el nuevo
baseboards
Esto permite extender fcilmente la solucin para el manejo de nuevos dispositivos, pues slo se
user module
especco reutilizando
Generic Driver:
Dado que el objetivo primordial es construir una solucin genrica, no es factible la reutilizacin de drivers de clases USB denidas como HID, clase de dispositivos de comunicacin (comunications device class) (CDC) [18], mass storage, etc., debido a que limita las clases de transferencias, la cantidad de endpoints a utilizar y la lgica de interaccin con el dispositivo. Por lo tanto nuestra solucin se basa en que los drivers que utiliza deben ser de la clase
Custom
denida por el estndar USB para poder utilizar todos los tipos de transferencias sin restricciones de la cantidad de endpoints y delegar la lgica de interaccin con los dispositivos a las capas superiores de la arquitectura. En los siguientes captulos se estudiar en detalle cada uno de los componentes que conforman el
USB4all System
los componentes.
46
CAPTULO 3.
INTRODUCCIN
Captulo 4
Arquitectura en el Baseboard
4.1. Baseboard Hardware
El
baseboard
vos electrnicos con los cuales se quiere interactuar. Su principal componente es el microcontrolador PIC18F4550 de Microchip encapsulado en el formato dos en lnea (Dual In-line Package) (DIP), que se conecta al
baseboard
microcontrolador de funciones bsicas; ellos son: un oscilador principal y uno secundario opcional, componentes para el control de voltaje de alimentacin, dos pulsadores y un diodo emisor de luz (Ligth Emitting Diode) (LED) para indicar que el USB. El
baseboard
baseboard
cuenta con un conector USB tipo B para la conexin con el PC, un conector para conectar dispositivos electrnicos directamente con las entra-
RJ11 para conectar un programador/debugger (por ejemplo MPLAB ICD2) y un conector de 40 pines llamado
U4APort
das/salidas del microcontrolador, o mdulos adaptadores (de aqu en ms de mediana y alta potencia.
adapterboards )
para
cuando se precisa por ejemplo algn tipo de acondicionamiento de seal o manejo de dispositivos
El
baseboard
el hardware bsico para la comunicacin mediante USB con el PC y provee de un conector de interfaz sencilla para comunicarse con
adapterboards,
El
baseboard
robustez, y su simplicidad. Desde un principio se intent minimizar su tamao, ya que ste componente de hardware siempre est presente en todas las soluciones de conexin de dispositivos con el PC. Su tamao de 70x60 mm (en su mayor parte ocupado por los conectores y el zcalo del microcontrolador) habilita la generacin de dispositivos pequeos. La robustez est dada por el uso de conectores mecnicamente resistentes y soldados directamente al
baseboard
con
longitudes mnimas de terminales de los componentes y la ausencia de cables o conexiones que se puedan doblar o quebrar con un uso normal. El circuito impreso es simple y utiliza slo una faz de cobre, lo que facilita su fabricacin y reduce los costos asociados.
Finalmente, la eleccin de componentes estndar y tecnologa through-hole, que al contrario que la tecnologa de montaje supercial (Surface Mount Technology) (SMT), permite cambiar fcilmente el microcontrolador en caso de que se dae, adems de facilitar el montaje del
base-
con excepcin
del conector USB tipo B se encuentran en el mercado uruguayo a un costo razonable. Por ms
48
CAPTULO 4.
ARQUITECTURA EN EL BASEBOARD
baseboard.
baseboard.
2.
U4APort:
que contienen o
permiten interactuar con el hardware del dispositivo especco que se desea utilizar. Sus pines incluyen a casi todos los pines del microcontrolador, adems de pines de alimentacin de 5 voltios derivada del conector USB. Dentro de este conjunto de encuentran los que simplemente unen los pines del conector del con dispositivos de baja potencia (leds, otros chips, etc.) y los el funcionamiento del dispositivo (motores, relays, etc.). 3.
Conector USB tipo B: Permite conectar el baseboard Conector RJ11 para programador/debugger:
componente que integra el rmware del
baseboard
a un
programador/debugger, por ejemplo el MPLAB IDC2. Como programador se utiliza para la grabacin del bootloader por nica vez. Tambin se utiliza si desea debuggear cualquier
baseboard.
5.
Botn de Reset: Pulsar este botn causa el reseteo del microcontrolador y por tanto el
cierre de todas las comunicaciones de los programas de aplicacin con el de ello y dependiendo del estado del botn de bootloader del modo normal donde interacta mediante la
USB4all API
Botn de Bootloader:
botn de reset, el
baseboard
Si se mantiene apretado el botn de bootloader y se pulsa el inicia en modo bootloader. En este modo se puede actualizar
4.2.
FIRMWARE
49
el rmware del
baseboard
baseboard
entra
Cristal de 20 MHz: Cristal utilizado para la generacin de una seal de reloj principal
para el microcontrolador.
8.
Cristal de reloj 32.768 kHz y jumper: Al cerrar el jumper se establece el circuito que
habilita el uso del oscilador de 32.768 kHz para su uso en aplicaciones relacionadas con reloj de tiempo real (Real Time Clock) (RTC).
9.
LED: El led se enciende cuando el baseboard est conectado al PC mediante un cable USB.
adapterboard baseboard
interacta con uno (o construidos dirigirse
Por ms detalles de la constitucin del baseboard, as como de su programacin y actualizacin de rmware leer el documento[3]. Como se dijo anteriormente, el varios) quiere utilizar desde el PC. Para ver en detalle algunos de los a la seccin 8.2.2. que incluyen o permiten la conexin con los elementos electrnicos que se
adapterboards
4.2.
Firmware
4.2.1. Introduccin
El corazn del
baseboard
y una de las claves para lograr las caractersticas deseadas en el marco de este proyecto de grado es un buen diseo de su rmware. La principal responsabilidad del rmware es la de permitir una interfaz congurable entre el USB y el(los) dispositivo(s) electrnicos conectado(s). Debido a que el objetivo nal es facilitar la comunicacin con dispositivos electrnicos diversos, el rmware debe tener la capacidad de proveer servicios genricos de comunicacin, as como permitir la conexin de un conjunto de dispositivos especcos. Las caractersticas de diseo y calidad que se pensaron para el rmware son las siguientes:
Modular: Esto incluye identicar funcionalidades y responsabilidades especcas y encapsularlas en mdulos. Algunos de estos mdulos podrn ser intercambiables y para ello se van a precisar interfaces bien denidas.
Extensible:
se le pueden ir realizando extensiones de manera sencilla y ordenada para el manejo de dispositivos o funcionalidades especcas.
Diseo basado en capas: Para la comunicacin con los dispositivos se utiliza una aproximacin basada en capas en donde cada capa ofrece servicios a una capa superior y utiliza los servicios brindados por una capa inferior. Las capas tienen responsabilidades claras y utilizan una pila (stack) de protocolos para su implementacin.
Congurable:
software que corre en el PC. La idea es mantener un rmware relativamente jo y canalizar hacia el software del PC (que es ms poderoso y ms sencillo de realizar) las conguraciones especcas a utilizar en cada caso.
Facilidad de uso:
programacin por los usuarios nales. Para el caso que se deba programar, el usuario debe concentrarse nicamente en la lgica para el manejo del dispositivo especco a utilizar. Para ello se dan las interfaces necesarias as como una metodologa para la programacin. El resto de las interacciones entre el USB y los controladores del PC queda oculto para el usuario.
Reusabilidad: La clave es pensar en una arquitectura basada en componentes intercambiables. En funcin de realizar componentes o mdulos para implementar extensiones al rmware de manera ordenada, y manteniendo cierta independencia entre estas, es posible el reuso de los componentes realizados por otros desarrolladores.
50
CAPTULO 4.
ARQUITECTURA EN EL BASEBOARD
baseboard
(de aqu en ms
USB4all rmware )
User Module : Encapsula la lgica especca para el manejo de un determinado dispositivo o conjunto de dispositivos. Pueden utilizar servicios de
prox ies,
o si la interaccin es
muy simple, utilizar el hardware directamente (modo exclusivo), por ejemplo usar puertos de entrada/salida directamente con el dispositivo conectado. Estos mdulos pueden verse como adaptadores especcos a un dispositivo y son los que en general deban ser implementados por los usuarios. Como ejemplos tenemos
user modules
encargados de la interaccin
Proxy : Brinda servicios para facilitar el manejo del hardware del microcontrolador a los
uso sencillo y logran compartir recursos utilizados por varios permiten utilizar el bus I C por varios
user modules.
stos
componentes estn diseados segn el patrn de diseo Observer para poder noticar a
user modules
user modules
user modules.
baseboard
y de brindar
base rmware
el manejo de un nmero variable de stos. Tambin tiene la responsabilidad de brindar interfaces especcas para facilitar el uso de interrupciones por parte de los
proxies.
USB4all rmware
USB4all rmware
en
sus tres componentes bsicos est vinculado con las caractersticas de diseo y calidad buscadas.
4.2.
FIRMWARE
51
Caracterstica Descripcin
Modularidad Est presente en las tres componentes, si bien se puede aplicar directamente a los user modules y a los proxies debido a su relacin uno a uno con un dispositivo o hardware especico dentro del microcontrolador, la idea de modularidad tambin subyace en cada uno de los subcomponentes del base rmware . Est vinculada en gran medida con los user modules , pues brinda una manera de que la solucin puede extenderse para manejar una gran cantidad de dispositivos especcos. Est presente en los servicios de comunicacin proporcionados por el base rmware a los user modules . Esto independiza el mecanismo de comunicacin entre los user modules y su contraparte del lado del PC. Est relacionada estrechamente con el componente base rmware , pues facilita la interaccin con otros componentes en el software del PC para permitir congurar el baseboard esttica y dinmicamente durante la ejecucin de un programa de aplicacin del PC. Est relacionada con la utilizacin de interfaces claras entre el base rmware y los user modules , en donde se delegan slo algunas funciones especcas en los user modules , dejando el grueso de la comunicacin encapsulado en el base rmware . Se basa fuertemente en que los user modules (y proxies ) se relacionan con el base rmware mediante una interfaz que deben implementar. Existe una especie de contrato entre las responsabilidades que deben ser implementadas tanto en el base rmware como en los user modules . De esta manera si un desarrollador genera un user module para interactuar con un dispositivo, se vuelve reutilizable en diversas aplicaciones. A modo de ejemplo, luego de realizado un user module para manejar un motor paso a paso, ste puede utilizarse en un robot, en un plotter, etc.
Cuadro 4.1: Caractersticas del diseo del
USB4all rmware.
En la gura 4.3 se muestra un ejemplo del a paso y un sensor de temperatura. El llama se utiliza el
stepper motor module y para controlar el tiempo de encendido de cada bobina del motor, timer proxy y para controlar el sensor de temperatura, existe el temperature sensor user module que conoce el protocolo de comunicacin serial del sensor particular.
USB4all rmware, para controlar un motor paso user module encargado de interactuar con el motor se
Figura 4.3:
Usb4all rmware
compuesto por
user modules
el
user modules y proxies en el momento de generar rmware. En la siguiente seccin pasaremos a ver en detalle el base rmware.
permiten la integracin de varios
base rmware
proxies.
user modules
USB4all
52
CAPTULO 4.
ARQUITECTURA EN EL BASEBOARD
la complejidad de la comunicacin USB, el cual es alcanzado exportando interfaces claras, que permiten utilizar estos servicios por los usuarios. Tambin se busca que la arquitectura sea extensible, brindndole al usuario mecanismos que le permitan extender el rmware con nuevas funcionalidades de manera muy sencilla, esto es resuelto agrupando en el lo que es fundamental para el funcionamiento elemental del los
baseboard
y mediante la exportacin
de interfaces se dejan las funcionalidades especicas para que sean implementadas dentro de
user modules.
Para lograrlo el
base rmware provee un entorno en el cual pueden al mismo user modules y que el usuario logre tener la sensacin de que todos ellos mismo tiempo, sin la necesidad de modicar el base rmware cuando se
base rmware
que en capas como muestra la gura 4.4, con funcionalidades bien denidas en cada una de ellas. Cada capa est construida a partir de la inferior y tiene el propsito de ofrecer ciertos servicios a la capa superior. Estos servicios se logran implementar mediante el protocolo de comunicacin que cada capa del y el
base rmware
en la seccin 6.1. Se mantiene una comunicacin virtual entre las capas equivalentes en el PC
USB4all rmware,
para el intercambio de paquetes. Cada paquete est compuesto de un header con informacin para la capa en el otro extremo y la carga til a intercambiar. A continuacin se detallan las caractersticas de cada uno de los componentes del
base rmware.
handlers, los cuales son identicadores que utiliza el componente USB4all API user module enviar datos. La relacin entre un user module y un handler es de uno a uno. A su vez un handler identica de forma nica a un nmero de endpoint, asignado al user module por el cual este va a comunicarse con el PC. Este mdulo es responsable de almacenar una tabla encargada de mapear para cada handler que endpoint lo utiliza y a que user module pertenece. Otra de las responsabilidades del Handler Manager es procesar los paquetes recibidos mediante la inspeccin de su header, determinar a que user module corresponden e invocar a la
parmetro la carga til del paquete. Para poder lograr esta tarea se utiliza la tabla de mapeo
USB4all rmware.
Handler Manager
es uno de
funcin de dicho mdulo que se encarga de atender la llegada de nuevos datos, pasndole como
handler
- endpoint -
user module.
4.2.
FIRMWARE
53
Utiliza como servicios para realizar sus tareas, los expuestos por la capa de acceso al medio USB, para poder de esta manera recibir y enviar paquetes. La capa de acceso al medio USB est implementada en hardware por el microcontrolador y se accede a ella mediante la escritura y lectura de ciertas posiciones del espacio de memoria, que estn mapeadas con los buers de cada endpoint. Para simplicar esta tarea el Para que los
handler manager
user modules
setHandlerReceiveFunction
en la que los
handler manager
como callback para ser invocada cada vez que se reciben datos por algn endpoint, dirigidos a un
user module
tarea es
USBRead.
Operacin
setHandlerReceiveFunction
Descripcin
Recibe como argumentos un handler y un puntero a funcin, y registra a esa funcin como manejador de los datos que lleguen para ese handler. No recibe argumentos. Lee cada endpoint y si para uno de ellos hay nuevos datos se procesa el header extrayendo el handler , luego se invoca la funcin registrada como manejador de ese handler . Recibe como argumentos un handler y un largo. Construye el header y lo coloca al comienzo de los datos ya ingresados a escribir en el mensaje a ser enviado. Recibe como argumento un handler y a partir de este obtiene el buer asociado para escribir al endpoint correspondiente al handler pasado por argumento.
USBRead
USBWrite
getSharedBuffer
Handler Manager
La operacin
USBWrite
handler
pasado por parmetro devuelve el buer correspondiente al endpoint que tiene asignado, para obtener buers por donde pueden escribir
Handler Manager
modules
almacenados en el
user modules,
Admin Module,
esta capa se
esta capa, se vern en ms detalle las tareas que lleva a cabo. Como vimos en la seccin anterior el
handler - endpoint - user module, la cual se user module va dirigido un paquete, el admin module le suministra la informacin necesaria al handler manager para que pueda poblar la tabla.
utiliza una tabla para mapear Como es comn en las arquitecturas en capas, el protocolo de las capa superior viaja como
handler manager
payload en el paquete de la capa inferior, como veremos en forma ms detallada en la seccin 6.1, el paquete correspondiente al Handler Manager. El especicando el
admin module
Admin Module al igual que los user modules debe registrarse en el handler manager handler en el cual atiende, ya que su estructura es similar a la de un user module, con la salvedad de que en lugar de registrarse al momento de ser abierto, el admin module se registra al momento de inicializarse el sistema. Se asigna el handler 0 para que atienda el admin module, este handler es reservado para el admin module y no puede ser utilizado por los user modules. La funcin registrada para atender los datos que llegan al handler 0 es la encargada
54
CAPTULO 4.
ARQUITECTURA EN EL BASEBOARD
de implementar el protocolo correspondiente al 6.1. Al mismo nivel que el jo a diferencia del de usuario), en
admin module se encuentran los user modules, cuyo protocolo no es admin module y es compartido con su contraparte en el PC (la aplicacin particular el Admin Module implementa una interfaz idntica a los user module user modules, no nos vamos a detener en esta base rmware y sern explicados en mayor detalle en la
presentada en el cuadro 4.5, con la diferencia de que su protocolo es prejado y dedicado a las tareas de gestin que se mencionaron. Sobre los seccin, ya que no forman parte del seccin 4.2.3.
Debido a que utilizamos un microcontrolador con una aplicacin dedicada sin ningn sistema operativo, se debe poseer de algn ciclo que permita que el microcontrolador contine ejecutando siempre el verse en el algoritmo 1. Su interaccin consta de inicializar el
initializeSystem,
USB4all rmware, esta es la tarea del Mainloop cuyo pseudocdigo puede baseboard mediante la operacin
luego le pasa el control al microcontrolador para que realice las tareas co-
rrespondientes al USB, luego ejecuta la funciones registradas por los mdulos para hacer poll y por ltimo lee los datos recibidos por los endpoints.
dynamic polling y dynamic ISR implementan el patrn de diseo Observer user modules y/o proxies el manejo de la entrada/salida con los mdulos de
registran y desregistran funciones que desean que se ejecuten repeti-
hardware del microcontrolador. Su responsabilidades son brindar un mecanismo por el cual los
user modules
proxies
damente. Ambos persiguen los mismos objetivos, pero cada uno se especializa en mecanismos diferentes como son polling e interrupciones. Una funcionalidad que comparten es la de poder asignar tiempo de procesador a los
user modules
proxies
sacin al usuario de que todos ejecutan al mismo tiempo. Para ello el de despachador que utiliza la poltica round robin y el atencin de todas las interrupciones El
dynamic ISR
dynamic polling
auspicia
implementa la rutina de
dynamic polling
que es exportada por ste mdulo. En el cuadro 4.3 pueden verse el conjunto de operaciones que denen la interfaz de
Mainloop
user modules ,
polling
l dynamic polling.
Operacin
addPollingFunction
Descripcin
Recibe por parmetro una referencia a una funcin, la cual es registrada para ser ejecutada cada ves que se invoque a la operacin polling. Recibe por parmetro una referencia a una funcin, la cual es des registrada del mecanismo de polling. Al ser invocada, ejecuta todas las funciones registradas en el mecanismo de polling.
Cuadro 4.3: Interfaz del
removePollingFunction polling
Dynamic Polling
4.2.
FIRMWARE
55
Anlogamente existe un mecanismo de registro similar, en el que en lugar de utilizarse polling se utiliza el mtodo de interrupciones como manejador de
2 interrupciones
y es implementado por el
y la operacin
interruption
dynamic ISR.
ste se instala
se encarga de noticar el
suceso de una interrupcin a los que se registraron. El orden de invocacin se realiza segn la poltica FIFO, esto permite implementar un mecanismo para el manejo de prioridades, dado que el primero que se registra es el primero en ser noticado. En el cuadro 4.4 puede verse el conjunto de operaciones que denen la interfaz del
dynamic ISR .
Operacin
addISRFunction removeISRFunction interruption
Descripcin
Recibe por parmetro una referencia a una funcin, la cual es registrada para ser ejecutada cada ves que se invoque a la operacin interruption. Recibe por parmetro una referencia a una funcin, la cual es des registrada del mecanismo de interrupcin. Al ser invocada, ejecuta todas las funciones registradas en el mecanismo de interrupcin.
Cuadro 4.4: Interfaz del
Dynamic ISR
En caso de querer utilizar un recurso (mdulo de hardware presente en el microcontrolador) por ms de un debe a que a los
user module , es necesario hacerlo utilizando el mecanismo de proxies . Esto se user modules desconocen la presencia de otros mdulos registrados, por lo que proxies
se genera el problema de no saber cual de ellos debe blanquear la bandera de evento indicado. Uno de los usos de los sobre los es asumir sta responsabilidad de forma de centrar en un nico componente toda la tarea, eliminando el problema previamente mencionado. Por ms detalles
Si por el contrario, se desea usar un recurso de hardware del microcontrolador en forma exclusiva por un necesidad de los
sin
loader module
user modules
tar la lgica particular encargada de resolver las funcionalidades que el usuario desea incorporar
baseboard, sin preocuparse de aspectos tales como la comunicacin por el medio USB. Cada user module se identica por su nombre e implementa la interfaz del user module (ver cuadro 4.5), para que el base rmware sea capaz de anexar al USB4all rmware la lgica que implementa cada user module. Este conjunto de operaciones, es fundamental para que los user modules puedan colaborar con el base rmware, sto forma parte de un contrato entre el base rmware y el user module, donde el user module tiene la obligacin de implementar esas funciones y a cambio obtiene el benecio de ser ejecutadas por el base rmware en los momentos
estipulados.
1 En el caso del microcontrolador PIC puede congurarse cada una de las banderas de hardware para que dispare una interrupcin en el ujo de ejecucin o no. El dynamic ISR se encarga de atender aquellas banderas que disparan interrupciones. 2 Se entiende como manejador de interrupciones, a una rutina que adems de la atencin de la interrupcin se encarga de salvar y recuperar el contexto (puntero de programa, registros de estado y trabajo).
56
CAPTULO 4.
ARQUITECTURA EN EL BASEBOARD
Operacin Descripcin
init
Release Received
Inicializa el mdulo de usuario y registra en el handler manager la operacin encargada de manejar nuevos datos. Libera los recursos utilizados por el user module . Operacin encargada de manejar nuevos datos. Operacin encargada de procesar entrada/salida mediante mecanismo de polling o interrupciones como fue descripto en la seccin 4.2.2
Cuadro 4.5: Interfaz de un
ProcessIO
User Module
Los
user modules
manejan los vnculos lgicos que le permiten comunicarse con las aplica-
rmware
ciones de usuario en PC mediante USB, dichos vnculos son una abstraccin que brinda el de los endpoints que USB utiliza. Cada
user module
base
endpoint para enviar y otro recibir datos. En la gura 4.5 podemos ver que el vnculo lgico del nejados por los por el por el
user module 1
endpoint 1 IN que le permite enviar y el endpoint 2 OUT que le permite recibir. Los vnculos maObserver, donde los
user modules son consecuencia directa de la implementacin del patrn de diseo user modules juegan el rol de observadores de los datos que son recibidos base rmware, siendo el mecanismo de recepcin del user module totalmente asincrnico user module.
Al permitirse tener un endpoint de entrada distinto al de salida, como se
para l. Por el contrario el mecanismo utilizado para enviar datos, es invocado directamente muestra en la gura 4.5 para el caso del
Endpoint 2 IN
Endpoint n IN
Endpoint 1 IN
Endpoint 1 OUT
Base Firmware
Endpoint 2 OUT
Endpoint n OUT
User Module 1
User Module 2
User Module n
user modules
4.2.
FIRMWARE
57
Para poder resolver lo que fue comentado en la seccin 4.2.2 y evitar que el usuario deba realizar cambios al desde el los
base rmware al agregar un user module , se busca eliminar las dependencias base rmware hacia ellos. En particular las dependencias que se busca eliminar son nombres de las operaciones utilizados en cada user module , ya que no es posible tener ms
3
de una operacin con igual nombre en ms de mdulo . Como solucin a esta problemtica se guardan y utilizan referencias a posiciones de memoria donde estn denidas las operaciones en lugar de accederlas por medio de su nombre, ms adelante en esta seccin se explicar en detalle como se generan y almacenan en el Los el
user modules
USB4all rmware
estas referencias.
base rmware
necesita en
lugares jos en memoria de programa (por ms detalles ver seccin 4.2.6), de esta manera
admin module
callbacks puede acceder a las funcionalidades de los mdulos sin depender de cada mdulo particular. Las referencias a las operaciones
init
release
deben almacenarse en una estructura especial en algn lugar determinado, para que puedan ser localizados en tiempo de ejecucin y utilizados por el gura 4.6 donde se observa un ejemplo para el caso de un llamado
admin module como puede verse en la user module que implementa la lgica
de control de un motor. Para llevar a cabo estas tareas existe un componente en el rmware
loader module
Motor
MotorModule
user module.
Es necesario contar con algn mecanismo que de manera sencilla permita almacenar la estructura que contiene las referencias a las operaciones exportadas por un mdulo (que se necesitan como punto de inicio) y su nombre en un lugar predecible en memoria de programa. Tambin es necesario que este mecanismo sea general para poder extenderlo a varios mdulos, ya que al mismo tiempo puede haber varios cargados en memoria, para ello se utiliza un espacio de memoria continuo, donde de manera implcita se almacena una tabla, donde en cada la de sta se encuentra el nombre del Se adecu el linker script
user module
mencionado, mediante una seccin denida en el linker script, la cual nos permite almacenar en memoria de programa la estructura de mapeo. Las secciones especicadas en el linker script permiten denir un espacio y asignarle un nombre, luego se puede utilizar la directiva
pragma
[29] para almacenar variables o constantes en dicha seccin, puede verse un pequeo ejemplo en el algoritmo 2. De esta manera, se soluciona el problema de encontrar las referencias a las operaciones que se precisan como punto de inicio del
user module
en lugares determinados.
3 Esta restriccin se debe a que si existiern ms de un user module con operaciones de igual nombre, el linkeditor no podra resolver cual de las referencias debe utilizar. 4 El linker script es utilizado por el linker, para describir como las secciones en el archivo origen son mapeadas en el archivo de salida.
58
CAPTULO 4.
ARQUITECTURA EN EL BASEBOARD
Algoritmo 2 Mecanismo para almacenar las referencias en memoria de programa del mdulo.
#pragma romdata user uTab motorModuleTable = {&MotorInit,&MotorRelease,&userMotorConfigure,"motor"}; #pragma code Donde user es el nombre de la seccin y uTab es un estructura para almacenar las posiciones de memoria
init como se ve en el algoritmo 3, se encarga de registrar en el handler manager received del user module, mediante la invocacin de la operacin setHandlerReceiveFunction
user module.
handler,
user module
ProcessIO
en
realice
entrada/salida con los mdulos de hardware presentes en el microcontrolador. Para tal fn, el
user module
operacin
puede registrarse en el
dynamic polling
mediante la operacin
addISRFunction
dynamic ISR
addPollingFunction
mediante la
init(handler): guardo handler instalo manejador de recepcin de datos en el handler manager instalo operacin ProcessIO en mecanismo de polling o de interrupciones obtengo buffer para escribir en el endpoint asignado y guardo referencia a l
Otra responsabilidad de la operacin
cual es pasado por parmetro) y obtener a partir de este, el buer de memoria compartida correspondiente al endpoint asignado para escribir por USB, esto es resuelto mediante la operacin cree una conexin lgica con un determinado las operaciones que el el las operaciones. La operacin
base rmware, y el usuario no debe preocuparse de ello, slo debe concentrarse en la lgica de
ProcessIO
user module
polling) o cuando ocurre una interrupcin en el microcontrolador (si se utilizan interrupciones), adems debe contener la lgica necesaria para atender los eventos generados por el mundo exterior y tambin puede utilizar los servicios que brinda el el PC la ocurrencia de dicho evento. La operacin
handler manager
para comunicar a
con su contraparte en el PC y luego de ser registrada en el vez que se reciban datos en el implementa. La operacin por el
baseboard
con destino el
base rmware
release,
release(handler): libera referencia al buffer de escritura del endpoint desinstalo manejador de recepcin de datos desinstalo operacin ProcessIO
Para enviar datos, un mediante la operacin
endpoint del user module. Como el user modules y los endpoints, el user module no tiene porque preocuparse de cual es su endpoint, el user module slo es responsable del handler y el handler manager se encarga de resolver a que endpoint corresponde.
de memoria compartida en la posicin correspondiente al
USBWrite,
user module debe utilizar los servicios expuestos por el handler m anager
previo a esto se debe escribir los datos a enviar en el buer
handler manager
4.2.
FIRMWARE
59
USB4all rmware
Observer para implementar el mecanismo de noticacin de eventos. Con una lnea punteada pueden verse las invocaciones correspondientes a la operacin cuales son implementadas mediante callbacks.
notify
Dynamic Pooling
Poll
Register
Notify
Receive USBWrite/Register
Handler Manager
Send
Receive
UserModule n
Init/Release
AdminModule
Register
Notify
ResolveAddress
Dynamic ISR
LoaderModule
USB4all rmware.
module
al
USBRead del Handler Manager para que lea los datos que llegaron baseboard y pueda noticar al user module destinatario de los mismos. Para esto, previamente el user module debe de haberse registrado. Si el destinatario de los datos es el admin module, usualmente va a ser necesario invocar operaciones de los user modules, como por ejemplo init, release. Para ello se utilizan los servicios del loader module, que resuelve las referencias a las operaciones del user module. Este mecanismo hace posible que el base rmware no este atado a los user modules cargados. Normalmente los user modules o el admin module deben enviar datos hacia el PC, as como
responder a los comandos recibidos. Para ello pueden escribir en el puerto USB utilizando la operacin
proxies
Poll
del componente
main loop, el cual se encarga de invocar Dynamic Pooling para que le asigne tiempo a cada user
registrado para utilizar el CPU (donde puede realizar E/S o lo que desee).
USBWrite
que exporta el
El otro mecanismo con que cuentan los noticar al ocurrir alguna interrupcin.
proxies
Dynamic ISR
que los
4.2.5. Proxies
Un
proxy
user modules,
user modules.
que se pueda realizar para imponer restricciones en cuanto al manenejo del hardware. Esto trae aparejados problemas en la mutuo exclusin de los recursos, ya que en el microcontrolador utilizado no hay instrucciones privilegiadas a nivel de hardware que corran slo en modo kernel.
60
CAPTULO 4.
ARQUITECTURA EN EL BASEBOARD
De esta forma, aunque se pudiera hacer un sistema operativo, o algn componente que llevara el control de qu directamente. En los sistemas operativos actuales (de los PCs), hay componentes que se encargan del manejo centralizado de los recursos de hardware y son la nica puerta de entrada para su acceso. De esta forma el sistema operativo es capaz de serializar el acceso a los recursos compartidos de manera adecuada. Para poder lograr tal control, se debe tener apoyo del lado del hardware y como se dijo no est disponible para el caso del microcontrolador utilizado. Teniendo en cuenta este escenario, slo se puede aspirar a dar algunos lineamientos y esperar a que el programador los siga. Ante este problema, lo que se suguiere es que haya un
user module
proxy
que gestione los eventos que genera un determinado hardware (lo reconozca y apague las
proxy
notify
en un
user modules no saben de antemano el orden en que van a ser dynamic polling o dynamic ISR. De esta manera todos los
son avisados del suceso del evento y no recae en ellos las responsabilidades
de reconocimiento y apagado de las banderas. Para la construccin de estos componentes, se utiliza el patrn de diseo Observer para noticar a todos los
user modules
y
esos servicios se encapsulan las funcionalidades para interactuar con mdulos de hardware del microcontrolador en dos modalidades: mediante interrupciones y mediante polling, dando lugar a los
interrupt proxies
polling proxies
interrupt proxies
mediante interrupciones, como suele suceder con mdulos de timer, puertos seriales, etc. De esta manera puede implementarse un varios
user modules
proxy
sean noticados del evento overow del registro contador del Timer. Para la
interrupt proxy
Operacin
initFunctions addFunction removeFunction config interrupt
Descripcin
Inicializa las funciones de callback. Recibe como parmetro una referencia a funcin. Agrega una funcin a la coleccin de callbacks a ser llamada al producirse una interrupcin. Recibe como parmetro una referencia a funcin. Remueve esa funcin de la coleccin de callbacks. Recibe parmetros necesarios para congurar el proxy . Congura el hardware del microcontrolador segn los parmetros recibidos. No recibe parmetros. Esta rutina es invocada desde el DynamicISR al producirse una interrupcin.
Cuadro 4.6: Interfaz de los
Interrupt Proxies.
La operacin
initFunctions
proxies
base rmware
modules
config
user
Al inicializarse, el
addFunction
user module
proxy.
4.2.
FIRMWARE
61
El
proxy
al ejecutar su operacin
as, entonces el
la funcin pasada como parmetro en su coleccin de funciones de callbacks. Un procedimiento anlogo sucede al invocarse la operacin entonces el
proxy
La operacin
interrupt es el anlogo al notify del patrn Observer y realiza las acciones que
dynamicISR.
se muestran en el algoritmo 5.
interrupt(): Si es la interrupcin esperada: Para cada funcin de callback F registrada en la coleccin Invoca F Apaga las banderas para la interrupcin procesada. Retorna
Otras operaciones pueden agregarse en caso de ser necesarias dadas las responsabilidades del por ejemplo, si se tratara de un
proxy,
una operacin de
send
proxy
user modules
polling proxies
son tiles cuando se quiere esperar por un evento realizando polling sobre
algn mdulo de hardware. Deben implementar una interfaz similar a la de los pero la gran diferencia es que los desde los
dynamic polling
polling proxies
user modules registrados para ese evento. El resto de las interacciones son anlogas a las interrupt proxy. Para la interaccin con el resto del base rmware, el polling proxy
polling,
interrupt
desde
Operacin
initFunctions addFunction removeFunction config polling
Descripcin
Inicializa las funciones de callback. Recibe como parmetro una referencia a funcin. Agrega una funcin a la coleccin de callbacks a ser llamada al producirse una interrupcin. Recibe como parmetro una referencia a funcin. Remueve esa funcin de la coleccin de callbacks. Recibe parmetros necesarios para congurar el proxy . Congura el hardware del microcontrolador segn los parmetros recibidos. No recibe parmetros. Esta rutina es invocada desde el DynamicPolling peridicamente.
Cuadro 4.7: Interfaz de los
Polling Proxies.
presentar algunos detalles referentes a su implementacin para explicar como se realiza la graba-
baseboard
baseboard
ware
USB4all rm-
de la memoria de programa, cuya nalidad es la de grabar un rmware dentro del microcontrolador que se transere desde el PC mediante USB. Este bootloader es grabado por nica vez en el
62
CAPTULO 4.
ARQUITECTURA EN EL BASEBOARD
microcontrolador utilizando un programador (por ejemplo MPLAB IDC2) mediante el conector RJ11 presente en el
Bootloader Bootloader.hex
Baseboard
(A travs de conn. RJ11)
baseboard
El
baseboard
normal. Para iniciarla en modo bootloader, se deber mantener apretado el pulsador bootloader luego de soltar el pulsador de reset. De otra forma el adquiriendo el control
USB4all rmware.
baseboard,
MPLAB C18
Compilador
Archivos Objeto
MPLINK linker
Archivos de salida
Aplicacin Bootloader en el PC
Transferencia del usb4all firmware a travs de un cable USB
Baseboard
(en modo bootloader)
USB4all rmware.
4.2.
FIRMWARE
63
El
C18 de Microchip. Para generar ste rmware es necesario utilizar un proyecto que se brinda a manera de template. Dentro del proyecto se encuentran todos los fuentes del deben agregar los y los
user modules
base rmware
y se
siguiente paso es compilar y linkeditar todos los fuentes, lo que da como resultado la generacin de un archivo .hex, que describe una imagen de memoria de programa que debe ser grabada en el microcontrolador. Finalmente esta imagen es transferida al microcontrolador, utilizando el bootloader. El proceso se muestra en la gura 4.9.
base rmware
de los componentes y para la conguracin de los descriptores USB se dividi la memoria de programa en regiones jas. En la gura 4.10 se muestra el mapa de memoria de programa del microcontrolador.
Bootloader
0000h 07FFh 0800h 0829h 082Ah 08FFh 0900h 0BFFh 0C00h 0C09h 0C10h 0CFFh 0D00h
Interrupt vector remapping USB init USB descriptors USB configuration descriptor pointers USB string descriptors pointers USB4ALL base firmware
7FFFh
baseboard.
La primer rea de memoria de programa es ocupada, como ya dijimos, por el cdigo del bootloader. Esta es la nica seccin del mapa de memoria impuesta debido a las facilidades que otorga el hardware para este cometido, para la dems reas fueron jadas tratando de maximizar el espacio para
rmware:
user modules
baseboard
En el modo Normal realiza un salto a la posicin de memoria 0x0800, donde se encuentra un nuevo salto al main loop del
base rmware.
interrupciones. Las direcciones de los nuevos vectores se hallan sumando un oset de 0x0800 a la direcciones predenidas en el hardware del microcontrolador. En el
modo Bootloader
64
CAPTULO 4.
ARQUITECTURA EN EL BASEBOARD
el
baseboard
USB4all rmware,
USB Init:
del microcontrolador destinados a la comunicacin USB. Se inicializan los registros de la memoria compartida del microcontrolador, indicando tamao y posicin de los buers de los endpoints, tipos de transferencia y direccin de la misma.
USB descriptors: Aqu se encuentran almacenados todos los descriptores USB utilizados
por el
baseboard.
interfaces, endpoints y string. Estn codicados segn las especicaciones del captulo 9 del estndar USB [15].
USB conguration descriptor pointers: Son punteros hacia posiciones especcas del
rea
USB descriptors.
base rmware
en el momento de la enumera-
cin del dispositivo. Incluyen cantidad de interfaces, consumo de energa, y dentro de las interfaces: cantidad de endpoints, cdigo de clase, de subclase, etc.
base rmware
en el momento de la enumeracin
del dispositivo. Incluyen strings, que son descripciones, normalmente en ingles del tipo de producto USB. Adems tambin son utilizados para contener un nmero de serie del
USB4all base rmware: En esta rea se almacena todo el cdigo correspondiente al base
rmware. rmware
User module table: En esta rea ja de memoria se ubica la tabla utilizada por el base
para encontrar las funciones de los
seccin 4.2.3.
Proxies init table: Tabla con punteros al cdigo de las operaciones init de los proxies.
Esta tabla es utilizada por el
base rmware
proxies.
modules
User Space:
y
proxies.
user
rmware
Provee de medios al base rmware para quedar desacoplado de las conguraciones USB y de la cantidad de user modules y proxies . Dado que el USB4all
dene donde comienza cada rea de memoria de programa, el
base rmware
pue-
de localizar el cdigo de las funciones o de los datos necesarios para la realizacin de su trabajo. Para el acceso a datos o a cdigo jo, su uso es directo, ya que conoce la direccin de inicio del rea y su estructura. Para el caso donde la cantidad de elementos almacenados es variable, como es el caso de los
user modules
proxies,
a las operaciones de cada uno de ellos. De esta manera, conociendo el inicio de la tabla y su estructura es posible recorrerla y ubicar las operaciones de cada uno. 2.
Permite la conguracin de los recursos USB del baseboard en instancias posteriores. Dado que el base rmware accede a las reas de inicializacin y descriptores USB
en posiciones de memoria jas, es posible modicar nicamente estas reas especcas para cambiar los recursos y propiedades USB asignados al todo el mecanismo.
baseboard sin necesidad de modicar USB4all rmware. En la seccin 8.3 se muestra una aplicacin que automatiza este
Captulo 5
Arquitectura en el PC
5.1. Introduccin
Como ya se mencion en la introduccin de la arquitectura de la solucin (ver el captulo 3), existen tres elementos en el PC: la biblioteca de clases Java, la
USB4all API
y los drivers
USB genricos. El primero de ellos permite el uso de la solucin por parte de las aplicaciones de usuario, el segundo se encarga entre otras cosas de las funcionalidades de comunicacin y gestin de los vnculos lgicos con los
user modules
del manejo fsico del puerto USB del PC. La gura 5.1 permite visualizar las dependencias que se dan entre estos tres elementos. Ade-
API
ms se observa que las aplicaciones de usuario pueden interactuar directamente con el o por intermedio de la biblioteca de clases (
USB4all Library ),
USB4all
existen distintas opciones de drivers USB genricos. Por un lado estn los drivers que corren completamente en modo protegido dentro del sistema operativo y por otro, los llamados drivers modo usuario que exponen sus funcionalidades por medio de bibliotecas a los programas de alto nivel. El resto de las secciones de este captulo estn destinadas a explicar en profundidad cada uno de los elementos que existen en el PC, comenzando por la
USB4all API.
65
66
CAPTULO 5.
ARQUITECTURA EN EL PC
5.2.
USB4all API
5.2.1. Introduccin
El pilar del lado del PC sobre el cual se edica una parte importante de las funcionalidades de la arquitectura es el subsistema
USB4all API
API ).
Dentro de todas
sus responsabilidades sobresale la de brindar a los programas de aplicacin (alto nivel) una interfaz nica y bien denida que les permita el manejo de el(los) dispositivo(s) electrnico(s) conectado(s) a el plataformas. Para cumplir con estas responsabilidades la o canales lgicos con el
baseboard
y por otro lado, la interaccin con los drivers USB de las distintas
API
encapsular y hacer transparente a los programas de aplicacin toda la complejidad de la comunicacin entre el PC y el Las principales caractersticas de calidad y funcionalidad son las siguientes: estn organizadas que se seleccionaron en el diseo de la
Facilidad de uso:
API
por parte
de los programas de aplicacin, se ofrece una interfaz pblica completa pero mnima en cuanto a la cantidad de primitivas que expone, comparable con las funcionalidades que ofrecen los sistemas operativos para el manejo de archivos a bajo nivel.
caciones y los drivers USB se necesita tener un alto grado de desacoplamiento entre los responsabilidades bien denidas. Adems algunos de los componentes de la
API, para ello se opt por un modelado en capas donde cada una tiene API mantienen una estrecha relacin con el USB4all rmware debido a que implementan los protocolos de comunicacin y como se vi en la seccin 4.2.1, los componentes del USB4all rmware
la
tambin estn organizados en capas, lo que rearma el enfoque tomado para el diseo de
API.
operativos) con un impacto menor en cuanto a su implementacin. Los escenarios de uso principales que se plantearon como objetivos en este proyecto de grado son las plataformas
baseboard
user modules
se
instrumentan por medio de vnculos lgicos bidirecionales. Cada uno de estos vnculos lgicos estn asociados a un nico par de endpoints del pues se busca optimizar la utilizacin de los recursos existentes en el la tecnologa USB.
este enfoque de vnculos, busca aprovechar los distintos tipos de transferencias que posee
baseboards
de la cantidad de dispositivos electrnicos que se pueden controlar al mismo tiempo por un nico programa de aplicacin.
API
y el
USB4all rmware
de programas de aplicacin y del rmware una herramienta para la vericacin de sus programas. Su implementacin respeta la restriccin de no afectar el desempeo del funcionamiento de la arquitectura y es por eso que el tipo de informacin que recolecta es reducido. Como una primera aproximacin al modelado de capas de la
API
Logic
Connection to USB.
Public Interface,
5.2.
USB4ALL API
67
API.
El subsistema
para que stos puedan establecer conexiones con el dispositivos electrnicos. El subsistema
Public Interface expone un conjunto de primitivas a los programas de aplicacin baseboard y as poder comunicarse con los Logic
es el responsable de establecer y administrar los vnculos lgicos que se
API
y el
Connection to USB
del PC de forma de ocultar todas las asimetras de las distintas plataformas y drivers USB para
Logic
Como lo muestra claramente la gura 5.2 estos subsistemas estn diseados siguiendo un modelo de capas en la cual la capa
Public Interface
Logic
establecer y administrar las conexiones, procesar los datos que se intercambian entre el ltimo la capa
baseboard
Connection to USB
baseboard
por
medio del puerto USB que maneja. Ahora analizaremos en profundidad cada uno de estos subsistemas para poder describir sus componentes, caractersticas y funcionalidades particulares as como sus puntos de contacto con el
base rmware
Public Interface
baseboard.
u4aAPI,
el
5.2.2.1. U4aAPI
Este componente est diseado siguiendo el patrn Singleton [22] para poder brindar un nico punto de acceso a la
API
entre los programas de aplicacin y el sistema. Como se ve en la tabla 5.1 la comunicacin con el
USB4all rmware
se resuelve bsicamente
por medio de cinco operaciones (las primeras en la tabla) muy simples e intuitivas, las cuales se asemejan mucho a las primitivas existentes en la mayora de los sistemas operativos para el manejo de archivos a bajo nivel. Por medio de estas cualidades del componente satisfacer la caracterstica de calidad facilidad de uso, buscada en el diseo de la
u4aAPI API.
se logra
leID
Modu-
como un identicador nico de cada uno de los vnculos lgicos que se establecen entre el
openDevice.
PC y un
user module
de un
68
CAPTULO 5.
ARQUITECTURA EN EL PC
Operacin
openDevice configDevice sendData receiveData closeDevice qtyBaseBoards getBaseBoardSerial qtyUserModules getUserModuleName resetBaseBoard initAPI apiVersion firmwareVersion
Descripcin
Crear un vnculo o canal lgico con un user module existente en el ubs4all rmware . Se utiliza para enviar al user module una conguracin inicial de las propiedades de los proxies que utiliza. Enva informacin al user module que se indica como destinatario. Verica si existe informacin enviada por el user module que se indica como emisor y la obtiene. Destruye el vnculo lgico con un user module y libera los recursos que utilizaba el canal. Devuelve la cantidad de baseboards conectados al PC. Dado un ndice i, obtiene el nmero de serie del i-simo baseboard conectado a el PC. Devuelve la cantidad de user modules presentes en un baseboard . Dado un ndice i, obtiene el nombre de i-simo user module presente en un baseboard . Indica al base rmware de un baseboard que debe cerrar todos los user modules activos. Inicializa la conexin con los baseboards conectados a el PC. Obtiene el nmero de versin de la API . Obtiene el nmero de versin del base rmware de un baseboard .
Cuadro 5.1: Interfaz del componente
u4aAPI.
handler que se explic en la seccin 4.2.2 pero distinto a la vez, moduleID que se utilizan en la API son el resultado de la combinacin de los nmeros de serie y los handler que se utilizan en el Base Firmware. Los nmeros de serie son identicadores nicos de los baseboards y son utilizados para reconocerlas, permitiendo de esta forma que la API pueda trabajar con varios de ellos al mismo tiempo.
Este concepto es similar al pues los Como ya se vi en la seccin 2.1.3, los nmeros de serie se almacenan en un descriptor bsico del tipo String, opcional en el estndar USB y que la arquitectura lo convierte en obligatorio para su adecuado funcionamiento. Para la correcta utilizacin de la operacin ros de series de los
baseboard
openDevice
getUserModuleName.
user module
nectados al puerto USB del PC, la segunda permite obtener el nmero de serie del
baseboard user modules existentes en un baseboard y obtener sus nombres segn su orden de registro en el base rmware. En la gura 5.3 se presenta un escenario hipottico de un PC con dos baseboards conectados
conectado en i-simo lugar. Las otras dos operaciones permiten consultar la cantidad de por medio del puerto USB y dos dispositivos electrnicos (antena y display) conectados cada uno a un
baseboard distinto, uno de ellos posee el nmero de serie 100 y tiene almacenados los user module de nombre Motor y Antena y el otro se identica con el nmero de serie 200 y posee los user module de nombre Display y Termmetro. Este ejemplo trata de explicar en forma visual como resuelve la API el problema de identicar
unvocamente cada uno de los vnculos lgicos que se crean desde el PC cuando existen varios
baseboards
las operaciones
permiten obtener la informacin necesaria para poder crear las conexiones con los las invocaciones de la operacin como resultado los
moduleID
openDevice
de los
user module
de distintos
1 y 2.
5.2.
USB4ALL API
69
USB
BaseBoard Antena
qtyBaseBoards() 2 getBaseBoardSerial(1) getBaseBoardSerial(2) Serial Number : 100
{100} {200}
{Motor} {Antena}
PC
USB
BaseBoard Display
Serial Number : 200
baseboards.
Operacin
Parmetros de entrada
Parmetros de salida
No
openDevice
configDevice
moduleID moduleID
de serie del baseboard Nombre del user module Tipo de envo Tipo de recepcin Conguracin a enviar Largo del dato Dato a enviar Largo del dato Tiempo mximo de envo
sendData
receiveData closeDevice qtyBaseBoards getBaseBoardSerial qtyUserModules getUserModuleName resetBaseBoard initAPI apiVersion firmwareVersion
moduleID moduleID
Entero Caracter Entero Entero Entero Caracter Entero Entero Caracter Entero Entero Entero
moduleID
Entero
xito
Lgico
xito
Lgico
Entero
Dato recibido Largo xito xito # baseboards No de serie # user modules Nombre user module Largo
No de serie del
Entero
Versin Versin
Entero Entero
u4aAPI.
70
CAPTULO 5.
ARQUITECTURA EN EL PC
La tabla 5.2 muestra los parmetros de entrada y de salida de las operaciones del componente
u4aAPI,
apiVersion
firmwareVersion
tienen
caracter nicamente informativo sobre las versiones de los subsistemas que componen la arquitectura mientras que las operaciones
getUserModuleName
de entrada el
baseboard
y de sus e
initAPI
y
user module.
(que explica-
remos ms adelante) son las destinadas a la comunicacin y debido a eso tienen como parmetro
moduleID
API
racin. Otra caracterstica destacable que poseen las primitivas ejecucin de la operacin. Por ltimo estn las operaciones mera permite noticarle a un la
sendData
receiveData
e
es la
posibilidad de indicar por medio de uno de sus parmetros un tiempo mximo (timeout) para la
baseboard
resetBaseBoard
user modules
initAPI,
la pri-
activos de forma
de simular una accin de reset fsica y la segunda se utiliza para inicializar los componentes de
API
y la forma en que interactan entre ellos y con los componentes de los subsistemas
Connection to USB.
5.2.3. Logic
El subsistema
Logic
API,
debido a que nuclea a la mayor parte de los componentes y adems es responsable de establecer y administrar los vnculos lgicos que se establecen con los constituye el objetivo principal de la
API.
baseboards
Sus componentes buscan satisfacer las caractersticas de diseo: modular y basado en capas, de forma de lograr un bajo acoplamiento y una alta cohesin de las funcionalidades, adems de permitir un fcil entendimiento de como funcionan en conjunto. Para alcanzar estos objetivos, el subsistema
HandlerLayer y CommandLayer que son las contrapartes en el PC de los componentes handler manager y admin module del base rmware del baseboard (ver secciones 4.2.2.1 y 4.2.2.2). Adems se encuentra el componente DescriptorLayer, que tiene como responsabilidad la interaccin con el subsistema connection to USB de forma de proveer a los componentes que implementan los protocolos de comunicacin la informacin de los descriptores USB y baseboards de una forma simple, dejando la mayor complejidad a las capaz inferiores de la API.
que dene la arquitectura por medio de dos componentes llamados
logic
Logic
CommandLayer y HandlerLayer son los enpublic interface para que este pueda
5.2.
USB4ALL API
71
cumplir con el servicio de comunicacin que ofrece a los programas de aplicacin y por otro lado el componente
descriptorlayer
connection to USB
handlerlayer.
commandlayer
La gura 5.5 muestra en forma resumida los principales elementos que constituyen el mo-
Application
baseboards.
handlerlayer to USB
user modules,
commandlayer
que se encargan del manejo de los mensajes por medio de los protocolos de comuni-
cacin que dene la arquitectura (ver seccin 6.1). La siguiente capa es el subsistema tintas plataformas y por ltimo, se encuentra la capa
connection
que permite la estandarizacin del acceso a los drivers USB que se existen en las dis-
USB Media
puertos USB de la PC. A continuacin se analizan las caractersticas ms importantes as como sus funcionalidades especcas de cada uno de los componentes que constituyen el subsistema
logic.
5.2.3.1. HandlerLayer
integra el
handlerlayer es la contraparte en el PC del componente handler manager que base rmware y al igual que ste, es el responsable del envo y recepcin de los mensajes que se intercambian los programas de aplicacin y los user modules. Para cumplir con dicha tarea implementa el handler protocol denido en la arquitectura y se encarga del almacenamiento de los vnculos lgicos que se establecen con los baseboards. El handlerlayer dene las interfaces iHandlerLayer e iAdminHandlerLayer para ofrecer sus funcionalidades, la primera se expone al subsistema public interface (componente u4aAPI ) que
El componente la utiliza para la recepcin y envo de datos mientras que la segunda que extiende la interfaz
ihandlerlayer se expone al componente commandlayer base rmware como se estudiara en la prxima seccin.
handlerlayer,
as como
son sus relaciones y quien de ellas implementa las interfaces que dene el componente.
72
CAPTULO 5.
ARQUITECTURA EN EL PC
HandlerLayer.
A continuacin para cada una de estas clases se explicarn sus caractersticas principales y se describirn sus operaciones.
ModuleManager
las interfaces
La clase
ModuleManager
de todo el componente y de esa forma permitir el trco de mensajes as como la persistencia de los vnculos lgicos. A causa de esa responsabilidad es la clase encargada de implementar
ihandlerlayer e iadminhandlerlayer para ofrecer a los componentes u4aAPI commandlayer las funcionalidades que requieren para su funcionamiento.
Operacin
send
Descripcin
Enva al user module identicado por el moduleID pasado por parmetro un dato. Opcionalmente se puede indicar por parmetro un tiempo mximo de ejecucin (timeout). Recibe un dato del user module identicado por el moduleID pasado por parmetro. Opcionalmente se puede indicar por parmetro un tiempo mximo de espera (timeout). Enva al user module identicado por el moduleID pasado por parmetro un dato para que pueda congurarse.
Cuadro 5.3: Operaciones de la interfaz
receive
configure
iHandlerLayer
send y receive que permiten el trco de mensajes y al igual que las operaciones homlogas del
componente para el envo o recepcin de mensajes y por ltimo se encuentra la operacin permite enviar informacin a un
ihandlerlayer
u4aAPI. Tambin aceptan parmetros para indicar los tiempos mximos aceptados user module
configure
que para que este pueda congurarse.
iadminhandlerlayer, que se descriptorlayer (getU4ABoards, requestDscIn, requestDscOut) pues consultan informacin de los descriptores USB y de los baseboards, las relacionadas con la clase modulemap (registerModule, existsModule, unregisterModule,
El cuadro 5.4 en cambio, muestra las operaciones de la interfaz pueden agrupar en tres grupos: las relacionadas con el componente
de la informacin de los vnculos lgicos que se almacenan en ella y por ltimo las operacio-
configure
send, receive
5.2.
USB4ALL API
73
Operacin
getU4ABoards requestEpIn requestEpOut registerModule unregisterModule unregisterAllModule existsModule getSerialNumber getHandlerID buildModuleID
Descripcin
Obtiene la lista de nmeros de serie de los baseboards conectados a el PC. Solicita un nmero de endpoint que utilice un tipo de transferencia particular que permita la recepcin de datos de un baseboard dado. Solicita un nmero de endpoint que utilice un tipo de transferencia particular que permita el envo de datos a un baseboard dado. Registra un vnculo lgico. Desregistra un vnculo lgico. Desregistra todos los vnculo lgico registrados. Consulta si ya est registrado o no un vnculo lgico (moduleID ). Devuelve el nmero de serie asociado al vnculo lgico identicado por un moduleID pasado por parmetro. Devuelve el handler asociado al vnculo lgico identicado por un moduleID pasado por parmetro. Construye un moduleID utilizando un nmero de serie de un baseboard y un handler de un user module .
iAdminHandlerLayer.
HandlerPackager
protocol
y
La clase
HandlerPackager
handler
(ver seccin 6.1.1) y debido a sto ser encarga del empaquetado y desempaquetado de
los mensajes que llegan al componente por medio de sus dos nicas operaciones
unbuildPackage
buildPackage
Operacin
buildPackage
Descripcin
Empaqueta segn indica el handler protocol un conjunto de datos pasados como parmetro en un estructurado que dene la arquitectura (hndPackage). Dado un mensaje del handler protocol desempaqueta su contenido y lo devuelve en un estructurado que dene la arquitectura (hndPackageResponse).
Cuadro 5.5: Interfaz de la clase
unbuildPackage
HandlerPackager.
ModuleMap
recibir datos, el de cada vnculo
La clase
Map y se moduleID, los endpoints USB asignados para enviar y nmero de serie del baseboard y el handler asignado por el base rmware ) lgico que se crea en la API. La clave del Map son los valores moduleID y
implementa el tipo abstracto de datos (TAD)
ModuleMap
su implementacin fue pensada para evitar la duplicacin de claves de forma de garantizar que la informacin de cada vnculo lgico sea almacenada una nica vez. Como muestra el cuadro 5.6 las operaciones de la clase son las tpicas del TAD, con la salvedad de que no existe una nica operacin (getEndpointSend,
getEndpointRecv, getSerial
get
Map
getHandler)
Map
moduleID.
74
CAPTULO 5.
ARQUITECTURA EN EL PC
Operacin
add
Descripcin
Crea una nueva entrada en el Map utilizando el parmetro moduleID como clave y como valores asociado los nmeros de endpoints asignados para la comunicacin, el nmero de serie del baseboard y el handler del user module . Elimina del Map la entrada con clave igual al valor moduleID pasado como parmetro. Consulta si el moduleID pasado como parmetro ya existe o no en el Map. Consulta si el Map posee alguna entrada creada o si est vaco. Devuelve la cantidad de entradas que almacena el Map. Devuelve el moduleID ubicado en la i-sima posicin del Map. Devuelve el nmero de endpoint para envo de datos asociado al moduleID pasado como parmetro. Devuelve el nmero de endpoint de recepcin de datos asociado al moduleID pasado como parmetro. Devuelve el nmero de serie del baseboard asociado al moduleID pasado como parmetro. Devuelve el handler del base rmware asociado al moduleID pasado como parmetro.
Cuadro 5.6: Interfaz de la clase
ModuleMap
5.2.3.2. CommandLayer
Otro de los componentes que forman parte del subsistema contraparte en el PC del componente el
admin module
Admin Protocol
El
logic es el commandlayer, que es la base rmware. Su responsabilidad ms existen en la API y para ello implementa
del que expone al componente
OPEN, CLOSE, etc. Por ms detalles de este protocolo ver la seccin 6.1.2.
interfaz
iCommandLayer
u4aAPI
user modules.
CommandLayer.
Como muestra la gura 5.7 el componente commandlayer est compuesto por la clase CommandManager que se encarga de implementar la lgica para la gestin de los vnculos lgicos y por la clase CommandPackager que se ocupa del empaquetado y desempaquetado de los mensajes que se intercambian entre el PC y el baseboard al establecerse o eliminarse las conexiones. A continuacin se describen las operaciones y caractersticas principales de estas dos clases as como de la implementacin de la interfaz
icommandlayer.
5.2.
USB4ALL API
75
CommandManager
componente
iadminhandlerlayer para poder realizar las tareas de enviar admin protocol y poder almacenar la informacin asociada los vnculo lgicos que se establecen en la API.
u4aAPI
icommandlayer
que expone al y a
para que esta pueda ofrecer sus funcionalidades a las programas de aplica-
Operacin
open
Descripcin
Crea un vnculo lgico con un user module de un baseboard . Recibe como parmetros el nombre del user module , los tipos de transferencias de envo y recepcin de datos y el nmero de serie del baseboard y devuelve como identicador del vnculo un moduleID . Destruye el vnculo lgico identicado por el moduleID pasado como parmetro y libera los recursos utilizados por la conexin. Obtiene los nmeros de serie de los baseboard conectados a el PC. Devuelve los nombres de los user modules existentes en el baseboard que se identica por el nmero de serie pasado como parmetro. Indica al baseboard que se identica por el nmero de serie pasado por parmetro que debe destruir todos los vnculos lgicos activos en l. Devuelve el nmero de versin del subsistema base rmware del baseboard conectado a el PC que se identica por el nmero de serie pasado como parmetro. Devuelve el nmero de versin del sistema API .
getApiVersion
iCommandLayer
icommandlayer
open
close
y
para la creacin y destruccin de vnculos lgicos. Para poder utilizar correctamente la operacin
open
getModules.
nombres de los
user module
baseboard
baseboard
reset
getBoards
baseboard.
CommandPackager
La clase CommandPackager se especializa en el conocimiento del admin protocol y debido a sto se encarga del empaquetado y desempaquetado de los mensajes que llegan al componente por medio de sus dos nicas operaciones se explica en la gura 5.8.
Operacin
buildPackage unbuildPackage
Descripcin
Empaqueta segn indica el admin protocol un conjunto de datos pasados como parmetro en un estructurado que dene la arquitectura (CommPackage). Dado un mensaje del admin protocol desempaqueta su contenido y lo devuelve en un estructurado que la arquitectura (CommPackageResponse).
Cuadro 5.8: Interfaz de la clase
CommandPackager.
76
CAPTULO 5.
ARQUITECTURA EN EL PC
5.2.3.3. DescriptorLayer
El ltimo elemento que integra el subsistema criptores de los sable de la
logic
es el componente
DescriptorLayer.
Sus
principales obligaciones son: el procesamiento y almacenamiento de la informacin de los desnmeros de serie de los
baseboards conectados a el PC, el almacenamiento de las vinculaciones de los baseboards con los identicadores de instancia1 y por ltimo ser responconexin entre los subsistemas logic y connection to USB de forma de permitir el descriptorlayer
dene la interfaz para permitirle el intercambio de mensajes con los
iDescriptorLayer que expone al componente user modules y la solicitud de los nmeros de descriptores existentes en los baseboards que cumplen con un tipo de transferencia dado. Para poder brindar los servicios anteriormente mencionados utiliza la interfaz iDriverLayer perteneciente al subsistema connection to USB para poder enviar y recibir mensajes del puerto handlerlayer
El componente USB y obtener la informacin sin procesar de los descriptores USB (formato estndar [5]) de los
baseboards
DescriptorManager
DescriptorManager
para brindar los servicios de mensajera (envo y recepcin) y consulta de los descriptores USB
baseboards
al componente
iDriverLayer
handlerlayer.
del subsistema
permiten comunicarse con el medio USB como veremos en la prxima seccin. Para el almacenamiento de la informacin procesada de los descriptores USB de los una implementacin genrica del
baseboards
as como de las
vinculaciones de sus nmeros de serie con los identicadores de bajo nivel (instancia) se utiliza
TAD Map.
DescriptorLayer.
lerlayer
La operaciones
send y receive ocian de pasarela para sus homlogas del componente hand-
existencias es que permite aislar los componentes que implementan los protocolos de comunicacin de los que manejan el medio USB de forma de lograr un mayor grado de generalidad. El resto de las operaciones que dene la interfaz cin de los
baseboards
conectados al PC (getU4ABoards y
idescriptorlayer
endpoints activos de cada uno de ellos que participan en la comunicacin entre los y los programas de aplicacin (requestDscIn, de los subsistema en que est dividido el
user modules
prxima seccin se analizar en detalle el conjunto de componentes que forman parte del ltimo
1 Los identicadores de instancias son elementos utilizados en el subsistema reconocer los baseboards a bajo nivel.
connection to USB
para poder
5.2.
USB4ALL API
77
Operacin
send
Descripcin
Enva un paquete de datos al subsistema connection to USB pasando como parmetros: el nmero de serie del baseboard as como el nmero de descriptor USB que debe utilizar para el envo. Recibe un paquete de datos del subsistema connection to USB pasando como parmetros: el nmero de serie del baseboard as como el nmero de descriptor USB que debe utilizar para la recepcin. Devuelve una lista con los nmeros de serie de los baseboards conectados al PC. Solicita un nmero de descriptor USB de recepcin del tipo de transferencia indicado y del baseboard que se identica con el nmero de serie pasado por parmetro. Solicita un nmero de descriptor USB de envo del tipo de transferencia indicado y del baseboard que se identica con el nmero de serie pasado por parmetro. Libera un nmero de descriptor USB de recepcin previamente solicitado. Libera un nmero de descriptor USB de envo previamente solicitado. Devuelve el identicador de instancia que est asociado al nmero de serie pasado como parmetro.
Cuadro 5.9: Operaciones de la interfaz
receive
getU4ABoards requestDscIn
requestDscOut
iDescriptorLayer
Connection to USB
PlatformLayer
Para cumplir con estas dos obligaciones el subsistema dene los componentes
DriverLayer
como se observa en la gura 5.9, el primero se encarga del manejo del driver
USB genrico y el segundo posee la lgica para interactuar con el sistema operativo con el n de obtener los descriptores de los
una estructura lo ms modular posible de forma de facilitar la extensibilidad de la solucin. Para ms detalles del porqu de esta separacin de funcionalidades leer la seccin 7.3.
Connection to USB.
En las siguientes secciones se describen las principales caractersticas y funcionalidades de los componentes
driverlayer
platformlayer.
78
CAPTULO 5.
ARQUITECTURA EN EL PC
5.2.4.1. DriverLayer
El componente
driverlayer
taciones de drivers USB genrico que se pueden utilizar como parte de la solucin. Adems, es el responsable de interactuar con el componente el componente del paquetes que intercambian los programas de aplicacin y los
driverlayer,
dene la interfaz
descriptorlayer para la recepcin y envo de user modules. Para sto ltimo iDriverLayer que expone al descriptorlayer para
permitirle entre otras cosas, la creacin y destruccin de las conexiones fsicas con los endpoints
baseboards
te es que fue diseado para establecer conexiones fsicas con endpoints en forma individual y no a nivel de todo el dispositivo. sto se debe principalmente, a que existen drivers genricos que funcionan con un enfoque de manejo de todo el dispositivo y otros en los que es necesario instanciar la conexin para cada endpoint en forma independiente. La decisin de implementar ste componente con el enfoque de conexin a endpoints individuales no constituye una limitante, pues para los drivers que funcionan con el enfoque de manejo del todo el dispositivo, se puede implementar la lgica necesaria para simular las conexiones con los endpoints en forma individual.
Operacin
getU4ABoards qtyDsc getEndpointDsc openIn openOut close sendInt sendCtrl sendIso sendBulk receiveInt receiveCtrl receiveIso receiveBulk
Descripcin
Devuelve una lista con los nmeros de serie de los baseboards conectados al PC. Devuelve la cantidad de descriptores que posee un baseboard dado. Devuelve la informacin bsica (nmero, tipo y tipo transferencia) del i-simo endpoint de un baseboard . Establece la conexin con un endpoint (entrante o saliente) del tipo de transferencia adecuado de un baseboard y devuelve un identicador nico de la conexin. Cierra la conexin con un endpoint de un baseboard por medio de su identicador. Enva un paquete de datos a un baseboard a travs de un endpoint (del tipo del transferencia adecuado) asociado al identicador de una conexin. Recibe un paquete de datos de un baseboard a travs de un endpoint (del tipo de transferencia adecuado) asociado al identicador de una conexin.
iDriverLayer.
En el cuadro 5.10 se muestra el conjunto de operaciones que denen la interfaz las operaciones de los
baseboards
idriverlayer,
Esta informacin es obtenida del componente seccin) y es utilizada por el componente los endpoints de los distintos
platformlayer (como veremos en la prxima subdescriptorlayer para la creacin de las conexiones con baseboards durante la etapa de inicializacin de la USB4all API.
openIn, openOut, close
y los juegos de operaciones (nmero de series y junto con la informacin de los
send
los
receive
lizadas por el
descriptorlayer
para cada uno de los tipos de transferencias USB. Estas operaciones son uti-
baseboards
descriptores) para gestionar las conexiones fsicas que permiten la comunicacin entre el PC y
baseboards.
En el contexto de este proyecto se utilizaron distintas implementaciones de drivers genricos como son: el facilitado por el fabricante Microchip, los drivers modo usuario LibUSb y LibUSBWin32 [25] y el driver construido especialmente para la plataforma Linux y para cada una de ellos se implement una clase particular en C++ que implementa la interfaz genricos y sumado a las caractersticas del componente
idriverlayer.
Con
platformlayer
5.2.
USB4ALL API
79
lante), se logra satisfacer la caracterstica de funcionalidad de portabilidad que era uno de los objetivos buscados en el diseo de la
API.
5.2.4.2. PlatformLayer
Su misin es encapsular toda la lgica necesaria para la interaccin con las distintas plataformas en que ejecuta la
API
baseboards
conectados al PC y obtener
la informacin de sus descriptores. Este componente dene la interfaz utilizada por el componente
driverlayer
findDevices y getDescriptors.
La primera se encarga de interactuar con el sistema operativo para detectar los rica del
descriptores y generar una coleccin con dicha informacin (se utiliza un implementacin gen-
TAD
ap)
baseboards
driverlayer
pues la
API
Operacin
findDevices getDescriptors
Descripcin
Busca la existencia de baseboard conectados al PC y obtiene la informacin de sus descriptores. Devuelve una coleccin con los juegos de descriptores de cada uno de los baseboards detectados.
Cuadro 5.11: Operaciones de la interfaz
iPlatformLayer.
Este componente es fundamental para poder satisfacer la caracterstica de portabilidad buscada en el diseo de la
API.
iplatformlayer
API
por
para distintas
plataformas. Adems permite reutilizarlo cuando cambian las implementaciones del componen-
driverlayer
platformlayer
5.2.5. Log
Una de las caractersticas seleccionadas para el diseo de la y los
API
sus funcionalidades un registro del trco de paquetes que se da entre las aplicaciones de usuario
baseboards
Log,
que implementa el patrn de diseo Singleton y que permite ir almacenando en un archivo de texto de nombre
u4aapi.log
printLog
printLogLn
que permiten
escribir en una lnea un mensaje y ingresar un smbolo salto de lnea en el archivo de texto. Como parte del formato que sigue el contenido del archivo de texto todas las lneas comienza con el da-hora en que se ingresa al archivo cada lnea y a continuacin el texto deseado. Este componente no pertenece a ninguno de los subsistemas previamente descritos en esta seccin, pues no participa de la funcin principal de la
API
que realiza una tarea secundaria que permite la generacin de una base de informacin histrica de la interaccin con los dispositivos que facilita la depuracin y deteccin de errores en la comunicacin.
80
CAPTULO 5.
ARQUITECTURA EN EL PC
5.3.
USB4all Library
La programacin orientada a objetos es uno de los paradigmas de mayor aceptacin en la actualidad, y consiste en utilizar objetos y sus interacciones para disear aplicaciones y programas de computadora. A nes de facilitar el uso de la solucin lidades de la al usuario de poder utilizar libreras orientadas a objetos en donde se encapsulan las funciona-
USB4all API
orientados a objetos, entre los que se destacan C++, Java, Python, VB.NET, C#.NET, etc. Algunas diferencias importantes a la hora de la implementacin entre los lenguajes, son el manejo de la memoria (ej: garbage collector), la posibilidad de herencia mltiple y si el cdigo generado es nativo o corre mediante una maquina virtual o con compilacin JIT. De todas formas el diseo utilizado puede servir como modelo para portar a otros lenguajes las funcionalidades implementadas. En el contexto de este proyecto se presenta una librera que permita un uso orientado a objetos y a la vez sirva de ejemplo de utilizacin de un lenguaje de programacin distinto al que fue realizada la
USB4all API.
posibilidad de utilizacin de esta librera tanto en entorno Windows como Linux, de manera que las aplicaciones construidas sobre sta sean transparentes al sistema operativo utilizado. Considerando las alternativas existentes fue seleccionada la opcin de Java, que cuenta con las ventajas de ser gratuito, multi-plataforma y de uso extendido. Como contraparte, ste lenguaje utiliza una maquina virtual para la ejecucin de las aplicaciones, por lo que genera algunas dicultades para la programacin en bajo nivel y para la utilizacin de libreras de vnculo dinmico (Dynamic Link Library) (DLL) como lo es la programacin como C++, la interaccin con la
USB4all API. En otros lenguajes de USB4all API sera directa, pero en Java vale la
pena ahondar un poco ms en esta interaccin. Java brinda un mecanismo para la ejecucin de operaciones en libreras de vinculacin dinmica llamado JNI el cual est poco documentado, hay pocos ejemplos disponibles y es necesario compilar ciertos componentes en lenguaje C o C++. En su lugar se decidi utilizar JNative que es un proyecto open source que simplica el uso de libreras de vinculacin dinmica y a su vez encapsula las diferencias de estas entre los distintos sistemas operativos utilizados. La otra decisin de diseo tomada, fue realizar en un componente separado, un envoltorio (Wrapper) de la
USB4all API
los clientes de la misma en Java. Todas las operaciones tienen los mismos nombres y argumentos
API,
slo dieren algunas de las rmas debido a que en Java no es posible utilizar
parmetros de tipos de datos simples pasados por referencia (no son clases) de una funcin como argumentos de salida, como si lo es en C++.
En la gura 5.10 se muestra la interaccin entre los distintos componentes y dependencias entre las aplicaciones que utilizan la
USB4all Library.
5.3.
USB4ALL LIBRARY
81
diente
USB4allAPIWrapper
USB4all Library
USB4all API
como la
baseboard.
BaseboardFactory, Usb4allBaseboard y USB4allDevice y representan una abstraccin de los conceptos fundamentales del USB4all System. La clase USB4allBaseboard es el representante en software de la pieza de hardware baseboard y encapsula las funcionalidades de inicializacin, y obtencin de informacin
edicar aplicaciones de manera intuitiva, guiada y sencilla. Estas clases son: del mismo. Este objeto implementa una mquina de estados que ja las operaciones que pueden realizase en cada instante. Es muy simple y slo posee dos estados que se ilustran en la gura 5.12 a la izquierda. Es importante destacar que slo luego de la operacin ware queda ligado con un
En la gura 5.11 se muestra en detalle las tres clases fundamentales, sobre las cuales es posible
baseboard
en el objeto impactan el estado del hardware. Otra caracterstica importante es que al efectuar alguna operacin no permitida en la mquina de estados o cualquier otro error contemplado en la arquitectura (no existencia de
user module,
82
CAPTULO 5.
ARQUITECTURA EN EL PC
Figura 5.12: Diagrama de estados que ocurren dentro de las instancias de baseboard y device
A continuacin se muestra un cuadro con una breve descripcin de las operaciones de esta clase:
Operacin
init release
Descripcin
Inicializa el baseboard y realiza el cierre de todos los user modules abiertos. Libera los recursos utilizados, realiza el cierre de todos los user modules abiertos y desasocia todos los objetos USB4allDevices, devolvindolos a su estado inicial. Asocia un device a este USB4allBaseboard . Desasocia un USB4allDevice del USB4allBaseboard . Obtiene una lista de los nombres de los user modules existentes en este baseboard . Obtiene una lista de los nombres de los proxies existentes en este baseboard . Obtiene la versin del base rmware de este baseboard. Setea el nmero de serie del baseboard a utilizar. Obtiene el nmero de serie del baseboard a utilizar.
USB4allBaseboard.
al
baseboard
USB4allDevice que es el representante del dispositivo conectado user module especco para esta tarea. Esta clase user module
a utilizar, as como tambin las
es abstracta, y las clases que la extienden son las que denen los datos particulares a utilizar, como lo son el tipo de transferencia y nombre del principalmente en implementar el operaciones propias del dispositivo a interactuar. Aqu el trabajo del desarrollador se concentra
user protocol,
send
la cual se ilustrada en la gura 5.12 en la parte derecha, de forma de ordenar su utilizacin y tambin utiliza el mecanismo de excepciones para noticar cualquier condicin de error. En la tabla 5.13 se muestran las operaciones de esta clase junto con una breve descripcin:
5.3.
USB4ALL LIBRARY
83
Operacin
setBoard init release send receive
Descripcin
Setea el USB4allBaseboard al cual asociarse (con el baseboard en el cual se quiere comunicar). Realiza la apertura del user module especco para este dispositivo. Realiza el cierre del user module. Enva datos al user module . Recibe datos del user module.
Cuadro 5.13: Operaciones de la clase abstracta
USB4allDevice
BaseBoardFactory
Singleton y es utilizado para facilitar la instanciacin e inicializacin de los y sus operaciones se muestran en la tabla 5.14.
USB4allBaseboards
Operacin
getBaseboards getBoardsSerialNumbers getBaseboardBySerialNum
Descripcin
Devuelve una coleccin de los USB4allBaseboard correspondientes a cada uno de los baseboards conectados al PC. Devuelve una coleccin de los nmeros de serie de los baseboards conectados al PC. Devuelve una instancia del USB4allBaseboard correspondiente a un nmero de serie dado.
USB4allDevice
USB4allLibrary
ir extendiendo la biblioteca. Como parte de este proyecto se crearon un conjunto de clases de dispositivos especcos: un sensor de temperatura, un motor paso a paso y un display 7 segmentos de forma de dar ejemplos concretos de implementacin. En la gura 5.13 se muestra un diagrama de secuencia tpico para el uso de un dispositivo desde la aplicacin de usuario.
UserApplication
Singleton BaseboardFactory
: Usb4allBaseboard
TemperatureSensor1
1: baseboards:=getBaseboards()
A travz de usb4allApiWrapper obtiene los numeros de serie de los baseboards conectados al PC que es 1 en este caso 1.1*: Usb4allBaseboard(nroSerieN) 1.2*: init()
2 [size(baseboards)>0]: TemperatureSensor() 3 [size(baseboards)>0]: setBoard(baseboards[0]) 4 [size(baseboards)>0]: init() 5* [size(baseboards)>0]: temp:=getTemp() 6 [size(baseboards)>0]: release()
getTemp
La clase
TemperatureSensor
USB4allDevice
y le agrega la funcin
84
CAPTULO 5.
ARQUITECTURA EN EL PC
Para implementar esta funcin se utilizan los implementa el protocolo de comunicacin con el el
baseboard.
user module
send
receive
Lo primero que debe realizar la aplicacin de usuario, es obtener los al PC, y para ello invoca la funcin
boardFactory
e interacta con la
USB4allBaseboards. Luego con el nmero de secuencia de 2 y si USB4allBaseboards no es vaca, la aplicacin crea un objeto de la clase TemperatureSensor. Se recuerda que en la clase TemperatureSensor estn denidos los tipos de transferencia, as como el nombre del user module a utilizar por defecto. En los pasos 3 y 4 se enva el USB4allBaseboard en el cual se utilizar el user module correspondiente al sensor
coleccin de objetos de la clase la coleccin devuelta de de temperatura, y se inicializa el mismo, mediante las operaciones veces que sea necesaria la temperatura mediante la operacin implementada en la clase abstracta
baseboards
USB4all API
getBoards.
(a travs del
baseboards
conectados
setBoard
init
respecti-
vamente. A partir de este momento se encuentra todo preparado como para poder obtener las
getTemp.
Finalmente cuando no
USB4all API.
5.4.
USB4allDevice
handler
release que
es
asociado en la
El driver desarrollado es genrico, esto implica que no est diseado para ninguna de las clases de la jerarqua especca de dispositivos USB, sino que tiene como objetivo soportar todos los tipos de transferencias (Control, Bulk, Interrupt e Isochronous) as como el mximo nmero de endpoints (32) en forma abierta sin implementacin de lgica para un dispositivo particular. Dado que la
USB4all API
nicacin que dene la solucin lleva a que el driver slo sea responsable de la comunicacin e intercambio de informacin de las caractersticas del dispositivo (nmero de serie, descriptores) as como del intercambio de datos. Esta caracterstica de la solucin permite reutilizar el cdigo que implementan los protocolos de comunicacin y evita tener que implementarlos directamente en el driver, ya que son diciles de depurar (ejecutan en modo ncleo). Adems otro de los benecios que trae el no incluir la lgica de los protocolos en los drivers, es que se pueden sustituir por distintas implementaciones o incluso cambiar la plataforma que se utiliza con un impacto mnimo en la solucin. La implementacin del proyecto comenz utilizando el driver genrico que ofrece gratuitamente el fabricante del microcontrolador (Microchip) pues se ya se haba utilizado en las pruebas del mismo durante el relevamiento del estado del arte. La utilizacin de este driver como parte de la solucin no permite satisfacer totalmente los objetivos planteados, pues slo funciona en la plataforma Windows y no en Linux, por lo tanto se tuvo que buscar alguna otra opcin para hacer funcionar el dispositivo bajo ste sistema operativo. Una de las opciones era enumerarse como alguna clase denida para la cual Linux implemente un driver, como ser HID o CDC, pero si se toma esta opcin se termina atado a determinado tipo de transferencia y cantidad de endpoints (los denidos por las interfaces) lo cual es algo que se pretende evitar dado que uno de los principales objetivos del proyecto es que la solucin debe ser lo ms genrica posible. La siguiente opcin fue utilizar LibUSB [25] la cual pareca una muy buena opcin ya que contaba con implementaciones para diferentes sistemas operativos (Linux, FreeBSD, NetBSD, OpenBSD, Darwin, MacOS X, Windows). Se realizaron pruebas con LibUSB y se lograron buenos resultados pero slo permita utilizar tipos de transferencias de control y bulk y no transferencias interrupt e isochronous ni tampoco transferencias asincrnicas. Dado que la ltima versin estable es de hace varios aos, nos hizo suponer que el proyecto haba sido abandonado, por lo tanto se decidi investigar la posibilidad de realizar un driver propio el cual fue desarrollado como un mdulo del kernel de Linux. Para la realizacin del driver se tomaron las siguientes decisiones:
Un le (/dev/usb4all<instancia>) por baseboard conectado: La otra opcin manejada fue tener un le por endpoint el cual simplicaba las transferencias a diferentes endpoints pero diculta el intercambio de descriptores, ya que no se cuenta con un nico punto de acceso. Adems, para el usuario siempre sera ms difcil contar la cantidad de
5.4.
85
les existentes que pedir a un nico punto de acceso toda la informacin del dispositivo en estructuras de datos claras, as como simplicar la interaccin del driver genrico con la
USB4all API.
USB4all API )
pueden resolverse a partir de un conjunto de primitivas bsicas exportadas por el driver. De esta manera se puede extender con mayor facilidad y permite depurar con todas las ventajas que se cuentan en el modo usuario. El driver se comunica con las aplicaciones que corren en modo usuario para el intercambio de informacin del dispositivo mediante llamadas IOCTL [9], las cuales implementan un conjunto de primitivas descriptas en la tabla 5.15.
Operacin
GET_DEVICE_DESCRIPTOR GET_ENDPOINT_DESCRIPTOR GET_INTERFACE_DESCRIPTOR GET_CONFIGURATION_DESCRIPTOR GET_STRING_DESCRIPTOR SET_DESC_INDEX SET_IN_ENDPOINT SET_OUT_ENDPOINT SET_TRANSFER_TYPE SET_TIMEOUT
Descripcin
Devuelve el descriptor de dispositivo. Devuelve el descriptor de endpoint. Devuelve el descriptor de interfaz. Devuelve el descriptor de conguracin. Devuelve el string descriptor. Setea un ndice utilizado para obtener un descriptor determinado de los tipos que poseen F de uno por tipo. Setea la direccin del endpoint in a utilizar. Setea la direccin del endpoint out a utilizar. Setea un tipo de transferencia a utilizar. Setea un tiempo de espera mximo para la llegada de los datos.
USB4all API
get
que tipo de endpoint utilizar o la informacin de la instancia particular como por ejemplo el nmero de serie. Por medio de las operaciones de tipo
set
User fd = open(/dev/usb4all0)
Driver
86
CAPTULO 5.
ARQUITECTURA EN EL PC
Se implement siguiendo el framework para desarrollo de drivers USB que el kernel implementa [9, 19]. Como podemos ver en la gura 5.14 el primer paso para interactuar con el driver es realizar una llamada open sobre el le denido para el de interfaz asociado al dispositivo
baseboard
se poseen y se puede pasar a obtener sus descriptores como se muestra en el recuadro de la gura. Una vez obtenidos los descriptores de endpoints se cuenta con la informacin para poder setear que endpoint de entrada y salida se va a utilizar. Finalmente el driver se encuentra en un estado donde es posible comenzar a escribir y leer del endpoint seteado mediante las llamadas al sistema read y write. Existen variantes de este caso de uso donde se obtienen otros descriptores como el de device para determinar el nmero de serie del
baseboard
por ejemplo.
Captulo 6
Comunicacin
En este captulo se explica en detalle los protocolos de comunicacin que dene al arquitectura de software y la interaccin entre los componentes del
USB4all API
USB4all rmware.
Se
busca la comprensin por parte del lector de como son los pasos que suceden internamente en la solucin al momento de ejecutar las operaciones que brinda la
USB4all API
a las aplicaciones.
6.1.
Protocolo de Comunicacin
Se deni un stack de protocolos organizado segn las capas que intervienen en la comunicacin entre el llamada
USB4all API
y el
componentes de cada subsistema mediante lineas horizontales en la gura 6.1. La capa inferior
comunicarse, esta capa implementa el medio por el cual se comunica fsicamente el PC con el
USB4all.
da hacia los
Addressing layer se encarga de aspectos de direccionamiento de la informacin dirigiuser modules permitiendo que la informacin enviada por una aplicacin con destino un user module pueda llegar a ste. Esta tarea es de suma importancia ya que los user modules
La capa 87
88
CAPTULO 6.
COMUNICACIN
user modules
simultaneamente ejecutando en el
baseboard.
Por
lo tanto se debe contar con un mecanismo que permita encaminar correctamente a los paquetes que se envan desde el PC. El protocolo que implementa esta clase fue llamado y es el que permite la comunicacin entre el
handler protocol handler layer y el handler manager, su payload son paquetes denidos por uno de los protocolos de la capa Application layer (user protocol admin protocol) dependiendo cual sea el destinatario de la informacin. Esto es transparente para el protocolo, ya que el admin module fue implementado como un user module, por ms informacin
acerca de esta decisin puede consultarse la seccin 7.2. Luego tenemos la capa
Application layer, la cual dene dos protocolos, el user protocol que user modules, siendo un protocolo abierto1 para que el usuario dena como va a ser la interaccin entre la aplicacin y el user module que controla un dispositivo o caracterstica del hardware. El admin protocol en cambio tiene como nalidad realizar la gestin de los user modules. Cualquiera de estos dos protocolos es el que viaja como payload del protocolo denido por el handler protocol, como puede verse en la gura 6.2.
sirve para comunicar la aplicacin con los
A continuacin se detallan en profundidad cada uno de los protocolos nombrados y los tipos de paquetes que intercambian.
opType,
send
config.
La responsabilidad del
pLength, especca el largo del paquete enviado, ste incluye todos los campos del paquete reserved, es reservado para uso futuro. Por ltimo el campo payload encapsula el paquete correspondiente al admin protocol o al user protocol.
1 Se entiende por protocolo abierto en este contexto, a un protocolo que a priori no impone ninguna estructura y que el usuario es libre de implementarla para comunicar las aplicaciones de usuario y los user modules.
user module que ste espera como parmetros de conguracin. El handler number identica al user module destinatario del paquete. El tercer
config se utiliza
6.1.
PROTOCOLO DE COMUNICACIN
89
pLength
8 bits
Reserved
8 bits
Payload
0 61 bytes
handler protocol.
admin protocol
abrir, cerrar, y listar los mdulos existentes en el biado por las capas
command layer
user modules, las cuales permiten USB4all rmware. Este protocolo es intercamadmin module y pertenece a la capa application layer de
Command
8 bits
Payload
0 60 bytes
Figura 6.4: Formato de paquete para el intercambio de datos utilizado por el
admin protocol
Como se observa en la gura 6.4, los paquetes intercambiados constan de un campo de un byte y un
payload
command
de los posibles comandos que pueden especicarse y sus correspondientes argumentos que viajan en el payload del paquete.
6.1.2.1. OPEN
Un pedido de open para un
user module
open
ilustra en la gura 6.5, el cual es denido por el por el identicador del comando que especica el endpoint que va a utilizar la que especica el nombre del
admin protocol.
API
el endpoint que va a utilizar para enviar datos. Por ltimo se encuentra el campo
user module
OPEN
8 bits
inEP
8 bits
outEP moduleName
8 bits 8 bytes
open
admin protocol. Dicho paquete est compuesto open en el primer campo y el handler number asignado al user module en el segundo campo, en caso de que el user module no exista o ya est abierto se devuelve
ilustra en la gura 6.6, el cual es especicado por el por el identicador del comando la constante
Una respuesta de
open
para un
user module
ERROR.
90
CAPTULO 6.
COMUNICACIN
OPEN
8 bits
handlerNumber
8 bits
open
6.1.2.2. CLOSE
base rmware cierre un determinado user module se enva un paquete close como se ilustra en la gura 6.7, el cual es especicado por el admin protocol. Dicho paquete est compuesto por el identicador del comando close en el primer campo y el handler number del user module a cerrar en el segundo.
Cuando se quiere que el de pedido de
CLOSE
8 bits
handlerNumber
8 bits
close
se muestra en la gura 6.8, el cual est compuesto por el identicador del comando La constante toma el valor o ya este cerrado.
primer campo y una constante que representa el resultado del comando en el segundo campo.
ACK
en caso de xito o
NACK
en caso de que el
user module
CLOSE
8 bits
handlerNumber
8 bits
close
6.1.2.3. GET_USER_MODULES_SIZE
Su objetivo es obtener la cantidad de user modules cargados en un basboard, junto con el GET_USER_MODULES_LINE implementan el mecanismo por el cual el usuario puede obtener los nombres de los user modules cargados en el USB4all rmware de un baseboard en particular. Esto es muy til ya que a partir de esta informacin es que se puede invocar al comando
open.
Para hacer el pedido se enva un paquete como el que muestra la gura 6.9, el cual especica simplemente el deseo de conocer cuantos identicador del comando.
user modules
6.1.
PROTOCOLO DE COMUNICACIN
91
GET_USER_MODULES_SIZE
8 bits
GET_USER_MODULES_SIZE
La respuesta contiene solamente un campo con el identicador del comando como es usual y otro con la cantidad de
user modules
cargados en el
USB4all rmware.
GET_USER_MODULES_SIZE
8 bits
size
8 bits
GET_USER_MODULES_SIZE
6.1.2.4. GET_USER_MODULES_LINE
Una vez obtenido la cantidad de
user modules
cargados en el
cargado. El funcionamiento es el siguiente: para realizar el pedido se enva un paquete conteniendo el identicador del comando seguido de un campo que especica el nmero de la en la tabla comentada en la gura 4.6 como puede verse en la gura 6.11. El nmero obtenido mediante el comando anterior es til para determinar cuantas son las las que posee la estructura que almacena la informacin de un que posee la tabla. Se decidi hacerlo de esta manera, en lugar de contar con una sola operacin que devuelva la totalidad de los nombres presentes, para lograr simplicar la programacin en el
user module
rmware
API
USB4all
GET_USER_MODULES_LINE
8 bits
line
8 bits
GET_USER_MODULES_LINE
La respuesta, como muestra la gura 6.12, consta del campo identicador del comando y otro campo con un string de ocho caracteres conteniendo el nombre del al identicador pasado.
user module
correspondiente
GET_USER_MODULES_LINE
8 bits
modName
8 bytes
GET_USER_MODULES_LINE
92
CAPTULO 6.
COMUNICACIN
6.1.2.5. CLOSE_ALL
Este comando simplemente sirve para que el
USB4all rmware
user modules
que estan abiertos. Es til para liberar los recursos al momento de terminar de trabajar con la
baseboard
6.1.2.6. GET_VERSION
Este comando es utilizado para obtener el nmero de versin del
USB4all rmware,
lo cual
fue til a la hora de realizar el testing debido a que dicho nmero de versin se corresponde con un tag en el sistema de control de versiones (concurrent versions system)(CVS), lo que permite tener un mejor seguimiento del rmware una vez grabado en el microcontrolador. El paquete que se intercambia para una solicitud, consta solamente del identicador del comando correspondiente y el de respuesta adems del identicador tiene un campo con el nmero de versin.
6.2.
La
USB4all Firmware
USB4all API
interacta con el
USB4all rmware para poder brindarle al usuario el user module (como vemos en la gura 6.13). user modules
Esto es de suma importancia ya que abstrae al usuario de la tecnologa utilizada como medio fsico (en este caso USB), permitindole concentrarse en la interaccin con el dispositivo a controlar. Todo esto se realiza en un entorno donde dinmicamente se pueden ir instanciando que van a estar activos en simultneo.
user modules
module
baseboard,
ya que si un
user
no es abierto, ste no utiliza tiempo de CPU ni los recursos que tenga asignados, salvo
API
para el manejo de archivos, la aplicacin comienza creando los vnculos lgicos con los
modules (open)
command layer en el PC la cual es la encargada de generar los paquetes admin module en el USB4all rmware, lo mismo ocurre con los dems mensajes que esta capa maneja, como son el close y de listado de user modules presentes en los
delegados a la capa
6.2.
USB4ALL FIRMWARE
93
baseboards.
user module, estos mensajes van a API, donde se van a generar los paquetes necesarios para su contraparte en el USB4all rmware (handler manager ), estos paquetes van a contener la informacin necesaria para identicar a que user module es dirigido el paquete. Cabe destacar que los paquetes dirigidos al admin module tambin son direccionados por el handler manager al igual que lo hace para los paquetes destinados a los user modules. Por eso, es que podemos pensar a la capa admin module como la encargada de administrar la tabla de direccionamiento de user modules, que es utilizada por la capa handler manager para poder enviar los datos al user module adecuado. A continuacin se presentan los diagramas de secuencia de las operaciones openDevice, closeDevice, sendData y receiveData que expone la USB4all API a las aplicaciones de usuario, para
En el caso de que la aplicacin envie datos a un ser delegados a la capa
handler layer
en la
poder explicar en forma detallada la sucesin de pasos que se realizan durante la invocacin de estas operaciones, de forma de brindar una visin ms adecuada del funcionamiento interno de toda la solucin
USB4ll.
u4aAPI
y pasos que se suceden cuando una aplicacin de usuario invoca la funcin para abrir un vnculo lgico con un
llegar al
consulta al
commandlayer, el cual, en primera instancia consulta al handlerlayer (a su vez, ste descriptorlayer ) para la obtencin de los nmeros de endpoints a utilizar para el
open
del
user module.
openDevice
del
commandlayer ). Luego se construye un paquete del admin protocol y se invoca la operacin send del handlerlayer, ste construye un paquete del handler protocol y carga como destinatario al admin module (handler 0). El paquete construido es pasado al descriptorlayer, el cual invoca la operacin send apropiada para el tipo de transferencia que utiliza el admin module. Finalmente el driverlayer enva el paquete al driver genrico USB que este utilizando y ste lo enva por el bus USB. Luego del envo del paquete, el ujo de ejecucin vuelve al commandlayer para invocar la operacin receive del handlerlayer. Esta invocacin se propaga hasta llegar al driverlayer en
la que dependiendo del timeout indicado como parmetro se queda esperando la respuesta del
baseboard, el main loop invoca peridicamente la operacin USBRead handler manager, para vericar si llegaron nuevos mensajes. Cuando llega el mensaje de apertura del user module enviado desde el PC, el handler manager lo procesa para obtener su payload, verica quin es el user module destinatario (en ste caso el admin module ) e invoca su operacin receive. El admin module procede a obtener el payload del paquete, verica si el nombre del user module indicado en el mismo est registrado en el base rmware (getUserTableDirection y existsTableEntry). Luego pide al loader module la direccin de memoria (getModuleInitDirection) de la operacin init del mdulo, pide al handler manager que realice el alta del user module en la tabla de mdulos activos (newHandlerTableEntry), obteniendo como resultado el handler del mismo. Finalmente invoca a la operacin init del user module, la cual almacena el handler que lo identica, le indica al handler manager la funcin del mdulo que debe llamar, para que el user module pueda recepcionar los mensajes enviados desde
Mientras tanto en el del el PC (getHandlerReceiveFunction) y nalmente, obtiene la direccin del buer de envo hacia el PC (getSharedBuffer). Al volver al apertura y se enva al
xito de la apertura.
admin module, se crea un paquete del admin protocol con la respuesta de la handler manager (USBWrite), ste construye el paquete del handler protocol
y lo enva al bus USB. Al llegar el mensaje al PC, el driver genrico USB devuelve el mensaje al
driverlayer que esperaba la respuesta del baseboard. Una vez que el ujo de ejecucin vuelve al handlerlayer, este obtiene el payload del paquete y lo devuelve al commandlayer que determina si la operacin de apertura del user module fue exitosa o no. Si fue exitosa, el mensaje recibido posee el handler asignado por el handler manager al user module abierto. Finalmente, el commandlayer registra toda la informacin relacionada al user module (registerModule) en el handlerlayer, construye el moduleID y lo devuelve a la aplicacin de usuario.
94
CAPTULO 6.
COMUNICACIN
openDevice
6.2.
USB4ALL FIRMWARE
95
sendData
receiveData
nes y pasos que se suceden cuando una aplicacin de usuario invoca la funciones para enviar y recibir informacin desde y hacia los ro se observa la invocacin de la operacin invocacin se propaga hasta el
handlerlayer
sendData
handler protocol,
96
CAPTULO 6.
COMUNICACIN
luego es enviado al
descriptorlayer (send),
de ah al
driverlayer
USB, que lo enva por el bus USB. Luego de realizado esto, se devuelve la respuesta de envo exitoso o no al programa de aplicacin. Algn momento despus el ejecuta la funcin load y el
handler
main loop
del
base rmware
en el
user module
invoca la operacin
user module
u4aAPI,
baseboard. Esta invocacin atraviesa los distintos componentes de la USB4all API hasta llegar al driverlayer donde queda esperando
pues se quiere recibir un mensaje proveniente del (segn el timeout indicado como parmetro) hasta que llegue un mensaje. En algn momento despus, sucede un evento (polling o interrupcin) en un dispositivo o en el que genera la invocacin de la operacin especca, genera un paquete del al PC y se lo pasa al
receiveData del
user protocol con la informacin que el mdulo desea enviar handler manager (USBWrite) que construye un paquete del handler protocol
processIO
de un
user module.
baseboard
mismo,
y lo enva al bus USB. Cuando el driver genrico USB detecta que lleg el mensaje se lo pasa pasa el
driverlayer, que se haba quedado esperando algn mensaje del baseboard. Luego ese mensaje handlerlayer, donde se obtiene el payload con la informacin enviada por el baseboard y
u4aAPI
llegar al
protocol e invoca la operacin send del handlerlayer, ste construye un protocol y carga como destinatario al admin module (handler 0). El paquete construido es pasado al descriptorlayer, el cual invoca la operacin de send apropiada para el tipo de transferencia que utiliza el admin module. Finalmente el driverlayer enva el paquete al driver genrico USB
que este utilizando y ste lo enva el bus USB. Luego del envo del paquete, el ujo de ejecucin vuelve al propaga hasta llegar al
que se quiere cerrar se est usando (existsModule). Luego construye un paquete del
user module.
closeDevice
si el
del
commandlayer para invocar la operacin receive del handlerlayer. Esta invocacin se driverlayer en la que dependiendo del timeout indicado como parmetro
Mientras tanto en el baseboard, el main loop invoca peridicamente la operacin USBRead del handler manager, para vericar si llegaron nuevos mensajes. Cuando llega el mensaje de cierre del user module enviado desde el PC, el handler manager lo procesa para obtener su payload, verica quin es el user module destinatario (en ste caso el admin module ) e invoca su operacin receive. El admin module procede a obtener el payload del paquete, le pide al handler manager que desregistre al user module identicado por el handler que viene en el payload de la tabla de mdulos activos (removeHandlerTableEntry). Luego pide al loader module la direccin de memoria (getModuleReleaseDirection) de la operacin Al volver al
release
admin module, se crea un paquete del admin protocol con la respuesta del cierre y handler manager (USBWrite), ste construye el paquete del handler protocol y lo enva al bus USB. Al llegar el mensaje al PC, el driver genrico USB devuelve el mensaje al driverlayer que esperaba la respuesta del baseboard. Una vez que el ujo de ejecucin vuelve al handlerlayer, este obtiene el payload del paquete y lo devuelve al commandlayer que determina si la operacin de cierre del user module fue exitosa o no. Si fue exitosa, el commandlayer desregistra toda la informacin relacionada al user module (unregisterModule) en el handlerlayer y devuelve el
se enva al resultado de la operacin a la aplicacin.
invoca.
6.2.
USB4ALL FIRMWARE
97
closeDevice
98
CAPTULO 6.
COMUNICACIN
Captulo 7
rmware
7.1.
Decisiones en el PC.
Decisiones Generales
user modules
que son los encargados de encapsular el conocimiento para la interaccin con es considerado en nuestra arquitectura como un conjunto de componentes
los dispositivos o en su defecto en las aplicaciones de usuario que corren en el PC. Bsicamente un
adapterboard
baseboards
100
CAPTULO 7.
U4APort
adapterboard
conectar al dispositivo. El escenario tpico de uso es cuando existe una incompatibilidad entre las caractersticas de las seales del voltajes, diferentes potencias, etc.
baseboard
handler protocol
admin protocol
y en lgica del
base rmware
los
mecanismos necesarios para la transaccionalidad de paquetes. Cabe destacar que a nivel del
user protocol,
recibir queda abierta a que los desarrolladores de antemano los volmenes de memora requeridos.
user modules
y de aplicaciones de usuario
puedan denir transacciones de mensajes como parte de su interaccin mutua, pues conocen de
7.2.
Decisiones en el Firmware
base rmware
user module.
base rmware
La primera aproximacin a una solucin denitiva fue la eliminacin de las referencias del a los
user modules
base rmware y dejar USB4all rmware. El siguiente paso para lograr una independencia total entre los user modules y el resto de los componentes del USB4all rmware implicaba agregar un grado de indireccin en las referencias que utilizan los user modules hacia el resto de los componentes, esto se dej de lado no tanto por su aporte tcnico sino por su benecio minimal de funcionalidad y considerando que el base rmware es jo no vala la pena incurrir en la implementacin de esta caracterstica.
resulta una tcnica interesante dado permite evitar la recompilacin del abierto la cantidad de
en la memoria de programa del microcontrolador (por ms detalle ver la seccin 4.2.3), lo que
user modules
Por otro lado, ms all de poder resolver el tema de las dependencias mutuas entre los componentes del
USB4all rmware
user module
en la
memoria de programa del microcontrolador y la resolucin de la localizacin de sus variables en memoria de datos. Todo esto fue debidamente investigado y se lleg a la conclusin de que es viable pero se decidi acotar su alcance, optndose por cargar un conjunto de fuerte en cuanto a la funcionalidad de poder cargar y descargar
user modules
al
mismo tiempo en una nica transaccin como si fueran un bloque. Esto no implica una restriccin
user modules
7.3.
DECISIONES EN EL PC
101
handler manager
es el encargado de la recepcin
y envo de los datos provenientes desde el PC por medio de la lectura y escritura de los distintos
user module,
pero a la hora de la implementacin el costo de consultar y almacenar en una estructura de datos que endpoint est activo en cada momento resulta mayor al que simplemente se tendra si se consultan todos. Esto tiene un sentido prctico ya que la tecnologa USB permite la existencia de como mximo diecisis endpoints y normalmente en el se denen en el entorno de cuatro.
baseboard
Optimizacin en el envo: El handler manager brinda un servicio a los user modules que
les permite obtener un buer de memoria de datos para que carguen en l la informacin que desean enviar al el PC (es el payload del buer fuera local al
handler manager
handler protocol ).
capas pero por cuestiones de performance y optimizacin en el uso de memoria se decidi brindar la referencia de la posicin en la memoria compartida del endpoint asignado al
user module
application layer ) en la estructura en capas de la comunicacin. Estos factores llevaron a tomar la decisin de implementar el admin module como un user module con la particularidad de que no necesita la
ambos se les asocia un para identicarlos y coexisten en la misma capa ( apertura en forma explcita desde el PC sino que se instancia durante el proceso de inicializacin del
admin module
handler
user modules
base rmware.
Esta decisin tiene como ventaja la reutilizacin de todo el mecanismo de direccionamiento de paquetes que implementa el el componente en forma independiente del resto del
handler manager, adems se habilita la posibilidad de actualizar base rmware. Este enfoque se inspira en la
escencia del diseo de micro-kernels [31], en donde se mantiene dentro del ncleo del sistema lo mnimo indispensable y se traslada a mdulos toda la funcionalidad que puede ser actualiza o mejorada en forma independiente del mismo.
7.3.
Decisiones en el PC
USB4all API
rsticas que permitieran un uso sencillo y ordenado por parte de las aplicaciones de usuario que interactan con los dispositivos. La idea de utilizar el patrn Singleton [22] en la implementacin de la interfaz pblica de la misma, genera la ventaja inherente de que exista una nica instancia en memoria de la
USB4all API.
Esto tiene como benecios el evitar la existencia de mltiples instancias de la misma en las aplicaciones de usuario que llevaran a la necesidad de tener mecanismos de sincronizacin y control para evitar la apertura simultnea del mismo datos de un
user module
llegan desde el medio USB en forma errnea, es decir, recibir en una instancia del
user modules
USB4all API
no registrado en ella.
Separacin del manejo del driver de la obtencin de los descriptores del baseboard
102
CAPTULO 7.
La
USB4all API
baseboards
baseboard
API
para identicar
en particular o para saber si existen determinados endpoint que manejan los tipos
de transferencias de recepcin y envi requeridos al establecerse los vnculos lgicos con los
module.
user
Las opciones de drivers que se utilizaron en este proyecto para las distintas plataformas presentan distintas funcionalidades, algunas soluciones slo brindan las prestaciones para enviar y recibir datos y otras adems permiten obtener la informacin de los descriptores de los dispositivos USB. Esta diferencia entre las distintas implementaciones de los drivers genricos junto con la posibilidad de obtener la informacin de los descriptores del sistema operativo directamente, llev a tomar la decisin de aislar la lgica necesaria para la obtencin de los descriptores de los
baseboards
driver seleccionada.
Adems, esta decisin tiene como benecio el encapsular en un nico componente de la toda la lgica de obtencin de descriptores de los quiere ejecutar la solucin, logrando independizar
API baseboard para cada plataforma en que se a la API del uso de drivers que soporten la
obtencin de la informacin de los descriptores y permitiendo reutilizar la lgica de obtencin de descriptores entre los distintos drivers de una plataforma.
baseboard,
la necesidad de congurar el tipo de transferencia, direccin del endpoint, etc. previo al envi o recepcin de datos pero tiene como desventaja el aumento en la complejidad del manejo del conjunto endpoints pues no existe nico punto de acceso. La otra opcin es tener un nico descriptor de archivo para todo el
baseboard
y por medio
de l poder obtener la informacin de los endpoint disponibles utilizando previo al envo o recepcin de datos una etapa de conguracin del endpoint que se desea manipular. Debido a la mayor simplicidad en la implementacin se opt por esta ltima opcin ms all del esfuerzo de conguracin previo a cada comunicacin con el driver aunque al ser reducida la cantidad de las mismas se logr encapsular en funcionalidades claramente denidas.
Parte III
Experimentos y Resultados
103
Captulo 8
Artefactos construidos
8.1. Introduccin
En el marco de este proyecto fue necesario la construccin de un conjunto de artefactos de software, hardware y rmware, de los cuales algunos de ellos son parte estructural de la arquitectura, como es el caso del
baseboard, en el cual se presenta una descripcin de su proceso adapterboards, user modules, proxies
y dispositivos que
de evolucin destacando las principales caractersticas de cada etapa. Adems se construyeron un conjunto de aplicaciones de usuario, permitieron mostrar las cualidades tcnicas as como la viabilidad del uso de la solucin en escenarios reales y de prototipados rpidos. Adems se hace una descripcin de un utilitario que se entrega en forma conjunta con la solucin y que permite la conguracin de las propiedades del
baseboard.
8.2.
Hardware
Uno de las requisitos ineludibles para la conexin con dispositivos electrnicos externos al PC es el uso de un hardware mediante el cual interactuar con dichos dispositivos. En el contexto de este proyecto, si bien se poda haber optado por usar un kit de desarrollo y adaptarlo a tales nes, se consider desde un primer momento el desafo del diseo y la construccin de un hardware a medida como parte del los objetivos. Esta decisin, si bien aumenta la complejidad del proyecto pues involucra reas de conocimiento que no estn abarcadas en la carrera de computacin, permite por un lado disminuir los costos y el tamao del hardware, ya que slo se utilizan los elementos adecuados para tal n y no los elementos extra que normalmente contienen los kits de desarrollo. Otra ventaja obtenida en el diseo construido, es la forma modular y constructiva lo que contribuye al reuso y extensibilidad de las capacidades del mismo. Para el desarrollo y construccin de los prototipos se intent utilizar siempre que fue posible muestras comerciales gratuitas, principalmente de microcontroladores y sensores, tanto para disminuir los costos, como por la dicultad de conseguir algunas de estas piezas en la plaza de semiconductores uruguaya. En algunas ocasiones tambin fue necesario reciclar componentes de partes de hardware en desuso, como es el caso del conector USB. Para la construccin de circuitos impresos en general se utiliz la tcnica que consiste en el planchado de una transparencia (realizada en impresora lser) en una chapa laminada FR10, luego de lo cual, se sumerge la chapa en percloruro frrico para eliminar el cobre sobrante. Excepcionalmente para una versin ya depurada de el
baseboard
se recurri a el encargo de
fabricacin del mismo a la empresa ENEKA SA. Si bien se realizaron ms prototipos de los que se describen en esta seccin slo se presentaran los ms relevantes.
106
CAPTULO 8.
ARTEFACTOS CONSTRUIDOS
U4Aport, as como tambin facilidad de uso de los pulsadores. Era importante mi-
nimizar la longitud de algunas pistas de cobre, como tambin eliminar el uso de cables para realizar saltos entre pistas cuando no era posible rutearlas en una sola faz de cobre, pero sto no fue prioritario. A pesar de que la motivacin de la creacin de este prototipo no persegua que fuera funcional (no era necesario soldar los componentes), igual se testeo la tcnica de planchado de transparencia para obtener experiencia. En la parte superior izquierda de la gura 8.1 se muestra una imagen de la placa con sus componentes principales.
Versin 0.4: Luego de haber ubicado los componentes principales, la meta fue acercarse
a un prototipo funcional del mismo, para ello en la versin 0.4 se mejor el ruteo y ancho de las pistas, debido a que se not en la version anterior a veces quedaban en contacto algunas de ellas luego del proceso de planchado. Otra caracterstica que tambin se mejor fue el aumento del ancho de las pistas alrededor de los agujeros, pues en algunos casos, luego de perforados en la placa, quedaba muy poco cobre para soldar el componente de manera robusta. Otra requerimiento que se estim necesario, fue dejar espacio en las 4 esquinas como para realizar agujeros que permitieran armar la placa a un gabinete, para ello se modic la posicin de la cha RJ11 y USB para que estuvieran ms juntas y hacia el medio de la placa. En esta versin tampoco fueron soldados los componentes. En la imagen superior derecha de la gura 8.1 se ve la cara posterior del observar el diagramado de las pistas.
baseboard
pudindose
Baseboard
Versin 0.6:
funcional. Se agreg alrededor de la placa un borde de cobre que sirve de tierra, se soldaron todos los componentes y se teste. Al conectarse al PC, se not que tena un funcionamiento errtico, as como tambin se sucedan errores espordicos en su programacin (errores de checksum al grabar el rmware). Luego de revisado el circuito se observ la omisin de un componente (capacitor para la regulacin de voltaje USB). Al agregar de manera provisoria el mismo, resulto en un funcionamiento correcto y ausencia de errores aleatorios, logrando satisfacer el objetivo planteado. Esta versin se muestra en la parte inferior izquierda de la gura 8.1.
8.2.
HARDWARE
107
U4Aport
para evitar
problemas de programacin en caso de que haya algn dispositivo conectado en el momento de utilizar el programador ICD2 para grabar el bootloader en el microcontrolador. Para tener ms espacio, una esquina se sustituyeron las resistencias de 1/4 por 1/8 de watt y se juntaron un poco ms los pulsadores de bootloader y reset. Tambin se minimiz la longitud del trazo de las pistas de datos de USB para disminuir interferencias de dichas seales al llegar al microcontrolador.
sea fcilmente replicable. Para atender esta necesidad se deban generar archivos en uno de los formatos estndar para la fabricacin automtica de circuitos impresos (GERBER), de manera de que se pueda encargar a un tercero su fabricacin. Si bien se trata de un estndar, cada proveedor requiere algunas caractersticas y nombres de archivos particulares, en nuestro caso se opt realizarlos (utilizando el servicio PLAKA-circuitos impresos) en ENEKA SA. Finalmente se logr obtener un
baseboard
esta forma de construccin. El resultado nal, luego de soldados todos los componentes se muestra en la parte inferior derecha de la gura 8.1. Como resultado de este proceso evolutivo por el cual fue transitando el un hardware con un diseo adecuado y construccin reproducible del de los objetivos del proyecto. En la siguiente seccin se muestran
8.2.2. Adapterboards
8.2.2.1. USB4all-protoboard
adapterboard cumple una funcin simple pero muy til a la hora de prototipar dispoadapterboards complejos que requieren ms hardware), facilitando la seleccin de las seales provenientes del baseboard (U4Aport ) mediante cables nos para posteriormente conectarlos a un protoboard. Como ya se dijo anteriormente, este adapterboard es muy sencillo, ya que slo cumple la funcin de seleccionar algunas seales del U4Aport para su posterior uso. En la gura 8.2 se muestra este adapterboard, como vemos consiste en un conector que por medio de un cable un cable chato de 40 pines se conecta al baseboard y por otro lado un par de zcalos
Este sitivos (o torneados SIL de 20 pines que permiten encastrar los cables nos para llevar las seales necesarias a un protoboard. La disposicin de estos zcalos permiten obtener facilmente las seales provenientes del microcontrolador, pues estn ordenadas de la misma manera que ste. Tambin se cuenta con un par zcalos de cinco pines a los costados para obtener las lineas de alimentacin de tierra y 5 volts provenientes del conector USB del PC.
adapterboard.
108
CAPTULO 8.
ARTEFACTOS CONSTRUIDOS
baseboard para manejar las adapterboard. Este est compuesto por resistencias. Este adapterboard slo se prototip
en un protoboard, utilizando el USB4all-protoboard. Como tampoco es suciente la potencia brindada por el USB, se necesita una fuente externa de energa para poder hacer funcionar el motor. En la gura 8.3 se muestra una foto del mismo.
adapterboard
8.2.3. Dispositivos
8.2.3.1. Motor paso a paso (unipolar)
Utilizando el
adapterboard
paso unipolar. Este dispositivo es muy simple y con la lgica de mediante comandos tales como Se realizaron dos
user modules
se puede controlar
del motor paso a paso pero que utilizaba un mecanismo de polling para medir el tiempo, y luego otro llamado motorISR que utiliza un las bobinas mediante el mecanismo de interrupciones En la gura 8.4 se muesta una imagen del
8.2.
HARDWARE
109
8.2.3.3. Display
Este dispositivo est implementado mediante un display de siete segmentos, y una resistencia de 330 Ohm para cada uno de ellos. El
user module
a partir de un nmero recibido desde el PC transformarlo en las seales de cada segmento del display necesarias para la construccin visual del nmero. En la imagen 8.6 se puede observar ste dispositivo.
110
CAPTULO 8.
ARTEFACTOS CONSTRUIDOS
8.2.3.4. USB4bot
La construccin del USB4bot se realiz en el marco de un prototipado rpido para la 4ta competencia de sumo robtico [32] organizada por el grupo MINA del Instituto de computacin (InCo). Para ello se implement un enlace inalmbrico con el robot. El
user module que controla un radiocontrol para facilitar el adapterboard utilizado consta de dos DAC que permiten
convertir seales digitales en analgicas para generar distintos niveles de voltajes que logran simular el movimiento fsico de los controles de direccin del radiocontrol, que a la postre se convierten en distintas velocidades en los motores del robot.
Este es un caso tpico de un dispositivo que no fue pensado para interactuar con un PC y mucho menos con la tecnologa USB. En la gura 8.7 se muestra de manera esquemtica todos los componentes que interactan para poder controlar el robot mediante el PC. Se contaba con la inteligencia del robot de la edicin anterior del campeonato realizada en Java (jugador BOTija), por lo que tambin se utilizaron todas las capas de software construidas dentro del PC, el driver USB genrico construido para Linux y la
USB4all Library.
slo a la comunicacin entre el PC y el radiocontrol los elementos o artefactos que debieron ser construidos o integrados junto a sus tiempos asociados a su elaboracin y testing se muestran a continuacin: Creacin del
user module
USB4bot: 2 horas/hombre.
USB4all Library :
Adapterboard :
Hubo que modicar el radiocontrol sacando hacia el exterior las seales provenientes de los potenciometros de los controles de direccin para poder inyectarle seales a n de simular el movimiento de los mismos. Esto llev un tiempo aproximado de 10 horas/hombre.
8.2.
HARDWARE
111
Teniendo en cuenta estos tiempos, que son signicativamente menores que el tiempo de construccin y calibracin del robot, se considera un tiempo ms que apropiado para la integracin con un dispositivo no pensado para interactuar con un PC. En la gura 8.8 se muestra el testing del prototipo de un DAC conectado a un un voltmetro y leds para visualizar el estado de cada uno de los bits de entrada al DAC y vericar su correcto funcionamiento. Adems, se visualizan parte de los componentes de hardware del robot, as como una de las luchas en Campeonato Uruguayo de Sumo Robtico edicin 2007 [32].
112
CAPTULO 8.
ARTEFACTOS CONSTRUIDOS
8.3.
Software
Adems de todo el software y rmware que componen la arquitectura, tambin se realizaron diversas aplicaciones de usuario, las cuales utilizan en algunos casos la directamente la
USB4all API
user modules
proxies
al
baseboard.
Esta
aplicacin fue desarrollada en Java, lo que permite su uso en varias plataformas. En lo que reere a la conguracin de los descriptores, este utilitario permite denir toda la informacin que el dispositivo USB intercambia con el PC en el proceso de enumeracin. En el caso del
baseboard
y tipo de endpoints que ste contiene, como tambin el nmero de serie con el cual se va a identicar. Es importante destacar lo poderosa que es esta funcionalidad y lo sencillo que es utilizarla, ya que este tipo de conguracin normalmente est restringida a su implementacin mediante cdigo de rmware jo. Dado que uno de los objetivos iniciales fue brindar facilidad de uso, inclusive a usuarios con muy poco conocimiento, fue necesario invertir un tiempo importante para la implementacin de un mecanismo muy sencillo de usar. El camino elegido para realizar esta funcionalidad fue la de generacin de cdigo fuente de manera automtica as como su posterior grabacin en el microcontrolador por medio de un
user module
Bootloader module.
Debido a la interaccin que debe realizarse con un proyecto de MPLAB, compilador y linkeditor, adems de haber sido necesario un conocimiento en detalle de el formato de los archivos .HEX, hacen de esta aproximacin una solucin compleja de implementar, pero permite un uso muy sencillo. Si bien estn implementados todos los mecanismos necesarios para esta tarea, no se lleg a la meta de brindar una interfaz grca de modo que el usuario pueda pueda interactuar de manera ms amigable. Provisoriamente se brinda un ejemplo de cdigo fuente que puede ser modicado a los efectos de congurar un
baseboard
cuales van a ser cargados en la memoria de programa del microcontrolador. Como ellos ocupan memoria de programa en espacios reservados segn el mapa de memoria presentado en la seccin 4.2.6 pueden grabarse de manera independiente al resto del rmware. Para la realizacin de este mecanismo tambin se necesit una interaccin con un proyecto MPLAB, compilador y linkeditor para poder luego grabar el conjunto de elementos seleccionados. Una aclaracin importante es que debido a la dependencia que se agregan en las dos tareas principales de este mdulo con el MPLAB, compilador y linkeditor MPLAB C18 limitan el uso de este utilitario a la plataforma Windows.
Captulo 9
descartables que permitieron reducir los posibles factores de riesgo, lograr un mayor grado de paralelismo en la programacin y facilitar la integracin a posterior.
Integral: La solucin est compuesta por hardware y software que permite ocultar toda la
complejidad existente entre las aplicaciones de usuario y los dispositivos electrnicos. Del estudio del estado del arte se vi que en general, las soluciones existentes se dividen en las que slo contemplan el hardware (algunas incluyendo un soporte mnimo para la PC) y las que se centran en la problemtica de los drivers del PC y no en las dos reas al mismo tiempo en forma conjunta.
Custom y no en otra clase especca, que limitara a un subconjunto los dispositivos a conectar. Esta caracterstica genera que los sistemas operativos no puedan asignar un driver por defecto como lo haran frente a clases de dispositivos especcos como son HID, CDC, Audio, etc. Para solucionar esta dicultad se utiliza nico driver USB genrico que 113
114
CAPTULO 9.
implementa todos los tipos de transferencias de forma de no necesitar un driver especico para cada dispositivo en particular.
user modules
user modules
cia el manejo de los dispositivos, obtenemos una forma de solucionar la interaccin con dispositivos cuyas restricciones de tiempo no pueden ser procesados desde las aplicaciones de usuario en el PC.
Constructivo: Brinda la posibilidad de componer las funcionalidades de manejo de dispositivos que brindan los
user modules
de resolver problemas de mayor tamao y complejidad. En otras palabras, la aplicacin de usuario del PC se encarga de manipular a cada uno de los dispositivos electrnicos participantes de la solucin de forma de lograr un accionar en conjunto. Esto redunda en multiplicidad de benecios, entre los que se destacan: la reutilizacin de
user modules
en
distintos escenarios de uso, la delegacin de la complejidad de la coordinacin (lgica) entre ellos hacia la aplicacin de usuario donde se cuenta con mayor cantidad recursos, facilidad de programacin y nivel de abstraccin evitando la programacin directa del rmware del microcontrolador.
Multi-plataforma:
que su ncleo solo utiliza funciones estndar de C++ [8] y se encapsulan las funcionalidades de interaccin con los sistemas operativos y drivers en forma estructurada para cada plataforma especca. Dentro del alcance de este proyecto solo se implement para funcionar en las plataformas Linux y Windows.
USB4all API )
dinmica (.dll en Windows o .so en Linux), lo que permite que sea utilizada por cualquier lenguaje de alto nivel que soporte este tipo de bibliotecas.
USB4all API.
user modules,
Costos econmicos: La casi totalidad de los costos de la solucin se centran en los elementos que conforman el hardware del
para una unidad un valor de $700 pesos (USD 32) el microcontrolador y los componentes
9.1.
CONCLUSIONES
115
electrnicos y alrededor de $500 (USD 23) la fabricacin del circuito impreso en ENEKA. Estos precios convierten al producto en una opcin que compite con otras soluciones tanto open source como propietarias.
Open Source Software y Hardware: La totalidad de los fuentes del software y rmware
se encuentra a disposicin de la comunidad bajo la licencia GNU-GPL [23] y para el hardware se presentan los esquemticos, el diseo del PCB incluyendo formato Gerber y toda la documentacin de construccin asociada a n de que sea fcilmente reproducible.
Aportes de la solucin
La solucin construida permite resolver algunas falencias detectadas luego de relevar el estado del arte, as como cumplir satisfactoriamente con el objetivo primario de este proyecto de grado adems de introducir innovaciones propias. A continuacin se muestra un resumen de los aportes ms signicativos de la solucin:
user modules
de clases base en Java de las cuales se pueden extender para la realizacin de dispositivos especcos. Estos templates son ejemplos que denen los contratos necesarios que deben ser respetados para la integracin con las dems partes del sistema que logran abstraer al usuario de toda la complejidad inherente a la tecnologa USB y de los vnculos lgicos entre las aplicaciones de usuario y los
user modules.
Otra caracterstica relacionada con lo amigable de la solucin, es que a diferencia de otros productos relevados en el estado del arte que proveen una solucin slo para el hardware o slo para el software, USB4all elimina por completo los problemas de integracin entre el hardware y software, ya que brinda una respuesta integral a ambas problemticas. Por ltimo el
USB4all system
denicin de los descriptores USB, la generacin de su cdigo fuente, compilacin y actualizacin del baseboard, sin la utilizacin de un programador (va USB). Esta informacin es utilizada por el baseboard al momento de enumerarse como dispositivo USB en el PC, para diferenciarse de otros baseboard, as como para establecer los vnculos lgicos entre las aplicaciones de usuario y los
user modules.
rndolos en bsicos, avanzados y especialistas segn su nivel de conocimiento de la solucin. Los usuarios bsicos son aquellos que slo desarrollan aplicaciones de usuario utilizando la
user modules,
trnicos ya existentes para lograr manejarlos en forma coordinada. Luego estn los usuarios
116
CAPTULO 9.
avanzados que poseen un mayor grado de conocimiento de la arquitectura y dispositivos hardware permitindoles adems del desarrollo de aplicaciones de usuario la construccin de
user modules
de nuevas clases que extiendan la jerarqua de dispositivos. Por ltimo estn los usuarios especialistas que adems de todo lo descrito anteriormente poseen un conocimiento detallado de la arquitectura
USB4all
los habilita a construir proxies, extender el uso de la API a otras plataformas o drivers y poder hacer cambios funcionales en los propios componentes del sistema.
y clases de la jerarqua
son autocontenidos e intercambiables, se favorece el reuso de los mismo frente a distintos escenarios y se habilita la colaboracin entre usuarios. Esto ltimo tiene como ventaja que los usuarios bsicos (la mayora) se benecien de los aportes de usuarios con mayor nivel de conocimiento que compartan sus aportes de forma de crear una comunidad.
user modules
dynamicISR,
permiten mejorar las condiciones de atencin de eventos que requieren respuestas en tiempo real debido a que se evita el tiempo de latencia en la comunicacin que existira si la lgica se encontrara en el PC. El nivel de complejidad de las respuestas a estos eventos determina si pueden ser implementadas en los
user modules
en el PC, para este ltimo escenario la tecnologa USB ofrece la alternativa del tipo de transferencia Interrupt el cual permite consultar frecuentemente (cada 100 ms por ejemplo) si los dispositivos poseen informacin para enviar al PC. Estas dos caractersticas dejan abierto al usuario la posibilidad de construir soluciones que combinen la atencin de eventos directamente desde los las necesidades de los problemas.
user modules
o desde el PC segn
Driver USB genrico para Linux: Se implement un modulo de kernel que auspicia de
driver USB del
baseboard
de los descriptores USB y de los mecanismos para lograr el envo y recepcin de datos. Cabe destacar que este driver no slo funciona con esta solucin sino que puede ser usado para manejar cualquier tipo de dispositivo USB.
user modules, la existencia de una jerarqua de clases Java que modela los dispositivos baseboard para distintos usos, permiten brindar una base inicial para el desarrollo de nuevas
rar electrnicos, la posibilidad de congurar los descriptores USB y la reutilizacin del soluciones que disminuye los tiempos de construccin, integracin y vericacin a la vez que facilita su elaboracin pues el desarrollador se centra nicamente en el comportamiento del dispositivo electrnico y no en como es la comunicacin desde el PC.
9.2.
Trabajo a Futuro
La solucin construida durante este proyecto de grado alcanz la mayora de los objetivos planteados inicialmente, durante el proceso se fueron incorporando nuevas caractersticas a las ya planicadas y tambin fueron necesarios ajustes en su alcance. A continuacin se presentan los posibles trabajos a futuro separados en tres grupos: objetivos eliminados del alcance, oportunidades de mejora e investigacin.
user modules
similar al proporciotambin
nado por el sistema operativo Linux. Con esto se obtiene el benecio de no ser necesario recompilar todo los fuentes para agregar, eliminar o modicar un
user module,
se proporciona un mecanismo que permite comenzar con un entorno mnimo e ir extendindolo segn las necesidades del usuario. Otra ventaja es que se elimina la necesidad del
9.2.
TRABAJO A FUTURO
117
uso del entorno de desarrollo para extender el rmware, con lo cual se facilita el uso para los usuarios bsicos, este mecanismo tambin permite compartir de forma muy sencilla
user modules
en el
facilidad por medio de un utilitario (solo disponible para plataforma Windows) de cargar todo el conjunto de
user modules sobrescribiendo los contenidos previamente existentes USB4all Firmware, por ms informacin referirse a la seccin 8.3.1. Un problema
relacionado con este tema es resolver la fragmentacin que se genera al cargar y descargar mdulos dinmicamente.
USB4all API
baseboards
en modo
Transferencias iscronas (no soportada por los drivers existentes): LibUSB actualmente no soporta transferencias iscronas, Microchip segn la documentacin de su driver las soporta pero le fueron encontrados bugs, pero como es propietario no se cuenta con los fuentes para solucionarlo. Esta fue una de las motivaciones para el desarrollo del driver propio para Linux, pero por temas de tiempo se dejo para trabajo futuro brindar soporte a ese tipo de transferencia en nuestro driver.
Modo de uso Fachada: Como ya se explic en la seccin 7.3 del captulo Decisiones de
diseo e implementacin, ste modo de uso de la solucin se elimin del alcance del proyecto, de todas formas sigue siendo un escenario interesante para la creacin de un proyecto paralelo. Se propone como trabajo a futuro la investigacin de distintas alternativas que logren satisfacer adecuadamente los requerimientos de esta modalidad de uso.
Oportunidades de mejora
Mejorar la robustez: Actualmente el manejo de errores implementado a nivel del USB4all
API
es muy simple, slo informa si se produjo un error o no, se debera contar con una clasicacin de los errores de forma de noticar adecuadamente a las aplicaciones de usuario cual es el problema. Frente a un conjunto de situaciones anormales como son la ausencia de baseboards conectados al PC o la remocin de ellos durante la ejecucin de una aplicacin de usuario no existen mecanismos adecuados para su manejo. Se debera poder ampliar las funcionalidades del sistema de forma de poder detectar los cambios (adicin o remocin) de los baseboards conectados al PC y actuar en consecuencia. Se debera incorporar a las funcionalidades del sistema sincronizacin de la informacin.
USB4all
la posibilidad de recupe-
racin de los vnculos lgicos ante fallas en el PC o en los baseboards por medio de la
Mejoras al Scheduler:
user modules
y el
user modules
base rmware
para asignar
poltica de round robin sin cotas de tiempo (se aspira a un accionar cooperativo entre los
base rmware ).
user modules
frecuencia a tiempos de CPU que otros. Otra mejora interesante, sera la implementacin de un mecanismo de expropiacin del CPU que utiliza un la inanicin del resto de los
user modules.
user module
Modo Stand Alone: La solucin se dise para la interaccin con dispositivos electrnicos
desde un PC, esto implica que exista una conexin fsica permanente con el mismo para su funcionamiento. Durante el desarrollo de este proyecto se vi con inters el empleo en escenarios de funcionamiento independientes del PC (desconectado). Por ejemplo, para implementar una red de sensores que adquieran datos meteorolgicos, los almacenen de
118
CAPTULO 9.
forma temporal para posteriormente transferirlos al PC va USB para su procesamiento. Para esto sera necesario realizar algunos cambios en la circuitera del fuente externa. Adems se debera cambiar el (open) de los
baseboard
para
resolver el conicto que presenta la doble alimentacin de energa desde el USB y una
base rmware
user modules
existentes en el
baseboard.
Asincronismo:
los
baseboards
receiveData
user modules
tuviera un
lgico abierto. La inclusin de un mecanismo de asincronismo implicara que el recepcin de datos desde el
USB4all API
baseboard,
debera analizarlo para identicar a que aplicacin corresponde entregarlo. El benecio principal de esta mejora sera poder compartir el uso de un endpoint determinado por varias aplicaciones. Para ello, la
USB4all API
exclusin para la noticacin del uso del recurso compartido (endpoint). Cabe sealar que la actual implementacin no posee ningn tipo de espera activa.
es depen-
diente de los proyectos MPLAB y el compilador MPLAB C18, por lo que actualmente esta aplicacin no puede utilizarse desde la plataforma Linux. Se investig y en algunos foros en Internet se ha comentado de instalaciones exitosas de MPLAB en Linux mediante WINE [34]. Como trabajo a futuro se propone experimentar y efectuar los cambios necesarios en la aplicacin
Investigacin
Wireless USB:
Durante el desarrollo de este proyecto de grado se liber el estndar Wireless USB 1.0 [35] que implementa la comunicacin inalmbrica entre los dispositivos
9.2.
TRABAJO A FUTURO
119
USB y la PC. Este nuevo estndar abre las puertas a una nueva dimensin de conectividad USB a la vez que introduce nuevo desafos, los cuales son atractivos para la investigacin y/o experimentacin. En lo referente al producto impacto que puede tener el uso de
USB4all se ve con inters el estudio del Wireless USB Hub (F5U302) de Belkin que permitira prescindir del cable USB que conecta el PC con los baseboards. Esto sera el primer paso en
el estudio de la temtica a la espera de que los fabricantes de microcontroladores ofrezcan versiones compatibles con el nuevo estndar.
En el contexto de
este proyecto se seleccionaron las plataformas Windows y Linux para su implementacin, aunque el diseo de la arquitectura contempla la utilizacin en cualquier plataforma que soporte la tecnologa USB. Por este motivo es desaante la migracin a otros sistemas operativos de los cuales los miembros de este proyecto no tienen experiencia an como son MacOS, Solaris, etc.
120
CAPTULO 9.
Bibliografa
[1] Active Wire, http://www.activewireinc.com/, ltimo acceso diciembre 2007.
[2]
AGUIRRE, Andrs; FERNNDEZ, Rafael; GROSSY, Carlos; Estado del Arte; UDELAR
[5]
ANDERSON, Don; USB System Architecture (USB 2.0); Second edition, 2001.
[6]
[7]
AXELSON, Jan; USB Complete, Everithing You Need to Develop Custom USB Peripherals;
CORBET, Jonathan; RUBINI, Alessandro; KROAH-HARTMAN, Greg. Linux device drivers. 3rd Edition, O' Reilly Media, 2005.
122
BIBLIOGRAFA
[16] Estndar USB para la clase MIDI, http://www.usb.org/developers/devclass_docs/, ltimo acceso 26 de noviembre del 2007.
[17] Estndar USB para la clase HID, http://www.usb.org/developers/devclass_docs/, ltimo acceso 26 de noviembre del 2007.
[18] Estndar USB para la clase CDC, http://www.usb.org/developers/devclass_docs/, ltimo acceso 26 de noviembre del 2007.
[19] FLIEGL, Detlef; Programming Guide for Linux USB Device Drivers, Departamento de Informtica, Universidad Tcnica de Munich, 2000.
[22] GAMMA, Erich; HELM, Richard; JOHNSON, Ralph; VLISSIDES, John Design Patterns: elements of reusable object-oriented software 1st Edition, Addison-Wesley Professional Computing Series, 1994.
[24] HYDE, John;USB Design by Example, A Practical Guide to Building I/O Devices, 1999.
[27] MANDANY; ISLAM; KOUGIOURIS: CAMPBELL, Reication and Reection in C++ An Operating Systems Perspective.
Edi-
BIBLIOGRAFA
123
[35] Wireless Universal Serial Bus Specication 1.0, http://www.usb.org/developers/wusb/docs/, ltimo acceso 26 de noviembre del 2007.
124
BIBLIOGRAFA
Apndice A
Glosario
En esta seccin deniremos algunos trminos bsicos para el entendimiento del material contenido en ste informe.
ACK:
Abreviatura de
Ack nowledgement
computadores, es un mensaje que se enva para conrmar que un mensaje o un conjunto de mensajes han llegado. Si el terminal de destino tiene capacidad para detectar errores, el signicado de ACK es "ha llegado y adems ha llegado correctamente".
ADC:
Acrnimo de
ANSI_C: API:
Nombre con que se conoce vulgarmente la versin del lenguaje C estandarizado por
es el conjunto de funciones y procedimientos que ofrece cierta librera para ser utilizado por otro software como una capa de abstraccin. Una buena API hace ms fcil desarrollar un programa mediante el suministro de todos los elementos de construccin.
ATA:
Acrnimo de
una interfaz estndar para conectar dispositivos de almacenamiento como discos duros y unidades de CD-ROM dentro de los computadores personales.
ATAPI: B:
Acrnimo de
(Interfaz de Pa-
quetes de Tecnologa Avanzada de Fijacin), es una extensin de la interfaz ATA y permite conectar medio removibles. Lenguaje de programacin creado en 1969 por Ken Thompson con contribuciones de Dennis Ritchie en los Laboratorios Bell, predecesor del lenguaje de programacin C.
Bit:
Acrnimo de
Bluetooth:
estndar global de comunicacin inalmbrica que posibilita la transmisin de voz y datos entre diferentes dispositivos mediante un enlace por radiofrecuencia segura, globalmente y sin licencia de corto rango.
troladores. En el caso de los PIC, el boot-loader permite descargar programas directamente desde el PC sin necesidad de utilizar ningn tipo de grabador. Acrnimo de Berkeley Software Distribution (Distribucin de Software Berkeley) y se
utiliza para identicar un sistema operativo derivado del sistema Unix nacido a partir de los aportes realizados a este sistema por la Universidad de California en Berkeley. Unidad bsica de almacenamiento de informacin que hace referencia a una secuencia
de ocho bits contiguos. Tambin se utiliza el termino octeto como sinnimo preciso de la cantidad de bits que representa. 125
126
APNDICE A.
GLOSARIO
ByteCode: Es un cdigo intermedio ms abstracto que el cdigo mquina. C: Lenguaje de programacin creado en 1972 por Ken Thompson y Dennis
Laboratorios Bell como evolucin del anterior lenguaje B.
M. Ritchie en los
C++:
Lenguaje de programacin, diseado a mediados de los aos 1980, por Bjarne Stroustrup,
como extensin del lenguaje de programacin C. Se puede decir que C++ es un lenguaje que abarca tres paradigmas de la programacin: la programacin estructurada, la programacin genrica y la programacin orientada a objetos.
cdigo. Esto permite a una capa de software de ms bajo nivel invocar una rutina (o funcin) denida en una capa de ms alto nivel. Acrnimo de
es una de las clases que dene el estndar USB y permite clasicar a los dispositivos segn su comportamiento esperado. Sinnimo de circuito integrado, es una pastilla muy delgada en la que se encuentran una
enorme cantidad (del orden de miles o millones) de dispositivos microelectrnicos interconectados, principalmente diodos y transistores, adems de componentes pasivos como resistencias o condensadores.
COM:
Acrnimo de
plataforma de Microsoft para componentes de software introducida en 1993. Permite la comunicacin entre procesos y la creacin dinmica de objetos en cualquier lenguaje de programacin que soporte dicha tecnologa.
CPU:
Sigla de
una computadora digital que interpreta las instrucciones y procesa los datos contenidos en los programas de computadora. Es la parte que constituye el cerebro de cualquier computadora, es el encargado de realizar y dirigir todas las funciones.
CVS:
Acrnimo de
aplicacin informtica que mantiene el registro de todo el trabajo y de los cambios los elementos (cdigo fuente principalmente) que forman un proyecto (programa) y permite que distintas personas (desarrolladores) colaboren entre s.
DAC:
Sigla de
D ynamic Link Library (Biblioteca de Vinculacin Dinmica), por vinculaD irect M emory Access (Acceso Directo a Memoria), es una caracterstica
cin dinmica se entiende que las subrutinas de la biblioteca son cargadas en un programa de aplicacin en tiempo de ejecucin.
DMA:
Acrnimo de
de los computadores modernos, que permite a ciertos componentes de hardware dentro del computador, a acceder al sistema de memoria para lectura y/o escritura en forma independiente al CPU.
Driver: E/S:
tivo, haciendo una abstraccin del hardware y proporcionando una interfaz -posiblemente estandarizada- para usarlo. Abreviatura
funcionales de un sistema de procesamiento de informacin para comunicarse con otras, o las seales enviadas a travs de esas interfaces.
127
EEPROM:
Acrnimo de
de Slo Lectura Programable y Borrable Elctricamente), es un tipo de memoria ROM que puede ser programado, borrado y reprogramado elctricamente. Slo puede ser borrada y reprogramada entre 100.000 y 1.000.000 de veces.
FIFO:
Acrnimo de
F irst I n, F irst O ut
do utilizado en estructuras de datos, contabilidad de costes y teora de colas. Guarda la analoga con las personas que esperan en una cola y van siendo atendidas en el orden en que llegan.
Vase IEEE 1394. Es un bloque de instrucciones de programa para propsitos especcos, grabado en
una memoria tipo ROM, que establece la lgica de ms bajo nivel que controla los circuitos electrnicos de un dispositivo. Es un sistema operativo libre basado en los sistemas BSD para ordenadores perso-
Free_Software: FSF:
puede ser usado, copiado, estudiado, modicado, mejorado y redistribuido libremente de forma de beneciar a toda la comunidad. Acrnimo de
nizacin creada en octubre de 1985 por Richard Stallman y otros entusiastas del Software Libre con el propsito de difundir este movimiento. Una de las principales funciones de la FSF es dar cobertura legal, econmica y logstica al Proyecto GNU.
Acrnimo recursivo de
G NU is N ot U nix
de computadores compuesto enteramente por software libre. Se lo conoce tambin como Proyecto GNU y fue iniciado por Richard Stallman en 1983. Acrnimo de
G eneral P ublic License (Licencia Pblica General), es una licencia creada H ardware Abstraction Layer
por la FSF a mediados de los aos 80, y est orientada principalmente a proteger la libre distribucin, modicacin y uso de software. Acrnimo de (Capa de Abstraccin de Hardware), es un
elemento del sistema operativo que funciona como interfaz entre el software y el hardware del sistema, proveyendo una plataforma de hardware consistente sobre la cual correr las aplicaciones.
HEX:
Su nombre formal es
Intel HEX
mitir informacin binaria de aplicaciones programadas para microcontroladores, ROMs o cualquier otro tipo de chip. ste formato es uno de los ms viejos disponibles para este propsito y se usa desde los aos 1970. El formato es un archivo de texto, donde cada lnea contiene valores hexadecimales que codican una secuencia de datos y sus corrimientos o direcciones absolutas.
HID:
Acrnimo de
dispositivo de un computador, que interacta directamente con seres humanos, tomando y/o devolviendo informacin.
(Enchufado en caliente) Vase Hot Swap. (Sustitucin en caliente) Hace referencia a la capacidad de algunos componentes
hardware para realizar su instalacin o sustitucin sin necesidad de detener o alterar la operacin normal de la computadora donde se alojan. Abreviatura de Acrnimo de
128
APNDICE A.
GLOSARIO
IDE:
Acrnimo de
es un programa compuesto por un conjunto de herramientas (un editor de cdigo, un compilador, un depurador y un constructor de interfaz grca) para brindar un marco de trabajo amigable a un programador.
IEEE_1394:
Conocido como FireWire por Apple Inc. y como i.Link por Sony, es un estndar
multiplataforma para entrada/salida de datos en serie a gran velocidad. Suele utilizarse para la interconexin de dispositivos digitales como cmaras digitales y videocmaras a computadoras.
IEEE_802: IRP:
nieros Elctricos y Electrnicos (IEEE), que acta sobre Redes de Ordenadores, concretamente y segn su propia denicin sobre redes de rea local y redes de rea metropolitana. Acrnimo de
I /O Request P acket (Paquete de Peticin E/S), es una estructura de modo I nput/ O utput C on t ro l (Control entrada/salida), la llamada de sistema
kernel que es usada por WDM para comunicarse internamente y con el sistema operativo.
Acrnimo de
ioctl en los sistemas basados en Unix, permite a una aplicacin controlar o comunicarse con un driver de dispositivo fuera de los usuales read/write de datos. Acrnimo de
rutina (callback) en un sistema operativo o driver de dispositivo encargada de atender una interrupcin del hardware. Su ejecucin es disparada por la recepcin de la interrupcin. Lenguaje de programacin orientado a objetos desarrollado por Sun Microsystems a prin-
cipios de los aos 1990. El lenguaje en s mismo toma mucha de su sintaxis de C y C++, pero tiene un modelo de objetos ms simple y elimina herramientas de bajo nivel como punteros.
JIT: JNI:
Sigla de
J ust I n T ime (Compilacin en tiempo de ejecucin), es una tcnica para mejoJ ava N ative I nterface, es un framework de programacin que permite que un
rar el rendimiento de sistemas de programacin que compilan a bytecode, consistente en traducir el bytecode a cdigo mquina nativo en tiempo de ejecucin. Sigla de
programa escrito en Java ejecutado en la mquina virtual Java pueda interactuar con programas escritos en otros lenguajes como C, C++ y ensamblador.
Jumper: kB:
Elemento para interconectar dos terminales de manera temporal sin tener que efectuar
una operacin que requiera herramienta adicional, dicha unin de terminales cierran el circuito elctrico del que forma parte. (kilobyte) Es una unidad de informacin o de almacenamiento informtico equivalente a mil bytes o 1.024 bytes, dependiendo el contexto. Puede ser abreviado como: K, KB, Kbytes.
de gestionar los recursos del sistema. (kilohertz) Unidad de frecuencia equivalente a mil ciclos por segundo. Sigla de
(diodo) que emite luz cuasi-monocromtica, es decir, con un espectro muy angosto, cuando se polariza de forma directa y es atravesado por una corriente elctrica.
LGPL:
Acrnimo de
licencia que aplica generalmente a bibliotecas y permite a programas privativos (no libres) utilizar las bibliotecas como parte de sus trabajos. Esta licencia mantiene trminos ms laxos que la GPL en que necesariamente todas las partes deben ser Software Libre.
Linux:
un kernel (creado por Linus Torvalds en 1991). Es uno de los paradigmas ms prominentes del Software Libre y del desarrollo del cdigo abierto.
129
Acrnimo de
nombre del primer sistema operativo de Apple Computer para las computadoras Macintosh. (megabyte) Es una unidad de informacin o de almacenamiento informtico equivalente a
106 bytes
220
(megabit) Es una unidad de informacin o de almacenamiento informtico equivalente un milln de bits. Puede ser abreviado como Mbit.
milln de bits por segundo. Puede ser abreviado como Mbit/s o mbps). (megahertz) Unidad de frecuencia que equivale a un milln de ciclos por segundo. Acrnimo de
tos Musicales). Es un protocolo estndar que permite a los computadores, sintetizadores, secuenciadores y otros dispositivos musicales electrnicos, comunicarse entre si para la generacin de sonidos.
MPLAB:
es modular, permite seleccionar los distintos microprocesadores soportados, adems de permitir la grabacin de estos circuitos integrados directamente al programador.
MPLAB_C18:
de PICmicro de 8-bits.
MPLAB_ICD2: NACK:
entre computadoras, es un mensaje que se enva para informar de que en la recepcin o procesamiento de los datos ha habido un error.
NetBSD: Ohm:
Es un sistema operativo del tipo Unix basado en los sistemas BSD, de distribucin
libre y de cdigos fuentes abiertos. (Ohmnio) Es la unidad de resistencia elctrica en el Sistema Internacional de Unidades.
Su nombre se deriva del apellido del fsico alemn Georg Simon Ohm, autor de la Ley de Ohm.
OpenBSD: PC:
P ersonal C omputer
PCB:
Sigla de
nicamente y conectar elctricamente componentes electrnicos, a travs de rutas o pistas de material conductor, grabados desde hojas de cobre laminadas sobre un sustrato no conductor.
PIC:
Son una familia de microcontroladores tipo RISC fabricados por Microchip Technology Inc. y derivados del PIC1650, originalmente desarrollado por la divisin de microelectrnica de General Instruments. El nombre actual no es un acrnimo, en realidad el nombre completo es PICmicro.
PID:
Acrnimo de
Plug_and_Play: Plug-In:
informtico ser conectado a una computadora sin tener que congurar el mismo. (Enchufar en) Pequeo programa que aade alguna funcin a otro programa, habi-
130
APNDICE A.
GLOSARIO
externo, por medio de un programa sincrnico. Este concepto se usa normalmente asociados a escrutinios de E/S. (Intermediario, Apoderado) En su forma ms general, es una clase que funciona como
codicar un valor anlogo en una onda digital, de forma que el ciclo de trabajo est en relacin con el valor a codicar.
programacin (funcional, orientado a objetos y imperativo) y fue creado por Guido van Rossum en el ao 1990. Acrnimo de
Q uad F lat Package N o Lead (Encapsulado Cuadrado Plano Sin Conecto(Memoria de acceso aleatorio), es una memoria de
res), es un encapsulado de circuito integrado para montaje supercial donde los conectores de componentes no se extienden fuera del encapsulado. Sigla de
semiconductores en la que se puede escribir o leer informacin. Es voltil, es decir, pierde su contenido al desconectar la energa elctrica.
Ribbon_Cable:
(Cable Cinta) Tambin conocido como cable plano multihilo, es un cable con
muchos cables conductores que corren en forma paralela unos con otros sobre el mismo plano. Como resultado, el cable es ancho y chato en vez de redondo. Su nombre proviene de la semejanza de estos cables con un pedazo de cinta. Son normalmente utilizados en perifricos internos de un computador personal.
Sigla de
ductores que puede leerse pero no modicarse. La ROM suele almacenar la conguracin del sistema o el programa de arranque de la computadora. Acrnimo de (Reloj de Tiempo Real), es un reloj un computador (la
mayora de las veces en forma de circuito integrado) que permite mantener la pista del tiempo actual. Acrnimo de
que normalmente se encarga de la recepcin y envo de datos de las transacciones y trabaja en conjunto con el transceiver USB y los endpoints. El SIE no interpreta o utiliza los datos, slo enva los datos que estn disponibles para hacerlo y almacena los datos recibidos.
SIL:
Acrnimo de
SMT:
Sigla de
do para la construccin de circuitos electrnicos en el que los componentes se montan directamente sobre la supercie de los circuito impreso.
Solaris: SPI:
como una versin de Unix. Aunque Solaris en s mismo an es software propietario, la parte principal del sistema operativo se ha liberado como Software Libre. Sigla de
S erial P eripherical I nterface (Bus de Interfaz de Perifricos Serie), es un estnT ipo Abstracto de D atos
(Abstract Data Type), es una especicacin de
dar de comunicaciones, usado principalmente para la transferencia de informacin entre circuitos integrados en equipos electrnicos.
TAD:
Acrnimo de
un conjunto de datos y un conjunto de operaciones que pueden ser realizadas sobre los datos.
Through-Hole_Technology:
en el lado opuesto.
para el montaje de componentes electrnicos, que implica la insercin de los pines de los componentes en oricios perforados en el circuito electrnico impreso y el soldado al circuito
131
TimeOut:
pleta luego de superado un tiempo lmite estipulado para su conclusin en forma normal.
Transceivers: UART:
como de recepcin, utilizando componentes de circuito comunes para ambas funciones. Acrnimo de
(Transmisor Receptor
Asncrono Universal), es un circuito integrado (o parte de uno) usado para comunicaciones seriales en computadores que forma parte de los puertos seriales de computadores personales o perifricos.
Unix: URB:
por un grupo de empleados de los laboratorios Bell de AT&T, entre los que guran Ken Thompson, Dennis Ritchie y Douglas McIlroy. Acrnimo de
U SB Request B lock
a nivel de los sistemas operativos, que permiten la conguracin de los dispositivos y transmicin de datos. Estas estructuras son enviadas por medio de un IRP a la capas inferiores de la pila de drivers.
USB:
Sigla de
U niversal S erial B us (Bus Universal en Serie), es una interfaz que provee un es-
tndar de bus serie para conectar dispositivos a un ordenador personal. Fue creado en 1996 por IBM, Intel, Northern Telecom, Compaq, Microsoft, Digital Equipment Corporation y NEC.
V endor ID (Identicador de Vendedor), es un identicador nico asignado Wi reless Fi delity. Es un conjunto de estndares para redes inalmbricas W ine I s N ot an E mulator
(Wine no es un emulador), es
por el USB-IF a las empresas (previo registro) que quieren fabricar dispositivos USB. Acrnimo de
WINE:
Acrnimo recursivo de
una reimplementacin de la API de Windows (en sus versiones de 16-bits y 32-bits) para sistemas operativos basados en Unix bajo plataformas Intel.
Windows:
Wireless_USB:
con gran ancho de banda que combina la sencillez de uso de USB con la versatilidad de las redes inalmbricas. En mayo del 2006 se aprob la especicacin del nuevo estndar que se abrevia como W-USB o WUSB.
Wrapper:
(Envoltura) Es una clase que se utiliza para transformar una interfaz en otra, de
tal modo que una clase que no pudiera utilizar la primera, haga uso de ella a travs de la segunda.
132
APNDICE A.
GLOSARIO
Apndice B
A E edicin de texto usando L T X, por lo que hereda todas sus capacidades (notacin cientca,
Lyx [26] es un programa grco multiplataforma creado por Matthias Ettrich que permite la
edicin de ecuaciones, creacin de ndices, etctera). Se trata de un procesador de textos en el que el usuario no necesita pensar en el formato nal de su trabajo, sino slo en el contenido y su estructura (WYSIWYM)(Lo Que Ve Es Lo Que Quieres Decir, por sus siglas en Ingls), por lo que puede ser utilizado para editar documentos grandes (libros) o con formato riguroso (tesis, artculos para revistas cientcas), con facilidad. La decisin de utilizar esta herramienta se debi ms all de todas las caractersticas previamente descritas, a que su formato es texto y no binario, lo que permite el trabajo en forma concurrente sobre el documento, as como la utilizacin de herramientas de control de versin como es CVS.
B.2.
CVS
CVS [11] utiliza una arquitectura cliente-servidor: un servidor guarda la(s) versin(es) actual(es) del proyecto y su historial. Los clientes se conectan al servidor para sacar una copia completa del proyecto. Esto se hace para que eventualmente puedan trabajar con esa copia y ms tarde ingresar sus cambios con comandos GNU. Tpicamente, cliente y servidor se conectan utilizando Internet, pero con el sistema CVS el cliente y servidor pueden estar en la misma mquina. El sistema CVS tiene la tarea de mantener el registro de la historia de las versiones del programa de un proyecto solamente con desarrolladores locales. Originalmente, el servidor utilizaba un sistema operativo similar a Unix, aunque en la actualidad existen versiones de CVS en otros sistemas operativos, incluido Windows. Los clientes CVS pueden funcionar en cualquiera de los sistemas operativos ms difundidos. Varios clientes pueden sacar copias del proyecto al mismo tiempo. Posteriormente, cuando actualizan sus modicaciones, el servidor trata de acoplar las diferentes versiones. Si esto falla, por ejemplo debido a que dos clientes tratan de cambiar la misma lnea en un archivo en particular, entonces el servidor deniega la segunda actualizacin e informa al cliente sobre el conicto, que el usuario deber resolver manualmente. Si la operacin de ingreso tiene xito, entonces los nmeros de versin de todos los archivos implicados se incrementan automticamente, y el servidor CVS almacena informacin sobre la actualizacin, que incluye una descripcin suministrada por el usuario, la fecha y el nombre del autor y sus archivos log. En el contexto de este proyecto fue prioritario la utilizacin de este tipo de herramienta, de forma de permitir a cada integrante del grupo trabajar en sus casas optimizando los tiempos sin perder el control del cdigo generado. 133
134
APNDICE B.
B.3.
Mantis
Mantis es una aplicacin web que permite el reporte de errores y su posterior seguimiento. Est escrito en PHP y requiere una base de datos (MySQL, MS SQL, PostgreSQL son soportados) y un servidor web. Mantis puede ser instalado sobre las plataformas Windows, Mac OS, OS/2 y una variedad de sistemas operativos Unix. Casi cualquier navegador web debera ser capaz de funcionar como cliente. La interfaz de usuario utiliza un cdigo de colores para distintas cuestiones que facilitan al usuario reconocer de una sola mirada los estados de varios tems. Tambin posee una gran cantidad de opciones de ordenamiento y ltrado para facilitar la ubicacin de un problema en particular. Durante la etapa de implementacin y vericacin fue utilizado para ir reportando errores [28] y asignando responsables de investigarlos y corregirlos, logrando de esta forma centralizar la informacin de los errores y no dejando lugar para olvidos.
B.4.
Wiki
Un wiki es un sitio web colaborativo que puede ser editado por varios usuarios. Los usuarios de una wiki pueden as crear, modicar, borrar el contenido de una pgina web, de forma interactiva, fcil y rpida; dichas facilidades hacen de la wiki una herramienta efectiva para la escritura colaborativa. La tecnologa wiki permite que pginas web alojadas en un servidor pblico (las pginas wiki) sean escritas de forma colaborativa a travs de un navegador web, utilizando una notacin sencilla para dar formato, crear enlaces, etc, conservando un historial de cambios que permite recuperar fcilmente cualquier estado anterior de la pgina. Cuando alguien edita una pgina wiki, sus cambios aparecen inmediatamente en la web, sin pasar por ningn tipo de revisin previa. En el contexto de este proyecto se utilizo un wiki propia [33], que ocio de sitio web del proyecto y facilito toda la gestin de publicacin de documentacin, pginas web de sitios de inters para el proyecto. Adems, fue muy utilizado para registrar de una forma gil y de rpido acceso las planicaciones y actas de las reuniones que se fueron realizando durante todo el proceso.